Merge "Clean up USB Manager and fix ADB." into mnc-dev
diff --git a/api/current.txt b/api/current.txt
index 2905e17..e5b190c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -5822,6 +5822,8 @@
     method public java.lang.CharSequence getText();
     method public int getTextBackgroundColor();
     method public int getTextColor();
+    method public int[] getTextLineBaselines();
+    method public int[] getTextLineCharOffsets();
     method public int getTextSelectionEnd();
     method public int getTextSelectionStart();
     method public float getTextSize();
@@ -9439,13 +9441,17 @@
     field public static final int PROTECTION_DANGEROUS = 1; // 0x1
     field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
     field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
+    field public static final int PROTECTION_FLAG_INSTALLER = 256; // 0x100
     field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
-    field public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10
+    field public static final int PROTECTION_FLAG_PREINSTALLED = 1024; // 0x400
+    field public static final int PROTECTION_FLAG_PRIVILEGED = 16; // 0x10
+    field public static final deprecated int PROTECTION_FLAG_SYSTEM = 16; // 0x10
+    field public static final int PROTECTION_FLAG_VERIFIER = 512; // 0x200
     field public static final int PROTECTION_MASK_BASE = 15; // 0xf
-    field public static final int PROTECTION_MASK_FLAGS = 240; // 0xf0
+    field public static final int PROTECTION_MASK_FLAGS = 4080; // 0xff0
     field public static final int PROTECTION_NORMAL = 0; // 0x0
     field public static final int PROTECTION_SIGNATURE = 2; // 0x2
-    field public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3
+    field public static final deprecated int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3
     field public int descriptionRes;
     field public int flags;
     field public java.lang.String group;
@@ -13440,6 +13446,7 @@
     field public static final int EDGE_MODE_FAST = 1; // 0x1
     field public static final int EDGE_MODE_HIGH_QUALITY = 2; // 0x2
     field public static final int EDGE_MODE_OFF = 0; // 0x0
+    field public static final int EDGE_MODE_ZERO_SHUTTER_LAG = 3; // 0x3
     field public static final int FLASH_MODE_OFF = 0; // 0x0
     field public static final int FLASH_MODE_SINGLE = 1; // 0x1
     field public static final int FLASH_MODE_TORCH = 2; // 0x2
@@ -13468,6 +13475,7 @@
     field public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2; // 0x2
     field public static final int NOISE_REDUCTION_MODE_MINIMAL = 3; // 0x3
     field public static final int NOISE_REDUCTION_MODE_OFF = 0; // 0x0
+    field public static final int NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG = 4; // 0x4
     field public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0; // 0x0
     field public static final int REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE = 6; // 0x6
     field public static final int REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO = 9; // 0x9
@@ -13908,7 +13916,7 @@
     method public void onAuthenticationSucceeded(android.hardware.fingerprint.FingerprintManager.AuthenticationResult);
   }
 
-  public static final class FingerprintManager.AuthenticationResult {
+  public static class FingerprintManager.AuthenticationResult {
     method public android.hardware.fingerprint.FingerprintManager.CryptoObject getCryptoObject();
   }
 
@@ -14714,6 +14722,7 @@
     field public static final int TYPE_FM_TUNER = 16; // 0x10
     field public static final int TYPE_HDMI = 9; // 0x9
     field public static final int TYPE_HDMI_ARC = 10; // 0xa
+    field public static final int TYPE_IP = 20; // 0x14
     field public static final int TYPE_LINE_ANALOG = 5; // 0x5
     field public static final int TYPE_LINE_DIGITAL = 6; // 0x6
     field public static final int TYPE_TELEPHONY = 18; // 0x12
@@ -36949,6 +36958,7 @@
     method public abstract void setSelected(boolean);
     method public abstract void setText(java.lang.CharSequence);
     method public abstract void setText(java.lang.CharSequence, int, int);
+    method public abstract void setTextLines(int[], int[]);
     method public abstract void setTextStyle(float, int, int, int);
     method public abstract void setTransformation(android.graphics.Matrix);
     method public abstract void setVisibility(int);
diff --git a/api/system-current.txt b/api/system-current.txt
index 150b569..18cde08 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5954,6 +5954,8 @@
     method public java.lang.CharSequence getText();
     method public int getTextBackgroundColor();
     method public int getTextColor();
+    method public int[] getTextLineBaselines();
+    method public int[] getTextLineCharOffsets();
     method public int getTextSelectionEnd();
     method public int getTextSelectionStart();
     method public float getTextSize();
@@ -9774,13 +9776,17 @@
     field public static final int PROTECTION_DANGEROUS = 1; // 0x1
     field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
     field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
+    field public static final int PROTECTION_FLAG_INSTALLER = 256; // 0x100
     field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
-    field public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10
+    field public static final int PROTECTION_FLAG_PREINSTALLED = 1024; // 0x400
+    field public static final int PROTECTION_FLAG_PRIVILEGED = 16; // 0x10
+    field public static final deprecated int PROTECTION_FLAG_SYSTEM = 16; // 0x10
+    field public static final int PROTECTION_FLAG_VERIFIER = 512; // 0x200
     field public static final int PROTECTION_MASK_BASE = 15; // 0xf
-    field public static final int PROTECTION_MASK_FLAGS = 240; // 0xf0
+    field public static final int PROTECTION_MASK_FLAGS = 4080; // 0xff0
     field public static final int PROTECTION_NORMAL = 0; // 0x0
     field public static final int PROTECTION_SIGNATURE = 2; // 0x2
-    field public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3
+    field public static final deprecated int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3
     field public int descriptionRes;
     field public int flags;
     field public java.lang.String group;
@@ -13780,6 +13786,7 @@
     field public static final int EDGE_MODE_FAST = 1; // 0x1
     field public static final int EDGE_MODE_HIGH_QUALITY = 2; // 0x2
     field public static final int EDGE_MODE_OFF = 0; // 0x0
+    field public static final int EDGE_MODE_ZERO_SHUTTER_LAG = 3; // 0x3
     field public static final int FLASH_MODE_OFF = 0; // 0x0
     field public static final int FLASH_MODE_SINGLE = 1; // 0x1
     field public static final int FLASH_MODE_TORCH = 2; // 0x2
@@ -13808,6 +13815,7 @@
     field public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2; // 0x2
     field public static final int NOISE_REDUCTION_MODE_MINIMAL = 3; // 0x3
     field public static final int NOISE_REDUCTION_MODE_OFF = 0; // 0x0
+    field public static final int NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG = 4; // 0x4
     field public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0; // 0x0
     field public static final int REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE = 6; // 0x6
     field public static final int REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO = 9; // 0x9
@@ -14248,7 +14256,7 @@
     method public void onAuthenticationSucceeded(android.hardware.fingerprint.FingerprintManager.AuthenticationResult);
   }
 
-  public static final class FingerprintManager.AuthenticationResult {
+  public static class FingerprintManager.AuthenticationResult {
     method public android.hardware.fingerprint.FingerprintManager.CryptoObject getCryptoObject();
   }
 
@@ -15953,6 +15961,7 @@
     field public static final int TYPE_FM_TUNER = 16; // 0x10
     field public static final int TYPE_HDMI = 9; // 0x9
     field public static final int TYPE_HDMI_ARC = 10; // 0xa
+    field public static final int TYPE_IP = 20; // 0x14
     field public static final int TYPE_LINE_ANALOG = 5; // 0x5
     field public static final int TYPE_LINE_DIGITAL = 6; // 0x6
     field public static final int TYPE_TELEPHONY = 18; // 0x12
@@ -39239,6 +39248,7 @@
     method public abstract void setSelected(boolean);
     method public abstract void setText(java.lang.CharSequence);
     method public abstract void setText(java.lang.CharSequence, int, int);
+    method public abstract void setTextLines(int[], int[]);
     method public abstract void setTextStyle(float, int, int, int);
     method public abstract void setTransformation(android.graphics.Matrix);
     method public abstract void setVisibility(int);
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index ca6c6ca..844900d 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -74,6 +74,8 @@
 
 public class Am extends BaseCommand {
 
+    private static final String SHELL_PACKAGE_NAME = "com.android.shell";
+
     private IActivityManager mAm;
 
     private int mStartFlags = 0;
@@ -767,7 +769,8 @@
             return;
         }
         System.out.println("Starting service: " + intent);
-        ComponentName cn = mAm.startService(null, intent, intent.getType(), null, mUserId);
+        ComponentName cn = mAm.startService(null, intent, intent.getType(),
+                SHELL_PACKAGE_NAME, mUserId);
         if (cn == null) {
             System.err.println("Error: Not found; no service started.");
         } else if (cn.getPackageName().equals("!")) {
diff --git a/cmds/hid/Android.mk b/cmds/hid/Android.mk
index ff3691d..574834d 100644
--- a/cmds/hid/Android.mk
+++ b/cmds/hid/Android.mk
@@ -6,6 +6,7 @@
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 LOCAL_MODULE := hid
 LOCAL_JNI_SHARED_LIBRARIES := libhidcommand_jni
+LOCAL_REQUIRED_MODULES := libhidcommand_jni
 include $(BUILD_JAVA_LIBRARY)
 
 include $(CLEAR_VARS)
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index ce83caa..2dcd9cb 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -1025,6 +1025,8 @@
                 params.installFlags |= PackageManager.INSTALL_INTERNAL;
             } else if (opt.equals("-d")) {
                 params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
+            } else if (opt.equals("-g")) {
+                params.installFlags |= PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS;
             } else if (opt.equals("--originating-uri")) {
                 params.originatingUri = Uri.parse(nextOptionData());
             } else if (opt.equals("--referrer")) {
diff --git a/core/java/android/app/ISearchManager.aidl b/core/java/android/app/ISearchManager.aidl
index 6094012..0d09e4a 100644
--- a/core/java/android/app/ISearchManager.aidl
+++ b/core/java/android/app/ISearchManager.aidl
@@ -30,6 +30,6 @@
    List<ResolveInfo> getGlobalSearchActivities();
    ComponentName getGlobalSearchActivity();
    ComponentName getWebSearchActivity();
-   ComponentName getAssistIntent(int userHandle);
-   boolean launchAssistAction(String hint, int userHandle, in Bundle args);
+   void launchAssist(in Bundle args);
+   boolean launchLegacyAssist(String hint, int userHandle, in Bundle args);
 }
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 45799a1..9e32164 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -946,27 +946,9 @@
      *
      * @hide
      */
-    public Intent getAssistIntent(Context context, boolean inclContext) {
-        return getAssistIntent(context, inclContext, UserHandle.myUserId());
-    }
-
-    /**
-     * Gets an intent for launching installed assistant activity, or null if not available.
-     * @return The assist intent.
-     *
-     * @hide
-     */
-    public Intent getAssistIntent(Context context, boolean inclContext, int userHandle) {
+    public Intent getAssistIntent(boolean inclContext) {
         try {
-            if (mService == null) {
-                return null;
-            }
-            ComponentName comp = mService.getAssistIntent(userHandle);
-            if (comp == null) {
-                return null;
-            }
             Intent intent = new Intent(Intent.ACTION_ASSIST);
-            intent.setComponent(comp);
             if (inclContext) {
                 IActivityManager am = ActivityManagerNative.getDefault();
                 Bundle extras = am.getAssistContextExtras(ActivityManager.ASSIST_CONTEXT_BASIC);
@@ -982,17 +964,38 @@
     }
 
     /**
-     * Launch an assist action for the current top activity.
+     * Starts the assistant.
+     *
+     * @param args the args to pass to the assistant
+     *
      * @hide
      */
-    public boolean launchAssistAction(String hint, int userHandle, Bundle args) {
+    public void launchAssist(Bundle args) {
+        try {
+            if (mService == null) {
+                return;
+            }
+            mService.launchAssist(args);
+        } catch (RemoteException re) {
+            Log.e(TAG, "launchAssist() failed: " + re);
+        }
+    }
+
+    /**
+     * Starts the legacy assistant (i.e. the {@link Intent#ACTION_ASSIST}).
+     *
+     * @param args the args to pass to the assistant
+     *
+     * @hide
+     */
+    public boolean launchLegacyAssist(String hint, int userHandle, Bundle args) {
         try {
             if (mService == null) {
                 return false;
             }
-            return mService.launchAssistAction(hint, userHandle, args);
+            return mService.launchLegacyAssist(hint, userHandle, args);
         } catch (RemoteException re) {
-            Log.e(TAG, "launchAssistAction() failed: " + re);
+            Log.e(TAG, "launchAssist() failed: " + re);
             return false;
         }
     }
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index f2c907a..33cbc9d 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -4330,10 +4330,17 @@
      * requests by applications. The policy can allow for normal operation which prompts the
      * user to grant a permission, or can allow automatic granting or denying of runtime
      * permission requests by an application. This also applies to new permissions declared by app
-     * updates.
+     * updates. When a permission is denied or granted this way, the effect is equivalent to setting
+     * the permission grant state via {@link #setPermissionGrantState}.
+     *
+     * <p/>As this policy only acts on runtime permission requests, it only applies to applications
+     * built with a {@code targetSdkVersion} of {@link android.os.Build.VERSION_CODES#MNC} or later.
+     *
      * @param admin Which profile or device owner this request is associated with.
      * @param policy One of the policy constants {@link #PERMISSION_POLICY_PROMPT},
      * {@link #PERMISSION_POLICY_AUTO_GRANT} and {@link #PERMISSION_POLICY_AUTO_DENY}.
+     *
+     * @see #setPermissionGrantState
      */
     public void setPermissionPolicy(@NonNull ComponentName admin, int policy) {
         try {
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index 3429b6e..73c551f 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -61,37 +61,53 @@
 
     final static class ViewNodeText {
         CharSequence mText;
-        int mTextSelectionStart;
-        int mTextSelectionEnd;
-        int mTextColor;
-        int mTextBackgroundColor;
         float mTextSize;
         int mTextStyle;
+        int mTextColor = ViewNode.TEXT_COLOR_UNDEFINED;
+        int mTextBackgroundColor = ViewNode.TEXT_COLOR_UNDEFINED;
+        int mTextSelectionStart;
+        int mTextSelectionEnd;
+        int[] mLineCharOffsets;
+        int[] mLineBaselines;
         String mHint;
 
         ViewNodeText() {
         }
 
-        ViewNodeText(Parcel in) {
-            mText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
-            mTextSelectionStart = in.readInt();
-            mTextSelectionEnd = in.readInt();
-            mTextColor = in.readInt();
-            mTextBackgroundColor = in.readInt();
-            mTextSize = in.readFloat();
-            mTextStyle = in.readInt();
-            mHint = in.readString();
+        boolean isSimple() {
+            return mTextBackgroundColor == ViewNode.TEXT_COLOR_UNDEFINED
+                    && mTextSelectionStart == 0 && mTextSelectionEnd == 0
+                    && mLineCharOffsets == null && mLineBaselines == null && mHint == null;
         }
 
-        void writeToParcel(Parcel out) {
+        ViewNodeText(Parcel in, boolean simple) {
+            mText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
+            mTextSize = in.readFloat();
+            mTextStyle = in.readInt();
+            mTextColor = in.readInt();
+            if (!simple) {
+                mTextBackgroundColor = in.readInt();
+                mTextSelectionStart = in.readInt();
+                mTextSelectionEnd = in.readInt();
+                mLineCharOffsets = in.createIntArray();
+                mLineBaselines = in.createIntArray();
+                mHint = in.readString();
+            }
+        }
+
+        void writeToParcel(Parcel out, boolean simple) {
             TextUtils.writeToParcel(mText, out, 0);
-            out.writeInt(mTextSelectionStart);
-            out.writeInt(mTextSelectionEnd);
-            out.writeInt(mTextColor);
-            out.writeInt(mTextBackgroundColor);
             out.writeFloat(mTextSize);
             out.writeInt(mTextStyle);
-            out.writeString(mHint);
+            out.writeInt(mTextColor);
+            if (!simple) {
+                out.writeInt(mTextBackgroundColor);
+                out.writeInt(mTextSelectionStart);
+                out.writeInt(mTextSelectionEnd);
+                out.writeIntArray(mLineCharOffsets);
+                out.writeIntArray(mLineBaselines);
+                out.writeString(mHint);
+            }
         }
     }
 
@@ -252,9 +268,10 @@
         static final int FLAGS_HAS_LARGE_COORDS = 0x04000000;
         static final int FLAGS_HAS_CONTENT_DESCRIPTION = 0x02000000;
         static final int FLAGS_HAS_TEXT = 0x01000000;
-        static final int FLAGS_HAS_EXTRAS = 0x00800000;
-        static final int FLAGS_HAS_ID = 0x00400000;
-        static final int FLAGS_HAS_CHILDREN = 0x00200000;
+        static final int FLAGS_HAS_COMPLEX_TEXT = 0x00800000;
+        static final int FLAGS_HAS_EXTRAS = 0x00400000;
+        static final int FLAGS_HAS_ID = 0x00200000;
+        static final int FLAGS_HAS_CHILDREN = 0x00100000;
         static final int FLAGS_ALL_CONTROL = 0xfff00000;
 
         int mFlags;
@@ -316,7 +333,7 @@
                 mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
             }
             if ((flags&FLAGS_HAS_TEXT) != 0) {
-                mText = new ViewNodeText(in);
+                mText = new ViewNodeText(in, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0);
             }
             if ((flags&FLAGS_HAS_EXTRAS) != 0) {
                 mExtras = in.readBundle();
@@ -356,6 +373,9 @@
             }
             if (mText != null) {
                 flags |= FLAGS_HAS_TEXT;
+                if (!mText.isSimple()) {
+                    flags |= FLAGS_HAS_COMPLEX_TEXT;
+                }
             }
             if (mExtras != null) {
                 flags |= FLAGS_HAS_EXTRAS;
@@ -403,7 +423,7 @@
                 TextUtils.writeToParcel(mContentDescription, out, 0);
             }
             if ((flags&FLAGS_HAS_TEXT) != 0) {
-                mText.writeToParcel(out);
+                mText.writeToParcel(out, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0);
             }
             if ((flags&FLAGS_HAS_EXTRAS) != 0) {
                 out.writeBundle(mExtras);
@@ -703,6 +723,26 @@
         }
 
         /**
+         * Return per-line offsets into the text returned by {@link #getText()}.  Each entry
+         * in the array is a formatted line of text, and the value it contains is the offset
+         * into the text string where that line starts.  May return null if there is no line
+         * information.
+         */
+        public int[] getTextLineCharOffsets() {
+            return mText != null ? mText.mLineCharOffsets : null;
+        }
+
+        /**
+         * Return per-line baselines into the text returned by {@link #getText()}.  Each entry
+         * in the array is a formatted line of text, and the value it contains is the baseline
+         * where that text appears in the view.  May return null if there is no line
+         * information.
+         */
+        public int[] getTextLineBaselines() {
+            return mText != null ? mText.mLineBaselines : null;
+        }
+
+        /**
          * Return additional hint text associated with the node; this is typically used with
          * a node that takes user input, describing to the user what the input means.
          */
@@ -901,6 +941,13 @@
         }
 
         @Override
+        public void setTextLines(int[] charOffsets, int[] baselines) {
+            ViewNodeText t = getNodeText();
+            t.mLineCharOffsets = charOffsets;
+            t.mLineBaselines = baselines;
+        }
+
+        @Override
         public void setHint(CharSequence hint) {
             getNodeText().mHint = hint != null ? hint.toString() : null;
         }
diff --git a/core/java/android/app/usage/NetworkStats.java b/core/java/android/app/usage/NetworkStats.java
index 1079f1a..9d5eabb 100644
--- a/core/java/android/app/usage/NetworkStats.java
+++ b/core/java/android/app/usage/NetworkStats.java
@@ -309,12 +309,10 @@
 
     /**
      * Collects device summary results into a Bucket.
-     * @param startTime
-     * @param endTime
      * @throws RemoteException
      */
-    Bucket getDeviceSummaryForNetwork(long startTime, long endTime) throws RemoteException {
-        mSummary = mSession.getDeviceSummaryForNetwork(mTemplate, startTime, endTime);
+    Bucket getDeviceSummaryForNetwork() throws RemoteException {
+        mSummary = mSession.getDeviceSummaryForNetwork(mTemplate, mStartTimeStamp, mEndTimeStamp);
 
         // Setting enumeration index beyond end to avoid accidental enumeration over data that does
         // not belong to the calling user.
@@ -325,12 +323,10 @@
 
     /**
      * Collects summary results and sets summary enumeration mode.
-     * @param startTime
-     * @param endTime
      * @throws RemoteException
      */
-    void startSummaryEnumeration(long startTime, long endTime) throws RemoteException {
-        mSummary = mSession.getSummaryForAllUid(mTemplate, startTime, endTime, false);
+    void startSummaryEnumeration() throws RemoteException {
+        mSummary = mSession.getSummaryForAllUid(mTemplate, mStartTimeStamp, mEndTimeStamp, false);
 
         mEnumerationIndex = 0;
     }
@@ -341,8 +337,9 @@
     void startHistoryEnumeration(int uid) {
         mHistory = null;
         try {
-            mHistory = mSession.getHistoryForUid(mTemplate, uid, android.net.NetworkStats.SET_ALL,
-                    android.net.NetworkStats.TAG_NONE, NetworkStatsHistory.FIELD_ALL);
+            mHistory = mSession.getHistoryIntervalForUid(mTemplate, uid,
+                    android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE,
+                    NetworkStatsHistory.FIELD_ALL, mStartTimeStamp, mEndTimeStamp);
             setSingleUid(uid);
         } catch (RemoteException e) {
             Log.w(TAG, e);
@@ -368,9 +365,9 @@
             stepUid();
             mHistory = null;
             try {
-                mHistory = mSession.getHistoryForUid(mTemplate, getUid(),
+                mHistory = mSession.getHistoryIntervalForUid(mTemplate, getUid(),
                         android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE,
-                        NetworkStatsHistory.FIELD_ALL);
+                        NetworkStatsHistory.FIELD_ALL, mStartTimeStamp, mEndTimeStamp);
             } catch (RemoteException e) {
                 Log.w(TAG, e);
                 // Leaving mHistory null
diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java
index 2ae0181..2886cda 100644
--- a/core/java/android/app/usage/NetworkStatsManager.java
+++ b/core/java/android/app/usage/NetworkStatsManager.java
@@ -97,7 +97,7 @@
 
         Bucket bucket = null;
         NetworkStats stats = new NetworkStats(mContext, template, startTime, endTime);
-        bucket = stats.getDeviceSummaryForNetwork(startTime, endTime);
+        bucket = stats.getDeviceSummaryForNetwork();
 
         stats.close();
         return bucket;
@@ -106,7 +106,7 @@
     /**
      * Query network usage statistics summaries. Result is summarised data usage for all uids
      * belonging to calling user. Result is a single Bucket aggregated over time, state and uid.
-     * This means the bucket's start and end timestamp are going to be the same as the 'startTime' 
+     * This means the bucket's start and end timestamp are going to be the same as the 'startTime'
      * and 'endTime' parameters, state is going to be {@link NetworkStats.Bucket#STATE_ALL} and uid
      * {@link NetworkStats.Bucket#UID_ALL}.
      *
@@ -130,7 +130,7 @@
 
         NetworkStats stats;
         stats = new NetworkStats(mContext, template, startTime, endTime);
-        stats.startSummaryEnumeration(startTime, endTime);
+        stats.startSummaryEnumeration();
 
         stats.close();
         return stats.getSummaryAggregate();
@@ -140,7 +140,7 @@
      * Query network usage statistics summaries. Result filtered to include only uids belonging to
      * calling user. Result is aggregated over time, hence all buckets will have the same start and
      * end timestamps. Not aggregated over state or uid. This means buckets' start and end
-     * timestamps are going to be the same as the 'startTime' and 'endTime' parameters, state and 
+     * timestamps are going to be the same as the 'startTime' and 'endTime' parameters, state and
      * uid are going to vary.
      *
      * @param networkType As defined in {@link ConnectivityManager}, e.g.
@@ -163,7 +163,7 @@
 
         NetworkStats result;
         result = new NetworkStats(mContext, template, startTime, endTime);
-        result.startSummaryEnumeration(startTime, endTime);
+        result.startSummaryEnumeration();
 
         return result;
     }
@@ -173,6 +173,9 @@
      * Result is aggregated over state but not aggregated over time. This means buckets' start and
      * end timestamps are going to be between 'startTime' and 'endTime' parameters, state is going
      * to be {@link NetworkStats.Bucket#STATE_ALL} and uid the same as the 'uid' parameter.
+     * <p>Only includes buckets that atomically occur in the inclusive time range. Doesn't
+     * interpolate across partial buckets. Since bucket length is in the order of hours, this
+     * method cannot be used to measure data usage on a fine grained time scale.
      *
      * @param networkType As defined in {@link ConnectivityManager}, e.g.
      *            {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI}
@@ -205,6 +208,9 @@
      * calling user. Result is aggregated over state but not aggregated over time or uid. This means
      * buckets' start and end timestamps are going to be between 'startTime' and 'endTime'
      * parameters, state is going to be {@link NetworkStats.Bucket#STATE_ALL} and uid will vary.
+     * <p>Only includes buckets that atomically occur in the inclusive time range. Doesn't
+     * interpolate across partial buckets. Since bucket length is in the order of hours, this
+     * method cannot be used to measure data usage on a fine grained time scale.
      *
      * @param networkType As defined in {@link ConnectivityManager}, e.g.
      *            {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI}
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 49386f9..62c2e8c 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -4627,12 +4627,12 @@
     /** {@hide} */
     public static String permissionFlagToString(int flag) {
         switch (flag) {
-            case FLAG_PERMISSION_GRANTED_BY_DEFAULT: return "FLAG_PERMISSION_GRANTED_BY_DEFAULT";
-            case FLAG_PERMISSION_POLICY_FIXED: return "FLAG_PERMISSION_POLICY_FIXED";
-            case FLAG_PERMISSION_SYSTEM_FIXED: return "FLAG_PERMISSION_SYSTEM_FIXED";
-            case FLAG_PERMISSION_USER_SET: return "FLAG_PERMISSION_USER_SET";
-            case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "FLAG_PERMISSION_REVOKE_ON_UPGRADE";
-            case FLAG_PERMISSION_USER_FIXED: return "FLAG_PERMISSION_USER_FIXED";
+            case FLAG_PERMISSION_GRANTED_BY_DEFAULT: return "GRANTED_BY_DEFAULT";
+            case FLAG_PERMISSION_POLICY_FIXED: return "POLICY_FIXED";
+            case FLAG_PERMISSION_SYSTEM_FIXED: return "SYSTEM_FIXED";
+            case FLAG_PERMISSION_USER_SET: return "USER_SET";
+            case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "REVOKE_ON_UPGRADE";
+            case FLAG_PERMISSION_USER_FIXED: return "USER_FIXED";
             default: return Integer.toString(flag);
         }
     }
diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java
index 0a1f148..2828d83 100644
--- a/core/java/android/content/pm/PermissionInfo.java
+++ b/core/java/android/content/pm/PermissionInfo.java
@@ -48,17 +48,25 @@
     public static final int PROTECTION_SIGNATURE = 2;
 
     /**
-     * System-level value for {@link #protectionLevel}, corresponding
-     * to the <code>signatureOrSystem</code> value of
-     * {@link android.R.attr#protectionLevel}.
+     * @deprecated Use {@link #PROTECTION_SIGNATURE}|{@link #PROTECTION_FLAG_PRIVILEGED}
+     * instead.
      */
+    @Deprecated
     public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3;
 
     /**
      * Additional flag for {@link #protectionLevel}, corresponding
-     * to the <code>system</code> value of
+     * to the <code>privileged</code> value of
      * {@link android.R.attr#protectionLevel}.
      */
+    public static final int PROTECTION_FLAG_PRIVILEGED = 0x10;
+
+    /**
+     * @deprecated Old name for {@link #PROTECTION_FLAG_PRIVILEGED}, which
+     * is now very confusing because it only applies to privileged apps, not all
+     * apps on the system image.
+     */
+    @Deprecated
     public static final int PROTECTION_FLAG_SYSTEM = 0x10;
 
     /**
@@ -83,6 +91,27 @@
     public static final int PROTECTION_FLAG_PRE23 = 0x80;
 
     /**
+     * Additional flag for {@link #protectionLevel}, corresponding
+     * to the <code>installer</code> value of
+     * {@link android.R.attr#protectionLevel}.
+     */
+    public static final int PROTECTION_FLAG_INSTALLER = 0x100;
+
+    /**
+     * Additional flag for {@link #protectionLevel}, corresponding
+     * to the <code>verifier</code> value of
+     * {@link android.R.attr#protectionLevel}.
+     */
+    public static final int PROTECTION_FLAG_VERIFIER = 0x200;
+
+    /**
+     * Additional flag for {@link #protectionLevel}, corresponding
+     * to the <code>preinstalled</code> value of
+     * {@link android.R.attr#protectionLevel}.
+     */
+    public static final int PROTECTION_FLAG_PREINSTALLED = 0x400;
+
+    /**
      * Mask for {@link #protectionLevel}: the basic protection type.
      */
     public static final int PROTECTION_MASK_BASE = 0xf;
@@ -90,7 +119,7 @@
     /**
      * Mask for {@link #protectionLevel}: additional flag bits.
      */
-    public static final int PROTECTION_MASK_FLAGS = 0xf0;
+    public static final int PROTECTION_MASK_FLAGS = 0xff0;
 
     /**
      * The level of access this permission is protecting, as per
@@ -147,7 +176,7 @@
     /** @hide */
     public static int fixProtectionLevel(int level) {
         if (level == PROTECTION_SIGNATURE_OR_SYSTEM) {
-            level = PROTECTION_SIGNATURE | PROTECTION_FLAG_SYSTEM;
+            level = PROTECTION_SIGNATURE | PROTECTION_FLAG_PRIVILEGED;
         }
         return level;
     }
@@ -169,8 +198,8 @@
                 protLevel = "signatureOrSystem";
                 break;
         }
-        if ((level&PermissionInfo.PROTECTION_FLAG_SYSTEM) != 0) {
-            protLevel += "|system";
+        if ((level&PermissionInfo.PROTECTION_FLAG_PRIVILEGED) != 0) {
+            protLevel += "|privileged";
         }
         if ((level&PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) {
             protLevel += "|development";
diff --git a/core/java/android/hardware/camera2/CameraCaptureSession.java b/core/java/android/hardware/camera2/CameraCaptureSession.java
index c547b06..62ebfb3 100644
--- a/core/java/android/hardware/camera2/CameraCaptureSession.java
+++ b/core/java/android/hardware/camera2/CameraCaptureSession.java
@@ -497,8 +497,9 @@
      *
      * <p>Each reprocessable capture session has an input {@link Surface} where the reprocess
      * capture requests get the input images from, rather than the camera device. The application
-     * can create a {@link android.media.ImageWriter} with this input {@link Surface} and use it to
-     * provide input images for reprocess capture requests.</p>
+     * can create a {@link android.media.ImageWriter ImageWriter} with this input {@link Surface}
+     * and use it to provide input images for reprocess capture requests. When the reprocessable
+     * capture session is closed, the input {@link Surface} is abandoned and becomes invalid.</p>
      *
      * @return The {@link Surface} where reprocessing capture requests get the input images from. If
      *         this is not a reprocess capture session, {@code null} will be returned.
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index 835daab..547cce4 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -116,6 +116,20 @@
         }
 
         /**
+         * Return this {@link Key} as a string representation.
+         *
+         * <p>{@code "CameraCharacteristics.Key(%s)"}, where {@code %s} represents
+         * the name of this key as returned by {@link #getName}.</p>
+         *
+         * @return string representation of {@link Key}
+         */
+        @NonNull
+        @Override
+        public String toString() {
+            return String.format("CameraCharacteristics.Key(%s)", mKey.getName());
+        }
+
+        /**
          * Visible for CameraMetadataNative implementation only; do not use.
          *
          * TODO: Make this private or remove it altogether.
@@ -724,7 +738,9 @@
     /**
      * <p>List of edge enhancement modes for {@link CaptureRequest#EDGE_MODE android.edge.mode} that are supported by this camera
      * device.</p>
-     * <p>Full-capability camera devices must always support OFF; all devices will list FAST.</p>
+     * <p>Full-capability camera devices must always support OFF; camera devices that support
+     * YUV_REPROCESSING or PRIVATE_REPROCESSING will list ZERO_SHUTTER_LAG; all devices will
+     * list FAST.</p>
      * <p><b>Range of valid values:</b><br>
      * Any value listed in {@link CaptureRequest#EDGE_MODE android.edge.mode}</p>
      * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
@@ -1162,6 +1178,8 @@
      * <p>List of noise reduction modes for {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode} that are supported
      * by this camera device.</p>
      * <p>Full-capability camera devices will always support OFF and FAST.</p>
+     * <p>Camera devices that support YUV_REPROCESSING or PRIVATE_REPROCESSING will support
+     * ZERO_SHUTTER_LAG.</p>
      * <p>Legacy-capability camera devices will only support FAST mode.</p>
      * <p><b>Range of valid values:</b><br>
      * Any value listed in {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode}</p>
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index e8dbc5b..0aa6447 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -488,9 +488,13 @@
      * <li>{@link CaptureRequest#EDGE_MODE android.edge.mode}</li>
      * </ul>
      * </li>
+     * <li>{@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes} and
+     *   {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes} will both list ZERO_SHUTTER_LAG as a supported mode.</li>
      * </ul>
      *
+     * @see CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES
      * @see CaptureRequest#EDGE_MODE
+     * @see CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES
      * @see CaptureRequest#NOISE_REDUCTION_MODE
      * @see CameraCharacteristics#REPROCESS_MAX_CAPTURE_STALL
      * @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS
@@ -593,9 +597,13 @@
      * <li>{@link CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR android.reprocess.effectiveExposureFactor}</li>
      * </ul>
      * </li>
+     * <li>{@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes} and
+     *   {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes} will both list ZERO_SHUTTER_LAG as a supported mode.</li>
      * </ul>
      *
+     * @see CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES
      * @see CaptureRequest#EDGE_MODE
+     * @see CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES
      * @see CaptureRequest#NOISE_REDUCTION_MODE
      * @see CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
      * @see CameraCharacteristics#REPROCESS_MAX_CAPTURE_STALL
@@ -1999,6 +2007,31 @@
      */
     public static final int EDGE_MODE_HIGH_QUALITY = 2;
 
+    /**
+     * <p>Edge enhancement is applied at different levels for different output streams,
+     * based on resolution. Streams at maximum recording resolution (see {@link android.hardware.camera2.CameraDevice#createCaptureSession }) or below have
+     * edge enhancement applied, while higher-resolution streams have no edge enhancement
+     * applied. The level of edge enhancement for low-resolution streams is tuned so that
+     * frame rate is not impacted, and the quality is equal to or better than FAST (since it
+     * is only applied to lower-resolution outputs, quality may improve from FAST).</p>
+     * <p>This mode is intended to be used by applications operating in a zero-shutter-lag mode
+     * with YUV or PRIVATE reprocessing, where the application continuously captures
+     * high-resolution intermediate buffers into a circular buffer, from which a final image is
+     * produced via reprocessing when a user takes a picture.  For such a use case, the
+     * high-resolution buffers must not have edge enhancement applied to maximize efficiency of
+     * preview and to avoid double-applying enhancement when reprocessed, while low-resolution
+     * buffers (used for recording or preview, generally) need edge enhancement applied for
+     * reasonable preview quality.</p>
+     * <p>This mode is guaranteed to be supported by devices that support either the
+     * YUV_REPROCESSING or PRIVATE_REPROCESSING capabilities
+     * ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} lists either of those capabilities) and it will
+     * be the default mode for CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     * @see CaptureRequest#EDGE_MODE
+     */
+    public static final int EDGE_MODE_ZERO_SHUTTER_LAG = 3;
+
     //
     // Enumeration values for CaptureRequest#FLASH_MODE
     //
@@ -2104,6 +2137,32 @@
      */
     public static final int NOISE_REDUCTION_MODE_MINIMAL = 3;
 
+    /**
+     * <p>Noise reduction is applied at different levels for different output streams,
+     * based on resolution. Streams at maximum recording resolution (see {@link android.hardware.camera2.CameraDevice#createCaptureSession }) or below have noise
+     * reduction applied, while higher-resolution streams have MINIMAL (if supported) or no
+     * noise reduction applied (if MINIMAL is not supported.) The degree of noise reduction
+     * for low-resolution streams is tuned so that frame rate is not impacted, and the quality
+     * is equal to or better than FAST (since it is only applied to lower-resolution outputs,
+     * quality may improve from FAST).</p>
+     * <p>This mode is intended to be used by applications operating in a zero-shutter-lag mode
+     * with YUV or PRIVATE reprocessing, where the application continuously captures
+     * high-resolution intermediate buffers into a circular buffer, from which a final image is
+     * produced via reprocessing when a user takes a picture.  For such a use case, the
+     * high-resolution buffers must not have noise reduction applied to maximize efficiency of
+     * preview and to avoid over-applying noise filtering when reprocessing, while
+     * low-resolution buffers (used for recording or preview, generally) need noise reduction
+     * applied for reasonable preview quality.</p>
+     * <p>This mode is guaranteed to be supported by devices that support either the
+     * YUV_REPROCESSING or PRIVATE_REPROCESSING capabilities
+     * ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} lists either of those capabilities) and it will
+     * be the default mode for CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG template.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     * @see CaptureRequest#NOISE_REDUCTION_MODE
+     */
+    public static final int NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG = 4;
+
     //
     // Enumeration values for CaptureRequest#SENSOR_TEST_PATTERN_MODE
     //
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index 33cc962..6d8cc54 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -150,6 +150,20 @@
         }
 
         /**
+         * Return this {@link Key} as a string representation.
+         *
+         * <p>{@code "CaptureRequest.Key(%s)"}, where {@code %s} represents
+         * the name of this key as returned by {@link #getName}.</p>
+         *
+         * @return string representation of {@link Key}
+         */
+        @NonNull
+        @Override
+        public String toString() {
+            return String.format("CaptureRequest.Key(%s)", mKey.getName());
+        }
+
+        /**
          * Visible for CameraMetadataNative implementation only; do not use.
          *
          * TODO: Make this private or remove it altogether.
@@ -1569,7 +1583,14 @@
      * will be applied. HIGH_QUALITY mode indicates that the
      * camera device will use the highest-quality enhancement algorithms,
      * even if it slows down capture rate. FAST means the camera device will
-     * not slow down capture rate when applying edge enhancement.</p>
+     * not slow down capture rate when applying edge enhancement. Every output stream will
+     * have a similar amount of enhancement applied.</p>
+     * <p>ZERO_SHUTTER_LAG is meant to be used by applications that maintain a continuous circular
+     * buffer of high-resolution images during preview and reprocess image(s) from that buffer
+     * into a final capture when triggered by the user. In this mode, the camera device applies
+     * edge enhancement to low-resolution streams (below maximum recording resolution) to
+     * maximize preview quality, but does not apply edge enhancement to high-resolution streams,
+     * since those will be reprocessed later if necessary.</p>
      * <p>For YUV_REPROCESSING, these FAST/HIGH_QUALITY modes both mean that the camera
      * device will apply FAST/HIGH_QUALITY YUV-domain edge enhancement, respectively.
      * The camera device may adjust its internal noise reduction parameters for best
@@ -1579,6 +1600,7 @@
      *   <li>{@link #EDGE_MODE_OFF OFF}</li>
      *   <li>{@link #EDGE_MODE_FAST FAST}</li>
      *   <li>{@link #EDGE_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
+     *   <li>{@link #EDGE_MODE_ZERO_SHUTTER_LAG ZERO_SHUTTER_LAG}</li>
      * </ul></p>
      * <p><b>Available values for this device:</b><br>
      * {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}</p>
@@ -1593,6 +1615,7 @@
      * @see #EDGE_MODE_OFF
      * @see #EDGE_MODE_FAST
      * @see #EDGE_MODE_HIGH_QUALITY
+     * @see #EDGE_MODE_ZERO_SHUTTER_LAG
      */
     @PublicKey
     public static final Key<Integer> EDGE_MODE =
@@ -1979,7 +2002,14 @@
      * will be applied. HIGH_QUALITY mode indicates that the camera device
      * will use the highest-quality noise filtering algorithms,
      * even if it slows down capture rate. FAST means the camera device will not
-     * slow down capture rate when applying noise filtering.</p>
+     * slow down capture rate when applying noise filtering. Every output stream will
+     * have a similar amount of enhancement applied.</p>
+     * <p>ZERO_SHUTTER_LAG is meant to be used by applications that maintain a continuous circular
+     * buffer of high-resolution images during preview and reprocess image(s) from that buffer
+     * into a final capture when triggered by the user. In this mode, the camera device applies
+     * noise reduction to low-resolution streams (below maximum recording resolution) to maximize
+     * preview quality, but does not apply noise reduction to high-resolution streams, since
+     * those will be reprocessed later if necessary.</p>
      * <p>For YUV_REPROCESSING, these FAST/HIGH_QUALITY modes both mean that the camera device
      * will apply FAST/HIGH_QUALITY YUV domain noise reduction, respectively. The camera device
      * may adjust the noise reduction parameters for best image quality based on the
@@ -1990,6 +2020,7 @@
      *   <li>{@link #NOISE_REDUCTION_MODE_FAST FAST}</li>
      *   <li>{@link #NOISE_REDUCTION_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
      *   <li>{@link #NOISE_REDUCTION_MODE_MINIMAL MINIMAL}</li>
+     *   <li>{@link #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG ZERO_SHUTTER_LAG}</li>
      * </ul></p>
      * <p><b>Available values for this device:</b><br>
      * {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}</p>
@@ -2005,6 +2036,7 @@
      * @see #NOISE_REDUCTION_MODE_FAST
      * @see #NOISE_REDUCTION_MODE_HIGH_QUALITY
      * @see #NOISE_REDUCTION_MODE_MINIMAL
+     * @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG
      */
     @PublicKey
     public static final Key<Integer> NOISE_REDUCTION_MODE =
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index 9dee045..f7cf1850 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -127,6 +127,20 @@
         }
 
         /**
+         * Return this {@link Key} as a string representation.
+         *
+         * <p>{@code "CaptureResult.Key(%s)"}, where {@code %s} represents
+         * the name of this key as returned by {@link #getName}.</p>
+         *
+         * @return string representation of {@link Key}
+         */
+        @NonNull
+        @Override
+        public String toString() {
+            return String.format("CaptureResult.Key(%s)", mKey.getName());
+        }
+
+        /**
          * Visible for CameraMetadataNative implementation only; do not use.
          *
          * TODO: Make this private or remove it altogether.
@@ -2081,7 +2095,14 @@
      * will be applied. HIGH_QUALITY mode indicates that the
      * camera device will use the highest-quality enhancement algorithms,
      * even if it slows down capture rate. FAST means the camera device will
-     * not slow down capture rate when applying edge enhancement.</p>
+     * not slow down capture rate when applying edge enhancement. Every output stream will
+     * have a similar amount of enhancement applied.</p>
+     * <p>ZERO_SHUTTER_LAG is meant to be used by applications that maintain a continuous circular
+     * buffer of high-resolution images during preview and reprocess image(s) from that buffer
+     * into a final capture when triggered by the user. In this mode, the camera device applies
+     * edge enhancement to low-resolution streams (below maximum recording resolution) to
+     * maximize preview quality, but does not apply edge enhancement to high-resolution streams,
+     * since those will be reprocessed later if necessary.</p>
      * <p>For YUV_REPROCESSING, these FAST/HIGH_QUALITY modes both mean that the camera
      * device will apply FAST/HIGH_QUALITY YUV-domain edge enhancement, respectively.
      * The camera device may adjust its internal noise reduction parameters for best
@@ -2091,6 +2112,7 @@
      *   <li>{@link #EDGE_MODE_OFF OFF}</li>
      *   <li>{@link #EDGE_MODE_FAST FAST}</li>
      *   <li>{@link #EDGE_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
+     *   <li>{@link #EDGE_MODE_ZERO_SHUTTER_LAG ZERO_SHUTTER_LAG}</li>
      * </ul></p>
      * <p><b>Available values for this device:</b><br>
      * {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}</p>
@@ -2105,6 +2127,7 @@
      * @see #EDGE_MODE_OFF
      * @see #EDGE_MODE_FAST
      * @see #EDGE_MODE_HIGH_QUALITY
+     * @see #EDGE_MODE_ZERO_SHUTTER_LAG
      */
     @PublicKey
     public static final Key<Integer> EDGE_MODE =
@@ -2763,7 +2786,14 @@
      * will be applied. HIGH_QUALITY mode indicates that the camera device
      * will use the highest-quality noise filtering algorithms,
      * even if it slows down capture rate. FAST means the camera device will not
-     * slow down capture rate when applying noise filtering.</p>
+     * slow down capture rate when applying noise filtering. Every output stream will
+     * have a similar amount of enhancement applied.</p>
+     * <p>ZERO_SHUTTER_LAG is meant to be used by applications that maintain a continuous circular
+     * buffer of high-resolution images during preview and reprocess image(s) from that buffer
+     * into a final capture when triggered by the user. In this mode, the camera device applies
+     * noise reduction to low-resolution streams (below maximum recording resolution) to maximize
+     * preview quality, but does not apply noise reduction to high-resolution streams, since
+     * those will be reprocessed later if necessary.</p>
      * <p>For YUV_REPROCESSING, these FAST/HIGH_QUALITY modes both mean that the camera device
      * will apply FAST/HIGH_QUALITY YUV domain noise reduction, respectively. The camera device
      * may adjust the noise reduction parameters for best image quality based on the
@@ -2774,6 +2804,7 @@
      *   <li>{@link #NOISE_REDUCTION_MODE_FAST FAST}</li>
      *   <li>{@link #NOISE_REDUCTION_MODE_HIGH_QUALITY HIGH_QUALITY}</li>
      *   <li>{@link #NOISE_REDUCTION_MODE_MINIMAL MINIMAL}</li>
+     *   <li>{@link #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG ZERO_SHUTTER_LAG}</li>
      * </ul></p>
      * <p><b>Available values for this device:</b><br>
      * {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}</p>
@@ -2789,6 +2820,7 @@
      * @see #NOISE_REDUCTION_MODE_FAST
      * @see #NOISE_REDUCTION_MODE_HIGH_QUALITY
      * @see #NOISE_REDUCTION_MODE_MINIMAL
+     * @see #NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG
      */
     @PublicKey
     public static final Key<Integer> NOISE_REDUCTION_MODE =
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 82d3e0a..c5f142a 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -254,7 +254,7 @@
      * Container for callback data from {@link FingerprintManager#authenticate(CryptoObject,
      *     CancellationSignal, int, AuthenticationCallback, Handler)}.
      */
-    public static final class AuthenticationResult {
+    public static class AuthenticationResult {
         private Fingerprint mFingerprint;
         private CryptoObject mCryptoObject;
 
@@ -520,6 +520,21 @@
     }
 
     /**
+     * Finishes enrollment and cancels the current auth token.
+     * @hide
+     */
+    @RequiresPermission(MANAGE_FINGERPRINT)
+    public int postEnroll() {
+        int result = 0;
+        if (mService != null) try {
+            result = mService.postEnroll(mToken);
+        } catch (RemoteException e) {
+            Log.w(TAG, "Remote exception in post enroll: ", e);
+        }
+        return result;
+    }
+
+    /**
      * Remove given fingerprint template from fingerprint hardware and/or protected storage.
      * @param fp the fingerprint item to remove
      * @param callback an optional callback to verify that fingerprint templates have been
diff --git a/core/java/android/hardware/fingerprint/IFingerprintDaemon.aidl b/core/java/android/hardware/fingerprint/IFingerprintDaemon.aidl
index 186d36e..9c13523 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintDaemon.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintDaemon.aidl
@@ -21,7 +21,7 @@
  * Communication channel from FingerprintService to FingerprintDaemon (fingerprintd)
  * @hide
  */
- 
+
 interface IFingerprintDaemon {
     int authenticate(long sessionId, int groupId);
     int cancelAuthentication();
@@ -34,4 +34,5 @@
     long openHal();
     int closeHal();
     void init(IFingerprintDaemonCallback callback);
+    int postEnroll();
 }
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
index f596c93..5e233b8 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
@@ -54,6 +54,9 @@
     // Get a pre-enrollment authentication token
     long preEnroll(IBinder token);
 
+    // Finish an enrollment sequence and invalidate the authentication token
+    int postEnroll(IBinder token);
+
     // Determine if a user has at least one enrolled fingerprint
     boolean hasEnrolledFingerprints(int groupId, String opPackageName);
 
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 12cd5f1..01334c3 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -2081,23 +2081,6 @@
      * changes.  Should be extended by applications wanting notifications.
      */
     public static class NetworkCallback {
-        /** @hide */
-        public static final int PRECHECK     = 1;
-        /** @hide */
-        public static final int AVAILABLE    = 2;
-        /** @hide */
-        public static final int LOSING       = 3;
-        /** @hide */
-        public static final int LOST         = 4;
-        /** @hide */
-        public static final int UNAVAIL      = 5;
-        /** @hide */
-        public static final int CAP_CHANGED  = 6;
-        /** @hide */
-        public static final int PROP_CHANGED = 7;
-        /** @hide */
-        public static final int CANCELED     = 8;
-
         /**
          * Called when the framework connects to a new network to evaluate whether it satisfies this
          * request. If evaluation succeeds, this callback may be followed by an {@link #onAvailable}
@@ -2174,30 +2157,54 @@
          */
         public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {}
 
+        /**
+         * Called when the network the framework connected to for this request
+         * goes into {@link NetworkInfo.DetailedState.SUSPENDED}.
+         * This generally means that while the TCP connections are still live,
+         * temporarily network data fails to transfer.  Specifically this is used
+         * on cellular networks to mask temporary outages when driving through
+         * a tunnel, etc.
+         * @hide
+         */
+        public void onNetworkSuspended(Network network) {}
+
+        /**
+         * Called when the network the framework connected to for this request
+         * returns from a {@link NetworkInfo.DetailedState.SUSPENDED} state.
+         * This should always be preceeded by a matching {@code onNetworkSuspended}
+         * call.
+         * @hide
+         */
+        public void onNetworkResumed(Network network) {}
+
         private NetworkRequest networkRequest;
     }
 
     private static final int BASE = Protocol.BASE_CONNECTIVITY_MANAGER;
-    /** @hide obj = pair(NetworkRequest, Network) */
-    public static final int CALLBACK_PRECHECK           = BASE + 1;
-    /** @hide obj = pair(NetworkRequest, Network) */
-    public static final int CALLBACK_AVAILABLE          = BASE + 2;
-    /** @hide obj = pair(NetworkRequest, Network), arg1 = ttl */
-    public static final int CALLBACK_LOSING             = BASE + 3;
-    /** @hide obj = pair(NetworkRequest, Network) */
-    public static final int CALLBACK_LOST               = BASE + 4;
-    /** @hide obj = NetworkRequest */
-    public static final int CALLBACK_UNAVAIL            = BASE + 5;
-    /** @hide obj = pair(NetworkRequest, Network) */
-    public static final int CALLBACK_CAP_CHANGED        = BASE + 6;
-    /** @hide obj = pair(NetworkRequest, Network) */
-    public static final int CALLBACK_IP_CHANGED         = BASE + 7;
-    /** @hide obj = NetworkRequest */
-    public static final int CALLBACK_RELEASED           = BASE + 8;
     /** @hide */
-    public static final int CALLBACK_EXIT               = BASE + 9;
+    public static final int CALLBACK_PRECHECK            = BASE + 1;
+    /** @hide */
+    public static final int CALLBACK_AVAILABLE           = BASE + 2;
+    /** @hide arg1 = TTL */
+    public static final int CALLBACK_LOSING              = BASE + 3;
+    /** @hide */
+    public static final int CALLBACK_LOST                = BASE + 4;
+    /** @hide */
+    public static final int CALLBACK_UNAVAIL             = BASE + 5;
+    /** @hide */
+    public static final int CALLBACK_CAP_CHANGED         = BASE + 6;
+    /** @hide */
+    public static final int CALLBACK_IP_CHANGED          = BASE + 7;
+    /** @hide */
+    public static final int CALLBACK_RELEASED            = BASE + 8;
+    /** @hide */
+    public static final int CALLBACK_EXIT                = BASE + 9;
     /** @hide obj = NetworkCapabilities, arg1 = seq number */
-    private static final int EXPIRE_LEGACY_REQUEST      = BASE + 10;
+    private static final int EXPIRE_LEGACY_REQUEST       = BASE + 10;
+    /** @hide */
+    public static final int CALLBACK_SUSPENDED           = BASE + 11;
+    /** @hide */
+    public static final int CALLBACK_RESUMED             = BASE + 12;
 
     private class CallbackHandler extends Handler {
         private final HashMap<NetworkRequest, NetworkCallback>mCallbackMap;
@@ -2274,6 +2281,20 @@
                     }
                     break;
                 }
+                case CALLBACK_SUSPENDED: {
+                    NetworkCallback callback = getCallback(request, "SUSPENDED");
+                    if (callback != null) {
+                        callback.onNetworkSuspended(network);
+                    }
+                    break;
+                }
+                case CALLBACK_RESUMED: {
+                    NetworkCallback callback = getCallback(request, "RESUMED");
+                    if (callback != null) {
+                        callback.onNetworkResumed(network);
+                    }
+                    break;
+                }
                 case CALLBACK_RELEASED: {
                     NetworkCallback callback = null;
                     synchronized(mCallbackMap) {
diff --git a/core/java/android/net/INetworkStatsSession.aidl b/core/java/android/net/INetworkStatsSession.aidl
index 7bcb043..5229a3b 100644
--- a/core/java/android/net/INetworkStatsSession.aidl
+++ b/core/java/android/net/INetworkStatsSession.aidl
@@ -35,6 +35,8 @@
     NetworkStats getSummaryForAllUid(in NetworkTemplate template, long start, long end, boolean includeTags);
     /** Return historical network layer stats for specific UID traffic that matches template. */
     NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int set, int tag, int fields);
+    /** Return historical network layer stats for specific UID traffic that matches template. */
+    NetworkStatsHistory getHistoryIntervalForUid(in NetworkTemplate template, int uid, int set, int tag, int fields, long start, long end);
 
     /** Return array of uids that have stats and are accessible to the calling user */
     int[] getRelevantUids();
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index fe323f3..adc84bc 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -877,6 +877,9 @@
 
         public void readFromParcel(Parcel in) {
             final int N = in.readInt();
+            if (N > mStepDurations.length) {
+                throw new ParcelFormatException("more step durations than available: " + N);
+            }
             mNumStepDurations = N;
             for (int i=0; i<N; i++) {
                 mStepDurations[i] = in.readLong();
diff --git a/core/java/android/os/storage/StorageVolume.java b/core/java/android/os/storage/StorageVolume.java
index d66e228..1408202 100644
--- a/core/java/android/os/storage/StorageVolume.java
+++ b/core/java/android/os/storage/StorageVolume.java
@@ -58,6 +58,9 @@
     // ACTION_MEDIA_BAD_REMOVAL, ACTION_MEDIA_UNMOUNTABLE and ACTION_MEDIA_EJECT broadcasts.
     public static final String EXTRA_STORAGE_VOLUME = "storage_volume";
 
+    public static final int STORAGE_ID_INVALID = 0x00000000;
+    public static final int STORAGE_ID_PRIMARY = 0x00010001;
+
     public StorageVolume(String id, int storageId, File path, String description, boolean primary,
             boolean removable, boolean emulated, long mtpReserveSize, boolean allowMassStorage,
             long maxFileSize, UserHandle owner, String fsUuid, String state) {
diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java
index e33baa9..32f7bc9 100644
--- a/core/java/android/os/storage/VolumeInfo.java
+++ b/core/java/android/os/storage/VolumeInfo.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
-import android.mtp.MtpStorage;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.Parcel;
@@ -147,15 +146,11 @@
     public String path;
     public String internalPath;
 
-    /** Framework state */
-    public final int mtpIndex;
-
-    public VolumeInfo(String id, int type, DiskInfo disk, String partGuid, int mtpIndex) {
+    public VolumeInfo(String id, int type, DiskInfo disk, String partGuid) {
         this.id = Preconditions.checkNotNull(id);
         this.type = type;
         this.disk = disk;
         this.partGuid = partGuid;
-        this.mtpIndex = mtpIndex;
     }
 
     public VolumeInfo(Parcel parcel) {
@@ -175,7 +170,6 @@
         fsLabel = parcel.readString();
         path = parcel.readString();
         internalPath = parcel.readString();
-        mtpIndex = parcel.readInt();
     }
 
     public static @NonNull String getEnvironmentForState(int state) {
@@ -232,7 +226,7 @@
     }
 
     public @Nullable String getDescription() {
-        if (ID_PRIVATE_INTERNAL.equals(id)) {
+        if (ID_PRIVATE_INTERNAL.equals(id) || ID_EMULATED_INTERNAL.equals(id)) {
             return Resources.getSystem().getString(com.android.internal.R.string.storage_internal);
         } else if (!TextUtils.isEmpty(fsLabel)) {
             return fsLabel;
@@ -305,10 +299,11 @@
     }
 
     public StorageVolume buildStorageVolume(Context context, int userId) {
+        final StorageManager storage = context.getSystemService(StorageManager.class);
+
         final boolean removable;
         final boolean emulated;
         final boolean allowMassStorage = false;
-        final int mtpStorageId = MtpStorage.getStorageIdForIndex(mtpIndex);
         final String envState = getEnvironmentForState(state);
 
         File userPath = getPathForUser(userId);
@@ -316,17 +311,24 @@
             userPath = new File("/dev/null");
         }
 
-        String description = getDescription();
-        if (description == null) {
-            description = context.getString(android.R.string.unknownName);
-        }
-
+        String description = null;
         long mtpReserveSize = 0;
         long maxFileSize = 0;
+        int mtpStorageId = StorageVolume.STORAGE_ID_INVALID;
 
         if (type == TYPE_EMULATED) {
             emulated = true;
-            mtpReserveSize = StorageManager.from(context).getStorageLowBytes(userPath);
+
+            final VolumeInfo privateVol = storage.findPrivateForEmulated(this);
+            if (privateVol != null) {
+                description = storage.getBestVolumeDescription(privateVol);
+            }
+
+            if (isPrimary()) {
+                mtpStorageId = StorageVolume.STORAGE_ID_PRIMARY;
+            }
+
+            mtpReserveSize = storage.getStorageLowBytes(userPath);
 
             if (ID_EMULATED_INTERNAL.equals(id)) {
                 removable = false;
@@ -338,6 +340,16 @@
             emulated = false;
             removable = true;
 
+            description = storage.getBestVolumeDescription(this);
+
+            if (isPrimary()) {
+                mtpStorageId = StorageVolume.STORAGE_ID_PRIMARY;
+            } else {
+                // Since MediaProvider currently persists this value, we need a
+                // value that is stable over time.
+                mtpStorageId = buildStableMtpStorageId(fsUuid);
+            }
+
             if ("vfat".equals(fsType)) {
                 maxFileSize = 4294967295L;
             }
@@ -346,11 +358,33 @@
             throw new IllegalStateException("Unexpected volume type " + type);
         }
 
+        if (description == null) {
+            description = context.getString(android.R.string.unknownName);
+        }
+
         return new StorageVolume(id, mtpStorageId, userPath, description, isPrimary(), removable,
                 emulated, mtpReserveSize, allowMassStorage, maxFileSize, new UserHandle(userId),
                 fsUuid, envState);
     }
 
+    public static int buildStableMtpStorageId(String fsUuid) {
+        if (TextUtils.isEmpty(fsUuid)) {
+            return StorageVolume.STORAGE_ID_INVALID;
+        } else {
+            int hash = 0;
+            for (int i = 0; i < fsUuid.length(); ++i) {
+                hash = 31 * hash + fsUuid.charAt(i);
+            }
+            hash = (hash ^ (hash << 16)) & 0xffff0000;
+            // Work around values that the spec doesn't allow, or that we've
+            // reserved for primary
+            if (hash == 0x00000000) hash = 0x00020000;
+            if (hash == 0x00010000) hash = 0x00020000;
+            if (hash == 0xffff0000) hash = 0xfffe0000;
+            return hash | 0x0001;
+        }
+    }
+
     // TODO: avoid this layering violation
     private static final String DOCUMENT_AUTHORITY = "com.android.externalstorage.documents";
     private static final String DOCUMENT_ROOT_PRIMARY_EMULATED = "primary";
@@ -399,7 +433,6 @@
         pw.println();
         pw.printPair("path", path);
         pw.printPair("internalPath", internalPath);
-        pw.printPair("mtpIndex", mtpIndex);
         pw.decreaseIndent();
         pw.println();
     }
@@ -466,6 +499,5 @@
         parcel.writeString(fsLabel);
         parcel.writeString(path);
         parcel.writeString(internalPath);
-        parcel.writeInt(mtpIndex);
     }
 }
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 8ce1cbf..d547a60 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -5957,7 +5957,9 @@
              */
             public static final CharSequence getTypeLabel(Resources res, int type,
                     CharSequence label) {
-                if ((type == TYPE_CUSTOM || type == TYPE_ASSISTANT) && !TextUtils.isEmpty(label)) {
+                if (type == TYPE_CUSTOM) {
+                    return (label != null ? label : "");
+                } else if (type == TYPE_ASSISTANT && !TextUtils.isEmpty(label)) {
                     return label;
                 } else {
                     final int labelRes = getTypeLabelResource(type);
diff --git a/core/java/android/text/BoringLayout.java b/core/java/android/text/BoringLayout.java
index e78cf8f..aa8b71c 100644
--- a/core/java/android/text/BoringLayout.java
+++ b/core/java/android/text/BoringLayout.java
@@ -269,7 +269,15 @@
             for (int a = 0; a < n; a++) {
                 char c = temp[a];
 
-                if (c == '\n' || c == '\t' || c >= FIRST_RIGHT_TO_LEFT) {
+                if (c == '\n' || c == '\t' ||
+                        (c >= 0x0590 && c <= 0x08FF) ||  // RTL scripts
+                        c == 0x200F ||  // Bidi format character
+                        (c >= 0x202A && c <= 0x202E) ||  // Bidi format characters
+                        (c >= 0x2066 && c <= 0x2069) ||  // Bidi format characters
+                        (c >= 0xD800 && c <= 0xDFFF) ||  // surrogate pairs
+                        (c >= 0xFB1D && c <= 0xFDFF) ||  // Hebrew and Arabic presentation forms
+                        (c >= 0xFE70 && c <= 0xFEFE) // Arabic presentation forms
+                   ) {
                     boring = false;
                     break outer;
                 }
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
index 794622a..2e4ba74 100644
--- a/core/java/android/view/ViewStructure.java
+++ b/core/java/android/view/ViewStructure.java
@@ -178,6 +178,17 @@
     public abstract void setTextStyle(float size, int fgColor, int bgColor, int style);
 
     /**
+     * Set line information for test that was previously supplied through
+     * {@link #setText(CharSequence)}.  This provides the line breaking of the text as it
+     * is shown on screen.  This function takes ownership of the provided arrays; you should
+     * not make further modification to them.
+     *
+     * @param charOffsets The offset in to {@link #setText} where a line starts.
+     * @param baselines The baseline where the line is drawn on screen.
+     */
+    public abstract void setTextLines(int[] charOffsets, int[] baselines);
+
+    /**
      * Set optional hint text associated with this view; this is for example the text that is
      * shown by an EditText when it is empty to indicate to the user the kind of text to input.
      */
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 1464bb5..a04c4f1 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -1418,15 +1418,14 @@
                     }
                     builder.append("TYPE_VIEW_CONTEXT_CLICKED");
                     eventTypeCount++;
-                }
+                } break;
                 case TYPE_ASSIST_READING_CONTEXT: {
                     if (eventTypeCount > 0) {
                         builder.append(", ");
                     }
                     builder.append("TYPE_ASSIST_READING_CONTEXT");
                     eventTypeCount++;
-                }
-                    break;
+                } break;
             }
         }
         if (eventTypeCount > 1) {
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index cfa347f..f62b4cc 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -1211,6 +1211,12 @@
     /**
      * Sets the WebView's user-agent string. If the string is null or empty,
      * the system default value will be used.
+     *
+     * Note that starting from {@link android.os.Build.VERSION_CODES#KITKAT} Android
+     * version, changing the user-agent while loading a web page causes WebView
+     * to initiate loading once again.
+     *
+     * @param ua new user-agent string
      */
     public abstract void setUserAgentString(String ua);
 
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index c54b28d..d1af9dc 100644
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
@@ -98,18 +98,12 @@
             super(info);
         }
 
-        public Drawable loadGroupIcon(PackageManager pm) {
+        public Drawable loadGroupIcon(Context context, PackageManager pm) {
             if (icon != 0) {
                 return loadUnbadgedIcon(pm);
             } else {
-                ApplicationInfo appInfo;
-                try {
-                    appInfo = pm.getApplicationInfo(packageName, 0);
-                    return appInfo.loadUnbadgedIcon(pm);
-                } catch (NameNotFoundException e) {
-                }
+                return context.getDrawable(R.drawable.ic_perm_device_info);
             }
-            return null;
         }
     }
 
@@ -163,7 +157,7 @@
             PackageManager pm = getContext().getPackageManager();
             Drawable icon = null;
             if (first) {
-                icon = grp.loadGroupIcon(pm);
+                icon = grp.loadGroupIcon(getContext(), pm);
             }
             CharSequence label = perm.mLabel;
             if (perm.mNew && newPermPrefix != null) {
@@ -213,7 +207,7 @@
                     builder.setMessage(sbuilder.toString());
                 }
                 builder.setCancelable(true);
-                builder.setIcon(mGroup.loadGroupIcon(pm));
+                builder.setIcon(mGroup.loadGroupIcon(getContext(), pm));
                 addRevokeUIIfNecessary(builder);
                 mDialog = builder.show();
                 mDialog.setCanceledOnTouchOutside(true);
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 7c4ff18..96e033a 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -1683,8 +1683,7 @@
             return;
         }
 
-        Layout layout = mTextView.getLayout();
-        Layout hintLayout = mTextView.getHintLayout();
+        Layout layout = getActiveLayout();
         final int offset = mTextView.getSelectionStart();
         final int line = layout.getLineForOffset(offset);
         final int top = layout.getLineTop(line);
@@ -1699,8 +1698,7 @@
         }
 
         boolean clamped = layout.shouldClampCursor(line);
-        updateCursorPosition(0, top, middle,
-                getPrimaryHorizontal(layout, hintLayout, offset, clamped));
+        updateCursorPosition(0, top, middle, layout.getPrimaryHorizontal(offset, clamped));
 
         if (mCursorCount == 2) {
             updateCursorPosition(1, middle, bottom,
@@ -1708,17 +1706,6 @@
         }
     }
 
-    private float getPrimaryHorizontal(Layout layout, Layout hintLayout, int offset,
-            boolean clamped) {
-        if (TextUtils.isEmpty(layout.getText()) &&
-                hintLayout != null &&
-                !TextUtils.isEmpty(hintLayout.getText())) {
-            return hintLayout.getPrimaryHorizontal(offset, clamped);
-        } else {
-            return layout.getPrimaryHorizontal(offset, clamped);
-        }
-    }
-
     /**
      * Start an Insertion action mode.
      */
@@ -3311,14 +3298,15 @@
                                 + mHandleHeight);
             } else {
                 // We have a single cursor.
-                int line = mTextView.getLayout().getLineForOffset(mTextView.getSelectionStart());
+                Layout layout = getActiveLayout();
+                int line = layout.getLineForOffset(mTextView.getSelectionStart());
                 float primaryHorizontal =
-                        mTextView.getLayout().getPrimaryHorizontal(mTextView.getSelectionStart());
+                        layout.getPrimaryHorizontal(mTextView.getSelectionStart());
                 mSelectionBounds.set(
                         primaryHorizontal,
-                        mTextView.getLayout().getLineTop(line),
+                        layout.getLineTop(line),
                         primaryHorizontal + 1,
-                        mTextView.getLayout().getLineTop(line + 1) + mHandleHeight);
+                        layout.getLineTop(line + 1) + mHandleHeight);
             }
             // Take TextView's padding and scroll into account.
             int textHorizontalOffset = mTextView.viewportToContentHorizontalOffset();
@@ -3684,6 +3672,7 @@
                 prepareCursorControllers();
                 return;
             }
+            layout = getActiveLayout();
 
             boolean offsetChanged = offset != mPreviousOffset;
             if (offsetChanged || parentScrolled) {
@@ -3863,6 +3852,19 @@
         public void onDetached() {}
     }
 
+    /**
+     * Returns the active layout (hint or text layout). Note that the text layout can be null.
+     */
+    private Layout getActiveLayout() {
+        Layout layout = mTextView.getLayout();
+        Layout hintLayout = mTextView.getHintLayout();
+        if (TextUtils.isEmpty(layout.getText()) && hintLayout != null &&
+                !TextUtils.isEmpty(hintLayout.getText())) {
+            layout = hintLayout;
+        }
+        return layout;
+    }
+
     private class InsertionHandleView extends HandleView {
         private static final int DELAY_BEFORE_HANDLE_FADES_OUT = 4000;
         private static final int RECENT_CUT_COPY_DURATION = 15 * 1000; // seconds
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 9568492..c5632ec9 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -1621,7 +1621,8 @@
                 // We can remember the focused view to restore after re-layout
                 // if the data hasn't changed, or if the focused position is a
                 // header or footer.
-                if (!dataChanged || isDirectChildHeaderOrFooter(focusedChild)) {
+                if (!dataChanged || isDirectChildHeaderOrFooter(focusedChild)
+                        || focusedChild.hasTransientState() || mAdapterHasStableIds) {
                     focusLayoutRestoreDirectChild = focusedChild;
                     // Remember the specific view that had focus.
                     focusLayoutRestoreView = findFocus();
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 43edc44..42ac599 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -46,7 +46,6 @@
 import android.graphics.RectF;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
-import android.inputmethodservice.ExtractEditText;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Parcel;
@@ -116,6 +115,7 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewParent;
 import android.view.ViewStructure;
 import android.view.ViewConfiguration;
 import android.view.ViewDebug;
@@ -5823,6 +5823,10 @@
             return super.getBaseline();
         }
 
+        return getBaselineOffset() + mLayout.getLineBaseline(0);
+    }
+
+    int getBaselineOffset() {
         int voffset = 0;
         if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {
             voffset = getVerticalOffset(true);
@@ -5832,7 +5836,7 @@
             voffset -= getOpticalInsets().top;
         }
 
-        return getExtendedPaddingTop() + voffset + mLayout.getLineBaseline(0);
+        return getExtendedPaddingTop() + voffset;
     }
 
     /**
@@ -8767,7 +8771,79 @@
         final boolean isPassword = hasPasswordTransformationMethod()
                 || isPasswordInputType(getInputType());
         if (!isPassword) {
-            structure.setText(getText(), getSelectionStart(), getSelectionEnd());
+            if (mLayout == null) {
+                assumeLayout();
+            }
+            Layout layout = mLayout;
+            final int lineCount = layout.getLineCount();
+            if (lineCount <= 1) {
+                // Simple case: this is a single line.
+                structure.setText(getText(), getSelectionStart(), getSelectionEnd());
+            } else {
+                // Complex case: multi-line, could be scrolled or within a scroll container
+                // so some lines are not visible.
+                final int[] tmpCords = new int[2];
+                getLocationInWindow(tmpCords);
+                final int topWindowLocation = tmpCords[1];
+                View root = this;
+                ViewParent viewParent = getParent();
+                while (viewParent instanceof View) {
+                    root = (View) viewParent;
+                    viewParent = root.getParent();
+                }
+                final int windowHeight = root.getHeight();
+                final int topLine;
+                final int bottomLine;
+                if (topWindowLocation >= 0) {
+                    // The top of the view is fully within its window; start text at line 0.
+                    topLine = getLineAtCoordinateUnclamped(0);
+                    bottomLine = getLineAtCoordinateUnclamped(windowHeight-1);
+                } else {
+                    // The top of hte window has scrolled off the top of the window; figure out
+                    // the starting line for this.
+                    topLine = getLineAtCoordinateUnclamped(-topWindowLocation);
+                    bottomLine = getLineAtCoordinateUnclamped(windowHeight-1-topWindowLocation);
+                }
+                // We want to return some contextual lines above/below the lines that are
+                // actually visible.
+                int expandedTopLine = topLine - (bottomLine-topLine)/2;
+                if (expandedTopLine < 0) {
+                    expandedTopLine = 0;
+                }
+                int expandedBottomLine = bottomLine + (bottomLine-topLine)/2;
+                if (expandedBottomLine >= lineCount) {
+                    expandedBottomLine = lineCount-1;
+                }
+                // Convert lines into character offsets.
+                int expandedTopChar = layout.getLineStart(expandedTopLine);
+                int expandedBottomChar = layout.getLineEnd(expandedBottomLine);
+                // Take into account selection -- if there is a selection, we need to expand
+                // the text we are returning to include that selection.
+                final int selStart = getSelectionStart();
+                final int selEnd = getSelectionEnd();
+                if (selStart < selEnd) {
+                    if (selStart < expandedTopChar) {
+                        expandedTopChar = selStart;
+                    }
+                    if (selEnd > expandedBottomChar) {
+                        expandedBottomChar = selEnd;
+                    }
+                }
+                // Get the text and trim it to the range we are reporting.
+                CharSequence text = getText();
+                if (expandedTopChar > 0 || expandedBottomChar < text.length()) {
+                    text = text.subSequence(expandedTopChar, expandedBottomChar);
+                }
+                structure.setText(text, selStart-expandedTopChar, selEnd-expandedTopChar);
+                final int[] lineOffsets = new int[bottomLine-topLine+1];
+                final int[] lineBaselines = new int[bottomLine-topLine+1];
+                final int baselineOffset = getBaselineOffset();
+                for (int i=topLine; i<=bottomLine; i++) {
+                    lineOffsets[i-topLine] = layout.getLineStart(i);
+                    lineBaselines[i-topLine] = layout.getLineBaseline(i) + baselineOffset;
+                }
+                structure.setTextLines(lineOffsets, lineBaselines);
+            }
 
             // Extract style information that applies to the TextView as a whole.
             int style = 0;
@@ -9200,24 +9276,25 @@
      * If provided, this ActionMode.Callback will be used to create the ActionMode when text
      * selection is initiated in this View.
      *
-     * The standard implementation populates the menu with a subset of Select All, Cut, Copy,
+     * <p>The standard implementation populates the menu with a subset of Select All, Cut, Copy,
      * Paste, Replace and Share actions, depending on what this View supports.
      *
-     * A custom implementation can add new entries in the default menu in its
-     * {@link android.view.ActionMode.Callback#onPrepareActionMode(ActionMode, Menu)} method. The
-     * default actions can also be removed from the menu using
+     * <p>A custom implementation can add new entries in the default menu in its
+     * {@link android.view.ActionMode.Callback#onPrepareActionMode(ActionMode, android.view.Menu)}
+     * method. The default actions can also be removed from the menu using
      * {@link android.view.Menu#removeItem(int)} and passing {@link android.R.id#selectAll},
      * {@link android.R.id#cut}, {@link android.R.id#copy}, {@link android.R.id#paste},
      * {@link android.R.id#replaceText} or {@link android.R.id#shareText} ids as parameters.
      *
-     * Returning false from
-     * {@link android.view.ActionMode.Callback#onCreateActionMode(ActionMode, Menu)} will prevent
-     * the action mode from being started.
+     * <p>Returning false from
+     * {@link android.view.ActionMode.Callback#onCreateActionMode(ActionMode, android.view.Menu)}
+     * will prevent the action mode from being started.
      *
-     * Action click events should be handled by the custom implementation of
-     * {@link android.view.ActionMode.Callback#onActionItemClicked(ActionMode, MenuItem)}.
+     * <p>Action click events should be handled by the custom implementation of
+     * {@link android.view.ActionMode.Callback#onActionItemClicked(ActionMode,
+     * android.view.MenuItem)}.
      *
-     * Note that text selection mode is not started when a TextView receives focus and the
+     * <p>Note that text selection mode is not started when a TextView receives focus and the
      * {@link android.R.attr#selectAllOnFocus} flag has been set. The content is highlighted in
      * that case, to allow for quick replacement.
      */
@@ -9448,6 +9525,12 @@
         return getLayout().getLineForVertical((int) y);
     }
 
+    int getLineAtCoordinateUnclamped(float y) {
+        y -= getTotalPaddingTop();
+        y += getScrollY();
+        return getLayout().getLineForVertical((int) y);
+    }
+
     int getOffsetAtCoordinate(int line, float x) {
         x = convertToLocalHorizontalCoordinate(x);
         return getLayout().getOffsetForHorizontal(line, x);
diff --git a/core/java/android/widget/TimePickerSpinnerDelegate.java b/core/java/android/widget/TimePickerSpinnerDelegate.java
index df6b0a9..8741cc3 100644
--- a/core/java/android/widget/TimePickerSpinnerDelegate.java
+++ b/core/java/android/widget/TimePickerSpinnerDelegate.java
@@ -592,8 +592,8 @@
     public static String[] getAmPmStrings(Context context) {
         String[] result = new String[2];
         LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
-        result[0] = d.amPm[0].length() > 2 ? d.narrowAm : d.amPm[0];
-        result[1] = d.amPm[1].length() > 2 ? d.narrowPm : d.amPm[1];
+        result[0] = d.amPm[0].length() > 4 ? d.narrowAm : d.amPm[0];
+        result[1] = d.amPm[1].length() > 4 ? d.narrowPm : d.amPm[1];
         return result;
     }
 }
diff --git a/core/java/com/android/internal/app/AssistUtils.java b/core/java/com/android/internal/app/AssistUtils.java
index b520384..6ba09c9 100644
--- a/core/java/com/android/internal/app/AssistUtils.java
+++ b/core/java/com/android/internal/app/AssistUtils.java
@@ -20,6 +20,9 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.provider.Settings;
@@ -42,9 +45,10 @@
                 ServiceManager.getService(Context.VOICE_INTERACTION_MANAGER_SERVICE));
     }
 
-    public void showSessionForActiveService(IVoiceInteractionSessionShowCallback showCallback) {
+    public void showSessionForActiveService(Bundle args,
+            IVoiceInteractionSessionShowCallback showCallback) {
         try {
-            mVoiceInteractionManagerService.showSessionForActiveService(showCallback);
+            mVoiceInteractionManagerService.showSessionForActiveService(args, showCallback);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to call showSessionForActiveService", e);
         }
@@ -118,11 +122,14 @@
         }
 
         Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .getAssistIntent(mContext, false, userId);
-        if (intent != null) {
-            return intent.getComponent();
+                .getAssistIntent(false);
+        PackageManager pm = mContext.getPackageManager();
+        ResolveInfo info = pm.resolveActivityAsUser(intent, PackageManager.MATCH_DEFAULT_ONLY,
+                userId);
+        if (info != null) {
+            return new ComponentName(info.activityInfo.applicationInfo.packageName,
+                    info.activityInfo.name);
         }
-
         return null;
     }
 
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 1b55557..c4f57c7 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -59,6 +59,8 @@
 import com.android.internal.logging.MetricsLogger;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 public class ChooserActivity extends ResolverActivity {
@@ -97,7 +99,10 @@
                                 + " Have you considered returning results faster?");
                         break;
                     }
-                    mChooserListAdapter.addServiceResults(sri.originalTarget, sri.resultTargets);
+                    if (sri.resultTargets != null) {
+                        mChooserListAdapter.addServiceResults(sri.originalTarget,
+                                sri.resultTargets);
+                    }
                     unbindService(sri.connection);
                     mServiceConnections.remove(sri.connection);
                     if (mServiceConnections.isEmpty()) {
@@ -485,10 +490,13 @@
         private Drawable mDisplayIcon;
         private final Intent mFillInIntent;
         private final int mFillInFlags;
+        private final float mModifiedScore;
 
-        public ChooserTargetInfo(DisplayResolveInfo sourceInfo, ChooserTarget chooserTarget) {
+        public ChooserTargetInfo(DisplayResolveInfo sourceInfo, ChooserTarget chooserTarget,
+                float modifiedScore) {
             mSourceInfo = sourceInfo;
             mChooserTarget = chooserTarget;
+            mModifiedScore = modifiedScore;
             if (sourceInfo != null) {
                 final ResolveInfo ri = sourceInfo.getResolveInfo();
                 if (ri != null) {
@@ -520,6 +528,11 @@
             mDisplayIcon = other.mDisplayIcon;
             mFillInIntent = fillInIntent;
             mFillInFlags = flags;
+            mModifiedScore = other.mModifiedScore;
+        }
+
+        public float getModifiedScore() {
+            return mModifiedScore;
         }
 
         @Override
@@ -632,9 +645,16 @@
         public static final int TARGET_SERVICE = 1;
         public static final int TARGET_STANDARD = 2;
 
+        private static final int MAX_SERVICE_TARGETS = 8;
+
         private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>();
         private final List<TargetInfo> mCallerTargets = new ArrayList<>();
 
+        private float mLateFee = 1.f;
+
+        private final BaseChooserTargetComparator mBaseTargetComparator
+                = new BaseChooserTargetComparator();
+
         public ChooserListAdapter(Context context, List<Intent> payloadIntents,
                 Intent[] initialIntents, List<ResolveInfo> rList, int launchedFromUid,
                 boolean filterLastUsed) {
@@ -703,12 +723,12 @@
 
         @Override
         public int getCount() {
-            return super.getCount() + mServiceTargets.size() + mCallerTargets.size();
+            return super.getCount() + getServiceTargetCount() + getCallerTargetCount();
         }
 
         @Override
         public int getUnfilteredCount() {
-            return super.getUnfilteredCount() + mServiceTargets.size() + mCallerTargets.size();
+            return super.getUnfilteredCount() + getServiceTargetCount() + getCallerTargetCount();
         }
 
         public int getCallerTargetCount() {
@@ -716,7 +736,7 @@
         }
 
         public int getServiceTargetCount() {
-            return mServiceTargets.size();
+            return Math.min(mServiceTargets.size(), MAX_SERVICE_TARGETS);
         }
 
         public int getStandardTargetCount() {
@@ -726,13 +746,13 @@
         public int getPositionTargetType(int position) {
             int offset = 0;
 
-            final int callerTargetCount = mCallerTargets.size();
+            final int callerTargetCount = getCallerTargetCount();
             if (position < callerTargetCount) {
                 return TARGET_CALLER;
             }
             offset += callerTargetCount;
 
-            final int serviceTargetCount = mServiceTargets.size();
+            final int serviceTargetCount = getServiceTargetCount();
             if (position - offset < serviceTargetCount) {
                 return TARGET_SERVICE;
             }
@@ -755,13 +775,13 @@
         public TargetInfo targetInfoForPosition(int position, boolean filtered) {
             int offset = 0;
 
-            final int callerTargetCount = mCallerTargets.size();
+            final int callerTargetCount = getCallerTargetCount();
             if (position < callerTargetCount) {
                 return mCallerTargets.get(position);
             }
             offset += callerTargetCount;
 
-            final int serviceTargetCount = mServiceTargets.size();
+            final int serviceTargetCount = getServiceTargetCount();
             if (position - offset < serviceTargetCount) {
                 return mServiceTargets.get(position - offset);
             }
@@ -774,15 +794,49 @@
         public void addServiceResults(DisplayResolveInfo origTarget, List<ChooserTarget> targets) {
             if (DEBUG) Log.d(TAG, "addServiceResults " + origTarget + ", " + targets.size()
                     + " targets");
+            final float parentScore = getScore(origTarget);
+            Collections.sort(targets, mBaseTargetComparator);
+            float lastScore = 0;
             for (int i = 0, N = targets.size(); i < N; i++) {
-                mServiceTargets.add(new ChooserTargetInfo(origTarget, targets.get(i)));
+                final ChooserTarget target = targets.get(i);
+                float targetScore = target.getScore();
+                targetScore *= parentScore;
+                targetScore *= mLateFee;
+                if (i > 0 && targetScore >= lastScore) {
+                    // Apply a decay so that the top app can't crowd out everything else.
+                    // This incents ChooserTargetServices to define what's truly better.
+                    targetScore = lastScore * 0.95f;
+                }
+                insertServiceTarget(new ChooserTargetInfo(origTarget, target, targetScore));
+
+                if (DEBUG) {
+                    Log.d(TAG, " => " + target.toString() + " score=" + targetScore
+                            + " base=" + target.getScore()
+                            + " lastScore=" + lastScore
+                            + " parentScore=" + parentScore
+                            + " lateFee=" + mLateFee);
+                }
+
+                lastScore = targetScore;
             }
 
-            // TODO: Maintain sort by ranking scores.
+            mLateFee *= 0.95f;
 
             notifyDataSetChanged();
         }
 
+        private void insertServiceTarget(ChooserTargetInfo chooserTargetInfo) {
+            final float newScore = chooserTargetInfo.getModifiedScore();
+            for (int i = 0, N = mServiceTargets.size(); i < N; i++) {
+                final ChooserTargetInfo serviceTarget = mServiceTargets.get(i);
+                if (newScore > serviceTarget.getModifiedScore()) {
+                    mServiceTargets.add(i, chooserTargetInfo);
+                    return;
+                }
+            }
+            mServiceTargets.add(chooserTargetInfo);
+        }
+
         private void pruneServiceTargets() {
             if (DEBUG) Log.d(TAG, "pruneServiceTargets");
             for (int i = mServiceTargets.size() - 1; i >= 0; i--) {
@@ -795,6 +849,14 @@
         }
     }
 
+    static class BaseChooserTargetComparator implements Comparator<ChooserTarget> {
+        @Override
+        public int compare(ChooserTarget lhs, ChooserTarget rhs) {
+            // Descending order
+            return (int) Math.signum(lhs.getScore() - rhs.getScore());
+        }
+    }
+
     class ChooserRowAdapter extends BaseAdapter {
         private ChooserListAdapter mChooserListAdapter;
         private final LayoutInflater mLayoutInflater;
diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
index 8cd9bab..7f54f50 100644
--- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
+++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
@@ -93,9 +93,11 @@
      * Shows the session for the currently active service. Used to start a new session from system
      * affordances.
      *
+     * @param args the bundle to pass as arguments to the voice interaction session
      * @param showCallback callback to be notified when the session was shown
      */
-    void showSessionForActiveService(IVoiceInteractionSessionShowCallback showCallback);
+    void showSessionForActiveService(in Bundle args,
+            IVoiceInteractionSessionShowCallback showCallback);
 
     /**
      * Hides the session from the active service, if it is showing.
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index e5ff51c..7bc18f3 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -1142,6 +1142,10 @@
             return mFilterLastUsed && mLastChosenPosition >= 0;
         }
 
+        public float getScore(DisplayResolveInfo target) {
+            return mResolverComparator.getScore(target.getResolvedComponentName());
+        }
+
         private void rebuildList() {
             List<ResolvedComponentInfo> currentResolveList = null;
 
diff --git a/core/java/com/android/internal/app/ResolverComparator.java b/core/java/com/android/internal/app/ResolverComparator.java
index 585cdf1..31556e2 100644
--- a/core/java/com/android/internal/app/ResolverComparator.java
+++ b/core/java/com/android/internal/app/ResolverComparator.java
@@ -191,6 +191,14 @@
         return mCollator.compare(sa.toString().trim(), sb.toString().trim());
     }
 
+    public float getScore(ComponentName name) {
+        final ScoredTarget target = mScoredTargets.get(name);
+        if (target != null) {
+            return target.score;
+        }
+        return 0;
+    }
+
     static class ScoredTarget {
         public final ComponentInfo componentInfo;
         public float score;
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index f421189..84c2417 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -6037,19 +6037,19 @@
                 }
             }
 
-            boolean readExcessivePowerFromParcelLocked(Parcel in) {
+            void readExcessivePowerFromParcelLocked(Parcel in) {
                 final int N = in.readInt();
                 if (N == 0) {
                     mExcessivePower = null;
-                    return true;
+                    return;
                 }
 
                 if (N > 10000) {
-                    Slog.w(TAG, "File corrupt: too many excessive power entries " + N);
-                    return false;
+                    throw new ParcelFormatException(
+                            "File corrupt: too many excessive power entries " + N);
                 }
 
-                mExcessivePower = new ArrayList<ExcessivePower>();
+                mExcessivePower = new ArrayList<>();
                 for (int i=0; i<N; i++) {
                     ExcessivePower ew = new ExcessivePower();
                     ew.type = in.readInt();
@@ -6057,7 +6057,6 @@
                     ew.usedTime = in.readLong();
                     mExcessivePower.add(ew);
                 }
-                return true;
             }
 
             void writeToParcelLocked(Parcel out) {
@@ -8893,6 +8892,7 @@
             readSummaryFromParcel(in);
         } catch(Exception e) {
             Slog.e("BatteryStats", "Error reading battery statistics", e);
+            resetAllStatsLocked();
         }
 
         mEndPlatformVersion = Build.ID;
@@ -8915,7 +8915,7 @@
         return 0;
     }
 
-    void readHistory(Parcel in, boolean andOldHistory) {
+    void readHistory(Parcel in, boolean andOldHistory) throws ParcelFormatException {
         final long historyBaseTime = in.readLong();
 
         mHistoryBuffer.setDataSize(0);
@@ -8928,6 +8928,9 @@
         for (int i=0; i<numTags; i++) {
             int idx = in.readInt();
             String str = in.readString();
+            if (str == null) {
+                throw new ParcelFormatException("null history tag string");
+            }
             int uid = in.readInt();
             HistoryTag tag = new HistoryTag();
             tag.string = str;
@@ -8943,9 +8946,11 @@
         int bufSize = in.readInt();
         int curPos = in.dataPosition();
         if (bufSize >= (MAX_MAX_HISTORY_BUFFER*3)) {
-            Slog.w(TAG, "File corrupt: history data buffer too large " + bufSize);
+            throw new ParcelFormatException("File corrupt: history data buffer too large " +
+                    bufSize);
         } else if ((bufSize&~3) != bufSize) {
-            Slog.w(TAG, "File corrupt: history data buffer not aligned " + bufSize);
+            throw new ParcelFormatException("File corrupt: history data buffer not aligned " +
+                    bufSize);
         } else {
             if (DEBUG_HISTORY) Slog.i(TAG, "***************** READING NEW HISTORY: " + bufSize
                     + " bytes at " + curPos);
@@ -9041,7 +9046,7 @@
         out.writeLong(-1);
     }
 
-    public void readSummaryFromParcel(Parcel in) {
+    public void readSummaryFromParcel(Parcel in) throws ParcelFormatException {
         final int version = in.readInt();
         if (version != VERSION) {
             Slog.w("BatteryStats", "readFromParcel: version got " + version
@@ -9149,8 +9154,7 @@
 
         int NKW = in.readInt();
         if (NKW > 10000) {
-            Slog.w(TAG, "File corrupt: too many kernel wake locks " + NKW);
-            return;
+            throw new ParcelFormatException("File corrupt: too many kernel wake locks " + NKW);
         }
         for (int ikw = 0; ikw < NKW; ikw++) {
             if (in.readInt() != 0) {
@@ -9161,8 +9165,7 @@
 
         int NWR = in.readInt();
         if (NWR > 10000) {
-            Slog.w(TAG, "File corrupt: too many wakeup reasons " + NWR);
-            return;
+            throw new ParcelFormatException("File corrupt: too many wakeup reasons " + NWR);
         }
         for (int iwr = 0; iwr < NWR; iwr++) {
             if (in.readInt() != 0) {
@@ -9173,13 +9176,12 @@
 
         sNumSpeedSteps = in.readInt();
         if (sNumSpeedSteps < 0 || sNumSpeedSteps > 100) {
-            throw new BadParcelableException("Bad speed steps in data: " + sNumSpeedSteps);
+            throw new ParcelFormatException("Bad speed steps in data: " + sNumSpeedSteps);
         }
 
         final int NU = in.readInt();
         if (NU > 10000) {
-            Slog.w(TAG, "File corrupt: too many uids " + NU);
-            return;
+            throw new ParcelFormatException("File corrupt: too many uids " + NU);
         }
         for (int iu = 0; iu < NU; iu++) {
             int uid = in.readInt();
@@ -9262,8 +9264,7 @@
 
             int NSB = in.readInt();
             if (NSB > 100) {
-                Slog.w(TAG, "File corrupt: too many speed bins " + NSB);
-                return;
+                throw new ParcelFormatException("File corrupt: too many speed bins " + NSB);
             }
 
             u.mSpeedBins = new LongSamplingCounter[NSB];
@@ -9276,8 +9277,7 @@
 
             int NW = in.readInt();
             if (NW > 100) {
-                Slog.w(TAG, "File corrupt: too many wake locks " + NW);
-                return;
+                throw new ParcelFormatException("File corrupt: too many wake locks " + NW);
             }
             for (int iw = 0; iw < NW; iw++) {
                 String wlName = in.readString();
@@ -9286,8 +9286,7 @@
 
             int NS = in.readInt();
             if (NS > 100) {
-                Slog.w(TAG, "File corrupt: too many syncs " + NS);
-                return;
+                throw new ParcelFormatException("File corrupt: too many syncs " + NS);
             }
             for (int is = 0; is < NS; is++) {
                 String name = in.readString();
@@ -9296,8 +9295,7 @@
 
             int NJ = in.readInt();
             if (NJ > 100) {
-                Slog.w(TAG, "File corrupt: too many job timers " + NJ);
-                return;
+                throw new ParcelFormatException("File corrupt: too many job timers " + NJ);
             }
             for (int ij = 0; ij < NJ; ij++) {
                 String name = in.readString();
@@ -9306,8 +9304,7 @@
 
             int NP = in.readInt();
             if (NP > 1000) {
-                Slog.w(TAG, "File corrupt: too many sensors " + NP);
-                return;
+                throw new ParcelFormatException("File corrupt: too many sensors " + NP);
             }
             for (int is = 0; is < NP; is++) {
                 int seNumber = in.readInt();
@@ -9319,8 +9316,7 @@
 
             NP = in.readInt();
             if (NP > 1000) {
-                Slog.w(TAG, "File corrupt: too many processes " + NP);
-                return;
+                throw new ParcelFormatException("File corrupt: too many processes " + NP);
             }
             for (int ip = 0; ip < NP; ip++) {
                 String procName = in.readString();
@@ -9331,23 +9327,19 @@
                 p.mStarts = p.mLoadedStarts = in.readInt();
                 p.mNumCrashes = p.mLoadedNumCrashes = in.readInt();
                 p.mNumAnrs = p.mLoadedNumAnrs = in.readInt();
-                if (!p.readExcessivePowerFromParcelLocked(in)) {
-                    return;
-                }
+                p.readExcessivePowerFromParcelLocked(in);
             }
 
             NP = in.readInt();
             if (NP > 10000) {
-                Slog.w(TAG, "File corrupt: too many packages " + NP);
-                return;
+                throw new ParcelFormatException("File corrupt: too many packages " + NP);
             }
             for (int ip = 0; ip < NP; ip++) {
                 String pkgName = in.readString();
                 Uid.Pkg p = u.getPackageStatsLocked(pkgName);
                 final int NWA = in.readInt();
                 if (NWA > 1000) {
-                    Slog.w(TAG, "File corrupt: too many wakeup alarms " + NWA);
-                    return;
+                    throw new ParcelFormatException("File corrupt: too many wakeup alarms " + NWA);
                 }
                 p.mWakeupAlarms.clear();
                 for (int iwa=0; iwa<NWA; iwa++) {
@@ -9358,8 +9350,7 @@
                 }
                 NS = in.readInt();
                 if (NS > 1000) {
-                    Slog.w(TAG, "File corrupt: too many services " + NS);
-                    return;
+                    throw new ParcelFormatException("File corrupt: too many services " + NS);
                 }
                 for (int is = 0; is < NS; is++) {
                     String servName = in.readString();
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 0abd200..016d010 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -4419,7 +4419,7 @@
             Bundle args = new Bundle();
             args.putInt(Intent.EXTRA_ASSIST_INPUT_DEVICE_ID, event.getDeviceId());
             return ((SearchManager)getContext().getSystemService(Context.SEARCH_SERVICE))
-                    .launchAssistAction(null, UserHandle.myUserId(), args);
+                    .launchLegacyAssist(null, UserHandle.myUserId(), args);
         }
         return result;
     }
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 0732add..c1645c3 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -16,9 +16,11 @@
 
 package com.android.internal.statusbar;
 
-import com.android.internal.statusbar.StatusBarIcon;
+import android.os.Bundle;
 import android.service.notification.StatusBarNotification;
 
+import com.android.internal.statusbar.StatusBarIcon;
+
 /** @hide */
 oneway interface IStatusBar
 {
@@ -66,5 +68,6 @@
     void appTransitionStarting(long statusBarAnimationsStartTime, long statusBarAnimationsDuration);
 
     void showAssistDisclosure();
+    void startAssist(in Bundle args);
 }
 
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 63bfbe5..7db2cc9 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -16,11 +16,13 @@
 
 package com.android.internal.statusbar;
 
+import android.os.Bundle;
+import android.service.notification.StatusBarNotification;
+
 import com.android.internal.statusbar.IStatusBar;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.internal.statusbar.StatusBarIconList;
 import com.android.internal.statusbar.NotificationVisibility;
-import android.service.notification.StatusBarNotification;
 
 /** @hide */
 interface IStatusBarService
@@ -86,4 +88,6 @@
      *        bar caused by this app transition in millis
      */
     void appTransitionStarting(long statusBarAnimationsStartTime, long statusBarAnimationsDuration);
+
+    void startAssist(in Bundle args);
 }
diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
index 1071e12..fc9a1a5 100644
--- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java
+++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
@@ -231,7 +231,7 @@
                 mInitialTouchY = mLastTouchY = y;
                 mActivePointerId = ev.getPointerId(0);
                 final boolean hitView = findChildUnder(mInitialTouchX, mInitialTouchY) != null;
-                handled = (!hitView && mOnDismissedListener != null) || mCollapsibleHeight > 0;
+                handled = mOnDismissedListener != null || mCollapsibleHeight > 0;
                 mIsDragging = hitView && handled;
                 abortAnimation();
             }
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 8c868c9..0617b4f 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -590,6 +590,18 @@
         android:description="@string/permdesc_callPhone"
         android:protectionLevel="dangerous" />
 
+    <!-- Allows an application to access the IMS call service: making and
+         modifying a call
+        <p>Protection level: signature|system
+        @hide
+    -->
+    <permission android:name="android.permission.ACCESS_IMS_CALL_SERVICE"
+        android:permissionGroup="android.permission-group.PHONE"
+        android:permissionFlags="hide"
+        android:label="@string/permlab_accessImsCallService"
+        android:description="@string/permdesc_accessImsCallService"
+        android:protectionLevel="signature|system" />
+
     <!-- Allows an application to read the user's call log.
          <p class="note"><strong>Note:</strong> If your app uses the
          {@link #READ_CONTACTS} permission and <em>both</em> your <a
@@ -785,31 +797,31 @@
          to handle the respond-via-message action during incoming calls.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SEND_RESPOND_VIA_MESSAGE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to filter carrier specific sms.
          @hide -->
     <permission android:name="android.permission.CARRIER_FILTER_SMS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to receive emergency cell broadcast messages,
          to record or display them to the user.
          <p>Not for use by third-party applications.
          @hide Pending API council approval -->
     <permission android:name="android.permission.RECEIVE_EMERGENCY_BROADCAST"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to monitor incoming Bluetooth MAP messages, to record
          or perform processing on them. -->
     <!-- @hide -->
     <permission android:name="android.permission.RECEIVE_BLUETOOTH_MAP"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to execute contacts directory search.
          This should only be used by ContactsProvider.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.BIND_DIRECTORY_SEARCH"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- =============================================================== -->
     <!-- Permissions for setting the device alarm                        -->
@@ -857,19 +869,19 @@
     <!-- @SystemApi Allows an application to install a location provider into the Location Manager.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows HDMI-CEC service to access device and configuration files.
          This should only be used by HDMI-CEC service.
     -->
     <permission android:name="android.permission.HDMI_CEC"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to use location features in hardware,
          such as the geofencing api.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.LOCATION_HARDWARE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
     <uses-permission android:name="android.permission.LOCATION_HARDWARE"/>
 
     <!-- @SystemApi Allows an application to create mock location providers for testing.
@@ -919,20 +931,20 @@
     <!-- @SystemApi @hide Allows applications to read Wi-Fi credential.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.READ_WIFI_CREDENTIAL"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allow system apps to receive broadcast
          when a wifi network credential is changed.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to modify any wifi configuration, even if created
      by another application. Once reconfigured the original creator cannot make any further
      modifications.
      <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.OVERRIDE_WIFI_CONFIG"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide -->
     <permission android:name="android.permission.ACCESS_WIMAX_STATE"
@@ -950,7 +962,7 @@
         @hide
     -->
     <permission android:name="android.permission.SCORE_NETWORKS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ======================================= -->
     <!-- Permissions for short range, peripheral networks -->
@@ -1002,22 +1014,22 @@
     <!-- @SystemApi Allows an internal user to use privileged ConnectivityManager APIs.
          @hide -->
     <permission android:name="android.permission.CONNECTIVITY_INTERNAL"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi
          @hide -->
     <permission android:name="android.permission.RECEIVE_DATA_ACTIVITY_CHANGE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows access to the loop radio (Android@Home mesh network) device.
          @hide -->
     <permission android:name="android.permission.LOOP_RADIO"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows sending and receiving handover transfer status from Wifi and Bluetooth
          @hide -->
     <permission android:name="android.permission.NFC_HANDOVER_STATUS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ================================== -->
     <!-- Permissions for accessing accounts -->
@@ -1105,13 +1117,13 @@
     <!-- @SystemApi Allows an application to manage preferences and permissions for USB devices
          @hide -->
     <permission android:name="android.permission.MANAGE_USB"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to access the MTP USB kernel driver.
          For use only by the device side MTP implementation.
          @hide -->
     <permission android:name="android.permission.ACCESS_MTP"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows access to hardware peripherals.  Intended only for hardware testing.
          <p>Not for use by third-party applications.
@@ -1123,7 +1135,7 @@
     <!-- @SystemApi Allows access to FM
          @hide This is not a third-party API (intended for system apps).-->
     <permission android:name="android.permission.ACCESS_FM_RADIO"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows access to configure network interfaces, configure/use IPSec, etc.
          @hide -->
@@ -1139,19 +1151,19 @@
          @hide This should only be used by OEM's TvInputService's.
     -->
     <permission android:name="android.permission.TV_INPUT_HARDWARE"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows to capture a frame of TV input hardware such as
          built-in tuners and HDMI-in's.
          @hide <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.CAPTURE_TV_INPUT"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide Allows TvInputService to access DVB device.
    <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DVB_DEVICE"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide Allows enabling/disabling OEM unlock
    <p>Not for use by third-party applications. -->
@@ -1166,7 +1178,7 @@
     <!-- @hide Allows system update service to notify device owner about pending updates.
    <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.NOTIFY_PENDING_SYSTEM_UPDATE"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- =========================================== -->
     <!-- Permissions associated with camera and image capture -->
@@ -1177,12 +1189,12 @@
          a camera is in use by an application.
          @hide -->
     <permission android:name="android.permission.CAMERA_DISABLE_TRANSMIT_LED"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows sending the camera service notifications about system-wide events.
         @hide -->
     <permission android:name="android.permission.CAMERA_SEND_SYSTEM_EVENTS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- =========================================== -->
     <!-- Permissions associated with telephony state -->
@@ -1193,17 +1205,17 @@
          Does not include placing calls.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.MODIFY_PHONE_STATE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows read only access to precise phone state.
          @hide Pending API council approval -->
     <permission android:name="android.permission.READ_PRECISE_PHONE_STATE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows read access to privileged phone state.
          @hide Used internally. -->
     <permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Protects the ability to register any PhoneAccount with
          PhoneAccount#CAPABILITY_SIM_SUBSCRIPTION. This capability indicates that the PhoneAccount
@@ -1265,7 +1277,7 @@
     <!-- @SystemApi Allows an application to write to internal media storage
          @hide  -->
     <permission android:name="android.permission.WRITE_MEDIA_STORAGE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to manage access to documents, usually as part
          of a document picker.
@@ -1309,31 +1321,31 @@
          @hide
          @SystemApi -->
     <permission android:name="android.permission.REAL_GET_TASKS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to start a task from a ActivityManager#RecentTaskInfo.
          @hide -->
     <permission android:name="android.permission.START_TASKS_FROM_RECENTS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to call APIs that allow it to do interactions
          across the users on the device, using singleton services and
          user-targeted broadcasts.  This permission is not available to
          third party applications. -->
     <permission android:name="android.permission.INTERACT_ACROSS_USERS"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @hide Fuller form of {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
          that removes restrictions on where broadcasts can be sent and allows other
          types of interactions. -->
     <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
-        android:protectionLevel="signature" />
+        android:protectionLevel="signature|installer" />
 
     <!-- @SystemApi @hide Allows an application to call APIs that allow it to query and manage
          users on the device. This permission is not available to
          third party applications. -->
     <permission android:name="android.permission.MANAGE_USERS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide Allows an application to set the profile owners and the device owner.
          This permission is not available to third party applications.-->
@@ -1362,7 +1374,7 @@
 
     <!-- @SystemApi @hide Allows an application to create/manage/remove stacks -->
     <permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to start any activity, regardless of permission
          protection or exported state.
@@ -1389,7 +1401,7 @@
     <!-- @SystemApi @hide Allows an application to retrieve a package's importance.
          This permission is not available to third party applications. -->
     <permission android:name="android.permission.GET_PACKAGE_IMPORTANCE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ================================== -->
     <!-- Permissions affecting the display of other applications  -->
@@ -1404,7 +1416,7 @@
     <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
         android:label="@string/permlab_systemAlertWindow"
         android:description="@string/permdesc_systemAlertWindow"
-        android:protectionLevel="signature|system|appop|pre23" />
+        android:protectionLevel="signature|preinstalled|appop|pre23" />
 
     <!-- ================================== -->
     <!-- Permissions affecting the system wallpaper -->
@@ -1435,7 +1447,7 @@
     <!-- @SystemApi Allows applications to set the system time.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_TIME"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows applications to set the system time zone.
          <p>Protection level: normal
@@ -1520,7 +1532,7 @@
     <!-- @SystemApi Allows an application to modify the current configuration, such
          as locale. -->
     <permission android:name="android.permission.CHANGE_CONFIGURATION"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- Allows an application to read or write the system settings. -->
     <permission android:name="android.permission.WRITE_SETTINGS"
@@ -1531,23 +1543,23 @@
     <!-- @SystemApi Allows an application to modify the Google service map.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.WRITE_GSERVICES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to call
         {@link android.app.ActivityManager#forceStopPackage}.
         @hide -->
     <permission android:name="android.permission.FORCE_STOP_PACKAGES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to retrieve the content of the active window
          An active window is the window that has fired an accessibility event. -->
     <permission android:name="android.permission.RETRIEVE_WINDOW_CONTENT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Modify the global animation scaling factor.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_ANIMATION_SCALE"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @deprecated This functionality will be removed in the future; please do
          not use. Allow an application to make its activities persistent. -->
@@ -1637,7 +1649,7 @@
     <!-- @SystemApi Allows applications to write the apn settings.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.WRITE_APN_SETTINGS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows applications to change network connectivity state.
          <p>Protection level: normal
@@ -1652,24 +1664,24 @@
          <p>Protection level: system|signature
     -->
     <permission android:name="android.permission.CLEAR_APP_CACHE"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to use any media decoder when decoding for playback
          @hide -->
     <permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to install and/or uninstall CA certificates on
          behalf of the user.
          @hide -->
     <permission android:name="android.permission.MANAGE_CA_CERTIFICATES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to do certain operations needed for
          interacting with the recovery (system update) system.
          @hide -->
     <permission android:name="android.permission.RECOVERY"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows the system to bind to an application's task services
          @hide -->
@@ -1683,7 +1695,7 @@
          it off to the various individual installer components
          @hide -->
     <permission android:name="android.permission.UPDATE_CONFIG"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ========================================= -->
     <!-- Permissions for special development tools -->
@@ -1693,40 +1705,40 @@
     <!-- @SystemApi Allows an application to read or write the secure system settings.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.WRITE_SECURE_SETTINGS"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to retrieve state dump information from system services.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DUMP"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to read the low-level system log files.
     <p>Not for use by third-party applications, because
     Log entries can contain the user's private information. -->
     <permission android:name="android.permission.READ_LOGS"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Configure an application for debugging.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_DEBUG_APP"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to set the maximum number of (not needed)
          application processes that can be running.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_PROCESS_LIMIT"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to control whether activities are immediately
          finished when put in the background.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_ALWAYS_FINISH"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allow an application to request that a signal be sent to all persistent processes.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- ==================================== -->
     <!-- Private permissions                  -->
@@ -1742,7 +1754,7 @@
          and its icons.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.STATUS_BAR"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to be the status bar.  Currently used only by SystemUI.apk
     @hide -->
@@ -1760,16 +1772,16 @@
     <!-- @SystemApi Allows an application to update device statistics.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.UPDATE_DEVICE_STATS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to collect battery statistics -->
     <permission android:name="android.permission.GET_APP_OPS_STATS"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to update application operation statistics. Not for
          use by third party apps. @hide -->
     <permission android:name="android.permission.UPDATE_APP_OPS_STATS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged|installer" />
 
     <!-- @SystemApi Allows an application to open windows that are for use by parts
          of the system user interface.
@@ -1831,7 +1843,7 @@
          to put the higher-level system there into a shutdown state.
          @hide -->
     <permission android:name="android.permission.SHUTDOWN"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to tell the activity manager to temporarily
          stop application switches, putting it into a special mode that
@@ -1839,7 +1851,7 @@
          critical UI such as the home screen.
          @hide -->
     <permission android:name="android.permission.STOP_APP_SWITCHES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to retrieve private information about
          the current top activity, such as any assist context it can provide.
@@ -1916,7 +1928,7 @@
          <p>Protection level: system|signature
     -->
     <permission android:name="android.permission.BIND_WALLPAPER"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link android.service.voice.VoiceInteractionService},
          to ensure that only the system can bind to it.
@@ -1929,7 +1941,7 @@
          to ensure that only the system can interact with it.
          @hide <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.MANAGE_VOICE_KEYPHRASES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link com.android.media.remotedisplay.RemoteDisplayProvider},
          to ensure that only the system can bind to it.
@@ -1942,13 +1954,13 @@
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_TV_INPUT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to modify parental controls
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.MODIFY_PARENTAL_CONTROLS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link android.media.routing.MediaRouteService}
          to ensure that only the system can interact with it.
@@ -1967,7 +1979,7 @@
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.MANAGE_DEVICE_ADMINS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows low-level access to setting the orientation (actually
          rotation) of the screen.
@@ -2009,43 +2021,43 @@
     <!-- @SystemApi Allows an application to install packages.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.INSTALL_PACKAGES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to clear user data.
          <p>Not for use by third-party applications
          @hide
     -->
     <permission android:name="android.permission.CLEAR_APP_USER_DATA"
-        android:protectionLevel="signature" />
+        android:protectionLevel="signature|installer" />
 
     <!-- @SystemApi Allows an application to delete cache files.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DELETE_CACHE_FILES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to delete packages.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DELETE_PACKAGES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to move location of installed package.
          @hide -->
     <permission android:name="android.permission.MOVE_PACKAGE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to change whether an application component (other than its own) is
          enabled or not.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide Allows an application to grant or revoke specific permissions. -->
     <permission android:name="android.permission.GRANT_REVOKE_PERMISSIONS"
-        android:protectionLevel="signature" />
+        android:protectionLevel="signature|installer" />
 
     <!-- @hide Allows an application to observe permission changes. -->
     <permission android:name="android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to use SurfaceFlinger's low level features.
          <p>Not for use by third-party applications.
@@ -2058,7 +2070,7 @@
          get access to the frame buffer data.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.READ_FRAME_BUFFER"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to use InputFlinger's low level features.
          @hide -->
@@ -2081,40 +2093,40 @@
          <p>Not for use by third-party applications.</p>
          @hide -->
     <permission android:name="android.permission.CONTROL_VPN"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
     <uses-permission android:name="android.permission.CONTROL_VPN" />
 
     <!-- @SystemApi Allows an application to capture audio output.
          <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to capture audio for hotword detection.
          <p>Not for use by third-party applications.</p>
          @hide -->
     <permission android:name="android.permission.CAPTURE_AUDIO_HOTWORD"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to modify audio routing and override policy decisions.
          <p>Not for use by third-party applications.</p>
          @hide -->
     <permission android:name="android.permission.MODIFY_AUDIO_ROUTING"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to capture video output.
          <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to capture secure video output.
          <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to know what content is playing and control its playback.
          <p>Not for use by third-party applications due to privacy of media consumption</p>  -->
     <permission android:name="android.permission.MEDIA_CONTENT_CONTROL"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Required to be able to disable the device (very dangerous!).
          <p>Not for use by third-party applications.
@@ -2126,7 +2138,7 @@
     <!-- @SystemApi Required to be able to reboot the device.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.REBOOT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
    <!-- @SystemApi Allows low-level access to power management.
         <p>Not for use by third-party applications.
@@ -2138,7 +2150,7 @@
    <!-- Allows access to the PowerManager.userActivity function.
    <p>Not for use by third-party applications. @hide @SystemApi -->
     <permission android:name="android.permission.USER_ACTIVITY"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
    <!-- @hide Allows low-level access to tun tap driver -->
     <permission android:name="android.permission.NET_TUNNELING"
@@ -2173,45 +2185,45 @@
     <!-- @SystemApi Allows an application to broadcast privileged networking requests.
          <p>Not for use by third-party applications. @hide -->
     <permission android:name="android.permission.BROADCAST_NETWORK_PRIVILEGED"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Not for use by third-party applications. -->
     <permission android:name="android.permission.MASTER_CLEAR"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to call any phone number, including emergency
          numbers, without going through the Dialer user interface for the user
          to confirm the call being placed.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CALL_PRIVILEGED"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to perform CDMA OTA provisioning @hide -->
     <permission android:name="android.permission.PERFORM_CDMA_PROVISIONING"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to perform SIM Activation @hide -->
     <permission android:name="android.permission.PERFORM_SIM_ACTIVATION"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows enabling/disabling location update notifications from
          the radio.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CONTROL_LOCATION_UPDATES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows read/write access to the "properties" table in the checkin
          database, to change values that get uploaded.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to collect component usage
          statistics
          <p>Declaring the permission implies intention to use the API and the user of the
          device can grant permission through the Settings application. -->
     <permission android:name="android.permission.PACKAGE_USAGE_STATS"
-        android:protectionLevel="signature|system|development|appop" />
+        android:protectionLevel="signature|privileged|development|appop" />
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
 
     <!-- @hide Allows an application to change the app idle state of an app.
@@ -2227,13 +2239,13 @@
 
     <!-- @SystemApi Allows an application to collect battery statistics -->
     <permission android:name="android.permission.BATTERY_STATS"
-        android:protectionLevel="signature|system|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to control the backup and restore process.
     <p>Not for use by third-party applications.
          @hide pending API council -->
     <permission android:name="android.permission.BACKUP"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows a package to launch the secure full-backup confirmation UI.
          ONLY the system process may hold this permission.
@@ -2244,7 +2256,7 @@
     <!-- @SystemApi Must be required by a {@link android.widget.RemoteViewsService},
          to ensure that only the system can bind to it. -->
     <permission android:name="android.permission.BIND_REMOTEVIEWS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to tell the AppWidget service which application
          can access AppWidget's data.  The normal user flow is that a user
@@ -2253,19 +2265,19 @@
          An application that has this permission should honor that contract.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.BIND_APPWIDGET"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Private permission, to restrict who can bring up a dialog to add a new
          keyguard widget
          @hide -->
     <permission android:name="android.permission.BIND_KEYGUARD_APPWIDGET"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Internal permission allowing an application to query/set which
          applications can bind AppWidgets.
          @hide -->
     <permission android:name="android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows applications to change the background data setting.
     <p>Not for use by third-party applications.
@@ -2282,7 +2294,7 @@
          it is used by applications to protect themselves from everyone else
          besides global search. -->
     <permission android:name="android.permission.GLOBAL_SEARCH"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Internal permission protecting access to the global search
          system: ensures that only the system can access the provider
@@ -2297,28 +2309,28 @@
     <!-- @SystemApi Internal permission to allows an application to read indexable data.
         @hide -->
     <permission android:name="android.permission.READ_SEARCH_INDEXABLES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows applications to set a live wallpaper.
          @hide XXX Change to signature once the picker is moved to its
          own apk as Ghod Intended. -->
     <permission android:name="android.permission.SET_WALLPAPER_COMPONENT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows applications to read dream settings and dream state.
          @hide -->
     <permission android:name="android.permission.READ_DREAM_STATE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows applications to write dream settings, and start or stop dreaming.
          @hide -->
     <permission android:name="android.permission.WRITE_DREAM_STATE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allow an application to read and write the cache partition.
          @hide -->
     <permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by default container service so that only
          the system can bind to it and use it to copy
@@ -2332,12 +2344,12 @@
         @hide
     -->
     <permission android:name="android.permission.CRYPT_KEEPER"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to read historical network usage for
          specific networks and applications. @hide -->
     <permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to manage network policies (such as warning and disable
          limits) and to define application-specific rules. @hide -->
@@ -2348,7 +2360,7 @@
          by system services like download manager and media server. Not for use by
          third party apps. @hide -->
     <permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- C2DM permission.
          @hide Used internally.
@@ -2361,7 +2373,7 @@
          trust it to verify packages.
     -->
     <permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by package verifier receiver, to ensure that only the
          system can interact with it.
@@ -2374,7 +2386,7 @@
          PackageManager will trust it to verify intent filters.
     -->
     <permission android:name="android.permission.INTENT_FILTER_VERIFICATION_AGENT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by intent filter verifier receiver, to ensure that only the
          system can interact with it.
@@ -2386,7 +2398,7 @@
     <!-- @SystemApi Allows applications to access serial ports via the SerialManager.
          @hide -->
     <permission android:name="android.permission.SERIAL_PORT"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows the holder to access content providers from outside an ApplicationThread.
          This permission is enforced by the ActivityManagerService on the corresponding APIs,
@@ -2401,13 +2413,13 @@
          OTA reboot *not* occur while the lock is held.
          @hide -->
     <permission android:name="android.permission.UPDATE_LOCK"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to read the current set of notifications, including
          any metadata and intents attached.
          @hide -->
     <permission android:name="android.permission.ACCESS_NOTIFICATIONS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Marker permission for applications that wish to access notification policy.
          <p>Protection level: normal
@@ -2439,12 +2451,12 @@
     <!-- @SystemApi Allows an application to provide a trust agent.
          @hide For security reasons, this is a platform-only permission. -->
     <permission android:name="android.permission.PROVIDE_TRUST_AGENT"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to launch the trust agent settings activity.
         @hide -->
     <permission android:name="android.permission.LAUNCH_TRUST_AGENT_SETTINGS"
-        android:protectionLevel="signatureOrSystem" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Must be required by an {@link
         android.service.trust.TrustAgentService},
@@ -2487,17 +2499,17 @@
          carrier setup application to enforce that this permission is required
          @hide This is not a third-party API (intended for OEMs and system apps). -->
     <permission android:name="android.permission.INVOKE_CARRIER_SETUP"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to listen for network condition observations.
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.ACCESS_NETWORK_CONDITIONS"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to provision and access DRM certificates
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.ACCESS_DRM_CERTIFICATES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Api Allows an application to manage media projection sessions.
          @hide This is not a third-party API (intended for system apps). -->
@@ -2514,11 +2526,11 @@
     <!-- @SystemApi Allows an application to remove DRM certificates
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.REMOVE_DRM_CERTIFICATES"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @deprecated Use {@link android.Manifest.permission#BIND_CARRIER_SERVICES} instead -->
     <permission android:name="android.permission.BIND_CARRIER_MESSAGING_SERVICE"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to interact with the currently active
          {@link android.service.voice.VoiceInteractionService}.
@@ -2540,7 +2552,7 @@
     <permission android:name="android.permission.BIND_CARRIER_SERVICES"
         android:label="@string/permlab_bindCarrierServices"
         android:description="@string/permdesc_bindCarrierServices"
-        android:protectionLevel="signature|system" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to query whether DO_NOT_ASK_CREDENTIALS_ON_BOOT
          flag is set.
@@ -2552,18 +2564,18 @@
         <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.KILL_UID"
-                android:protectionLevel="signature" />
+                android:protectionLevel="signature|installer" />
 
     <!-- Allows applications to act as network scorers. @hide @SystemApi-->
     <permission android:name="android.permission.LOCAL_MAC_ADDRESS"
-                android:protectionLevel="signatureOrSystem" />
+                android:protectionLevel="signature|privileged" />
 
     <!-- Allows the Nfc stack to dispatch Nfc messages to applications. Applications
         can use this permission to ensure incoming Nfc messages are from the Nfc stack
         and not simulated by another application.
         @hide -->
     <permission android:name="android.permission.DISPATCH_NFC_MESSAGE"
-                android:protectionLevel="signatureOrSystem" />
+                android:protectionLevel="signature|privileged" />
 
     <!-- The system process is explicitly the only one allowed to launch the
          confirmation UI for full backup/restore -->
diff --git a/core/res/res/drawable/perm_group_storage.xml b/core/res/res/drawable/perm_group_storage.xml
index 62131da..74f16d8 100644
--- a/core/res/res/drawable/perm_group_storage.xml
+++ b/core/res/res/drawable/perm_group_storage.xml
@@ -16,12 +16,9 @@
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
     <path
-        android:fillColor="#FF000000"
-        android:pathData="M0,0h48v48H0z"/>
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M27,9c2.2,0 4,-1.8 4,-4s-1.8,-4 -4,-4 -4,1.8 -4,4 1.8,4 4,4zm-7.2,27.8l1.9,-8.8 4.3,4v12h4V28.9l-4.1,-4.1 1.2,-6C29.7,22 33.6,24 38,24v-4c-3.7,0 -6.9,-2 -8.7,-4.9l-1.9,-3.2c-0.7,-1.2 -2,-1.9 -3.4,-1.9 -0.5,0 -1,0.1 -1.5,0.3L12,14.6V24h4v-6.7l3.5,-1.4L16.4,32l-9.8,-1.9 -0.8,3.9s14,2.7 14,2.8z"/>
+        android:pathData="M20,8H8c-2.2,0 -4,1.8 -4,4l0,24c0,2.2 1.8,4 4,4h32c2.2,0 4,-1.8 4,-4V16c0,-2.2 -1.8,-4 -4,-4H24L20,8z"
+        android:fillColor="#FFFFFF"/>
 </vector>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 3fd0360..525ca34 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Laat die program toe om die flitslig te beheer."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"skakel foonnommers direk"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Laat die program toe om telefoonnommers sonder jou tussentrede te bel. Dit kan tot onverwagte heffings of oproepe lei. Let daarop dat dit nie die program toelaat om noodnommers te bel nie. Kwaadwillige programme kan jou geld kos deur oproepe sonder jou bevestiging te maak."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lees foonstatus en identiteit"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Laat die program toe om toegang tot die foonfunksies van die toestel te verkry. Hierdie toestemming laat die program toe om te bepaal wat die foonnommer en toestel-IDs is, of die oproep aan die gang is, en die afgeleë nommer wat deur \'n oproep verbind word."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"verhoed dat tablet slaap"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 386f055..533ef91 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"የብልጭታ ብርሃኑን ለመቆጣጠር ለመተግበሪያው ይፈቅዳሉ።"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"በቀጥታ ስልክ ቁጥሮች ደውል"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"መተግበሪያው ያላንተ ጣልቃ ገብነት የስልክ ቁጥሮች ላይ እንዲደውል ይፈቅድለታል። ይህ ያልተጠበቁ ክፍያዎችን ወይም ጥሪዎችን ሊያስከትል ይችላል። ይህ መተግበሪያው የድንገተኛ ስልክ ቁጥሮችን እንዲደውል እንደማይፈቅድለት ልብ በል። ተንኮል አዘል መተግበሪያዎች ያላንተ ማረጋገጫ ጥሪዎችን በማድረግ ገንዘብ ሊያስወጡህ ይችላሉ።"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"የስልክ ሁኔታና ማንነት አንብብ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"መተግበሪያው የመሳሪያውን የስልክ ባህሪያት ላይ እንዲደርስ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው የስልክ ቁጥሩን እና የመሳሪያውን መታወቂያዎች፣ ጥሪ የነቃ እንደሆነ፣ እና በጥሪ የተገናኘውን የሩቅ ቁጥር እንዲወስን ይፈቅድለታል።"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ጡባዊ ከማንቀላፋት ተከላከል"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 908901c..c7cbc71 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -358,6 +358,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"للسماح للتطبيق بالتحكم في الضوء الوامض."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"اتصال مباشر بأرقام الهواتف"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"للسماح للتطبيق بطلب أرقام هاتفية بدون تدخل منك. وقد يؤدي ذلك إلى تحمل رسوم غير متوقعة أو إجراء مكالمات غير متوقعة. ومن الجدير بالذكر أن ذلك لا يتيح للتطبيق الاتصال بأرقام الطوارئ. وقد تؤدي التطبيقات الضارة إلى تحملك تكاليف مالية من خلال إجراء مكالمات بدون موافقة منك."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"قراءة حالة الهاتف والهوية"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"للسماح للتطبيق بالدخول إلى ميزات الهاتف في الجهاز. ويتيح هذا الإذن للتطبيق تحديد رقم الهاتف ومعرّفات الجهاز، وما إذا كانت هناك مكالمة نشطة والرقم البعيد الذي تم الاتصال به في المكالمة."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"منع الجهاز اللوحي من الدخول في وضع السكون"</string>
@@ -533,7 +537,7 @@
     <item msgid="7897544654242874543">"عمل"</item>
     <item msgid="1103601433382158155">"فاكس العمل"</item>
     <item msgid="1735177144948329370">"فاكس المنزل"</item>
-    <item msgid="603878674477207394">"جهاز النداء"</item>
+    <item msgid="603878674477207394">"جهاز نداء"</item>
     <item msgid="1650824275177931637">"آخر"</item>
     <item msgid="9192514806975898961">"مخصص"</item>
   </string-array>
@@ -576,7 +580,7 @@
     <string name="phoneTypeWork" msgid="8863939667059911633">"عمل"</string>
     <string name="phoneTypeFaxWork" msgid="3517792160008890912">"فاكس العمل"</string>
     <string name="phoneTypeFaxHome" msgid="2067265972322971467">"فاكس المنزل"</string>
-    <string name="phoneTypePager" msgid="7582359955394921732">"جهاز النداء"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"جهاز نداء"</string>
     <string name="phoneTypeOther" msgid="1544425847868765990">"آخر"</string>
     <string name="phoneTypeCallback" msgid="2712175203065678206">"هاتف معاودة الاتصال"</string>
     <string name="phoneTypeCar" msgid="8738360689616716982">"هاتف سيارة"</string>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
index f0651c8..c21a4d8 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Tətbiqə siqnal işığı na nəzarət etməyə imkan verir."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"telefon nömrələrinə birbaşa zəng edir"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Tətbiqə Sizin müdaxiləniz olmadan telefon zəngləri etməyə imkan verir. Zərərli tətbiqlər Sizdən xəbərsiz şəkildə müxtəlif zənglər edərək, Sizə maddi ziyan vura bilər. Qeyd: Bu, tətbiqlərə təcili nömrələrə zəng etməyə icazə vermir."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefon statusunu və identifikasiyanı oxuyur"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tətbiqə cihazın telefon funksiyalarına giriş icazəsi verir. Belə icazəli tətbiq bu telefonun nömrəsini və cihaz İD\'ni, zəngin aktiv olub-olmadığını və zəng edilən nömrəni müəyyən edə bilər."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"planşetin yuxu rejiminin qarşısını almaq"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 5f02d36..46316ad 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Разрешава на приложението да контролира фенерчето."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"директно обаждане до телефонни номера"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Разрешава на приложението да се обажда без ваша намеса до телефонни номера, което може да доведе до неочаквано таксуване или обаждания. Обърнете внимание, че това не му позволява да извършва обаждания до спешните служби. Злонамерените приложения могат да ви въвлекат в разходи, като извършват обаждания без потвърждение от ваша страна."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"четене на състоянието и идентификационните данни на телефона"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Разрешава на приложението достъп до телефонните функции на устройството. Това разрешение позволява на приложението да определя телефонния номер и идентификационния номер на устройството, дали се води разговор и отдалечения номер, до който е установена връзка с обаждането."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"предотвратяване на спящия режим на таблета"</string>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index 3a96342..5113414 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"অ্যাপ্লিকেশানকে টর্চলাইট নিয়ন্ত্রণ করতে দেয়৷"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"সরাসরি ফোন নম্বরগুলিতে কল করে"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"অ্যাপ্লিকেশানটিকে আপনার হস্তক্ষেপ ছাড়াই ফোন নম্বরগুলিতে কল করতে মঞ্জুর করে৷ এটি অপ্রত্যাশিত পরিমাণ খরচা বা কলের কারণ হতে পারে৷ মনে রাখবেন, এটি অ্যাপ্লিকেশানটির দ্বারা জরুরি নম্বরগুলিতে কল করাকে অনুমতি দেয় না৷ ক্ষতিকারক অ্যাপ্লিকেশানগুলি আপনার সম্মতি ছাড়াই কল করার ফলে আপনাকে অহেতুক অর্থ প্রদান করতে হতে পারে৷"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ফোনের স্থিতি এবং পরিচয় পড়ুন"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"অ্যাপ্লিকেশানটিকে ডিভাইসের ফোন বৈশিষ্ট্যগুলিকে অ্যাক্সেস করার অনুমতি দেয়৷ এই অনুমতিটি অ্যাপ্লিকেশানটিকে একটি কল সক্রিয় থাকা অবস্থায় এবং দূরবর্তী নম্বর একটি কল দ্বারা সংযুক্ত থাকাকালীনও ফোন নম্বর এবং ডিভাইসের IDগুলি নির্ধারণ করার অনুমতি দেয়৷"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ঘুমানো থেকে ট্যাবলেটকে প্রতিরোধ করে"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 79e8472..c75459a 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permet que l\'aplicació controli la llanterna."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"trucar directament a números de telèfon"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permet que l\'aplicació truqui a números de telèfon sense la teva intervenció. Aquesta acció pot produir càrrecs o trucades inesperades. Tingues en compte que això no permet que l\'aplicació truqui a números d\'emergència. Les aplicacions malicioses poden fer trucades sense la teva confirmació, cosa que et pot fer gastar diners."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"veure l\'estat i la identitat del telèfon"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permet que l\'aplicació accedeixi a les funcions de telèfon del dispositiu. Aquest permís permet que l\'aplicació determini el número de telèfon i els identificadors del dispositiu, si hi ha una trucada activa i el número remot connectat amb una trucada."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evita que la tauleta entri en mode de repòs"</string>
@@ -502,7 +506,7 @@
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Fa un seguiment del nombre de contrasenyes incorrectes que s\'han escrit en intentar desbloquejar la pantalla i bloqueja el televisor o n\'esborra totes les dades de l\'usuari si s\'escriuen massa contrasenyes incorrectes."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Fa un seguiment del nombre de contrasenyes incorrectes que s\'han escrit en intentar desbloquejar la pantalla i bloqueja el telèfon o n\'esborra totes les dades de l\'usuari si s\'escriuen massa contrasenyes incorrectes."</string>
     <string name="policylab_resetPassword" msgid="4934707632423915395">"Canviar el bloqueig de pantalla"</string>
-    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Canviar el bloqueig de pantalla"</string>
+    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Canvia el bloqueig de pantalla"</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Bloquejar la pantalla"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Controla com i quan es bloqueja la pantalla."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Esborrar totes les dades"</string>
@@ -1456,7 +1460,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"S\'ha fixat l\'aplicació. En aquest dispositiu no es permet anul·lar-ne la fixació."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"Pantalla fixada"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"Fixació de la pantalla anul·lada"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Demana el codi PIN per anul·lar"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Sol·licita el codi PIN per anul·lar"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Sol·licita el patró de desbloqueig per anul·lar"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Demana la contrasenya per anul·lar"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"L\'administrador ho ha instal·lat"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 7153aff..ba4de89 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Umožňuje aplikaci ovládat baterku."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"přímé volání na telefonní čísla"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Umožňuje aplikaci volat na telefonní čísla bez vašeho přičinění. Může mít za následek neočekávané poplatky nebo hovory. Toto oprávnění neumožňuje aplikaci volat na tísňová čísla. Škodlivé aplikace vás mohou připravit o peníze uskutečňováním hovorů bez vašeho svolení."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"čtení stavu a identity telefonu"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Umožňuje aplikaci získat přístup k telefonním funkcím zařízení. Toto oprávnění umožňuje aplikaci zjistit telefonní číslo telefonu, identifikační čísla zařízení, zda zrovna probíhá hovor, a vzdálené číslo, ke kterému je hovor připojen."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"bránění přechodu tabletu do režimu spánku"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index c59bf3b..3aa9db4 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Tillader, at appen kan kontrollere lommelygten."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ringe direkte op til telefonnumre"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Tillader, at appen kan ringe til telefonnumre uden din indgriben. Dette kan resultere i uventede opkrævninger eller opkald. Bemærk, at appen med denne tilladelse ikke kan ringe til nødopkaldsnumre. Skadelige apps kan koste dig penge ved at foretage opkald uden din bekræftelse."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"læse telefonens status og identitet"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tillader, at appen kan få adgang til telefonfunktionerne på enheden. Med denne tilladelse kan appen fastslå telefonnummeret og enheds-id\'erne, hvorvidt et opkald er aktivt samt det eksterne nummer, der oprettes forbindelse til via et opkald."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"afholde tabletcomputeren fra at gå i dvale"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 8927df6..cc4eb09 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Ermöglicht der App, die Lichtanzeige zu steuern"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"Telefonnummern direkt anrufen"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Ermöglicht der App, ohne Ihr Eingreifen Telefonnummern zu wählen. Dies kann zu unerwarteten Kosten und Anrufen führen. Beachten Sie, dass die App keine Notrufnummern wählen kann. Schädliche Apps verursachen möglicherweise Kosten, indem sie Anrufe ohne Ihre Bestätigung tätigen."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"Telefonstatus und Identität abrufen"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Ermöglicht der App, auf die Telefonfunktionen des Geräts zuzugreifen. Die Berechtigung erlaubt der App, die Telefonnummer und Geräte-IDs zu erfassen, festzustellen, ob gerade ein Gespräch geführt wird, und die Rufnummer verbundener Anrufer zu lesen."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"Ruhezustand des Tablets deaktivieren"</string>
@@ -1067,7 +1071,7 @@
     <string name="ext_media_unmounting_notification_message" msgid="4182843895023357756">"Nicht entfernen"</string>
     <string name="ext_media_init_action" msgid="7952885510091978278">"Einrichten"</string>
     <string name="ext_media_unmount_action" msgid="1121883233103278199">"Auswerfen"</string>
-    <string name="ext_media_browse_action" msgid="8322172381028546087">"Entdecken"</string>
+    <string name="ext_media_browse_action" msgid="8322172381028546087">"Ansehen"</string>
     <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> fehlt"</string>
     <string name="ext_media_missing_message" msgid="5761133583368750174">"Dieses Medium wieder einlegen"</string>
     <string name="ext_media_move_specific_title" msgid="1471100343872375842">"<xliff:g id="NAME">%s</xliff:g> wird verschoben"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 97a8670..7f5d2c3 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Επιτρέπει στην εφαρμογή τον έλεγχο του φακού."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"απευθείας κλήση τηλεφωνικών αριθμών"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Επιτρέπει στην εφαρμογή την κλήση αριθμών τηλεφώνου χωρίς δική σας παρέμβαση. Αυτό μπορεί να προκαλέσει μη αναμενόμενες χρεώσεις ή κλήσεις. Έχετε υπόψη ότι δεν επιτρέπεται στην εφαρμογή η κλήση αριθμών έκτακτης ανάγκης. Οι κακόβουλες εφαρμογές ενδέχεται να σας κοστίσουν χρήματα, πραγματοποιώντας κλήσεις χωρίς την έγκρισή σας."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ανάγνωση κατάστασης και ταυτότητας τηλεφώνου"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Επιτρέπει στην εφαρμογή την πρόσβαση στις λειτουργίες τηλεφώνου της συσκευής. Αυτή η άδεια δίνει τη δυνατότητα στην εφαρμογή να καθορίζει τον αριθμό τηλεφώνου και τα αναγνωριστικά συσκευών, εάν μια κλήση είναι ενεργή, καθώς και τον απομακρυσμένο αριθμό που συνδέεται από μια κλήση."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"παρεμπόδιση μετάβασης του tablet σε κατάσταση αδράνειας"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 85cdd44..55270f7 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Allows the app to control the flashlight."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"directly call phone numbers"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"read phone status and identity"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active and the remote number connected by a call."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"prevent tablet from sleeping"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 85cdd44..55270f7 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Allows the app to control the flashlight."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"directly call phone numbers"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"read phone status and identity"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active and the remote number connected by a call."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"prevent tablet from sleeping"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 85cdd44..55270f7 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Allows the app to control the flashlight."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"directly call phone numbers"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"read phone status and identity"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active and the remote number connected by a call."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"prevent tablet from sleeping"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index d1e438c..a8f3fbb 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permite que la aplicación controle la función de linterna."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"llamar directamente a números de teléfono"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite que la aplicación haga llamadas a números de teléfono sin intervención del usuario, lo que puede dar lugar a llamadas o cargos inesperados. Ten en cuenta que las aplicaciones no pueden usar este servicio para realizar llamadas a números de emergencia, pero las aplicaciones malintencionadas pueden causarte gastos imprevistos al realizar llamadas sin tu confirmación."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"leer la identidad y el estado del dispositivo"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. La aplicación puede utilizar este permiso para descubrir identificadores de dispositivos y números de teléfono, para saber si una llamada está activa y para conocer el número remoto con el que se ha establecido conexión mediante una llamada."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evitar que el tablet entre en estado de inactividad"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 93c9d0f..f1e7490 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permite que la aplicación controle la función de linterna."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"llamar directamente a números de teléfono"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite que la aplicación haga llamadas sin intervención del usuario, lo que puede dar lugar a llamadas o cargos inesperados. Ten en cuenta que las aplicaciones no pueden usar este servicio para realizar llamadas a números de emergencia, pero las aplicaciones malintencionadas pueden causarte gastos imprevistos al realizar llamadas sin tu confirmación."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"consultar la identidad y el estado del teléfono"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. La aplicación puede utilizar este permiso para descubrir identificadores de dispositivos y números de teléfono, para saber si una llamada está activa y para conocer el número remoto con el que se ha establecido conexión mediante una llamada."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"impedir que el tablet entre en modo de suspensión"</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index e6a9fa4..132379b 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Võimaldab rakendusel juhtida taskulampi."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"helista otse telefoninumbritele"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Võimaldab rakendusel teie sekkumiseta telefoninumbritele helistada. See võib põhjustada ootamatuid tasusid või telefonikõnesid. Pange tähele, et see ei luba rakendusel helistada hädaabinumbritele. Pahatahtlikud rakendused võivad teile kulusid tekitada, tehes telefonikõnesid teie kinnituseta."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lugege telefoni olekut ja identiteeti"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Annab rakendusele juurdepääsu seadme telefonifunktsioonidele. See luba võimaldab rakendusel määrata telefoninumbri ja seadme ID-d ning kontrollida, kas kõne on aktiivne ja kaugnumber on kõne kaudu telefoniga ühendatud."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"tahvelarvuti uinumise vältimine"</string>
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml
index 052b423..e482f57 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu-rES/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Linterna kontrolatzea baimentzen die aplikazioei."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"deitu zuzenean telefono-zenbakietara"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Telefono-zenbakietara zuk esku hartu gabe deitzeko baimena ematen die aplikazioei. Horrela, ustekabeko gastuak edo deiak eragin daitezke. Aplikazio gaiztoek erabil dezakete zuk berretsi gabeko deiak eginda gastuak eragiteko."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefonoaren egoera eta identitatea irakurtzea"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Gailuaren telefono-eginbideak atzitzeko baimena ematen die aplikazioei. Baimen horrek aplikazioari telefono-zenbakia eta gailu IDak zein diren, deirik aktibo dagoen eta deia zer zenbakirekin konektatuta dagoen zehazteko baimena ematen die aplikazioei."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"eragotzi tableta inaktibo ezartzea"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 2f0b7a4..a01a5ba 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"‏به برنامه اجازه می‎دهد تا چراغ قوه را کنترل کند."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"تماس مستقیم با شماره تلفن‌ها"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"به برنامه اجازه می‌دهد بدون دخالت شما با شماره‌های تلفن تماس بگیرد. این ممکن است باعث ایجاد هزینه یا تماس‌های پیش‌بینی نشده شود. توجه داشته باشید که این به برنامه اجازه نمی‌دهد به برقراری تماس‌های اضطراری بپردازد. برنامه‌های مخرب ممکن است با برقراری تماس بدون تأیید شما هزینه‌هایی را برای شما ایجاد کنند."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"خواندن وضعیت تلفن و شناسه"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"به برنامه اجازه می‌دهد به ویژگی‌های تلفن دستگاه شما دسترسی پیدا کند. این مجوز به برنامه اجازه می‌دهد شماره تلفن و شناسه‌های دستگاه، فعال بودن یک تماس و شماره راه دوری که با یک تماس متصل شده است را مشخص کند."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ممانعت از به خواب رفتن رایانهٔ لوحی"</string>
@@ -1521,7 +1525,7 @@
     <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"گزینه‌های بیشتر"</string>
     <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"بستن منوی سرریز"</string>
     <plurals name="selected_count" formatted="false" msgid="7187339492915744615">
-      <item quantity="one">‏<xliff:g id="COUNT_1">%1$d</xliff:g> مورد انتخاب شد</item>
-      <item quantity="other">‏<xliff:g id="COUNT_1">%1$d</xliff:g> مورد انتخاب شد</item>
+      <item quantity="one">‏<xliff:g id="COUNT_1">%1$d</xliff:g> انتخاب شد</item>
+      <item quantity="other">‏<xliff:g id="COUNT_1">%1$d</xliff:g> انتخاب شد</item>
     </plurals>
 </resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index c0b24b5..5379e9f 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Antaa sovelluksen hallita taskulamppua."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"soittaa puhelinnumeroihin suoraan"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Antaa sovelluksen soittaa puhelinnumeroihin kysymättä sinulta. Tämä voi aiheuttaa odottamattomia kuluja tai puheluita. Huomaa, että tämä ei anna sovellukselle lupaa soittaa hätänumeroihin. Haitalliset sovellukset voivat aiheuttaa sinulle kuluja soittamalla puheluita ilman lupaa."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lue puhelimen tila ja identiteetti"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Antaa sovelluksen käyttää laitteen puhelinominaisuuksia. Sovellus voi määrittää puhelinnumeron ja laitteen tunnuksen, puhelun tilan sekä soitetun numeron."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"estä tablet-laitetta menemästä virransäästötilaan"</string>
@@ -504,7 +508,7 @@
     <string name="policylab_resetPassword" msgid="4934707632423915395">"Muuta näytön lukitus"</string>
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"Muuttaa näytön lukituksen"</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Lukita ruudun"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Hallinnoida, milloin ja miten ruutu lukittuu."</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"Hallinnoi, milloin ja miten ruutu lukittuu."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Pyyhkiä kaikki tiedot"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Tyhjennä tablet-laitteen tiedot varoituksetta palauttamalla tehdasasetukset."</string>
     <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Palauta tehdasasetukset ja poista television tiedot ilman varoitusta."</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index b41a675..4cce540 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permet à l\'application de gérer la lampe de poche."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"appeler directement des numéros de téléphone"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permet à l\'application d\'appeler des numéros de téléphone sans votre intervention. Cette autorisation peut entraîner des frais ou des appels imprévus et ne permet pas à l\'application d\'appeler des numéros d\'urgence. Des applications malveillantes peuvent générer des frais en passant des appels sans votre consentement."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"voir l\'état et l\'identité du téléphone"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permet à l\'application d\'accéder aux fonctionnalités téléphoniques de l\'appareil. Cette autorisation permet à l\'application de déterminer le numéro de téléphone et les identifiants de l\'appareil, si un appel est actif et le numéro distant connecté par un appel."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"empêcher la tablette de passer en mode veille"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 47bc5a2..0979393 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permet à l\'application de contrôler la lampe de poche."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"appeler directement les numéros de téléphone"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permet à l\'application d\'appeler des numéros de téléphone sans votre intervention. Cette autorisation peut entraîner des frais ou des appels imprévus et ne permet pas à l\'application d\'appeler des numéros d\'urgence. Les applications malveillantes peuvent générer des frais en passant des appels sans votre consentement."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"Voir l\'état et l\'identité du téléphone"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permet à l\'application d\'accéder aux fonctionnalités téléphoniques de l\'appareil. Cette autorisation permet à l\'application de déterminer le numéro de téléphone et les identifiants de l\'appareil, si un appel est actif et le numéro distant connecté par un appel."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"empêcher la tablette de passer en mode veille"</string>
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml
index b18c301..f6340ef 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl-rES/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permite á aplicación controlar a luz do flash."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"chamar directamente aos números de teléfono"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite á aplicación chamar a números de teléfono sen a túa intervención. Esta acción pode implicar chamadas ou custos inesperados. Ten en conta que isto non permite á aplicación chamar a números de emerxencia. É posible que aplicacións maliciosas che custen diñeiro debido á realización de chamadas sen a túa confirmación."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ler o estado e a identidade do teléfono"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite á aplicación acceder ás funcións de teléfono do dispositivo. Con este permiso a aplicación pode determinar o número de teléfono e os ID do dispositivo, se unha chamada está activa e o número remoto conectado mediante unha chamada."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evitar que o tablet entre en modo de inactividade"</string>
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml
index eddefb8..c5f1f3c 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"એપ્લિકેશનને ફ્લેશલાઇટને નિયંત્રિત કરવાની મંજૂરી આપે છે."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"સીધા જ ફોન નંબર્સ પર કૉલ કરો"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"એપ્લિકેશનને તમારા હસ્તક્ષેપ વિના ફોન નંબર્સ પર કૉલ કરવાની મંજૂરી આપે છે. આ અનપેક્ષિત શુલ્ક અથવા કૉલ્સમાં પરિણમી શકે છે. નોંધો કે આ એપ્લિકેશનને કટોકટીના નંબર્સ પર કૉલ કરવાની મંજૂરી આપતું નથી. દુર્ભાવનાપૂર્ણ એપ્લિકેશન્સ તમારી પુષ્ટિ વિના કૉલ્સ કરીને તમારા પૈસા ખર્ચ કરી શકે છે."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ફોન સ્થિતિ અને ઓળખ વાંચો"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"એપ્લિકેશનને ફોન સુવિધાઓને ઍક્સેસ કરવાની મંજૂરી આપે છે. આ પરવાનગી એપ્લિકેશનને ફોન નંબર અને ઉપકરણ ID, કૉલ સક્રિય છે અને કોઈ કૉલ દ્વારા કનેક્ટ થયેલ રિમોટ નંબર નિર્ધારિત કરવાની મંજૂરી આપે છે."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ટેબ્લેટને નિષ્ક્રિય થતું અટકાવો"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 1a54e51..97ba032 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ऐप्स को फ़्लैशलाइट नियंत्रित करने देता है."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"फ़ोन नंबर पर सीधे कॉल करें"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"ऐप्स  को आपके हस्‍तक्षेप के बिना फ़ोन नंबर पर कॉल करने देता है. इसके परिणाम अप्रत्‍याशित शुल्‍क या कॉल हो सकते हैं. ध्यान दें कि यह ऐप्स  को आपातकालीन नंबर पर कॉल नहीं करने देता. दुर्भावनापूर्ण ऐप्स  आपकी पुष्टि के बिना कॉल करके आपका धन व्‍यय कर सकते हैं."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"फ़ोन की स्‍थिति और पहचान पढ़ें"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ऐप्स  को डिवाइस की फ़ोन सुविधाओं तक पहुंचने देता है. यह अनुमति ऐप्स  को फ़ोन नंबर और डिवाइस आईडी, कॉल सक्रिय है या नहीं, और कॉल द्वारा कनेक्ट किया गया दूरस्‍थ नंबर निर्धारित करने देती है."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"टेबलेट को निष्‍क्रिय होने से रोकें"</string>
@@ -505,10 +509,10 @@
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"स्‍क्रीन लॉक को बदलें."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"स्‍क्रीन लॉक करें"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"नियंत्रित करें कि स्‍क्रीन कैसे और कब लॉक हो."</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"सभी डेटा मिटाएं"</string>
-    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"फ़ैक्टरी डेटा रीसेट करके, बिना चेतावनी के टेबलेट का डेटा मिटाएं."</string>
-    <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"फ़ैक्‍टरी डेटा रीसेट करके चेतावनी दिए बिना टीवी का डेटा मिटा दें."</string>
-    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"फ़ैक्‍टरी डेटा रीसेट करके, बिना चेतावनी के फ़ोन का डेटा मिटाएं."</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"सभी डेटा हटाएं"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"फ़ैक्टरी डेटा रीसेट करके, बिना चेतावनी के टेबलेट का डेटा हटाएं."</string>
+    <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"फ़ैक्‍टरी डेटा रीसेट करके चेतावनी दिए बिना टीवी का डेटा हटाएं."</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"फ़ैक्‍टरी डेटा रीसेट करके, बिना चेतावनी के फ़ोन का डेटा हटाएं."</string>
     <string name="policylab_wipeData_secondaryUser" msgid="8362863289455531813">"उपयोगकर्ता डेटा मिटाएं"</string>
     <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="6336255514635308054">"इस टैबलेट पर मौजूद इस उपयोगकर्ता का डेटा बिना चेतावनी के मिटा दें."</string>
     <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2086473496848351810">"इस टीवी पर मौजूद इस उपयोगकर्ता का डेटा बिना चेतावनी के मिटा दें."</string>
@@ -937,7 +941,7 @@
     <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"मौन रिंगटोन सेट है"</string>
     <string name="volume_call" msgid="3941680041282788711">"कॉल के दौरान वॉल्‍यूम"</string>
     <string name="volume_bluetooth_call" msgid="2002891926351151534">"ब्लूटूथ कॉल के दौरान वॉल्‍यूम"</string>
-    <string name="volume_alarm" msgid="1985191616042689100">"अलार्म आवाज़"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"अलार्म वॉल्‍यूम"</string>
     <string name="volume_notification" msgid="2422265656744276715">"नोटिफिकेशन वॉल्‍यूम"</string>
     <string name="volume_unknown" msgid="1400219669770445902">"आवाज़"</string>
     <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"ब्लूटूथ वॉल्‍यूम"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index f45cd20..d91170a 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -355,6 +355,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Aplikaciji omogućuje upravljanje svjetiljkom."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"izravno pozivanje telefonskog broja"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Aplikaciji omogućuje pozivanje telefonskih brojeva bez vašeg sudjelovanja. To može dovesti do neočekivanih troškova ili poziva. Uzmite u obzir da se aplikaciji time ne omogućuje pozivanje brojeva u nuždi. Zlonamjerne aplikacije mogu vam uzrokovati dodatne troškove postavljanjem poziva bez vašeg odobrenja."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"čitanje statusa i identiteta telefona"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Aplikaciji omogućuje pristup telefonskim značajkama uređaja. Ta dozvola aplikaciji omogućuje utvrđivanje telefonskog broja i ID-ova uređaja, je li poziv aktivan te udaljeni broj koji je povezan pozivom."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"spriječi mirovanje tabletnog uređaja"</string>
@@ -367,7 +371,7 @@
     <string name="permdesc_transmitIr" product="tablet" msgid="5358308854306529170">"Aplikaciji omogućuje upotrebu infracrvenog odašiljača tableta."</string>
     <string name="permdesc_transmitIr" product="tv" msgid="3926790828514867101">"Aplikaciji omogućuje upotrebu infracrvenih odašiljača televizora."</string>
     <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"Aplikaciji omogućuje upotrebu infracrvenog odašiljača telefona."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"postavi pozadinsku sliku"</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"postavi pozadinu"</string>
     <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Aplikaciji omogućuje postavljanje pozadinskih slika sustava."</string>
     <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"prilagođavanje veličine pozadinske slike"</string>
     <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Aplikaciji omogućuje postavljanje savjeta za veličinu sistemske pozadinske slike."</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 3f8e2dd..0005a756 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Lehetővé teszi az alkalmazás számára a vaku vezérlését."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"telefonszámok közvetlen hívása"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Lehetővé teszi az alkalmazás számára, hogy az Ön jóváhagyása nélkül hívjon fel telefonszámokat. Ennek eredményeként váratlan terhelésekkel vagy telefonhívásokkal találkozhat. Vegye figyelembe, hogy ez nem teszi lehetővé segélyhívó számok hívását az alkalmazás számára. A rosszindulatú alkalmazások az Ön jóváhagyása nélkül kezdeményezhetnek hívásokat, így költségek merülhetnek fel."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefonállapot és azonosító olvasása"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen az eszköz telefonálási funkcióihoz. Az engedéllyel rendelkező alkalmazás meghatározhatja a telefonszámot és eszközazonosítókat, hogy egy hívás aktív-e, valamint híváskor a másik fél telefonszámát."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"táblagép alvás üzemmódjának megakadályozása"</string>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index a6f0533..6402e31 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Թույլ է տալիս հավելվածին կառավարել լապտերը:"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ուղղակիորեն զանգել հեռախոսահամարներին"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Թույլ է տալիս հավելվածին զանգել հեռախոսահամարներին առանց ձեր միջամտության: Սա կարող է հանգեցնել անկանխատեսելի գանձումների կամ զանգերի: Նկատի ունեցեք, որ սա թույլ չի տալիս հավելվածին զանգել արտակարգ իրավիճակների համարներին: Վնասարար հավելվածները կարող են ձեր հաշվից զանգեր կատարել` առանց ձեր հաստատման:"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"կարդալ հեռախոսի կարգավիճակը և ինքնությունը"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Թույլ է տալիս հավելվածին օգտագործել սարքի հեռախոսային գործիքները: Այս թույլտվությունը հավելվածին հնարավորություն է տալիս որոշել հեռախոսահամարը և սարքի ID-ները, արդյոք զանգը ակտիվ է և միացված զանգի հեռակա հեռախոսահամարը:"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"զերծ պահել գրասալիկը քնելուց"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 68f220e..0c8b3ff 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Mengizinkan apl mengontrol lampu kilat."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"panggil nomor telepon secara langsung"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Memungkinkan aplikasi menghubungi nomor telepon tanpa campur tangan Anda. Izin ini dapat mengakibatkan biaya atau panggilan tak terduga. Perhatikan bahwa izin ini tidak memungkinkan aplikasi menghubungi nomor darurat. Aplikasi berbahaya dapat menyebabkan Anda dikenakan biaya dengan melakukan panggilan tanpa konfirmasi Anda."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"baca identitas dan status ponsel"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Memungkinkan aplikasi mengakses fitur telepon perangkat. Izin ini memungkinkan aplikasi menentukan nomor telepon dan ID perangkat, apakah suatu panggilan aktif atau tidak, dan nomor jarak jauh yang tersambung oleh sebuah panggilan."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"cegah tablet dari tidur"</string>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index 990a1e5..d90ad2b 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Leyfir forriti að stjórna vasaljósinu."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"hringja beint í símanúmer"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Leyfir forriti að hringja í símanúmer án íhlutunar notanda. Þetta getur haft í för með sér óumbeðin gjöld og símtöl. Athugaðu að þetta leyfir forritinu ekki að hringja í neyðarnúmer. Spilliforrit geta stofnað til kostnaðar fyrir þig með því að hringja símtöl án þinnar heimildar."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lesa stöðu símans og auðkenni"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Leyfir forriti að fá aðgang að símaeiginleikum tækisins. Þessi heimild gerir forritinu kleift að komast að símanúmeri og auðkennum tækisins, hvort símtal er í gangi og símanúmeri viðmælanda í símtali."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"koma í veg fyrir að spjaldtölvan fari í biðstöðu"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index d0cd1f7..2305414 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Consente all\'applicazione di controllare il flash."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"chiamata diretta n. telefono"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Consente all\'applicazione di chiamare numeri di telefono senza il tuo intervento. Ciò può comportare chiamate o addebiti imprevisti. Tieni presente che ciò non consente all\'applicazione di chiamare numeri di emergenza. Applicazioni dannose potrebbero generare dei costi effettuando chiamate senza la tua conferma."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lettura stato e identità telefono"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Consente all\'applicazione di accedere alle funzioni telefoniche del dispositivo. Questa autorizzazione consente all\'applicazione di determinare il numero di telefono e gli ID dei dispositivi, se una chiamata è attiva e il numero remoto connesso da una chiamata."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"disattivazione stand-by del tablet"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 6a66ec4..734f7e7 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"מאפשר לאפליקציה לשלוט בפנס."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"התקשר ישירות למספרי טלפון"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"מאפשר לאפליקציה להתקשר למספרי טלפון ללא התערבותך. פעולה זו עשויה לגרום לשיחות או לחיובים לא צפויים. שים לב שהדבר לא מאפשר לאפליקציה להתקשר למספרי חירום. אפליקציות זדוניות עשויות לגרום לעלויות על ידי ביצוע שיחות ללא התערבותך."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"קריאת הסטטוס והזהות של הטלפון"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"מאפשר לאפליקציה לגשת לתכונות הטלפון של המכשיר. אישור זה מתיר לאפליקציה לגלות את מספר הטלפון ואת זיהויי המכשיר, האם שיחה פעילה ואת המספר המרוחק המחובר באמצעות שיחה."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"מנע מהטאבלט לעבור למצב שינה"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 9c7b757..c305d31 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ライトの制御をアプリに許可します。"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"電話番号発信"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"電話番号への自動発信をアプリに許可します。これにより、予期せぬ発信や料金が発生する可能性があります。なお、緊急通報番号への発信は許可されません。悪意のあるアプリが確認なしで発信し、料金が発生する恐れがあります。"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"端末のステータスとIDの読み取り"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"端末の電話機能へのアクセスをアプリに許可します。これにより、電話番号、端末ID、通話中かどうか、通話相手の電話番号をアプリから特定できるようになります。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"タブレットのスリープを無効化"</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 7e19de7..5cf8566 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"აპს შეეძლება, მართოს განათება."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"პირდაპირი დარეკვა ტელეფონის ნომრებზე"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"აპს შეეძლება დარეკოს ტელეფონის ნომრებზე თქვენი ჩარევის გარეშე. ამან შესაძლოა გამოიწვიოს თქვენს სატელეფონი ქვითარზე მოულოდნელი ხარჯებისა და ზარების გაჩენა. გაითვალისწინეთ, რომ აპს გადაუდებელი დახმარების ნომრებზე დარეკვა არ შეუძლია. მავნე აპებს შეეძლება თქვენი დადასტურების გარეშე ზარების განხორციელება და შესაბამისი საფასურის გადახდაც მოგიწევთ."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ტელეფონის სტატუსისა და იდენტობის წაკითხვა"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"აპს შეეძლება ჰქონდეს წვდომა მოწყობილობის სატელეფონო ფუნქციებზე. აპმა მსგავსი უფლებით შეძლებს დაადგინოს ტელეფონის ნომერი, მისი სერიული გამოცემა, აქტიური ზარი, დაკავშირებული ნომერი და მსგავსი."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"დაიცავით ტაბლეტი დაძინებისგან"</string>
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml
index 26ece26..0fc111b 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk-rKZ/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Қолданбаға қалта шамын басқаруға рұқсат береді."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"нөмірлерге тікелей телефон шалу"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Қолданбаға сіздің қатысуыңызсыз қоңырау шалу мүмкіндігін береді. Нәтижесінде қосымша төлем немесе күтпеген қоңырау алуыңыз мүмкін. Есіңізде болсын, қолданба төтенше байланыстарға қоңырау шала алмайды. Залалды қолданбалар сіздің рұқсатыңызсыз қоңыраулар шалып, күтпеген төлемдерге себеп болуы мүмкін."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"телефон күйін оқу немесе анықтау"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Қолданбаға құрылғыдағы телефон функцияларына кіру мүмкіндігін береді. Бұл рұқсат қолданбаға телефон нөмірі, құрылғы жеке анықтағышы, қоңырау белсенділігі және сол қоңырауға байланысты қашықтағы нөмірді анықтау мүмкіндігін береді."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"планшетті ұйқыдан бөгеу"</string>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index cbf85e7..0d95bee 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ឲ្យ​កម្មវិធី​ពិនិត្យ​ពិល។"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ហៅ​លេខ​ទូរស័ព្ទ​ដោយ​ផ្ទាល់"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"ឲ្យ​កម្មវិធី​ហៅ​លេខ​ទូរស័ព្ទ​ដោយ​គ្មាន​សកម្មភាព​របស់​អ្នក។​ វា​អាច​កាត់​លុយ​ ឬ​ហៅ​ដោយ​មិន​រំពឹង​ទុក។ ចំណាំ​ថា​ វា​មិន​អនុញ្ញាត​ឲ្យ​កម្មវិធី​ហៅ​លេខ​ពេល​អាសន្ន​ទេ។ កម្មវិធី​ព្យាបាទ​អាច​កាត់​លុយ​របស់​អ្នក​ ដោយ​ធ្វើការ​ហៅ​ដោយ​គ្មាន​ការ​បញ្ជាក់​របស់​អ្នក។"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"អាន​ស្ថានភាព និង​អត្តសញ្ញាណ​ទូរស័ព្ទ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ឲ្យ​កម្មវិធី​ចូល​ដំណើរការ​លក្ខណៈ​ទូរស័ព្ទ​នៃ​ឧបករណ៍។ សិទ្ធិ​នេះ​​ឲ្យ​កម្មវិធី​កំណត់​លេខ​ទូរស័ព្ទ និង​លេខ​សម្គាល់​ឧបករណ៍ ថា​តើ​ការ​ហៅ​សកម្ម និង​លេខ​ពី​ចម្ងាយ​បាន​ភ្ជាប់​ដោយ​ការ​ហៅ។"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ការពារ​​កុំព្យូទ័រ​បន្ទះ​មិន​ឲ្យ​ដេក"</string>
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml
index 83548e38..57dd3cc 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ಫ್ಲ್ಯಾಶ್‌ಲೈಟ್ ನಿಯಂತ್ರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಗೆ ನೇರವಾಗಿ ಕರೆ ಮಾಡಿ"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"ನಿಮ್ಮ ಹಸ್ತಕ್ಷೇಪ ಇಲ್ಲದೆಯೇ ಫೋನ್‍ ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಅನಿರೀಕ್ಷಿತ ಶುಲ್ಕಗಳು ಅಥವಾ ಕರೆಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ತುರ್ತು ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆಮಾಡಲು ಈ ಅಪ್ಲಿಕೇಶನ್‍ ಅನುಮತಿಸುವುದಿಲ್ಲ ಎಂಬುದು ಗಮನದಲ್ಲಿರಲಿ. ದುರುದ್ದೇಶಪೂರಿತ ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳು ನಿಮ್ಮ ಖಾತರಿ ಇಲ್ಲದೆಯೇ ಕರೆಗಳನ್ನು ಮಾಡುವುದರ ಮೂಲಕ ನಿಮ್ಮ ಹಣ ಖರ್ಚಾಗಬಹುದು."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ಫೋನ್ ಸ್ಥಿತಿ ಮತ್ತು ಗುರುತಿಸುವಿಕೆಯನ್ನು ಓದಿ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ಸಾಧನದ ಫೋನ್ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ. ಈ ಅನುಮತಿಯು ಫೋನ್ ಸಂಖ್ಯೆ ಮತ್ತು ಸಾಧನದ ID ಗಳನ್ನು ನಿರ್ಧರಿಸಲು, ಕರೆಯು ಸಕ್ರಿಯವಾಗಿದೆಯೇ ಮತ್ತು ಕರೆಯ ಮೂಲಕ ರಿಮೋಟ್ ಸಂಖ್ಯೆಯು ಸಂಪರ್ಕಗೊಂಡಿವೆಯೇ ಎಂಬುದನ್ನೂ ನಿರ್ಧರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅವಕಾಶ ಕಲ್ಪಿಸುತ್ತದೆ."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ಟ್ಯಾಬ್ಲೆಟ್ ನಿದ್ರಾವಸ್ಥೆಯನ್ನು ತಡೆಯಿರಿ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index d8f5630..31113fb 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"앱이 카메라 플래시를 제어할 수 있도록 허용합니다."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"전화번호 자동 연결"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"앱이 사용자의 조작 없이 전화번호로 전화를 걸 수 있도록 허용합니다. 이 경우 예상치 못한 통화 요금이 부과될 수 있습니다. 앱이 비상 전화를 걸도록 하는 권한은 주어지지 않습니다. 악성 앱이 사용자의 확인 없이 전화를 걸어 요금이 부과될 수 있습니다."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"휴대전화 상태 및 ID 읽기"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"앱이 기기의 휴대전화 기능에 액세스할 수 있도록 허용합니다. 이 권한을 사용하면 앱이 전화번호 및 기기의 ID, 활성 통화인지 여부, 통화가 연결된 원격 번호 등을 확인할 수 있습니다."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"태블릿이 절전 모드로 전환되지 않도록 설정"</string>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index be695a3..4637db24 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -475,6 +475,10 @@
     <!-- no translation found for permlab_callPhone (3925836347681847954) -->
     <skip />
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Колдонмого сиздин катышууңузсуз телефон номурларга чалуу уруксатын берет. Бул сиз күтпөгөн чыгымдарга же чалууларга алып келиши мүмкүн. Бул куткаруучулардын номурларына чалууга уруксат бербей тургандыгын эске алыңыз. Зыяндуу колдонмолор, сиздин ырастооңузсуз чалууларды аткарып, көп чыгымдарга себепкер болушу мүмкүн."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"телефондун абалын жана аныктыгын окуу"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Колдонмого түзмөктүн чалуу мүмкүнчүлүктөрүнө жетки алуу уруксатын берет. Бул уруксат колдонмого, телефондун номурун, түзмөктүн ID-син, чалуунун абалын жана байланышта чыккан номурду аныктоого жол берет."</string>
     <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index f5e2bf8..2bc2908 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ອະນຸຍາດໃຫ້ແອັບຯ ຄວບຄຸມໄຟແຟລດ."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ໂທຫາເບີໂທລະສັບໂດຍກົງ"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"ອະນຸຍາດໃຫ້ແອັບຯໂທຫາເບີໂທລະສັບໄດ້ ໂດຍບໍ່ຕ້ອງຖ້າການດຳເນີນການໃດໆຈາກທ່ານ. ຄຸນສົມບັດນີ້ອາດກໍ່ໃຫ້ເກີດຄ່າໃຊ້ຈ່າຍໃນການໂທທີ່ບໍ່ຄາດຄິດໄດ້. ໝາຍເຫດ: ຄຸນສົມບັດນີ້ບໍ່ໄດ້ເປັນການອະນຸຍາດໃຫ້ແອັບຯ ສາມາດໂທຫາເບີສຸກເສີນ. ແອັບຯທີ່ເປັນອັນຕະລາຍອາດເຮັດໃຫ້ທ່ານ ຕ້ອງເສຍຄ່າໂທໂດຍທີ່ບໍ່ໄດ້ຄາດຄິດ."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ອ່ານສະຖານະ ແລະຂໍ້ມູນລະບຸໂຕຕົນຂອງໂທລະສັບ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ອະນຸຍາດໃຫ້ແອັບຯ ເຂົ້າເຖິງຄວາມສາມາດການໂທລະສັບຂອງອຸປະກອນ. ການກຳນົດສິດນີ້ເຮັດໃຫ້ແອັບຯສາມາດກວດສອບເບີໂທລະສັບ ແລະ ID ຂອງອຸປະກອນ, ບໍ່ວ່າການໂທຈະຍັງດຳເນີນຢູ່ ແລະເບີປາຍທາງເຊື່ອມຕໍ່ຢູ່ຫຼືບໍ່ກໍຕາມ."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ຂັດຂວາງບໍ່ໃຫ້ປິດໜ້າຈໍແທັບເລັດ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 0e6bfbd..a9b4050 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Leidžiama programai valdyti šviesos signalą."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"skambinti tiesiogiai telefono numeriais"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Leidžiama programai skambinti telefonų numeriais be jūsų įsikišimo. Dėl to gali atsirasti nenumatytų apmokestinimų ar skambučių. Atminkite, kad programai neleidžiama skambinti pagalbos telefonų numeriais. Kenkėjiškos programos gali skambinti be jūsų patvirtinimo, o dėl to jums gali būti taikomi mokesčiai."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"skaityti telefono būseną ir tapatybę"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Leidžiama programai pasiekti telefono funkcijas įrenginyje. Šis leidimas suteikia teisę programai nustatyti telefono numerį ir įrenginio ID, tai, ar skambutis aktyvus, ir skambučiu prijungtą nuotolinį numerį."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"neleisti planšetiniam kompiuteriui užmigti"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 78a9344..3c1b78a 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -355,6 +355,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Ļauj lietotnei kontrolēt zibspuldzi."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"tieši zvanīt uz tālruņa numuriem"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Ļauj lietotnei zvanīt uz tālruņa numuriem bez jūsu iejaukšanās. Tas var radīt neparedzētas izmaksas vai zvanus. Ņemiet vērā, ka lietotnei nav atļauts zvanīt uz tālruņa numuriem ārkārtas situācijām. Ļaunprātīgas lietotnes var radīt jums izmaksas, veicot zvanus bez jūsu apstiprinājuma."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lasīt tālruņa statusu un identitāti"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Ļauj lietotnei piekļūt ierīces tālruņa funkcijām. Ar šo atļauju lietotne var noteikt tālruņa numuru un ierīču ID, zvana statusu un attālo numuru, ar ko ir izveidots savienojums, veicot zvanu."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"novērst planšetdatora pāriešanu miega režīmā"</string>
diff --git a/core/res/res/values-mcc404/config.xml b/core/res/res/values-mcc404/config.xml
index a106b0a..17539d8 100644
--- a/core/res/res/values-mcc404/config.xml
+++ b/core/res/res/values-mcc404/config.xml
@@ -23,4 +23,6 @@
         <item>404</item>
         <item>405</item>
     </string-array>
+    <!-- Whether camera shutter sound is forced or not  (country specific). -->
+    <bool name="config_camera_sound_forced">true</bool>
 </resources>
diff --git a/core/res/res/values-mcc405/config.xml b/core/res/res/values-mcc405/config.xml
index a106b0a..17539d8 100644
--- a/core/res/res/values-mcc405/config.xml
+++ b/core/res/res/values-mcc405/config.xml
@@ -23,4 +23,6 @@
         <item>404</item>
         <item>405</item>
     </string-array>
+    <!-- Whether camera shutter sound is forced or not  (country specific). -->
+    <bool name="config_camera_sound_forced">true</bool>
 </resources>
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml
index d9015f6..2582ea3 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Дозволува апликацијата да ја контролира батериската ламба."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"директно избирај телефонски броеви"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Овозможува апликацијата да повикува телефонски броеви без ваша интервенција. Ова може да предизвика неочекувани трошоци или повици. Имајте на ум дека ова не дозволува апликацијата да повикува броеви на служби за итна помош. Злонамерните апликации може да ве чинат пари поради повици без ваша потврда."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"прочитај ги статусот и идентитетот  на телефонот"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Овозможува апликацијата да пристапи кон карактеристиките на телефонот на уредот. Оваа дозвола овозможува апликацијата да ги утврди телефонскиот број и ИД на уредот, дали повикот е активен и далечинскиот број поврзан со повикот."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"спречи режим на штедење кај таблет"</string>
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml
index 92aa3b5..7a21d87 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ഫ്ലാഷ്ലൈറ്റിനെ നിയന്ത്രിക്കുന്നതിന് അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ഫോൺ നമ്പറുകളിലേക്ക് നേരിട്ട് വിളിക്കുക"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"നിങ്ങളുടെ ഇടപെടൽ ഇല്ലാതെ ഫോൺ നമ്പറുകളിലേക്ക് കോൾ ചെയ്യാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഇത് അപ്രതീക്ഷിത നിരക്കുകൾക്കോ കോളുകൾക്കോ ഇടയാക്കാം. ഇത് അടിയന്തര നമ്പറുകളിലേക്ക് വിളിക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കില്ലെന്ന കാര്യം ശ്രദ്ധിക്കുക. ക്ഷുദ്രകരമായ അപ്ലിക്കേഷനുകൾ നിങ്ങളുടെ സ്ഥിരീകരണമില്ലാതെ കോളുകൾ ചെയ്യുന്നത് പണച്ചെലവിനിടയാക്കാം."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ഫോൺ നിലയും ഐഡന്റിറ്റിയും റീഡുചെയ്യുക"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ഉപകരണത്തിന്റെ ഫോൺ സവിശേഷതകൾ ആക്‌സസ്സുചെയ്യാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഈ അനുമതി ഫോൺ നമ്പർ, ഉപകരണ ഐഡികൾ, ഒരു കോൾ സജീവമാണോയെന്നത്, ഒരു കോൾ കണക്റ്റുചെയ്‌ത വിദൂര നമ്പർ എന്നിവ നിർണ്ണയിക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"സുഷുപ്‌തിയിലാകുന്നതിൽ നിന്ന് ടാബ്‌ലെറ്റിനെ തടയുക"</string>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 2170a30..09673d1 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Апп нь гар чийдэнг удирдах боломжтой."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"утасны дугаарт шууд дуудлага хийх"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Апп нь таны оролцоогүйгээр дуудлага хийх боломжтой. Энэ нь төлөвлөгдөөгүй төлбөрт оруулах эсвэл дуудлага хийнэ. Энэ нь апп-г яаралтай дугаарт дуудлага хийхйг зөвшөөрөхгүй. Хортой апп нь таны зөвшөөрөлгүйгээр дуудлага хийж таныг төлбөрт оруулж болзошгүй"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"утасны статус ба таниулбарыг унших"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Апп нь төхөөрөмжийн утасны функцд хандах боломжтой. Энэ зөвшөөрөл нь апп-д утасны дугаар болон төхөөрөмжийн ID-г, дуудлага идэвхтэй эсэх, холын дугаар дуудлагаар холбогдсон байгаа эсэхийг тогтоох боломжийг олгоно,"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"таблетыг унтуулахгүй байлгах"</string>
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml
index 5f5e7bc..aa5562a 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"फ्लॅशलाइट नियंत्रित करण्यासाठी अॅप ला अनुमती देते."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"फोन नंबरवर प्रत्यक्ष कॉल करा"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"आपल्या हस्तक्षेपाशिवाय फोन नंबरवर कॉल करण्यासाठी अॅप ला अनुमती देते. यामुळे अनपेक्षित शुल्क किंवा कॉल लागू शकतात. लक्षात ठेवा की हे आणीबाणीच्या नंबरवर कॉल करण्यासाठी अॅप ला अनुमती देत नाही. दुर्भावनापूर्ण अॅप्स नी आपल्या पुष्टिकरणाशिवाय कॉल केल्यामुळे आपले पैसे खर्च होऊ शकतात."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"फोन स्थिती आणि ओळख वाचा"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"डिव्हाइसच्या फोन वैशिष्ट्यांवर प्रवेश करण्यास अॅप ला अनुमती देते. ही परवानगी कॉल सक्रिय असला किंवा नसला तरीही, फोन नंबर आणि डिव्हाइस ID आणि कॉलद्वारे कनेक्ट केलेला रीमोट नंबर निर्धारित करण्यासाठी अॅप ला अनुमती देते."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"टॅब्लेट निष्क्रिय होण्यापासून प्रतिबंधित करा"</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 546b262..9a6bd73 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -227,21 +227,21 @@
     <string name="user_owner_label" msgid="2804351898001038951">"Peribadi"</string>
     <string name="managed_profile_label" msgid="6260850669674791528">"Tempat Kerja"</string>
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Kenalan"</string>
-    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"akses kenalan anda"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"mengakses kenalan anda"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Lokasi"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"akses lokasi peranti ini"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"mengakses lokasi peranti ini"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"akses kalendar anda"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"mengakses kalendar"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"hantar dan lihat mesej SMS"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"menghantar dan melihat mesej SMS"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Storan"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"akses foto, media dan fail pada peranti anda"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"mengakses foto, media dan fail pada peranti anda"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"rakam audio"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"ambil gambar dan rakam video"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"buat dan urus panggilan telefon"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"membuat dan mengurus panggilan telefon"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Penderia Badan"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"akses data penderia tentang tanda vital anda"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Dapatkan kembali kandungan tetingkap"</string>
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Membenarkan apl mengawal lampu suluh."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"panggil terus nombor telefon"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Membenarkan apl memanggil nombor telefon tanpa campur tangan anda. Ini mungkin menyebabkan caj atau panggilan yang di luar jangkaan. Apl hasad boleh menyebabkan anda kerugian wang dengan membuat panggilan tanpa pengesahan anda."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"baca status dan identiti telefon"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Membenarkan apl mengakses ciri telefon pada peranti. Kebenaran ini membolehkan apl menentukan nombor telefon dan ID peranti, sama ada panggilan aktif dan nombor jauh yang dihubungkan dengan panggilan."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"menghalang tablet daripada tidur"</string>
@@ -504,7 +508,7 @@
     <string name="policylab_resetPassword" msgid="4934707632423915395">"Tukar kunci skrin"</string>
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"Tukar kunci skrin."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Kunci skrin"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Mengawal cara dan bila skrin dikunci."</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"Mengawal cara dan masa skrin dikunci."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Padamkan semua data"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Memadamkan data tablet tanpa amaran dengan melakukan tetapan semula data kilang."</string>
     <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Padam data TV tanpa amaran dengan melakukan tetapan semula data kilang."</string>
@@ -524,7 +528,7 @@
     <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Lumpuhkan beberapa ciri kunci skrin"</string>
     <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Halang penggunaan sesetengah ciri kunci skrin."</string>
   <string-array name="phoneTypes">
-    <item msgid="8901098336658710359">"Laman Utama"</item>
+    <item msgid="8901098336658710359">"Rumah"</item>
     <item msgid="869923650527136615">"Mudah alih"</item>
     <item msgid="7897544654242874543">"Kerja"</item>
     <item msgid="1103601433382158155">"Faks Kerja"</item>
@@ -546,7 +550,7 @@
     <item msgid="4932682847595299369">"Peribadi"</item>
   </string-array>
   <string-array name="imAddressTypes">
-    <item msgid="1738585194601476694">"Laman Utama"</item>
+    <item msgid="1738585194601476694">"Rumah"</item>
     <item msgid="1359644565647383708">"Kerja"</item>
     <item msgid="7868549401053615677">"Lain-lain"</item>
     <item msgid="3145118944639869809">"Peribadi"</item>
@@ -567,7 +571,7 @@
     <item msgid="1648797903785279353">"Jabber"</item>
   </string-array>
     <string name="phoneTypeCustom" msgid="1644738059053355820">"Peribadi"</string>
-    <string name="phoneTypeHome" msgid="2570923463033985887">"Laman Utama"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Rumah"</string>
     <string name="phoneTypeMobile" msgid="6501463557754751037">"Mudah Alih"</string>
     <string name="phoneTypeWork" msgid="8863939667059911633">"Kerja"</string>
     <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Faks Kerja"</string>
@@ -597,11 +601,11 @@
     <string name="emailTypeOther" msgid="2923008695272639549">"Lain-lain"</string>
     <string name="emailTypeMobile" msgid="119919005321166205">"Mudah Alih"</string>
     <string name="postalTypeCustom" msgid="8903206903060479902">"Peribadi"</string>
-    <string name="postalTypeHome" msgid="8165756977184483097">"Laman Utama"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Rumah"</string>
     <string name="postalTypeWork" msgid="5268172772387694495">"Kerja"</string>
     <string name="postalTypeOther" msgid="2726111966623584341">"Lain-lain"</string>
     <string name="imTypeCustom" msgid="2074028755527826046">"Peribadi"</string>
-    <string name="imTypeHome" msgid="6241181032954263892">"Laman Utama"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Rumah"</string>
     <string name="imTypeWork" msgid="1371489290242433090">"Kerja"</string>
     <string name="imTypeOther" msgid="5377007495735915478">"Lain-lain"</string>
     <string name="imProtocolCustom" msgid="6919453836618749992">"Peribadi"</string>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index 09ba7bf..a8761ce 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"appအား ကား ဖလက်ရှမီးကို ထိန်းချုပ်ခွင့် ပြုသည်။"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ဖုန်းနံပါတ်များကိုတိုက်ရိုက်ခေါ်ဆိုခြင်း"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"အပလီကေးရှင်းအား အလိုအလျောက် ဖုန်းခေါ်ခွင့် ပြုပါ။ မလိုအပ်သော ဖုန်းခ များ ဖြစ်ပေါ်နိုင်ပါသည်။ ဒီခွင့်ပြုခြင်းမှာ အရေးပေါ်ဖုန်းခေါ်ခြင်း မပါဝင်ပါ။ သံသယဖြစ်စရာ အပလီကေးရှင်းများက သင့်မသိပဲ ဖုန်းခေါ်ခြင်းဖြင့် ဖုန်းခ ပိုမိုကျနိုင်ပါသည်။"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ဖုန်းရဲ့ အခြေအနေ နှင့် အမှတ်သညာအား ဖတ်ခြင်း"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"အပလီကေးရှင်းအား ဖုန်းရဲ့ စွမ်းဆောင်ချက်များအား သုံးခွင့်ပြုပါ။ အပလီကေးရှင်းအနေဖြင့် ဖုန်းနံပါတ်၊ စက်နံပါတ်၊ ဖုန်းခေါ်နေမှု ရှိမရှိနှင့် တဖက်မှ ဖုန်းနံပါတ် များအား သိရှိနိုင်ပါသည်"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"တက်ပလက်အား ပိတ်ခြင်းမှ ကာကွယ်ခြင်း"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 8d54b52..9faf811 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Lar appen kontrollere lommelykten."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ringe telefonnummer direkte"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Lar appen ringe telefonnumre uten at du gjør noe. Dette kan resultere i uventede oppringninger og kostnader. Appen kan imidlertid ikke ringe nødnumre. Merk at skadelige apper kan påføre deg kostnader ved å ringe uten bekreftelse fra deg."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lese telefonstatus og -identitet"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Lar appen bruke enhetens telefonfunksjoner. Med denne tillatelsen kan appen finne telefonnummer og enhets-ID-er, registrere om en samtale pågår, og se det eksterne nummeret det opprettes en forbindelse med via oppringing."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"hindre nettbrettet fra å gå over til sovemodus"</string>
@@ -501,7 +505,7 @@
     <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Overvåker antallet feil passord som er skrevet inn når skjermen låses opp, og låser nettbrettet eller sletter denne brukerens data når for mange feil passord er skrevet inn."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Overvåker antallet feil passord som er skrevet inn når skjermen låses opp, og låser TV-en eller sletter denne brukerens data når for mange feil passord er skrevet inn."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Overvåker antallet feil passord som er skrevet inn når skjermen låses opp, og låser telefonen eller sletter denne brukerens data når for mange feil passord er skrevet inn."</string>
-    <string name="policylab_resetPassword" msgid="4934707632423915395">"Endre skjermlåsen"</string>
+    <string name="policylab_resetPassword" msgid="4934707632423915395">"Endring av skjermlåsen"</string>
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"Endre skjermlåsen."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Lås skjermen"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Kontrollér hvordan og når skjermen låses."</string>
@@ -1456,7 +1460,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Appen er festet – du kan ikke løsne apper på denne enheten."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"Skjermen er festet"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"Skjermen er løsnet"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Krev PIN-kode for å løsne apper"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"PIN-kode for å løsne apper"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Krev bruk av opplåsningsmønster for å løsne apper"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Krev passord for å løsne apper"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installert av administratoren"</string>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index 7a7abb9..04b9b3e 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"फ्ल्यास प्रकाशलाई नियन्त्रण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"फोन नम्बरहरूमा सिधै कल गर्नुहोस्"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"तपाईँको हस्तक्षेप बेगरै फोन नम्बर कल गर्न अनुप्रयोगलाई अनुमति दिन्छ। यसले अनपेक्षित शुल्क वा कलहरू गराउन सक्छ। यसले अनुप्रयोगलाई आपतकालीन नम्बरहरू कल गर्न अनुमति दिँदैन विचार गर्नुहोस्। खराब अनुप्रयोगहरूले तपाईँको स्वीकार बिना कलहरू गरेर तपाईँलाई बढी पैसा तिराउन सक्छ।"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"फोन स्थिति र पहिचान पढ्नुहोस्"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"उपकरणको फोन विशेषताहरूको पहुँच गर्न अनुप्रयोगलाई अनुमति दिन्छ। यस अनुमतिले फोन नम्बर र उपकरणको IDs, कल सक्षम छ कि छैन र कलद्वारा जोडिएको टाढाको नम्बर निर्धारण गर्न अनुमति दिन्छ।"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ट्याब्लेटलाई निन्द्रामा जानबाट रोक्नुहोस्"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 2c4f999..2c1d994 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Hiermee kan de app de zaklamp bedienen."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"telefoonnummers rechtstreeks bellen"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Hiermee kan de app zonder uw tussenkomst telefoonnummers bellen. Dit kan tot onverwachte kosten of oproepen leiden. De app kan hiermee geen noodnummers bellen. Schadelijke apps kunnen u geld kosten door nummers te bellen zonder om uw bevestiging te vragen."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefoonstatus en -identiteit lezen"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Hiermee kan de app toegang krijgen tot de telefoonfuncties van het apparaat, Met deze toestemming kan de app het telefoonnummer en de apparaat-ID\'s bepalen, of een oproep actief is, en het andere telefoonnummer waarmee wordt gebeld."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"voorkomen dat tablet overschakelt naar slaapmodus"</string>
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml
index f1dfe9e..8a2c552 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ਐਪ ਨੂੰ ਫਲੈਸ਼ਲਾਈਟ ਤੇ ਨਿਯੰਤਰਣ ਪਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ਫੋਨ ਨੰਬਰਾਂ ਤੇ ਸਿੱਧੇ ਕਾਲ ਕਰੋ"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਦਖ਼ਲ ਤੋਂ ਬਿਨਾਂ ਫੋਨ ਨੰਬਰਾਂ ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਸਦੇ ਸਿੱਟੇ ਵਜੋਂ ਅਕਲਪਿਤ ਖ਼ਰਚੇ ਜਾਂ ਕਾਲਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਧਿਆਨ ਦਿਓ ਕਿ ਇਹ ਐਪ ਨੂੰ ਐਮਰਜੈਂਸੀ ਨੰਬਰਾਂ ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦਾ। ਖ਼ਰਾਬ ਐਪਸ ਤੁਹਾਡੀ ਪੁਸ਼ਟੀ ਤੋਂ ਬਿਨਾਂ ਕਾਲਾਂ ਕਰਕੇ ਤੁਹਾਨੂੰ ਖ਼ਰਚੇ ਪਾ ਸਕਦੇ ਹਨ।"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ਫੋਨ ਸਥਿਤੀ ਅਤੇ ਪਛਾਣ ਪੜ੍ਹੋ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ਐਪ ਨੂੰ ਡਿਵਾਈਸ ਦੀਆਂ ਫੋਨ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਹ ਅਨੁਮਤੀ ਐਪ ਨੂੰ ਫੋਨ ਨੰਬਰ ਅਤੇ ਡਿਵਾਈਸ ID ਨਿਰਧਾਰਿਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ, ਇੱਕ ਕਾਲ ਸਕਿਰਿਆ ਹੈ ਜਾਂ ਨਹੀਂ ਅਤੇ ਰਿਮੋਟ ਨੰਬਰ ਇੱਕ ਕਾਲ ਨਾਲ ਕਨੈਕਟ ਹੈ ਜਾਂ ਨਹੀਂ।"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ਟੈਬਲੇਟ ਨੂੰ ਸਲੀਪਿੰਗ ਤੋਂ ਰੋਕੋ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 1c09434..fde8142 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Pozwala aplikacji na sterowanie latarką."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"bezpośrednie wybieranie numerów telefonów"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Pozwala aplikacji na dzwonienie pod numery telefonów bez Twojej wiedzy. Może to skutkować nieoczekiwanymi opłatami lub połączeniami. Aplikacja nie może dzwonić pod numery alarmowe. Złośliwe aplikacje mogą generować koszty, wykonując połączenia bez Twojego potwierdzenia."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"odczytywanie stanu i informacji o telefonie"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Pozwala aplikacji na dostęp do funkcji telefonicznych urządzenia. Aplikacja z tym uprawnieniem może odczytać numer telefonu i identyfikator urządzenia, sprawdzić, czy połączenie jest aktywne, oraz poznać numer, z którym jest nawiązane połączenie."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zapobieganie przechodzeniu tabletu do trybu uśpienia"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 4ccf8a5..9eabfc5 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -229,19 +229,19 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Contactos"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"aceder aos contactos"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Localização"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"aceder à localização do seu dispositivo"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"aceda à localização do seu dispositivo"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendário"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"aceder ao calendário"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"aceda ao calendário"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"enviar e ver mensagens SMS"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"envie e veja mensagens SMS"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Armazenamento"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"aceder a fotos, multimédia e ficheiros no dispositivo"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"aceda a fotos, multimédia e ficheiros no dispositivo"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfone"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"gravar áudio"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Câmara"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"tirar fotografias e gravar vídeos"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telemóvel"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"fazer e gerir chamadas"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"faça e gira chamadas"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores de corpo"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"aceder a dados do sensor acerca dos seus sinais vitais"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Obter conteúdo da janela"</string>
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permite à aplicação controlar a lanterna."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"marcar números de telefone diretamente"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite que a aplicação ligue para números de telefone sem a intervenção do utilizador. Esta ação pode resultar em cobranças ou chamadas inesperadas. Tenha em atenção que isto não permite que a aplicação ligue para números de emergência. As aplicações maliciosas podem fazer com que incorra em custos, fazendo chamadas sem a sua confirmação."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ler o estado e a identidade do telemóvel"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que a aplicação aceda às funcionalidades de telefone do dispositivo. Esta autorização permite que a aplicação determine o número de telefone e IDs do dispositivo, se alguma chamada está ativa e qual o número remoto ligado por uma chamada."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"impedir que o tablet entre em inactividade"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index b81ec45..9fada1c 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permite que o app controle a lanterna."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ligar diretamente para números de telefone"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite que o app ligue para números de telefone sem sua intervenção. Isso pode resultar em cobranças ou chamadas inesperadas. Esta opção não permite que o app ligue para números de emergência. Apps maliciosos podem gerar custos com chamadas feitas sem sua confirmação."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ler status e identidade do telefone"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que o app acesse os recursos de telefonia do dispositivo. Esta permissão autoriza o app a determinar o número de telefone e IDs de dispositivo, quando uma chamada está ativa, e o número remoto conectado a uma chamada."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"impedir modo de inatividade do tablet"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 8decc0a..7a6a14f 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -355,6 +355,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Permite aplicației să controleze lanterna."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"apelare directă numere de telefon"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite aplicației să apeleze numere de telefon fără intervenţia dvs. Acest lucru poate determina apariţia unor taxe sau a unor apeluri neaşteptate. Cu această permisiune aplicația nu poate apela numerele de urgenţă. Aplicaţiile rău intenţionate pot acumula costuri prin efectuarea unor apeluri fără confirmare."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"citeşte starea și identitatea telefonului"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite aplicației să acceseze funcţiile de telefon ale dispozitivului. Cu această permisiune aplicația stabileşte numărul de telefon și ID-urile de dispozitiv, dacă un apel este activ, precum și numărul de la distanţă conectat printr-un apel."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"împiedicarea computerului tablet PC să intre în repaus"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 5dd4908..bdf11e1 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Приложение сможет контролировать вспышку."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"Осуществление телефонных вызовов"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Приложение сможет без вашего участия звонить на любой номер телефона. Это не относится к номерам экстренных служб. Вредоносные программы смогут совершать вызовы без вашего разрешения, что может привести к непредвиденным расходам."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"Получение данных о статусе телефона"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Приложение получит доступ к функциям телефона на устройстве. Кроме того, оно сможет определять номера телефонов и серийные номера моделей, состояние активности вызова, а также удаленные номера, с которыми установлено соединение."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"Отключение спящего режима"</string>
@@ -507,7 +511,7 @@
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"Изменять блокировку экрана."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Блокировка экрана"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Управлять способом и временем блокировки экрана."</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"Удалить все данные"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Удаление всех данных"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Удалять все данные на планшетном ПК без предупреждения путем сброса настроек."</string>
     <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Сброс настроек и удаление всех данных на телевизоре без предупреждения."</string>
     <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Удалять все данные на телефоне без предупреждения путем сброса настроек."</string>
@@ -630,7 +634,7 @@
     <string name="relationTypeMother" msgid="4578571352962758304">"Мать"</string>
     <string name="relationTypeParent" msgid="4755635567562925226">"Родитель"</string>
     <string name="relationTypePartner" msgid="7266490285120262781">"Партнер"</string>
-    <string name="relationTypeReferredBy" msgid="101573059844135524">"Рекомендуют:"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"Рекомендован"</string>
     <string name="relationTypeRelative" msgid="1799819930085610271">"Родственник"</string>
     <string name="relationTypeSister" msgid="1735983554479076481">"Сестра"</string>
     <string name="relationTypeSpouse" msgid="394136939428698117">"Супруг(а)"</string>
@@ -1232,7 +1236,7 @@
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Ещё"</string>
     <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
     <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
-    <string name="storage_internal" msgid="4891916833657929263">"Внутр. память"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"Внутр. накопитель"</string>
     <string name="storage_sd_card" msgid="3282948861378286745">"SD-карта"</string>
     <string name="storage_sd_card_label" msgid="6347111320774379257">"SD-карта <xliff:g id="MANUFACTURER">%s</xliff:g>"</string>
     <string name="storage_usb_drive" msgid="6261899683292244209">"USB-накопитель"</string>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index c66936e..c26bc5a 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"සැණෙළිය පාලනයට යෙදුමට අවසර දෙන්න."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"දුරකථන අංක වෙත ඍජුවම අමතන්න"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"ඔබගේ මැදිහත් වීමක් නොමැතිව දුරකථන අංක ඇමතීමට යෙදුමට අවසර දෙන්න. මෙහි ප්‍රතිඑලය වන්නේ අනපේක්ෂිත අයකිරීම් හෝ ඇමතුම් ඇතිවීමයි. මෙයන් හදිසි අංක වලට ඇමතුම් ගැනීමට යෙදුමට අවසර නොදෙන බවට සටහන් කරගන්න. ඔබගේ අනුදැනුමක් නොමැතිව ඇමතුම් ගැනීමෙන් අනිෂ්ට යෙදුම් ඔබගේ මුදල් නිකරුණේ වැය කරයි."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"දුරකථනයේ තත්වය සහ අනන්‍යතාවය කියවීම"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"උපාංගයේ දුරකථන විශේෂාංග වෙත පිවිසීමට යෙදුමට අවසර දෙන්න. ඇමතුම සක්‍රිය වුවත් සහ ඇමතුමකින් දුරස්ථ අංකය සම්බන්ධ වුවත් දුරකථන අංකය සහ උපාංග ID හඳුනා ගැනීමට මෙම අවසරය යෙදුමට අවසර දෙයි."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ටැබ්ලටය නින්දෙන් වැළක්වීම"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 57dcf2d..9bca666 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Umožňuje aplikácii ovládať svetlo."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"priamo volať na telefónne čísla"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Umožňuje aplikácii volať telefónne čísla bez vášho zásahu. V dôsledku toho sa môžu účtovať neočakávané poplatky alebo sa môžu uskutočniť neočakávané hovory. Toto povolenie neumožňuje aplikácii volať na čísla tiesňového volania."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"čítať stav a identitu telefónu"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Umožňuje aplikácii pristupovať k telefónnym funkciám zariadenia. Aplikácia s týmto povolením môže určiť telefónne číslo a ID zariadenia, či práve prebieha hovor, a vzdialené číslo, s ktorým je prostredníctvom hovoru nadviazané spojenie."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zabránenie prechodu tabletu do režimu spánku"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index a6c0f05..184595b 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Aplikaciji omogoča nadzor svetilke."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"neposredno klicanje telefonskih številk"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Aplikaciji omogoča klicanje telefonskih številk brez vašega posredovanja. Zaradi tega lahko pride do nepričakovanih stroškov ali klicev. Aplikaciji to ne dovoljuje opravljanja klicev v sili. Zlonamerne aplikacije lahko kličejo brez vaše potrditve, kar vas lahko drago stane."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"branje stanja in identitete telefona"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Aplikaciji omogoča dostop do funkcij telefona v napravi. S tem dovoljenjem lahko aplikacija določi telefonsko številko in ID-je naprave, določi lahko tudi, ali je klic aktiven, in oddaljeno številko, s katero je klic povezan."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"preprečitev prehoda tabličnega računalnika v stanje pripravljenosti"</string>
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml
index 18fed88..e1508cb 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq-rAL/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Lejon aplikacionin të kontrollojë elektrikun."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"telefono drejtpërdrejt numrat e telefonit"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Lejon aplikacionin të telefonojë numra pa ndërhyrjen tënde. Kjo mund të rezultojë në tarifa ose telefonata të papritura. Ki parasysh se kjo nuk e lejon aplikacionin të telefonojë numra urgjence. Aplikacione keqdashëse mund të të kushtojnë para duke kryer telefonata pa konfirmimin tënd."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lexo statusin e telefonit dhe identitetin"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Lejon aplikacionin të hyjë në funksionet telefonike të pajisjes. Kjo leje i mundëson aplikacionit të përcaktojë numrin e telefonit dhe ID-të e pajisjes, nëse një telefonatë është aktive apo nëse numri në distancë është i lidhur me një telefonatë."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"parandalo kalimin e tabletit në fjetje"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 4f49a38..e5c0b3d 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -247,9 +247,9 @@
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"приступ подацима сензора о виталним функцијама"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Преузима садржај прозора"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Проверава садржај прозора са којим остварујете интеракцију."</string>
-    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Укључивање Истраживања додиром"</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Укључи Истраживања додиром"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Ставке које додирнете ће бити изговорене, а можете да се крећете по екрану покретима."</string>
-    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Укључивање побољшане приступачности веба"</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Укључи побољшану приступачност веба"</string>
     <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Могу да се инсталирају скрипте да би садржај апликација био приступачнији."</string>
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Прати текст који уносите"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Обухвата личне податке као што су бројеви кредитних картица и лозинке."</string>
@@ -355,6 +355,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Дозвољава апликацији да контролише блиц."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"директно позивање бројева телефона"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Дозвољава апликацији да позива бројеве телефона без ваше дозволе. Ово може да доведе до неочекиваних трошкова или позива. Имајте на уму да ово не дозвољава апликацији да позива бројеве за хитне случајеве. Злонамерне апликације могу да позивају без ваше потврде, што може да доведе до трошкова."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"читање статуса и идентитета телефона"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Дозвољава апликацији да приступа функцијама телефона на уређају. Ова дозвола омогућава апликацији да утврди број телефона и ИД-ове уређаја, затим да ли је позив активан, као и број даљинског уређаја са којим је успостављен позив."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"спречавање преласка таблета у стање спавања"</string>
@@ -502,8 +506,8 @@
     <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Надгледа број нетачних лозинки унетих при откључавању екрана и закључава таблет или брише све податке овог корисника ако се унесе превише нетачних лозинки."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Надгледа број нетачних лозинки унетих при откључавању екрана и закључава ТВ или брише све податке овог корисника ако се унесе превише нетачних лозинки."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Надгледа број нетачних лозинки унетих при откључавању екрана и закључава телефон или брише све податке овог корисника ако се унесе превише нетачних лозинки."</string>
-    <string name="policylab_resetPassword" msgid="4934707632423915395">"Промени закључавање екрана"</string>
-    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Мења закључавање екрана."</string>
+    <string name="policylab_resetPassword" msgid="4934707632423915395">"Промена закључавања екрана"</string>
+    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Промените закључавање екрана."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Закључавање екрана"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Контролишите начин и време закључавања екрана."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Брисање свих података"</string>
@@ -877,7 +881,7 @@
     <string name="yes" msgid="5362982303337969312">"Потврди"</string>
     <string name="no" msgid="5141531044935541497">"Откажи"</string>
     <string name="dialog_alert_title" msgid="2049658708609043103">"Пажња"</string>
-    <string name="loading" msgid="7933681260296021180">"Учитавање…"</string>
+    <string name="loading" msgid="7933681260296021180">"Учитава се…"</string>
     <string name="capital_on" msgid="1544682755514494298">"ДА"</string>
     <string name="capital_off" msgid="6815870386972805832">"НЕ"</string>
     <string name="whichApplication" msgid="4533185947064773386">"Довршавање радње помоћу"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index d21fd85..cae88f4 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Tillåter att appen styr lampan."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ringa telefonnummer direkt"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Tillåter att appen ringer telefonnummer utan någon aktiv åtgärd från dig. Detta kan leda till oväntade avgifter och samtal. Observera att appen inte tillåts ringa nödsamtal. Skadliga appar kan ringa utan ditt godkännande och detta kan kosta pengar."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"läsa telefonens status och identitet"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tillåter att appen kommer åt enhetens telefonfunktioner. Med den här behörigheten tillåts appen att identifiera mobilens telefonnummer och enhets-ID, om ett samtal pågår och vilket nummer samtalet är kopplat till."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"förhindra att surfplattan går in i viloläge"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 317f624..0f8f193 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Inaruhusu programu kudhibiti tochi."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"piga simu moja kwa moja kwa nambari za simu"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Inaruhusu programu kupiga nambari za simu bila ya wewe kuingilia kati. Hii inaweza kusababisha gharama zisizotarajiwa au simu. Kumbuka kuwa hii hairuhusu programu kupiga nambari za dharura. Programu hasidi zinaweza kukugharimu pesa kwa kupiga simu bila uthibitisho wako."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"kusoma hali na kitambulisho cha simu"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Huruhusu programu kufikia vipengele vya simu vilivyo kwenye kifaa. Idhini hii inaruhusu programu kutambua nambari ya simu na kifaa, kama kuna simu inayopigwa, na nambari ya mbali iliyounganishwa kwenye simu."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zuia kompyuta ndogo dhidi ya kulala"</string>
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml
index 83a6759..cf3238f 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ஃப்ளாஷ் லைட்டைக் கட்டுப்படுத்த, பயன்பாட்டை அனுமதிக்கிறது."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"தொலைபேசி எண்களை நேரடியாக அழைத்தல்"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"உங்கள் தலையீட்டின்றி மொபைல் எண்களை அழைக்கப் பயன்பாட்டை அனுமதிக்கிறது. இதன் விளைவாக எதிர்பாராத கட்டணங்களோ அழைப்புகளோ ஏற்படலாம். அவசரகால எண்களை அழைக்க இது பயன்பாட்டை அனுமதிக்காது என்பதை நினைவில்கொள்ளவும். தீங்கிழைக்கும் பயன்பாடுகள், உங்கள் உறுதிப்படுத்தல் இன்றி அழைப்புகளைச் செய்வதால் உங்களுக்குச் செலவு ஏற்படக்கூடும்."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"மொபைல் நிலை மற்றும் அடையாளத்தைப் படித்தல்"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"சாதனத்தின் மொபைல் அம்சங்களை அணுகப் பயன்பாட்டை அனுமதிக்கிறது. மொபைல் மற்றும் சாதன ஐடிகள், அழைப்பு செயலில் உள்ளதா மற்றும் அழைப்பு மூலம் இணைக்கப்பட்ட தொலைக் கட்டுப்பாட்டு எண் ஆகியவற்றைத் தீர்மானிக்க இந்த அனுமதி பயன்பாட்டை அனுமதிக்கிறது."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"டேப்லெட் உறக்க நிலைக்குச் செல்வதைத் தடுத்தல்"</string>
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml
index d607058..b1feaac 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te-rIN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ఫ్లాష్‌లైట్‌ను నియంత్రించడానికి అనువర్తనాన్ని అనుమతిస్తుంది."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ఫోన్ నంబర్‌లకు నేరుగా కాల్ చేయడం"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"మీ ప్రమేయం లేకుండా ఫోన్ నంబర్‌లకు కాల్ చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది. దీని వలన అనుకోని ఛార్జీలు విధించబడవచ్చు లేదా కాల్‌లు రావచ్చు. ఇది అత్యవసర నంబర్‌లకు కాల్ చేయడానికి అనువర్తనాన్ని అనుమతించదని గుర్తుంచుకోండి. హానికరమైన అనువర్తనాలు మీ నిర్ధారణ లేకుండానే కాల్‌లు చేయడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ఫోన్ స్థితి మరియు గుర్తింపుని చదవడం"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"పరికరం యొక్క ఫోన్ లక్షణాలను ప్రాప్యత చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది. ఈ అనుమతి ఫోన్ నంబర్ మరియు పరికరం IDలను, కాల్ సక్రియంగా ఉందా లేదా అనే విషయాన్ని మరియు కాల్ ద్వారా కనెక్ట్ చేయబడిన రిమోట్ నంబర్‌ను కనుగొనడానికి అనువర్తనాన్ని అనుమతిస్తుంది."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"టాబ్లెట్‌ను నిద్రావస్థకు వెళ్లనీయకుండా నిరోధించడం"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index b8b8a5a..5474fff 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"อนุญาตให้แอปพลิเคชันควบคุมไฟฉาย"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"โทรติดต่อหมายเลขโทรศัพท์โดยตรง"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"อนุญาตให้แอปพลิเคชันโทรเข้าโทรศัพท์โดยไม่ต้องให้คุณจัดการ ซึ่งอาจทำให้มีการเรียกเก็บเงินหรือการโทรที่ไม่คาดคิด โปรดทราบว่าการทำงานนี้ไม่ได้อนุญาตให้แอปพลิเคชันโทรไปหมายเลขฉุกเฉิน แอปพลิเคชันที่เป็นอันตรายอาจทำให้คุณต้องเสียค่าบริการด้วยการโทรโดยไม่ขอการยืนยันจากคุณ"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"อ่านสถานะและข้อมูลระบุตัวตนของโทรศัพท์"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"อนุญาตให้แอปพลิเคชันเข้าถึงคุณลักษณะโทรศัพท์ของอุปกรณ์ การอนุญาตนี้ทำให้แอปพลิเคชันสามารถตรวจสอบหมายเลขโทรศัพท์และรหัสอุปกรณ์ ตรวจสอบว่ามีการโทรที่ทำงานอยู่หรือไม่ และตรวจสอบหมายเลขระยะไกลที่เชื่อมต่อด้วยการโทร"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ป้องกันไม่ให้แท็บเล็ตเข้าสู่โหมดสลีป"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 9526ded..1fcc942 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Pinapayagan ang app na kontrolin ang flashlight."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"direktang tawagan ang mga numero ng telepono"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Pinapayagan ang app na tumawag sa mga numero ng telepono nang wala ng iyong panghihimasok. Maaari itong magresulta sa mga hindi inaasahang pagsingil o tawag. Tandaan na hindi nito pinapayagan ang app na tumawag sa mga numerong pang-emergency. Maaaring magpagastos sa iyo ng pera ang nakakahamak na apps sa pamamagitan ng pagtawag nang wala ng iyong kumpirmasyon."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"basahin ang katayuan at pagkakakilanlan ng telepono"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Pinapayagan ang app na i-access ang mga tampok ng telepono ng device. Pinapayagan ng pahintulot na ito ang app na tukuyin ang numero ng telepono at  mga ID ng device, kung aktibo man ang isang tawag, at ang malayuang numerong ikinonekta ng isang tawag."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"pigilan ang tablet mula sa pag-sleep"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 7780c4e..b956a60 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Uygulamaya, flaş ışığını denetleme izni verir."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"telefon numaralarına doğrudan çağrı yap"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Uygulamaya sizin müdahaleniz olmadan telefon numaralarına çağrı yapma izni verir. Bu durum beklenmeyen ödemelere veya çağrılara neden olabilir. Ancak bu iznin, uygulamanın acil numaralara çağrı yapmasına olanak sağlamadığını unutmayın. Kötü amaçlı uygulamalar onayınız olmadan çağrılar yaparak sizi zarara sokabilir."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefonun durumunu ve kimliğini okuma"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Uygulamaya cihazdaki telefon özelliklerine erişme izni verir. Bu izin, uygulamanın telefon numarasını ve cihaz kimliğini, etkin bir çağrı olup olmadığını ve çağrıda bağlanılan karşı tarafın numarasını öğrenmesine olanak sağlar."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"tabletin uykuya geçmesini önle"</string>
@@ -576,9 +580,9 @@
     <string name="phoneTypeOther" msgid="1544425847868765990">"Diğer"</string>
     <string name="phoneTypeCallback" msgid="2712175203065678206">"Geri Arama"</string>
     <string name="phoneTypeCar" msgid="8738360689616716982">"Araç"</string>
-    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Şirket Merkezi"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Şirket Santrali"</string>
     <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
-    <string name="phoneTypeMain" msgid="6766137010628326916">"Ana"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"Santral"</string>
     <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Diğer Faks"</string>
     <string name="phoneTypeRadio" msgid="4093738079908667513">"Telsiz"</string>
     <string name="phoneTypeTelex" msgid="3367879952476250512">"Teleks"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index faf8097..cfd3bab 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -356,6 +356,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Дозволяє програмі контролювати світловий сигнал."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"прямо набирати номери тел."</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Дозволяє програмі набирати номери телефону без вашого відома. Це може спричинити неочікуване стягнення плати чи здійснення дзвінків. Зауважте, що це не дозволяє програмі набирати екстрені номери. Шкідливі програми можуть здійснювати дзвінки без вашого підтвердження, за що з вас стягуватимуться кошти."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"читати статус та ідентифікаційну інформацію телефону"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Дозволяє програмі отримувати доступ до телефонних функцій пристрою. Такий дозвіл дає програмі змогу визначати номер телефону й ідентифікатори пристрою, активність виклику, а також віддалений номер, на який здійснюється виклик."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"не доп.перехід пристр.в реж.сну"</string>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index 3533e5a..6cb0934 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"ایپ کو فلیش لائٹ کنٹرول کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"براہ راست فون نمبرز پر کال کریں"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"ایپ کو آپ کی مداخلت کے بغیر فون نمبروں پر کال کرنے کی اجازت دیتا ہے۔ اس کے نتیجے میں غیر متوقع چارجز یا کالیں ہوسکتی ہیں۔ نوٹ کرلیں کہ یہ ایپ کو ہنگامی نمبروں پر کال کرنے کی اجازت نہیں دیتا ہے۔ نقصان دہ ایپس آپ کی تصدیق کے بغیر کالیں کرکے آپ کی رقم صرف کروا سکتے ہیں۔"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"فون کے اسٹیٹس اور شناخت کو پڑھیں"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"‏ایپ کو آلے کی فون والی خصوصیات تک رسائی حاصل کرنے کی اجازت دیتا ہے۔ یہ اجازت ایپ کو فون نمبر اور آلے کے IDs کا تعین کرنے، آیا کوئی کال فعال ہے، اور کال کے ذریعہ مربوط ریموٹ نمبر کا تعین کرنے دیتی ہے۔"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ٹیبلیٹ کو سلیپ وضع میں جانے سے روکیں"</string>
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml
index fc27234..72a0ca2 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz-rUZ/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Ilova chaqnoqni boshqarishi mumkin."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"telefon raqamlariga tog‘ridan to‘g‘ri qo‘ng‘iroq qilish"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Ilovaga sizning yordamingizsiz telefonga qo‘ng‘iroq qilish imkonini beradi. Bu kutilmagan qo‘ng‘iroqlarni amalga oshirishi yoki ortiqcha to‘lovlarni yuzaga keltirishi mumkin. Shunga e’tibor qilinki, u favqulodda telefon raqamlariga qo‘ng‘iroqlar qilishga ruxsat bermaydi. Zararli ilovalar sizdan so‘ramasdan qo‘ng‘iroqlarni amalga oshirib, pulingizni sarflashi mumkin."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefon holati va nomini o‘qish"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Ilovaga qurilmangizdagi telefon xususiyatlariga kirishga ruxsat beradi. Bu ruxsat ilovaga telefon raqami va qurilma nomlari, qo‘ng‘iroq faol yoki faolsizligi va masofadagi raqam qo‘ng‘rioq orqali bog‘langanligini aniqlashga imkon beradi."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"planshetni uyquga ketishiga yo‘l qo‘ymaslik"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index ffb4070..5afd180 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Cho phép ứng dụng kiểm soát đèn nháy."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"gọi trực tiếp số điện thoại"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Cho phép ứng dụng gọi các số điện thoại mà không cần sự can thiệp của bạn. Việc này có thể dẫn đến các khoản phí hoặc cuộc gọi không mong muốn. Lưu ý rằng quyền này không cho phép ứng dụng gọi các số khẩn cấp. Các ứng dụng độc hại có thể khiến bạn tốn tiền do thực hiện cuộc gọi mà không cần sự xác nhận của bạn."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"đọc trạng thái và nhận dạng của điện thoại"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Cho phép ứng dụng truy cập vào các tính năng điện thoại của thiết bị. Quyền này cho phép ứng dụng xác định số điện thoại và ID thiết bị, cho dù cuộc gọi có hiện hoạt hay không và số từ xa có được kết nối bằng một cuộc gọi hay không."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ngăn máy tính bảng chuyển sang chế độ ngủ"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 5306939..c55fa2d 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"允许应用控制闪光灯。"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"直接拨打电话号码"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"允许该应用在您未执行操作的情况下拨打电话号码。此权限可能会导致意外收费或呼叫。请注意,此权限不允许该应用拨打紧急电话号码。恶意应用可通过拨打电话产生相关费用,而无需您的确认。"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"读取手机状态和身份"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"允许该应用访问设备的电话功能。此权限可让该应用确定本机号码和设备 ID、是否正处于通话状态以及拨打的号码。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"阻止平板电脑进入休眠状态"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 3a3f590..45581d9 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"允許應用程式控制閃光燈。"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"直接撥打電話號碼"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"允許應用程式繞過您自行撥打電話號碼,但可能會產生未預期的費用或撥打未預期的電話。注意:這項權限不允許應用程式撥打緊急電話。惡意應用程式可能未經您確認擅自撥打電話,增加您的支出。"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"讀取手機狀態和識別碼"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"允許應用程式使用裝置的電話功能。這項權限允許應用程式確定手機號碼和裝置編號、是否正在通話中,以及所撥打的對方號碼。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"防止平板電腦進入休眠狀態"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index b4dc871..2d141db 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"允許應用程式控制閃光燈。"</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"直接撥打電話號碼"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"允許應用程式自行撥打電話,但可能產生非預期的費用或撥打非預期的電話。注意:這項權限不允許應用程式撥打緊急電話。惡意應用程式可能利用此功能擅自撥打電話,增加您不必要的額外支出。"</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"讀取手機狀態和識別碼"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"允許應用程式使用裝置的電話功能。這項權限可讓應用程式判讀手機號碼和裝置 ID、是否正在通話中,以及所撥打的對方號碼。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"防止平板電腦進入休眠狀態"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index a27d5ec..19a9653 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -354,6 +354,10 @@
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Ivumela uhlelo lokusebenza ukulawula ukukhanya kwefuleshi."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"ngokuqondile shayela izinombolo zocingo"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Ivumela uhlelo lokusebenza ukushayela izinombolo zefoni ngaphandle kokuhlanganyela kwakho. Lokhu kungaholela emashajini noma amakholi angalindelekile. Qaphela ukuthi lokhu akuvumeli uhlelo lokusebenza ukushayela izinombolo zesimo esiphuthumayo. Izinhlelo zokusebenza ezingalungile zingabiza imali ngokwenze amakholi ngaphandle kokuqinisekisa kwakho."</string>
+    <!-- no translation found for permlab_accessImsCallService (3574943847181793918) -->
+    <skip />
+    <!-- no translation found for permdesc_accessImsCallService (8992884015198298775) -->
+    <skip />
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"funda isimo sefoni kanye nesazisi"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Ivumela uhlelo lokusebenza ukufinyelela izici zefoni zedivayisi. Le mvume ivumela uhlelo lokusebenza ukucacisa inombolo yefoni nobunikazi bedivayisi, ukuthi noma ikholi iyasebenza, futhi nenombolo yesilawuli kude zixhunywe ngekholi."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"gwema ithebhulethi ukuba ingalali"</string>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 70f9db9..1515703 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -200,7 +200,7 @@
              together. -->
         <flag name="signatureOrSystem" value="3" />
         <!-- Additional flag from base permission type: this permission can also
-             be granted to any applications installed on the system image.
+             be granted to any applications installed as privileged apps on the system image.
              Please avoid using this option, as the
              signature protection level should be sufficient for most needs and
              works regardless of exactly where applications are installed.  This
@@ -208,6 +208,8 @@
              vendors have applications built in to a system image which need
              to share specific features explicitly because they are being built
              together. -->
+        <flag name="privileged" value="0x10" />
+        <!-- Old synonym for "privileged". -->
         <flag name="system" value="0x10" />
         <!-- Additional flag from base permission type: this permission can also
              (optionally) be granted to development applications. -->
@@ -220,6 +222,16 @@
              {@link android.os.Build.VERSION_CODES#MNC} (before runtime permissions
              were introduced). -->
         <flag name="pre23" value="0x80" />
+        <!-- Additional flag from base permission type: this permission can be automatically
+            granted to system apps that install packages. -->
+        <flag name="installer" value="0x100" />
+        <!-- Additional flag from base permission type: this permission can be automatically
+            granted to system apps that verify packages. -->
+        <flag name="verifier" value="0x200" />
+        <!-- Additional flag from base permission type: this permission can be automatically
+            granted any application pre-installed on the system image (not just privileged
+            apps). -->
+        <flag name="preinstalled" value="0x400" />
     </attr>
 
     <!-- Flags indicating more context for a permission group. -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index caf15d1..82eb2c4 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -1262,11 +1262,14 @@
     <bool name="config_sms_capable">true</bool>
 
     <!-- Default SMS Application. This will be the default SMS application when
-         the phone first boots. The user can then change the default app to oe
+         the phone first boots. The user can then change the default app to one
          of their choosing.
          This can be overridden for devices where a different default SMS
-         application is desired. -->
-    <string name="default_sms_application" translatable="false">com.android.mms</string>
+         application is desired.
+
+         If this string is empty or the specified package does not exist, then
+         the platform will search for an SMS app and use that (if there is one)-->
+    <string name="default_sms_application" translatable="false"></string>
 
     <!-- Default web browser.  This is the package name of the application that will
          be the default browser when the device first boots.  Afterwards the user
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index f6cdb31..a6c4fcc 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1001,6 +1001,11 @@
       confirmation.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_accessImsCallService">access IMS call service</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_accessImsCallService">Allows the app to use the IMS service to make calls without your intervention.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_readPhoneState">read phone status and identity</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_readPhoneState">Allows the app to access the phone
diff --git a/docs/html-intl/intl/es/about/versions/lollipop.jd b/docs/html-intl/intl/es/about/versions/lollipop.jd
index 2725270..0ee8791 100644
--- a/docs/html-intl/intl/es/about/versions/lollipop.jd
+++ b/docs/html-intl/intl/es/about/versions/lollipop.jd
@@ -3,48 +3,41 @@
 @jd:body
 
 
-
-
-
-  <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0">
-    <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" >
-  </div>
-
-  <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;">
-  <div class="col-4 normal-links highlights" style="font-size:12px;">
-    <h3 id="thisd" >Funciones clave para programadores</h3>
-    <ul style="list-style-type:none;">
-  <li><a href="#Material">Material design</a></li>
-  <li><a href="#Perf">Enfoque en el rendimiento</a></li>
-  <li><a href="#Notifications">Notificaciones</a></li>
-  <li><a href="#TV">Tus aplicaciones en la pantalla grande</a></li>
-  <li><a href="#Documents">Aplicaciones centradas en el documento</a></li>
-  <li><a href="#Connectivity">Conectividad avanzada</a></li>
-  <li><a href="#Graphics">Gráficos de alto rendimiento</a></li>
-  <li><a href="#Audio">Audio más potente</a></li>
-  <li><a href="#Camera">Cámara y video mejorados</a></li>
-  <li><a href="#Work">Android en el lugar de trabajo</a></li>
-  <li><a href="#ScreenCapture">Captura y uso compartido de pantalla</a></li>
-  <li><a href="#Sensors">Nuevos tipos de sensores</a></li>
-  <li><a href="#WebView">WebView de Chromium</a></li>
-  <li><a href="#Accessibility">Accesibilidad y entrada</a></li>
-  <li><a href="#Battery">Herramientas para aplicaciones con uso eficiente de batería</a></li>
-    </ul>
-  </div>
+<div style="float:right;">
+  <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x">
 </div>
 
-
-
-
-
-
-
 <p>Te damos la bienvenida a Android 5.0 Lollipop, la versión de Android más extensa y ambiciosa hasta el momento.</p>
 
 <p>Esta versión está repleta de funciones nuevas para usuarios y miles de API nuevas para programadores. Android se sigue expandiendo; desde teléfonos, tablets y wearables hasta televisores y autos.</p>
 
 <p>Si quieres conocer las API para programadores más en detalle, consulta la <a href="{@docRoot}about/versions/android-5.0.html">Descripción general de las API de Android 5.0</a>. También puedes obtener más información sobre Android 5.0 para consumidores en <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>.</p>
 
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>Funciones clave para programadores</h2>
+  <ol>
+      <ul style="list-style-type:none;">
+           <li><a href="#Material">Material design</a></li>
+           <li><a href="#Perf">Enfoque en el rendimiento</a></li>
+           <li><a href="#Notifications">Notificaciones</a></li>
+           <li><a href="#TV">Tus aplicaciones en la pantalla grande</a></li>
+           <li><a href="#Documents">Aplicaciones centradas en el documento</a></li>
+           <li><a href="#Connectivity">Conectividad avanzada</a></li>
+           <li><a href="#Graphics">Gráficos de alto rendimiento</a></li>
+           <li><a href="#Audio">Audio más potente</a></li>
+           <li><a href="#Camera">Cámara y video mejorados</a></li>
+           <li><a href="#Work">Android en el lugar de trabajo</a></li>
+           <li><a href="#ScreenCapture">Captura y uso compartido de pantalla</a></li>
+           <li><a href="#Sensors">Nuevos tipos de sensores</a></li>
+           <li><a href="#WebView">WebView de Chromium</a></li>
+           <li><a href="#Accessibility">Accesibilidad y entrada</a></li>
+           <li><a href="#Battery">Herramientas para aplicaciones con uso eficiente de batería</a></li>
+      </ol>
+</div>
+</div>
+
+
 <h2 id="Material">Material design</h2>
 
 <p>Android 5.0 incluye <a href="http://www.google.com/design/spec">Material design</a> y te ofrece un kit de herramientas expandido para la interfaz de usuario. Con este kit, podrás integrar los nuevos patrones de diseño a las aplicaciones fácilmente.  </p>
@@ -72,7 +65,7 @@
 </div>
 
 
-<p>Las animaciones con efecto de propagación están disponibles para botones, casillas de verificación y otros controles táctiles de tu aplicación. 
+<p>Las animaciones con efecto de propagación están disponibles para botones, casillas de verificación y otros controles táctiles de tu aplicación.
 
 <p>También puedes definir elementos de diseño vectoriales en XML y animarlos de distintas formas. Los elementos de diseño vectoriales escalan sin perder definición, por lo que son ideales para los íconos de un solo color integrados en aplicaciones.</p>
 
diff --git a/docs/html-intl/intl/es/index.jd b/docs/html-intl/intl/es/index.jd
index 3c63b11..f69c442 100644
--- a/docs/html-intl/intl/es/index.jd
+++ b/docs/html-intl/intl/es/index.jd
@@ -1,93 +1,89 @@
 fullpage=true
-page.viewport_width=970
 excludeFromSuggestions=true
-page.metaDescription=El sitio oficial para los desarrolladores de Android. Proporciona el SDK de Android y la documentación para los diseñadores y desarrolladores de aplicaciones.
+page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
 page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />
 
 @jd:body
 
-<div class="home-new-carousel-1">
-  <div class="fullscreen-carousel-content">
-    <div class="vcenter">
-      <div class="wrap clearfix">
+<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel">
+</div> -->
+<section class="dac-hero-carousel">
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
+<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> -->
+<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;">
+<a href="/preview/index.html">
+  <div class="wrap" style="max-width:1100px;">
+    <div class="cols dac-hero-content">
+      <div class="col-10of16 col-push-6of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png"
+             srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-6of16 col-pull-10of16">
+        <div class="dac-hero-tag"></div>
 
-      <div class="landing-section-header">
-            <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div>
-            <div class="col-5" style=" margin-top:70px ">
-            <h3 stye="font-weight:300;">Android 5.0 Lollipop</h3>
-            <p>La actualización 5.0 de Android agrega una variedad de nuevas características para sus aplicaciones, como notificaciones en la pantalla de bloqueo, una nueva API de cámara, OpenGL ES 3.1, una nueva interfaz llamada "Material design", y mucho más.</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">Más información</a>
-            </div>
-          </div>
-          </div>
-        </div>
-       <h2>&nbsp;</h2>
-        <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16
-        no-section" data-query="collection:index/primary" data-resourcestyle="card"
-        data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget -->
-      </div> <!-- end .wrap -->
-    </div> <!-- end .vcenter -->
-  </div> <!-- end .fullscreen-carousel-content -->
-</div> <!-- end .fullscreen-carousel -->
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">Prepárese para la próxima versión de
+Android. Pruebe sus aplicaciones en Nexus 5, 6, 9 y Player. </p>
 
-<div class="actions-bar" style="margin-top:20px">
-  <div class="wrap">
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          ¡Empiece hoy mismo!
+        </a>
+      </div>
+    </div>
+  </div>
+</a>
+</article></section>
+
+<div 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">Obtener el SDK</a></div>
-      <div><a href="{@docRoot}samples/index.html">Examinar muestras</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">Mirar videos</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">Administrar tus aplicaciones</a></div>
+      <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="//www.youtube.com/user/androiddevelopers">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Watch Videos
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
 
 
-<div class="landing-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
+<section class="dac-section dac-section-light" id="build-apps"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    Resources to get you started with designing and developing for Android.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/primary"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-            <div class="landing-h1" style="margin-top:0px">Creado para un mundo de múltiples pantallas</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          Android se ejecuta en cientos de millones de dispositivos de todo el mundo, <br>
+<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel">
+</div>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">Creado para un mundo de múltiples pantallas</h1>
+    <div class="dac-section-subtitle">
+      Android se ejecuta en cientos de millones de dispositivos de todo el mundo, <br>
           y ahora es compatible con estos innovadores factores de forma.
-        </div>
-      </div>
-      <div class="landing-body" style="margin-top: 50px;">
-        <div class="landing-breakout cols">
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
-              <p class="landing-small">
-                Proporciona información dinámica para tus usuarios, cuando la necesiten.
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">Obtener información sobre Android Wear</a>
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png">
-              <p class="landing-small">
-                Crea aplicaciones para televisores y dale vida a tus contenidos.
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">Obtener información sobre Android TV</a>
-
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png">
-              <p class="landing-small">
-                Extiende tus aplicaciones de música para los sistemas de entretenimiento para automóviles.
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">Más información sobre Android Auto</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+    </div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/multiscreen"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html-intl/intl/es/preview/backup/index.jd b/docs/html-intl/intl/es/preview/backup/index.jd
new file mode 100644
index 0000000..7e23083
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/backup/index.jd
@@ -0,0 +1,327 @@
+page.title=Copia de seguridad automática para aplicaciones
+page.tags=copia de seguridad, recursos de la versión preliminar, androidm
+page.keywords=copia de seguridad, copia de seguridad automática, versión preliminar
+page.image=images/cards/card-auto-backup_2x.png
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Contenido del documento</h2>
+      <ol>
+        <li><a href="#overview">Información general</a></li>
+        <li><a href="#configuring">Configuración de la copia de seguridad de datos</a></li>
+        <li><a href="#testing">Pruebas de la configuración de copia de seguridad</a></li>
+        <li><a href="#issues">Problemas conocidos</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  A menudo, los usuarios invierten tiempo y esfuerzo significativos para crear datos y configurar preferencias dentro de las aplicaciones.
+ Preservar los datos de los usuarios en caso de que reemplacen un dispositivo averiado o se actualicen a uno nuevo es una parte importante para garantizar una excelente experiencia del usuario.
+ Los dispositivos que ejecutan el sistema de la versión preliminar de Android M ayudan a garantizar una buena experiencia para los usuarios en estas circunstancias al realizar automáticamente copias de seguridad de los datos de la aplicación en Google Drive.
+
+ Los datos de la aplicación se restauran automáticamente si un usuario cambia o actualiza un dispositivo.
+
+</p>
+
+<p>
+  Las copias de seguridad automáticas se habilitan para todas las aplicaciones instaladas en dispositivos que ejecuten la versión preliminar de Android M. No se requiere ningún código de aplicación adicional.
+ El sistema les proporciona a los usuarios la capacidad de desactivar las copias de seguridad de datos automáticas.
+ También puede optar por limitar qué datos de su aplicación se incluyen en la copia de seguridad.
+</p>
+
+<p>
+  En este documento, se describe el nuevo comportamiento del sistema y el modo de especificar qué datos incluir en la copia de seguridad de la aplicación.
+
+</p>
+
+<h2 id="overview">Información general</h2>
+
+<p>
+  Para preservar los datos que su aplicación crea en un dispositivo de usuario, la característica de copia de seguridad automática los carga a la cuenta de Google Drive del usuario y los cifra.
+ No se aplican cargos para usted ni para el usuario por el almacenamiento de datos y los datos guardados no se consideran al calcular la capacidad máxima de la cuenta personal de Google Drive del usuario.
+ Durante el período de la versión preliminar de Android M, los usuarios pueden almacenar hasta 25 MB por aplicación de Android.
+
+</p>
+
+<p>
+  Las copias de seguridad automáticas se realizan cada 24 horas, cuando el dispositivo está inactivo, se está cargando y está conectado a una red Wi-Fi.
+ Cuando se cumplen estas condiciones, el servicio Backup Manager carga todos los datos de copia de seguridad disponibles a la nube.
+ Cuando el usuario pasa a un dispositivo nuevo, o desinstala y vuelve a instalar la aplicación de la copia de seguridad, una operación de restauración copia los datos incluidos en la copia de seguridad en el directorio de datos de la aplicación recientemente instalada.
+
+
+</p>
+
+<p class="note">
+  <strong>Nota:</strong> Si su aplicación utiliza el <a href="{@docRoot}google/backup/index.html">servicio Android Backup</a> heredado, este nuevo comportamiento no se aplica y el comportamiento de copia de seguridad existente funciona de manera habitual.
+
+
+</p>
+
+
+<h3 id="auto-exclude">Archivos de datos automáticamente excluidos</h3>
+
+<p>
+  No todos los datos de la aplicación se deben incluir en la copia de seguridad, como los archivos temporales y los cachés, por lo que el servicio de copias de seguridad automáticas excluye ciertos archivos de datos de manera predeterminada:
+
+</p>
+
+<ul>
+  <li>Archivos de los directorios a los que hacen referencia los métodos {@link android.content.Context#getCacheDir
+    getCacheDir()} y {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
+.
+  </li>
+
+  <li>Archivos ubicados en almacenamiento externo, salvo que residan en el directorio al que hace referencia el método
+    {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+.
+  </li>
+
+  <li>Archivos ubicados en el directorio a los que hace referencia el método
+    {@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()}.
+  </li>
+</ul>
+
+<h2 id="configuring">Configuración de la copia de seguridad de datos</h2>
+
+<p>
+  Las copias de seguridad se realizan para los datos creados por cualquier aplicación instalada en un dispositivo con la versión preliminar de Android M, excepto en el caso de los archivos excluidos automáticamente que se mencionaron en la sección anterior.
+ Usted puede limitar y configurar aún más los datos que se incluyen en la copia de seguridad de su aplicación y, para ello, debe utilizar configuraciones en el manifiesto de su aplicación.
+
+</p>
+
+<h3 id="include-exclude">Cómo incluir o excluir datos</h3>
+
+<p>
+  De acuerdo con los datos que su aplicación necesita y el modo en que usted guarda estos datos, es posible que tenga que definir reglas específicas para incluir o excluir ciertos archivos o directorios.
+ El servicio de copias de seguridad automáticas admite la configuración de estas reglas de copias de seguridad a través del uso de un archivo de configuración XML y el manifiesto de la aplicación.
+
+ En el manifiesto de la aplicación, puede especificar un archivo de configuración de esquema de la copia de seguridad, como se muestra en el siguiente ejemplo:
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>
+  En este código de ejemplo, el atributo <code>android:fullBackupContent</code> especifica un archivo XML, ubicado en el directorio <code>res/xml/</code> del proyecto de desarrollo de su aplicación, con el nombre <code>mybackupscheme.xml</code>.
+
+ Este archivo de configuración incluye reglas sobre los archivos para los que se realiza una copia de seguridad.
+ El siguiente código de ejemplo muestra un archivo de configuración que excluye un archivo específico de las copias de seguridad:
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;full-backup-content&gt;
+    &lt;exclude domain="database" path="device_info.db"/&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  Este ejemplo de configuración de copia de seguridad solo excluye un archivo específico de base de datos que no se incluirá en la copia de seguridad.
+  Todos los demás archivos se incluirán en la copia de seguridad.
+</p>
+
+<h4>Sintaxis de la configuración de copia de seguridad</h4>
+
+<p>
+  La configuración del servicio de copias de seguridad le permite especificar qué archivos incluir en la copia de seguridad o excluir de ella.
+ La sintaxis del archivo de configuración XML de copia de seguridad de datos es la siguiente:
+</p>
+
+<pre>
+&lt;full-backup-content&gt;
+    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  Los siguientes elementos y atributos le permiten especificar qué archivos incluir de la copia de seguridad o excluir de ella:
+
+</p>
+
+<ul>
+  <li>
+  <code>&lt;include&gt;</code>. Use este elemento si desea especificar un conjunto de recursos para realizar una copia de seguridad, en lugar de hacer que el sistema realice una copia de seguridad de todos los datos de su aplicación de forma predeterminada.
+ Cuando especifica una etiqueta <code>&lt;include&gt;</code>, el sistema realiza una copia de seguridad <em>solo de los recursos que se especifican</em>
+ con este elemento.
+
+  </li>
+
+  <li>
+  <code>&lt;exclude&gt;</code>. Use este elemento para especificar un conjunto de recursos para excluir de la copia de seguridad.
+ El sistema realizará una copia de seguridad de todos los datos de su aplicación, excepto de los recursos que se especifican con este elemento.
+
+  </li>
+
+  <li>
+  <code>domain.</code> El tipo de recurso que desea incluir en la copia de seguridad o excluir de esta. Entre los valores válidos que usted puede especificar para este atributo se incluyen los siguientes:
+
+  </li>
+
+  <li style="list-style: none">
+  <ul>
+    <li>
+    <code>root</code>. Especifica que el recurso se encuentra en el directorio raíz de la aplicación.
+    </li>
+
+    <li>
+    <code>file</code>. Corresponde a un recurso del directorio devuelto por el método
+{@link android.content.Context#getFilesDir getFilesDir()}.
+    </li>
+
+    <li>
+    <code>database</code>. Corresponde a una base de datos devuelta por el método
+{@link android.content.Context#getDatabasePath getDatabasePath()} o mediante el uso de la clase
+{@link android.database.sqlite.SQLiteOpenHelper}.
+    </li>
+
+    <li>
+    <code>sharedpref</code>. Corresponde a un objeto {@link android.content.SharedPreferences} devuelto por el método {@link android.content.Context#getSharedPreferences getSharedPreferences()}
+.
+
+    </li>
+
+    <li>
+    <code>external</code>. Especifica que el recurso se encuentra en almacenamiento externo y corresponde a un archivo del directorio devuelto por el método
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}.
+
+    </li>
+
+    <li>
+    <code>path</code>. La ruta de archivo para un recurso que desea incluir en la copia de seguridad o excluir de esta.
+
+    </li>
+  </ul>
+  </li>
+</ul>
+
+
+<h3 id="prohibit">Cómo prohibir las copias de seguridad de datos</h3>
+
+<p>
+  Puede optar por impedir que se realicen copias de seguridad automáticas de los datos de su aplicación y, para ello, debe configurar el atributo
+<code>android:allowBackup</code> en <code>false</code> en el elemento de la aplicación de su manifiesto.
+ Esta configuración se ilustra en el siguiente código de ejemplo:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:allowBackup="false"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="testing">Pruebas de la configuración de copia de seguridad</h2>
+
+<p>
+  Cuando haya creado una configuración de copia de seguridad, debe probarla para garantizar que su aplicación guarde los datos y se pueda restaurar correctamente.
+
+</p>
+
+
+<h4>Cómo habilitar un registro de copias de seguridad</h4>
+
+<p>
+  Para ayudar a determinar la manera en que la característica de copia de seguridad está analizando su archivo XML, habilite el registro antes de realizar una copia de seguridad de prueba:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
+</pre>
+
+<h4>Cómo probar la copia de seguridad</h4>
+
+<p>Para ejecutar manualmente una copia de seguridad, primero debe inicializar Backup Manager llamando al siguiente comando:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr run
+</pre>
+
+<p>
+  Luego, realice una copia de seguridad de su aplicación manualmente utilizando el comando que se indica a continuación y especificando el nombre de paquete para su aplicación como el parámetro <code>&lt;PACKAGE&gt;</code>:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
+
+
+<h4>Cómo probar la restauración</h4>
+
+<p>
+  Para iniciar una restauración manualmente después de realizar una copia de seguridad de los datos, llame al comando que se indica a continuación y especifique el nombre de paquete para su aplicación como el parámetro <code>&lt;PACKAGE&gt;</code>:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr restore &lt;PACKAGE&gt;
+</pre>
+
+<p class="warning">
+  <b>Advertencia:</b> Esta acción detiene la aplicación y borra sus datos antes de realizar la operación de restauración.
+
+</p>
+
+<p>
+  Para iniciar el proceso de restauración de su aplicación, desinstale su aplicación y vuelva a instalarla. Los datos de la aplicación se restaurarán automáticamente desde la nube una vez que se complete la instalación.
+
+</p>
+
+
+<h4>Solución de problemas de las copias de seguridad</h4>
+
+<p>
+  Si tiene algún problema, borre los datos de la copia de seguridad y los metadatos asociados; para hacerlo, desactive y vuelva a activar la copia de seguridad en <strong>Settings &gt; Backup</strong>, restablezca el dispositivo a la configuración predeterminada de fábrica o llame al siguiente comando:
+
+
+</p>
+
+<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
+
+<p>
+  El valor <code>&lt;TRANSPORT&gt;</code> debe estar precedido por <code>com.google.android.gms</code>.
+  Para obtener una lista de transportes, llame al siguiente comando:
+</p>
+
+<pre>$ adb shell bmgr list transports</pre>
+
+<h2 id="issues">Problemas conocidos</h2>
+
+<p>Los siguientes son problemas conocidos del servicio de copias de seguridad automáticas:</p>
+
+<ul>
+  <li><strong>Google Cloud Messaging</strong>: En las aplicaciones que utilizan Google Cloud Messaging para notificaciones push, existe un problema conocido en el que al realizar una copia de seguridad de la Id. de registro devuelta por el registro de Google Cloud Messaging, se pueden romper las notificaciones push de la aplicación restaurada. Es importante realizar una consulta a la API para obtener una nueva Id. de registro después de realizar la instalación en un dispositivo nuevo, lo que no sucede si se realizó una copia de seguridad de la Id. de registro anterior.
+
+
+
+
+ Para evitar esta situación, excluya la Id. de registro del conjunto de archivos para incluir en la copia de seguridad.
+
+  </li>
+</ul>
diff --git a/docs/html-intl/intl/es/preview/download.jd b/docs/html-intl/intl/es/preview/download.jd
new file mode 100644
index 0000000..d71d8fd
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/download.jd
@@ -0,0 +1,360 @@
+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/app-linking.jd b/docs/html-intl/intl/es/preview/features/app-linking.jd
new file mode 100644
index 0000000..bd63559
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/features/app-linking.jd
@@ -0,0 +1,123 @@
+page.title=Vínculos de la aplicación
+page.image=images/cards/card-app-linking_2x.png
+page.keywords=vínculo de la aplicación, vínculos profundos, intentos
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Contenido del documento</h2>
+      <ol>
+        <li><a href="#web-assoc">Declarar la asociación de un sitio web</a></li>
+        <li><a href="#verfy-links">Solicitar verificación del vínculo de la aplicación</a></li>
+        <li><a href="#user-manage">Gestionar las configuraciones del vínculo de la aplicación</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  El sistema Android Intent es un mecanismo flexible para permitir a las aplicaciones controlar contenido y solicitudes.
+  Es posible que múltiples aplicaciones declaren modelos URI coincidentes en sus filtros de intento. Cuando un usuario hace clic en un vínculo web que no tiene un controlador de inicio predeterminado, la plataforma puede mostrar un diálogo para que el usuario seleccione una opción de una lista de aplicaciones que han declarado filtros de intento coincidentes.
+
+
+</p>
+
+<p>
+  Android M Developer Preview ofrece soporte para los vínculos de la aplicación, lo que mejora los controles de vínculos existentes al permitir a los desarrolladores de la aplicación asociar una aplicación con un dominio web propio.
+ Cuando los desarrolladores crean esta asociación, la plataforma puede determinar automáticamente la aplicación predeterminada utilizada para controlar un vínculo web particular y omitir el paso de solicitarles esta información a los usuarios.
+
+
+</p>
+
+
+<h2 id="web-assoc">Declarar una asociación de sitio web</h2>
+
+<p>
+  Los propietarios de un sitio web deben declarar las asociaciones con las aplicaciones a fin de establecer el vínculo de una aplicación. El propietario del sitio declara la relación con una aplicación al alojar un archivo JSON, denominado {@code statements.json}, en la ubicación conocida del domino:
+
+
+</p>
+
+<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<p class="note">
+  <strong>Nota:</strong>
+  Durante el período de M Developer Preview, el archivo JSON se verifica vía el protocolo http. Para la versión oficial de la plataforma, el archivo se verifica mediante el protocolo https cifrado.
+
+</p>
+
+<p>
+  Este archivo JSON indica la aplicación Android que se debe utilizar como el controlador predeterminado para las URL de este dominio.
+ Identifica la aplicación según estos campos:
+</p>
+
+<ul>
+  <li>{@code package_name}: El nombre de paquete declarado en el manifiesto de la aplicación.</li>
+
+  <li>{@code sha256_cert_fingerprints}: La huella dactilar SHA256 del certificado de firma de su aplicación.
+    Puede usar la herramienta Keytool de Java para generar la huella dactilar mediante el siguiente comando:
+    <pre>keytool -list -v -keystore my-release-key.keystore</pre>
+  </li>
+</ul>
+
+<p>
+  El siguiente listado de archivo muestra un ejemplo de los contenidos y del formato de un archivo
+{@code statements.json}:
+</p>
+
+<pre>
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "<strong>&lt;package name&gt;</strong>",
+    "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+  }
+}]
+</pre>
+
+
+<h2 id="verfy-links">Solicitar verificación del vínculo de la aplicación</h2>
+
+<p>
+  Una aplicación puede solicitar que la plataforma verifique automáticamente cualquier vínculo de aplicación definido por los nombres de host en los elementos de datos de sus filtros de intento, comparando con los archivos {@code statements.json} alojados en los respectivos dominios web.
+
+ Para solicitar la verificación del vínculo de la aplicación, agregue un atributo {@code android:autoVerify} a cada filtro de intento deseado en el manifiesto, como se muestra en el siguiente fragmento de código de manifiesto:
+
+
+</p>
+
+<pre>
+&lt;activity ...&gt;
+    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+        &lt;action android:name="android.intent.action.VIEW" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>
+  Cuando el atributo {@code android:autoVerify} está presente en un manifiesto de aplicación, la plataforma intenta verificar los vínculos de la aplicación al instalar la aplicación.
+ Si la plataforma no puede verificar exitosamente los vínculos de la aplicación, la aplicación no se configura como la aplicación preferida para controlar los vínculos web.
+ La próxima vez que un usuario abra uno de estos vínculos, la plataforma recurrirá a mostrar al usuario un diálogo.
+
+
+</p>
+
+<p class="note">
+  <strong>Nota:</strong> Durante la prueba, existe la posibilidad de un falso positivo si la verificación falla, pero el usuario ha habilitado explícitamente la aplicación para que abra los vínculos compatibles sin preguntar, utilizando la aplicación de Configuraciones del sistema. En este caso, no se muestra el diálogo y el vínculo se dirige directamente a su aplicación, pero solo debido a la configuración del usuario y no porque la verificación se haya realizado correctamente.
+
+
+
+</p>
+
+
+<h2 id="user-manage">Gestionar las configuraciones del vínculo de la aplicación</h2>
+
+<p>
+  Los usuarios pueden cambiar las configuraciones del vínculo de la aplicación de manera que las URL se controlen como ellos lo prefieran. Puede revisar y gestionar los vínculos de la aplicación en la aplicación de Configuraciones del sistema, en <strong>Settings &gt; Apps &gt; App Info &gt; Open by default</strong>.
+
+
+</p>
diff --git a/docs/html-intl/intl/es/preview/index.jd b/docs/html-intl/intl/es/preview/index.jd
new file mode 100644
index 0000000..35b578d
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/index.jd
@@ -0,0 +1,67 @@
+page.title=Android M Developer Preview
+page.tags="preview",
+meta.tags="preview, M preview", androidm
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">
+          Prepárese para la próxima versión de Android. Pruebe sus aplicaciones en Nexus 5, 6, 9 y Player.
+ Explore las novedades en los&mdash; <strong>permisos de ejecución</strong>, las características de ahorro de energía <strong>Doze</strong> y <strong>App Standby</strong>, la nueva <strong>tecnología de asistencia</strong> y mucho más.
+
+
+        </p>
+
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          ¡Empiece hoy mismo!</a>
+<br>
+      </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>
+
+<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 ayudarlo a preparar sus aplicaciones para Android M.
+  </div>
+ 
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/more"
+       data-cardSizes="6x6"
+       data-maxResults="16"></div>
+
+    <ul class="dac-section-links">
+      <li class="dac-section-link">
+        <a href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Informe los problemas
+        </a>
+      </li> 
+      <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
+        <span class="dac-sprite dac-auto-chevron"></span>
+        Únase a la comunidad en G+        </a>
+
+      </li>
+    </ul>
+  </div>
+</section>
+
diff --git a/docs/html-intl/intl/es/preview/license.jd b/docs/html-intl/intl/es/preview/license.jd
new file mode 100644
index 0000000..7222801
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/license.jd
@@ -0,0 +1,143 @@
+page.title=Contrato de licencia
+
+@jd:body
+
+<p>
+Para comenzar con la versión preliminar del SDK de Android, 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 SDK de Android, que está sujeta a cambios y que usted utiliza bajo su cuenta y riesgo.  La versión preliminar del SDK de Android 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 preliminar del SDK de Android (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 preliminar del SDK de Android (denominada “Versión preliminar” en el Contrato de licencia e 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 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/samples.jd b/docs/html-intl/intl/es/preview/samples.jd
new file mode 100644
index 0000000..03f41e4
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/samples.jd
@@ -0,0 +1,70 @@
+page.title=Ejemplos
+page.image=images/cards/samples-new_2x.png
+@jd:body
+
+<p>
+  Los siguientes códigos de ejemplo se proporcionan para M Developer Preview. Para descargar los ejemplos en Android Studio, seleccione la opción del menú <b>File &gt; Import Samples</b>.
+
+</p>
+
+<p class="note">
+  <strong>Nota:</strong> Estos proyectos que se pueden descargar están diseñados para usarlos con Gradle y Android Studio.
+
+</p>
+
+
+<h3 id="RuntimePermissions">Permisos de tiempo de ejecución</h3>
+
+<p>
+ Android M modifica la manera en que funcionan los permisos del sistema. Los usuarios deben aprobar solicitudes de permiso durante la ejecución, en lugar de durante la instalación.
+ Este ejemplo muestra cómo solicitar estos permisos.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-RuntimePermissions">Obtener en GitHub</a></p>
+
+<h3 id="ConfirmCredentials">Confirmar credencial</h3>
+
+<p>
+ Este ejemplo muestra cómo usar las credenciales del dispositivo como método de autenticación en su aplicación.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">Obtener en GitHub</a>
+</p>
+
+<h3 id="FingerprintDialog">Diálogo de huellas dactilares</h3>
+
+<p>
+ Este ejemplo muestra cómo reconocer huellas dactilares registradas para autenticar al usuario en su aplicación.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-FingerprintDialog">Obtener en GitHub</a></p>
+
+<h3 id="AutomaticBackup">Copia de seguridad automática para aplicaciones</h3>
+
+<p>
+ Android M incorpora la copia de seguridad automática para las configuraciones de la aplicación. Este ejemplo muestra cómo agregar reglas de filtrado en una aplicación para administrar la copia de seguridad de las configuraciones.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">Obtener en GitHub</a></p>
+
+<h3 id="CameraRaw">Camera 2 Raw</h3>
+
+<p>
+  Muestra cómo usar la API <code>Camera2</code> para capturar imágenes fotográficas RAW y guardarlas como archivos <code>DNG</code>.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-Camera2Raw">Obtener en GitHub</a></p>
+
+<h3 id="ActiveNotification">Notificación activa</h3>
+
+<p>
+  Este ejemplo muestra cómo <a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a> puede indicarle cuántas notificaciones está mostrando actualmente su aplicación.
+
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">Obtener en GitHub</a></p>
diff --git a/docs/html-intl/intl/es/preview/setup-sdk.jd b/docs/html-intl/intl/es/preview/setup-sdk.jd
new file mode 100644
index 0000000..e3f400f
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/setup-sdk.jd
@@ -0,0 +1,207 @@
+page.title=Configurar el SDK de la versión preliminar
+page.image=images/cards/card-set-up_16-9_2x.png
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Contenido del documento</h2>
+      <ol>
+        <li><a href="#get-as13">Obtener Android Studio 1.3</a></li>
+        <li><a href="#get-sdk">Obtener el SDK de la versión preliminar</a></li>
+        <li><a href="#create-update">Crear o actualizar un proyecto</a></li>
+        <li><a href="#setup-test">Configurar para realizar pruebas</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>M Developer Preview SDK se encuentra disponible desde Android SDK Manager. En este documento, se asume que usted está familiarizado con el desarrollo de aplicaciones de Android, como el uso de Android SDK Manager y la creación de proyectos.
+
+ Si no está familiarizado con Android, consulte primero la sección de capacitación <a href="{@docRoot}training/basics/firstapp/index.html">Desarrollo de su primera aplicación</a>.</a>
+
+</p>
+
+<h2 id="get-as13">Obtener Android Studio 1.3</h2>
+
+<p>La versión preliminar para desarrolladores funciona mejor con Android Studio 1.3, que es una versión preliminar.
+ Se recomienda que instale la versión preliminar de Android Studio 1.3 para trabajar con el SDK de la versión preliminar.
+</p>
+
+<p class="caution"><strong>Advertencia:</strong> La versión preliminar Canary de Android Studio 1.3 aún se encuentra en desarrollo activo.
+ Si utiliza su equipo de desarrollo principal para probar la versión preliminar para desarrolladores, puede instalar una segunda instancia de Android para realizar las pruebas.
+
+</p>
+
+<p>Para instalar la versión preliminar de Android Studio 1.3:</p>
+
+<ol>
+  <li>Descargue y ejecute <a href="{@docRoot}tools/studio/index.html">Android Studio</a>
+
+  </li>
+
+  <li>Abra la ventana <strong>Settings</strong> (en Windows, puede hacerlo desde <strong>File &gt; Settings</strong>).
+ Seleccione el panel <strong>Appearance &amp; Behavior &gt; System  Settings &gt; Updates</strong>.
+
+
+
+    <p class="aside">En OSX, puede encontrar el panel <strong>Appearance &amp; Behavior</strong> en la ventana <strong>Preferences</strong> de Android Studio.
+
+</p>
+  </li>
+
+  <li> En el panel <strong>Updates</strong>, elija la opción <strong>Automatically check updates for:
+ Canary Channel</strong>.
+  </li>
+
+  <li>En el panel <strong>Updates</strong>, elija <strong>Check Now</strong> para verificar la última compilación de Canary.
+ Descargue e instale la compilación cuando se lo pida.
+
+  </li>
+</ol>
+
+<h2 id="get-sdk">Obtener el SDK de la versión preliminar</h2>
+
+<p>Para añadir los componentes del SDK de la versión preliminar a su entorno de desarrollo:</p>
+
+<ol>
+  <li>Ejecute la versión preliminar de Android Studio 1.3.
+  </li>
+
+  <li>Abra la ventana <strong>Settings</strong> (en Windows, puede hacerlo desde <strong>File &gt; Settings</strong>).
+ Seleccione el panel <strong>Appearance &amp; Behavior &gt; System  Settings &gt; Updates</strong>.
+
+
+
+    <p class="aside">En OSX, puede encontrar el panel <strong>Appearance &amp; Behavior</strong> en la ventana <strong>Preferences</strong> de Android Studio.
+
+</p>
+  </li>
+
+  <li>En el panel <strong>Updates</strong>, elija las opciones <strong>Automatically check updates for:
+ Canary Channel</strong> y <strong>Automatically check updates for Android SDK:
+ Preview Channel</strong>.
+  </li>
+
+  <li>Ejecute <strong>Android SDK Manager</strong>. (En Android Studio 1.3, SDK Manager está integrado a Android Studio, en lugar de ser una aplicación independiente).
+
+
+  </li>
+
+  <li>En la sección <strong>Platforms</strong>, elija <strong>Android MNC Preview</strong>.
+
+  </li>
+
+  <li>En la sección <strong>Tools</strong>, elija las últimas <strong>SDK Tools</strong>, <strong>Platform-tools</strong> y <strong>Build-tools</strong> de Android.
+
+
+  </li>
+
+  <li>Seleccione <strong>Install packages</strong> y acepte el contrato de licencia para todos los paquetes.
+
+  </li>
+
+  <li>Verifique que M Developer Preview esté instalado; para hacerlo, abra la ventana <strong>Settings</strong> y elija el panel <strong>Appearance &amp; Behavior &gt; System Settings &gt; Android SDK</strong>.
+
+</li>
+
+  <li>En el panel <strong>Android SDK</strong>, elija la pestaña <strong>SDK Platforms</strong>.
+ <strong>Android MNC Preview</strong> deberá figurar como <em>Installed</em>.
+ Luego, abra la pestaña <strong>SDK Tools</strong> para verificar que estén instaladas las últimas herramientas.
+
+
+  </li>
+</ol>
+<p>Después de completar estos pasos, los componentes de la versión preliminar ya estarán disponibles en su entorno de desarrollo.
+ </p>
+
+
+<h2 id="create-update">Crear o actualizar un proyecto</h2>
+
+<p>
+  Si desea utilizar las API de la versión preliminar, debe crear o actualizar un proyecto de desarrollo para utilizar los componentes de la versión preliminar.
+
+</p>
+
+
+<h3 id="create">Crear un proyecto nuevo</h3>
+
+<p>
+  Recomendamos que utilice Android Studio para crear un proyecto con la versión preliminar. Siga los pasos que se describen en <a href="{@docRoot}sdk/installing/create-project.html">Crear un proyecto</a> hasta que llegue a la pantalla <em>Form Factors</em> en el asistente.
+
+ Luego, realice los siguientes pasos para crear un proyecto configurado para la versión preliminar.
+
+</p>
+
+<ul>
+  <li>Seleccione <strong>Phone and Tablet</strong>.</li>
+  <li>Seleccione <strong>MNC: Android M (Preview)</strong> en <strong>Minimum SDK</strong>.
+</li>
+</ul>
+
+
+<h3 id="update">Actualizar un proyecto existente</h3>
+
+<p>
+  Para proyectos existentes, debe modificar la configuración del proyecto para habilitar las API de la versión preliminar. En su entorno de desarrollo, abra el archivo 
+<code>build.gradle</code> para su módulo y configure estos valores de la siguiente manera:
+
+</p>
+
+<ul>
+  <li><code>compileSdkVersion</code> se configura en <code>'android-MNC'</code></li>
+  <li><code>minSdkVersion</code> se configura en <code>'MNC'</code></li>
+  <li><code>targetSdkVersion</code> se configura en <code>'MNC'</code></li>
+</ul>
+
+
+<h2 id="setup-test">Configurar para realizar pruebas</h2>
+
+<p>
+  Probar una aplicación con la versión preliminar requiere un dispositivo o un dispositivo virtual configurado con la versión preliminar de la plataforma.
+ Si tiene un dispositivo compatible, puede instalar la plataforma de la versión preliminar para realizar la prueba.
+ De lo contrario, puede configurar un dispositivo virtual para realizar la prueba.
+</p>
+
+<h3 id="setup-device">Configurar un dispositivo físico</h3>
+
+<p>
+  Si tiene un Nexus 5, Nexus 6, Nexus 9 o Android TV, puede instalar una imagen de sistema de la versión preliminar en estos dispositivos para probar su aplicación. Con la herramienta Android Virtual Device Manager, puede configurar un dispositivo virtual con la versión preliminar de la plataforma desde Android Studio 
+
+
+
+</p>
+
+<p class="caution">
+  <strong>Importante:</strong> El proceso de instalación de una imagen preliminar 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 preliminar.
+
+</p>
+
+<h3 id="setupAVD">Configurar un dispositivo virtual</h3>
+
+<p>
+  Con la herramienta Android Virtual Device, puede configurar un dispositivo virtual para la versión preliminar de la plataforma desde Android Studio.
+
+</p>
+
+<p>Crear un AVD (dispositivo virtual de Android) con AVD Manager:</p>
+
+<ol>
+  <li>Instale el SDK de la versión preliminar en su entorno de desarrollo, como se detalla en <a href="{@docRoot}preview/setup-sdk.html">Configurar el SDK de la versión preliminar</a>.
+
+</li>
+  <li>Siga los pasos en <a href="{@docRoot}tools/devices/managing-avds.html">Administración de los ADV con ADV Manager</a>.
+
+ Utilice las siguientes configuraciones:
+    <ul>
+      <li><strong>Dispositivo:</strong> Nexus 5, Nexus 6, Nexus 9 o Android TV</li>
+      <li><strong>Destino:</strong>
+       Android M (versión preliminar) - Nivel de API M</li>
+      <li><strong>ABI:</strong> x86</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  Para obtener más información sobre cómo crear dispositivos virtuales para realizar pruebas, consulte <a href="{@docRoot}tools/devices/index.html">Administración de dispositivos virtuales.</a>
+</p>
diff --git a/docs/html-intl/intl/es/preview/testing/guide.jd b/docs/html-intl/intl/es/preview/testing/guide.jd
new file mode 100644
index 0000000..138d6ca
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/testing/guide.jd
@@ -0,0 +1,187 @@
+page.title=Guía de prueba
+page.image=images/cards/card-build_16x9_2x.png
+page.keywords=recursos de la versión preliminar,androidm,pruebas,permisos
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Contenido del documento</h2>
+      <ol>
+        <li><a href="#runtime-permissions">Prueba de los permisos</a></li>
+        <li><a href="#doze-standby">Prueba de los modos Doze 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 M Developer Preview le brinda la oportunidad de garantizar que sus 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 su 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 su aplicación con la versión preliminar, se debe 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 su aplicación. Debe priorizar la prueba de estas características específicas preliminares, puesto que podrían tener un alto impacto en el comportamiento de su aplicación:
+
+
+</p>
+
+<ul>
+  <li><a href="#runtime-permissions">Permisos</a>
+  </li>
+  <li><a href="#doze-standby">Modos Doze 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, consulte la sección <a href="{@docRoot}preview/setup-sdk.html">Configurar el SDK de la versión preliminar</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 su aplicación.
+ En lugar de conceder todos los permisos durante el procedimiento de instalación, su 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 su aplicación y puede hacer que algunas características de su 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 usted debe comenzar a planificar ahora la migración de su aplicación al nuevo modelo de permisos, con el objetivo de publicar una versión actualizada de su aplicación cuando se lance la plataforma oficial.
+
+
+</p>
+
+
+<h3 id="permission-test-tips">Consejos para pruebas</h3>
+
+<p>
+  Use los siguientes consejos para pruebas como ayuda para planificar y ejecutar las pruebas de su aplicación con el nuevo comportamiento de permisos.
+
+</p>
+
+<ul>
+  <li>Identifique los permisos actuales de su aplicación y las rutas de códigos relacionadas.</li>
+  <li>Pruebe los flujos del usuario en los datos y servicios protegidos por permisos.</li>
+  <li>Realice pruebas con varias combinaciones de permisos concedidos/revocados.</li>
+  <li>Use la herramienta {@code adb} para administrar permisos desde la línea de comando:
+    <ul>
+      <li>Enumere los permisos y estados por grupo:
+        <pre>adb shell pm list permissions -d -g</pre>
+      </li>
+      <li>Conceda o revoque un permiso o más permisos utilizando la siguiente sintaxis:<br>
+        <pre>adb shell pm [grant|revoke] &lt;permission.name&gt; ...</pre>
+      </li>
+    </ul>
+  </li>
+  <li>Analice su 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 su aplicación, además de la experiencia del usuario y los flujos que usted proporciona a los usuarios.
+ Debe evaluar el uso de los permisos actuales de su aplicación y comenzar a planificar los nuevos flujos que desea ofrecer.
+ La versión oficial de la plataforma proporciona un comportamiento de compatibilidad, pero debe prever la actualización de su aplicación y no depender de estos comportamientos.
+
+
+</p>
+
+<p>
+  Identifique los permisos que su aplicación verdaderamente necesita y utiliza, y luego busque las diversas rutas de códigos que utilizan los servicios protegidos por permisos.
+ Puede realizar esto mediante una combinación de pruebas en la plataforma nueva y análisis de códigos.
+ Al realizar las pruebas, debe centrarse 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, consulte la sección <a href="{@docRoot}preview/setup-sdk.html#">Configurar el SDK de la versión preliminar</a>.
+
+</p>
+
+<p>
+  Realice 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, debe 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, consulte 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 Doze y App Standby</h2>
+
+<p>
+  Las características de ahorro de energía de los modos Doze y App Standby limitan la cantidad de procesamiento en segundo plano que puede realizar su aplicación cuando un dispositivo se encuentra en estado inactivo o mientras su 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 su aplicación tenga un comportamiento correcto con estas optimizaciones de ahorro de energía, debe probar su aplicación simulando estos estados de bajo consumo.
+
+
+</p>
+
+<h4 id="doze">Cómo probar la aplicación en modo Doze</h4>
+
+<p>Para probar el modo Doze con su aplicación, realice lo siguiente:</p>
+
+<ol>
+<li>Configure un dispositivo de hardware o un dispositivo virtual con una imagen del sistema de la versión preliminar de Android M.</li>
+<li>Conecte el dispositivo a su equipo de desarrollo e instale la aplicación.</li>
+<li>Ejecute su aplicación y déjela activa.</li>
+<li>Simule la activación del modo Doze 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>Observe el comportamiento de su aplicación cuando se reactive el dispositivo. Asegúrese de que se recupere correctamente cuando el dispositivo salga del modo Doze.
+</li>
+</ol>
+
+
+<h4 id="standby">Cómo probar aplicaciones en modo App Standby</h4>
+
+<p>Para probar el modo App Standby con su aplicación, realice lo siguiente:</p>
+
+<ol>
+  <li>Configure un dispositivo de hardware o un dispositivo virtual con una imagen del sistema de la versión preliminar de Android M.</li>
+  <li>Conecte el dispositivo a su equipo de desarrollo e instale su aplicación.</li>
+  <li>Ejecute su aplicación y déjela activa.</li>
+  <li>Simule 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 &lt;packageName&gt; true
+</pre>
+
+  </li>
+  <li>Simule la activación de su aplicación con el siguiente comando:
+    <pre>$ adb shell am set-idle &lt;packageName&gt; false</pre>
+  </li>
+  <li>Observe el comportamiento de su aplicación al reactivarse. Asegúrese de que se recupere correctamente del modo App Standby.
+ En particular, debe comprobar si los trabajos en segundo plano y las notificaciones de su 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 su 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úrese 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/testing/performance.jd b/docs/html-intl/intl/es/preview/testing/performance.jd
new file mode 100644
index 0000000..7346976
--- /dev/null
+++ b/docs/html-intl/intl/es/preview/testing/performance.jd
@@ -0,0 +1,656 @@
+page.title=Prueba de rendimiento de video
+page.image=images/cards/card-test-performance_2x.png
+page.keywords=rendimiento, fotogramas por segundo, herramientas
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Contenido del documento</h2>
+      <ol>
+        <li><a href="#measure">Medición del rendimiento de la UI</a>
+          <ul>
+            <li><a href="#aggregate">Incorporación de Frame Stats</a></li>
+            <li><a href="#timing-info">Información precisa del intervalo del fotograma</a></li>
+            <li><a href="#timing-dump">Volcado simple del intervalo del fotograma</a></li>
+            <li><a href="#collection-window">Control del período de recopilación de datos</a></li>
+            <li><a href="#diagnose">Diagnóstico de regresiones de rendimiento</a></li>
+            <li><a href="#resources">Recursos adicionales</a></li>
+          </ul>
+        </li>
+        <li><a href="#automate">Automatización de las pruebas de rendimiento de la UI</a>
+          <ul>
+            <li><a href="#ui-tests">Configuración de las pruebas de UI</a></li>
+            <li><a href="#automated-tests">Configuración de las pruebas automatizadas de UI</a></li>
+            <li><a href="#triage">Clasificación y solución de problemas detectados</a></li>
+          </ul>
+        </li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  La prueba de rendimiento de la UI le garantiza que su aplicación no solo cumpla con los requisitos funcionales sino que la interacción del usuario con su aplicación sea fluida y funcione constantemente a 60 fotogramas por segundo (<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">Why 60fps?</a>) sin disminuir o retrasar fotogramas (lo que llamamos <em>“jank”</em>).
+
+
+ Este documento explica las herramientas disponibles para medir el rendimiento de la UI y establece un enfoque para integrar las medidas de rendimiento de la UI en sus prácticas de prueba.
+
+
+</p>
+
+
+<h2 id="measure">Medición del rendimiento de la UI</h2>
+
+<p>
+  Para mejorar el rendimiento, primero necesita poder medir el rendimiento de su sistema y, luego, diagnosticar e identificar los problemas que puedan surgir debido a las varias secciones de su canalización.
+
+
+</p>
+
+<p>
+  <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em> es una herramienta de Android que se ejecuta en el dispositivo y vuelca información útil sobre el estado de los servicios del sistema.
+
+ Al pasar el comando <em>gxinfo</em> a dumsys, se obtiene una salida de logcat con información de rendimiento en relación con los fotogramas de animación que ocurren durante la fase de grabado.
+
+
+</p>
+
+<pre>
+&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
+</pre>
+
+<p>
+  Este comando puede crear múltiples variantes diferentes de datos del intervalo del fotograma.
+</p>
+
+<h3 id="aggregate">Incorporación de Frame Stats</h3>
+
+<p>
+  En la versión preliminar de Android M, el comando emite un análisis adicional a logcat sobre los datos del fotograma. Estos datos se recopilan en toda la duración del proceso.
+ Por ejemplo:
+</p>
+
+<pre class="noprettyprint">
+Stats since: 752958278148ns
+Total frames rendered: 82189
+Janky frames: 35335 (42.99%)
+90th percentile: 34ms
+95th percentile: 42ms
+99th percentile: 69ms
+Number Missed Vsync: 4706
+Number High input latency: 142
+Number Slow UI thread: 17270
+Number Slow bitmap uploads: 1542
+Number Slow draw: 23342
+</pre>
+
+<p>
+  Estas estadísticas de alto nivel representan, en un nivel avanzado, el rendimiento de representación de la aplicación y su estabilidad en muchos fotogramas.
+
+</p>
+
+
+<h3 id="timing-info">Información precisa del intervalo del fotograma</h3>
+
+<p>
+  La versión preliminar de Android M ofrece un nuevo comando para gfxinfo, es <em>framestats</em> que brinda información extremadamente detallada sobre el intervalo del fotograma reciente, de manera que usted puede localizar y depurar errores de manera más precisa.
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
+</pre>
+
+<p>
+  Este comando emite información sobre el intervalo del fotograma, medida en nanosegundos, de los últimos 120 fotogramas que produjo la aplicación. A continuación, se muestra un ejemplo sin formato de adb dumpsys gxinfo &lt;PACKAGE_NAME&gt; framestats:
+
+
+</p>
+
+<pre class="noprettyprint">
+0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
+0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
+0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
+0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
+</pre>
+
+<p>
+  Cada línea de esta salida representa un fotograma producido por la aplicación. Cada línea tiene un número fijo de columnas que describen el tiempo transcurrido en cada etapa de la canalización de producción de fotogramas.
+ En la siguiente sección, se describe este formato en detalle y se explica qué representa cada columna.
+
+</p>
+
+
+<h4 id="fs-data-format">Formato de datos de framestats</h4>
+
+<p>
+  Debido a que el bloque de datos se emite en formato CSV, es muy sencillo pegarlo en su herramienta de hoja de cálculo preferida, o recopilar y redistribuir con un script.
+ La siguiente tabla explica el formato de las columnas de los datos de salida.
+ Las marcas de tiempo están en nanosegundos.
+</p>
+
+<ul>
+  <li>FLAGS
+    <ul>
+      <li>El tiempo total del fotograma de las filas con “0” en la columna FLAGS se puede calcular restando la columna INTENDED_VSYNC a la columna FRAME_COMPLETED.
+
+      </li>
+
+      <li>Si el resultado no es cero, la fila se debe ignorar, ya que se ha determinado que el fotograma contiene un valor atípico de rendimiento, donde se espera que el diseño y la imagen tomen más de 16 ms.
+
+ Razones por las que esto puede suceder:
+        <ul>
+          <li>Se cambió el diseño de la ventana (ya sea el primer fotograma de la aplicación o luego de una rotación)
+
+          </li>
+
+          <li>También es posible que se haya omitido el fotograma. En ese caso, alguno de los valores tendrán marcas de tiempo no utilizables.
+ Se puede omitir un fotograma si, por ejemplo, supera los 60 fotogramas por segundo o si no había nada desfasado en pantalla. Esto no necesariamente indica que la aplicación tenga algún problema.
+
+
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>INTENDED_VSYNC
+    <ul>
+      <li>El punto de partida previsto del fotograma. Si este valor es diferente de VSYNC, el subproceso de la interfaz de usuario se encontraba ocupado, lo que evitó la respuesta a la señal vsync de manera oportuna.
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>VSYNC
+    <ul>
+      <li>El valor de tiempo que se utilizó en todas las escuchas vsync y las imágenes para el fotograma (devolución de llamada del fotograma Choreographer, animaciones, View.getDrawingTime(), etc.).
+
+      </li>
+
+      <li>Para obtener más información sobre VSYNC y cómo influye en su aplicación, consulte el video <a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">
+Understanding VSYNC</a>.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>OLDEST_INPUT_EVENT
+    <ul>
+      <li>La marca de tiempo del evento de entrada más antiguo de la cola de entrada, o Long.MAX_VALUE en caso de que el fotograma no tengan ninguna entrada.
+
+      </li>
+
+      <li>Este valor está diseñado principalmente para trabajar en la plataforma y tiene utilidad limitada para los desarrolladores de aplicaciones.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>NEWEST_INPUT_EVENT
+    <ul>
+      <li>La marca de tiempo del evento de entrada más reciente de la cola de entrada, o 0 en caso de que el fotograma no contenga ninguna entrada.
+
+      </li>
+
+      <li>Este valor está diseñado principalmente para trabajar en la plataforma y tiene utilidad limitada para los desarrolladores de aplicaciones.
+
+      </li>
+
+      <li>Sin embargo, puede obtener una idea general sobre la cantidad de latencia que la aplicación está añadiendo consultando (FRAME_COMPLETED - NEWEST_INPUT_EVENT).
+
+      </li>
+    </ul>
+  </li>
+
+  <li>HANDLE_INPUT_START
+    <ul>
+      <li>La marca de tiempo en que el evento de entrada se distribuye a la aplicación.
+      </li>
+
+      <li>Al observar el tiempo entre esto y ANIMATION_START, se puede medir cuánto tiempo dedicó la aplicación a la administración de eventos de entrada.
+
+      </li>
+
+      <li>Si este valor es alto (mayor a 2 ms), esto significa que la aplicación dedica tiempo poco común al proceso de los eventos de entrada, como View.onTouchEvent(), lo que indica que este proceso se debe optimizar o descargar a otro subproceso.
+
+ Tenga en cuenta que, en algunas ocasiones, como cuando al hacer clic en un evento que lanza nuevas actividades o algo parecido, se espera y es aceptable que este valor sea alto.
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ANIMATION_START
+    <ul>
+      <li>La marca de tiempo en la que se ejecutaron las animaciones registradas con Choreographer.
+      </li>
+
+      <li>Al observar el tiempo entre esto y PERFORM_TRANVERSALS_START, se puede determinar cuánto tiempo llevó evaluar todos los mecanismos de animación (los más comunes son ObjectAnimator, ViewPropertyAnimator y Transitions) que se estén ejecutando.
+
+
+      </li>
+
+      <li>Si este valor es alto (mayor a 2 ms), controle si su aplicación escribió alguna animación personalizada o qué campos está animando ObjectAnimators y asegúrese de que su animación sea adecuada.
+
+
+      </li>
+
+      <li>Para obtener más información sobre Choreographer, consulte el video <a href="https://developers.google.com/events/io/sessions/325418001">For Butter or Worse</a>.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>PERFORM_TRAVERSALS_START
+    <ul>
+      <li>Si a este valor le resta DRAW_START, puede saber cuánto tardaron en completarse las fases de medición y diseño. (Durante el desplazamiento o la animación, este número deberá ser cercano a cero).
+
+
+      </li>
+
+      <li>Para obtener más información sobre las fases de medición y diseño de la canalización de representación, consulte el video <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">
+Invalidations, Layouts and Performance</a>.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>DRAW_START
+    <ul>
+      <li>El momento en que comenzó la fase de dibujo de performTraversals. Este es el punto inicial de grabación de la listas de visualización de cualquier vista invalidada.
+
+      </li>
+
+      <li>El tiempo entre esto y SYNC_START muestra cuánto se tardó en llamar a View.draw() en todas las vistas invalidadas en el árbol.
+
+      </li>
+
+      <li>Para obtener más información sobre el modelo de dibujo, consulte los videos <a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">Hardware Acceleration</a>
+ o <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">
+Invalidations, Layouts and Performance.</a>
+      </li>
+    </ul>
+  </li>
+
+  <li>SYNC_START
+    <ul>
+      <li>El momento en que comenzó la fase de sincronización del dibujo.
+      </li>
+
+      <li>Si el tiempo entre esto e ISSUE_DRAW_COMMANDS_START es muy alto (mayor a 0,4 ms o similar), generalmente esto significa que se dibujaron muchos mapas de bits que se deben subir a GPU.
+
+
+      </li>
+
+      <li>Para obtener más información sobre la fase de sincronización, consulte el video <a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">
+Profile GPU Rendering.</a>
+      </li>
+    </ul>
+  </li>
+
+  <li>ISSUE_DRAW_COMMANDS_START
+    <ul>
+      <li>El momento en que el representador de hardware comenzó a enviar comandos de dibujo a GPU.
+      </li>
+
+      <li>El tiempo entre esto y FRAME_COMPLETED permite obtener una idea general sobre cuánto trabajo le genera la aplicación a GPU.
+ Aquí aparecen los problemas como el exceso de dibujos o efectos de representación ineficientes.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SWAP_BUFFERS
+    <ul>
+      <li>El momento en que se llamó a eglSwapBuffers, generalmente de poca importancia fuera del trabajo en plataforma.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>FRAME_COMPLETED
+    <ul>
+      <li>¡Todo listo! El tiempo total dedicado al trabajo en este fotograma se puede calcular al hacer FRAME_COMPLETED - INTENDED_VSYNC.
+
+      </li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>
+  Puede utilizar esta información de distintas maneras. Un método de visualización simple pero eficaz es el histograma que muestra la distribución de los tiempos del fotograma (FRAME_COMPLETED - INTENDED_VSYNC) en distintos bloques de latencia; vea la siguiente figura.
+
+ Este gráfico indica brevemente que la mayoría de los fotogramas estuvieron muy bien, es decir, por debajo del límite de 16 ms (marcado en rojo). Sin embargo, algunos fotogramas estuvieron muy por arriba del límite.
+
+ En el histograma, podemos observar los cambios con el correr del tiempo para ver la creación de los cambios totales o los nuevos valores atípicos.
+ También puede graficar la latencia de entrada, el tiempo dedicado al diseño o cualquier otra medición interesante similar sobre las marcas de tiempo en los datos.
+
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-framestats.png">
+
+
+<h3 id="timing-dump">Volcado simple del intervalo del fotograma</h3>
+
+<p>
+  Si, en las Opciones de Desarrollador, <strong>Profile GPU rendering</strong> se configura en <strong>In adb shell dumpsys gfinfo</strong>, el comando <code>adb shell dumpsys gfxinfo</code> emite sobre el tiempo de los 120 fotogramas más recientes y los agrupa en algunas categorías diferentes con valores separados por tabulación.
+
+
+ Esta información puede resultar útil para indicar qué partes de la canalización del dibujo podrían funcionar lento en un nivel alto.
+
+</p>
+
+<p>
+  Al igual que <a href="#fs-data-format">framestats</a>, es muy sencillo pegar esta información en su herramienta de hoja de cálculo preferida, o recolectar y redistribuir con un script.
+
+ El siguiente gráfico detalla dónde pasaron tiempo muchos de los fotogramas generados por la aplicación.
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
+
+<p>
+  El resultado de ejecutar gfxinfo, copiar la salida, pegar en una aplicación de hoja de cálculo y graficar la información en forma de barras apiladas.
+
+</p>
+
+<p>
+  Cada barra vertical representa un fotograma de animación, su altura representa la cantidad de milisegundos que le llevó calcular ese fotograma de animación.
+ Cada segmento de color de la barra representa una etapa diferente de la canalización de representación, de manera que usted pueda observar qué partes de su aplicación pueden estar creando un cuello de botella.
+
+ Para obtener más información sobre la canalización de representación y cómo optimizarla, consulte el video <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">
+Invalidations Layouts and Performance</a>.
+
+</p>
+
+
+<h3 id="collection-window">Control del período de recopilación de datos</h3>
+
+<p>
+  Los intervalos de framestats y del fotograma simple recopilan datos durante un período muy breve: aproximadamente dos segundos que valen la pena representar.
+ Para poder controlar este período con precisión, por ejemplo para limitar los datos a una animación en particular, puede restablecer todos los contadores y agregar los datos recopilados.
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
+</pre>
+
+<p>
+  Esto se puede usar junto con los comandos de volcado para recopilar y restablecer a una cadencia normal a fin de capturar continuamente períodos de fotogramas de menos de dos segundos.
+
+
+</p>
+
+
+<h3 id="diagnose">Diagnóstico de regresiones de rendimiento</h3>
+
+<p>
+  La identificación de regresiones es un buen primer paso para localizar los problemas y mantener la aplicación funcionando correctamente.
+ Sin embargo, dumpsys solo identifica la existencia y la gravedad relativa de los problemas.
+ Usted todavía debe diagnosticar la causa particular de los problemas de rendimiento y encontrar las soluciones adecuadas.
+ Para esto, es sumamente recomendable que utilice la herramienta <a href="{@docRoot}tools/help/systrace.html">systrace</a>.
+
+</p>
+
+
+<h3 id="resources">Recursos adicionales</h3>
+
+<p>
+  Para obtener más información sobre el funcionamiento de la canalización de representación de Android, los problemas comunes que puede encontrar y cómo solucionarlos, es posible que algunos de los siguientes recursos le resulten útiles:
+
+
+</p>
+
+<ul>
+  <li>Rendering Performance 101
+  </li>
+  <li>Why 60fps?
+  </li>
+  <li>Android UI and the GPU
+  </li>
+  <li>Invalidations Layouts and performance
+  </li>
+  <li>Analyzing UI Performance with Systrace
+  </li>
+</ul>
+
+
+<h2 id="automate">Pruebas automatizadas de rendimiento de la UI</h2>
+
+<p>
+  Un enfoque para realizar la prueba de rendimiento de la UI es solicitar a un evaluador que realice una serie de operaciones de usuario en la aplicación objetivo para identificar visualmente jank, o bien, pasar mucho tiempo utilizando un enfoque basado en alguna herramienta para encontrar jank.
+
+ Sin embargo, este enfoque manual tiene sus riesgos, la habilidad humana para percibir cambios en los índices de los fotogramas varía de manera alarmante. Además, este proceso lleva mucho tiempo, es tedioso y propenso a errores.
+
+
+</p>
+
+<p>
+  Un método más eficiente es registrarse y analizar las mediciones de rendimiento clave a partir de pruebas automatizadas de UI.
+ Android M Developer Preview incluye nuevas capacidades de registro que facilitan la determinación de la cantidad y gravedad de jank en las animaciones de su aplicación y pueden utilizarse para crear un proceso estricto a fin de determinar su rendimiento actual y realizar un seguimiento de futuros objetivos de rendimiento.
+
+
+
+</p>
+
+<p>
+  Este artículo lo guía a través de un enfoque recomendado para utilizar esa información a fin de automatizar su prueba de rendimiento.
+
+</p>
+
+<p>
+  Esto se divide básicamente en dos acciones clave. Primero, identificar qué está probando y cómo lo prueba. Segundo, configurar y mantener un entorno de prueba automatizado.
+
+
+</p>
+
+
+<h3 id="ui-tests">Configuración de pruebas de UI</h3>
+
+<p>
+  Antes de comenzar con las pruebas automatizadas, es importante establecer algunas decisiones de alto nivel para entender correctamente el espacio de prueba y las necesidades que puede tener.
+
+</p>
+
+<h4>
+  Identifique flujos/animaciones clave que desea probar
+</h4>
+
+<p>
+  Recuerde que el usuario visualiza el rendimiento negativo cuando una animación fluida se interrumpe.
+ Por lo tanto, al identificar qué tipo de acciones de UI desea probar, se recomienda centrarse en aquellas animaciones clave que el usuario ve más o que son más importantes para su experiencia.
+
+ Por ejemplo, a continuación, se mencionan situaciones comunes que es útil identificar:
+</p>
+
+<ul>
+  <li>Desplazamiento por ListView o RecyclerView principales
+  </li>
+
+  <li>Animaciones durante ciclos de espera no sincronizados
+  </li>
+
+  <li>Animaciones que puedan contener manipulación o carga de mapa de bits
+  </li>
+
+  <li>Animaciones que incluyan combinación alfa
+  </li>
+
+  <li>Dibujos personalizados con Canvas
+  </li>
+</ul>
+
+<p>
+  Trabaje con los ingenieros, diseñadores y gerentes de productos de su equipo a fin de priorizar estas animaciones clave para la cobertura de la prueba.
+
+</p>
+
+<h4>
+  Establezca sus objetivos futuros y realice un seguimiento en virtud de ellos
+</h4>
+
+<p>
+  Desde un nivel alto, puede ser crítico identificar sus metas de rendimiento específicas y concentrarse en escribir pruebas y recopilar datos sobre ellas.
+ Por ejemplo:
+</p>
+
+<ul>
+  <li>¿Simplemente desea comenzar a realizar un seguimiento del rendimiento de la UI por primera vez para obtener más información?
+  </li>
+
+  <li>¿Desea evitar regresiones que podrían aparecer en el futuro?
+  </li>
+
+  <li>¿Se encuentra hoy en un 90 % de fluidez de fotogramas y quiere alcanzar un 98 % en este trimestre?
+  </li>
+
+  <li>¿Se encuentra en un 98 % de fluidez de fotogramas y no quiere retroceder?
+  </li>
+
+  <li>¿Tiene como objetivo mejorar el rendimiento en dispositivos de gama baja?
+  </li>
+</ul>
+
+<p>
+  Para todas estas situaciones, es recomendable realizar un seguimiento que muestre el rendimiento en múltiples versiones de su aplicación.
+
+</p>
+
+<h4>
+  Identifique los dispositivos en los que desea realizar la prueba
+</h4>
+
+<p>
+  El rendimiento de la aplicación varía según el dispositivo en el que se ejecuta. Algunos dispositivos pueden tener menos memoria, GPU menos potentes o CPU más lentos.
+ Esto significa que las animaciones que funcionan bien en un conjunto de hardware pueden no hacerlo en otros, o peor, pueden provocar un cuello de botella en diferentes secciones de la canalización.
+
+ Por lo tanto, para justificar esta variación en lo que un usuario puede ver, seleccione una serie de dispositivos, tanto de alta gama como de baja, tablets, etc., en los que ejecutará las pruebas.
+
+ Busque variedad en rendimiento de CPU, memoria RAM, resolución de pantalla, tamaño, etc.
+ Las pruebas exitosas en un dispositivo de alta gama pueden fallar en uno de baja gama.
+
+</p>
+
+<h4>
+  Marcos básicos para pruebas de UI
+</h4>
+
+<p>
+  Algunos conjuntos de herramientas, como <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> y <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a>, están diseñados para ayudar a automatizar el desplazamiento de un usuario por su aplicación.
+
+ Estos son marcos simples que imitan la interacción del usuario con el dispositivo.
+ Para utilizar estos marcos, debe crear con éxito scripts únicos que se ejecuten en un conjunto de acciones de usuarios y reproducirlos en el dispositivo en sí.
+
+
+</p>
+
+<p>
+  Al combinar estas pruebas automatizadas junto con <code>dumpsys gfxinfo</code>, puede crear rápidamente un sistema reproducible que le permite ejecutar una prueba y medir la información de rendimiento de esa condición particular.
+
+
+</p>
+
+
+<h3 id="automated-tests">Configurar pruebas automatizadas de UI</h3>
+
+<p>
+  Una vez que pueda ejecutar una prueba de UI y una canalización para recopilar datos de una sola prueba, el próximo paso importante es elegir un marco que pueda ejecutar esa prueba muchas veces en múltiples dispositivos y agregar los datos de rendimiento resultantes para que su equipo de desarrollo los analice mejor.
+
+
+
+</p>
+
+<h4>
+  Un marco para la automatización de pruebas
+</h4>
+
+<p>
+  Vale la pena mencionar que los marcos para pruebas de UI (como <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>) se ejecutan directamente en el emulador/dispositivo objetivo.
+ A la recopilación de información de rendimiento realizada por 
+<em>dumpsys gfxinfo</em> la impulsa un equipo de host que envía comandos por ADB. Para ayudar a unir la automatización de estas entidades separadas, se diseñó el marco <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner.</a> Un sistema de scripts que se ejecuta en su equipo de host y que puede emitir comandos a un conjunto de dispositivos conectados y recibir datos de ellos.
+
+
+
+</p>
+
+<p>
+  Al crear un conjunto de scripts para la automatización adecuada de las pruebas de rendimiento de UI, usted podrá, como mínimo, utilizar MonkeyRunner para realizar con éxito las siguientes tareas:
+
+</p>
+
+<ul>
+  <li>Cargar e iniciar un APK deseado en un dispositivo objetivo, en múltiples dispositivos o en un emulador.
+  </li>
+
+  <li>Iniciar una prueba de UI automatizada y permitir que se ejecute.
+  </li>
+
+  <li>Recopilar información de rendimiento mediante <em>dumpsys gfxinfo</em><em>.</em>
+  </li>
+
+  <li>Añadir información y presentársela de manera útil al desarrollador.
+  </li>
+</ul>
+
+
+<h3 id="triage">Clasificar y solucionar problemas detectados</h3>
+
+<p>
+  Una vez que se identifican los patrones de problemas o las regresiones, el paso siguiente es identificar y aplicar la solución.
+ Si su marco de pruebas automatizadas preserva detalles precisos del intervalo para los fotogramas, puede ayudarlo a investigar cambios sospechosos de código o diseño (en el caso de una regresión), o delimitar la parte del sistema que está analizando al cambiar a una investigación manual.
+
+
+ Para realizar una investigación manual, <a href="{@docRoot}tools/help/systrace.html">systrace</a> es un buen lugar para comenzar, ya que muestra información precisa sobre cada etapa de la canalización de representación, cada subproceso y núcleo del sistema, además de cualquier marca de evento personalizada que usted defina.
+
+
+</p>
+
+<h4>
+  Descripción adecuada de intervalos temporales
+</h4>
+
+<p>
+  Es importante mencionar las dificultades para obtener y medir los intervalos que son producto del rendimiento de la representación.
+ Estos números son, por naturaleza, no deterministas y, a menudo, fluctúan según el estado del sistema, la cantidad de memoria disponible, el límite térmico y la última vez que un rayo solar tocó el área de la tierra donde se encuentra.
+
+ El punto es que puede ejecutar la misma prueba dos veces y obtener números apenas diferentes que pueden estar cerca pero no ser iguales.
+
+
+</p>
+
+<p>
+  Para recopilar y definir datos correctamente de esta manera, deberá ejecutar la misma prueba muchas veces y acumular los resultados como un promedio o un valor promedio (para que resulte más fácil, lo llamaremos un “lote”). Esto le ofrece una aproximación estimada del rendimiento de la prueba, sin requerir intervalos exactos.
+
+
+
+</p>
+
+<p>
+  Los lotes se pueden usar entre cambios de código para verificar el impacto relativo que esos cambios tienen en el rendimiento.
+ Si el índice de fotograma promedio para el lote previo al cambio es que el lote después del cambio, entonces, generalmente está en presencia de un incremento general en relación con el rendimiento para ese cambio particular.
+
+
+</p>
+
+<p>
+  Esto significa que cualquier prueba automatizada de UI que lleve a cabo debería tener en cuenta este concepto, además de justificar cualquier anomalía que pudiera surgir durante una prueba.
+ Por ejemplo, si el rendimiento de su aplicación disminuye repentinamente debido a algún problema con el dispositivo (que no sea provocado por la aplicación), deberá volver a ejecutar el lote para obtener intervalos menos caóticos.
+
+
+
+</p>
+
+<p>
+  Entonces, ¿cuántas veces debe ejecutar una prueba para que los resultados sean significativos? El mínimo debe ser 10 veces y con números más altos, como 50 o 100, para obtener resultados más precisos (por supuesto, ahora cambia el tiempo por la precisión).
+
+
+</p>
diff --git a/docs/html-intl/intl/ja/about/versions/lollipop.jd b/docs/html-intl/intl/ja/about/versions/lollipop.jd
index 9c7c52c..fe83dd8 100644
--- a/docs/html-intl/intl/ja/about/versions/lollipop.jd
+++ b/docs/html-intl/intl/ja/about/versions/lollipop.jd
@@ -3,53 +3,39 @@
 @jd:body
 
 
-
-
-
-
-
-
-
-
-  <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0">
-    <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" >
-  </div>
-
-  <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;">
-  <div class="col-4 normal-links highlights" style="font-size:12px;">
-    <h3 id="thisd" >主なデベロッパー機能</h3>
-    <ul style="list-style-type:none;">
-  <li><a href="#Material">Material Design</a></li>
-  <li><a href="#Perf">パフォーマンス重視</a></li>
-  <li><a href="#Notifications">通知</a></li>
-  <li><a href="#TV">アプリを大画面で</a></li>
-  <li><a href="#Documents">アプリのドキュメント化</a></li>
-  <li><a href="#Connectivity">進化した接続性</a></li>
-  <li><a href="#Graphics">高性能グラフィックス</a></li>
-  <li><a href="#Audio">さらに強化された音声</a></li>
-  <li><a href="#Camera">カメラと動画の拡張</a></li>
-  <li><a href="#Work">職場での Android</a></li>
-  <li><a href="#ScreenCapture">画面のキャプチャと共有</a></li>
-  <li><a href="#Sensors">新しいタイプのセンサー</a></li>
-  <li><a href="#WebView">Chromium WebView</a></li>
-  <li><a href="#Accessibility">ユーザー補助機能と入力</a></li>
-  <li><a href="#Battery">省電力アプリ用のツール</a></li>
-    </ul>
-  </div>
+<div style="float:right;">
+  <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x">
 </div>
 
-
-
-
-
-
-
 <p>Android 5.0 Lollipop は、これまでの Android の中で最も大きく刷新された意欲的なリリースです。</p>
 
 <p>このリリースには、ユーザー向けの新しい機能だけでなく、デベロッパー向けに数多くの API が追加されています。これらの API を使用することで、携帯電話、タブレット、ウェアラブルに加え、テレビや自動車用にも Android を拡張できます。</p>
 
 <p>新しいデベロッパー向け API の概要については、<a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API</a> をご覧ください。Android 5.0 のユーザー向けの新機能については <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a> をご覧ください。</p>
 
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>主なデベロッパー機能</h2>
+  <ol>
+      <ul style="list-style-type:none;">
+        <li><a href="#Material">Material design</a></li>
+        <li><a href="#Perf">パフォーマンス重視</a></li>
+        <li><a href="#Notifications">通知</a></li>
+        <li><a href="#TV">アプリを大画面で</a></li>
+        <li><a href="#Documents">アプリのドキュメント化</a></li>
+        <li><a href="#Connectivity">進化した接続性</a></li>
+        <li><a href="#Graphics">高性能グラフィックス</a></li>
+        <li><a href="#Audio">さらに強化された音声</a></li>
+        <li><a href="#Camera">カメラと動画の拡張</a></li>
+        <li><a href="#Work">職場での Android</a></li>
+        <li><a href="#ScreenCapture">画面のキャプチャと共有</a></li>
+        <li><a href="#Sensors">新しいタイプのセンサー</a></li>
+        <li><a href="#WebView">Chromium WebView</a></li>
+        <li><a href="#Accessibility">>ユーザー補助機能と入力</a></li>
+        <li><a href="#Battery">省電力アプリ用のツール</a></li>
+      </ol>
+</div>
+</div>
 
 
 <h2 id="Material">Material Design</h2>
diff --git a/docs/html-intl/intl/ja/index.jd b/docs/html-intl/intl/ja/index.jd
index e0153fa..4b1fa0e 100644
--- a/docs/html-intl/intl/ja/index.jd
+++ b/docs/html-intl/intl/ja/index.jd
@@ -1,93 +1,89 @@
 fullpage=true
-page.viewport_width=970
 excludeFromSuggestions=true
-page.metaDescription=Android デベロッパー向け公式サイトアプリのデベロッパーおよびデザイナー向け Android SDK とドキュメンテーションを提供します。
+page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
 page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />
 
 @jd:body
 
-<div class="home-new-carousel-1">
-  <div class="fullscreen-carousel-content">
-    <div class="vcenter">
-      <div class="wrap clearfix">
+<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel">
+</div> -->
+<section class="dac-hero-carousel">
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
+<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> -->
+<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;">
+<a href="/preview/index.html">
+  <div class="wrap" style="max-width:1100px;">
+    <div class="cols dac-hero-content">
+      <div class="col-10of16 col-push-6of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png"
+             srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-6of16 col-pull-10of16">
+        <div class="dac-hero-tag"></div>
 
-      <div class="landing-section-header">
-            <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div>
-            <div class="col-5" style=" margin-top:70px ">
-            <h3 stye="font-weight:300;">Android 5.0 Lollipop</h3>
-            <p>Android 5.0 アップデートでは、ロック画面での通知、新しいカメラ API、OpenGL ES 3.1、新たなマテリアル デザイン インターフェースなど、ご使用のアプリにさまざまな新しい機能を提供します。</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">詳細を見る</a>
-            </div>
-          </div>
-          </div>
-        </div>
-       <h2>&nbsp;</h2>
-        <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16
-        no-section" data-query="collection:index/primary" data-resourcestyle="card"
-        data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget -->
-      </div> <!-- end .wrap -->
-    </div> <!-- end .vcenter -->
-  </div> <!-- end .fullscreen-carousel-content -->
-</div> <!-- end .fullscreen-carousel -->
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">次期バージョンの Android に向けて準備しましょう。
+        Nexus 5、6、9、Nexus Player でアプリをテストします。 </p>
 
-<div class="actions-bar" style="margin-top:20px">
-  <div class="wrap">
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          スタートガイド
+        </a>
+      </div>
+    </div>
+  </div>
+</a>
+</article></section>
+
+<div 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">SDK を入手する</a></div>
-      <div><a href="{@docRoot}samples/index.html">サンプルを見る</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">ビデオを見る</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">アプリを管理する</a></div>
+      <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="//www.youtube.com/user/androiddevelopers">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Watch Videos
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
 
 
-<div class="landing-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
+<section class="dac-section dac-section-light" id="build-apps"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    Resources to get you started with designing and developing for Android.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/primary"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-            <div class="landing-h1" style="margin-top:0px">マルチ スクリーンの世界を<br>構築しましょう</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          Android は世界中の数多くの携帯型デバイスで使われています。 <br>
+<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel">
+</div>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">マルチ スクリーンの世界を<br>構築しましょう</h1>
+    <div class="dac-section-subtitle">
+      Android は世界中の数多くの携帯型デバイスで使われています。 <br>
           そして今回、これらの新しいフォーム ファクタをサポートします。
-        </div>
-      </div>
-      <div class="landing-body" style="margin-top: 50px;">
-        <div class="landing-breakout cols">
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
-              <p class="landing-small">
-                いつでもどこでも、アプリのユーザーに必要な情報を提供します。
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">Android Wear の詳細を見る</a>
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png">
-              <p class="landing-small">
-                大画面向けアプリを作成して、コンテンツを生き生きと表現します。
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">Android TV の詳細を見る</a>
-
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png">
-              <p class="landing-small">
-                音楽アプリを車載エンターテイメント システムに対応させます。
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">Android Auto の詳細を見る</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+    </div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/multiscreen"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html-intl/intl/ja/preview/backup/index.jd b/docs/html-intl/intl/ja/preview/backup/index.jd
new file mode 100644
index 0000000..b558cdd
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/backup/index.jd
@@ -0,0 +1,327 @@
+page.title=アプリの自動バックアップ
+page.tags=バックアップ, previewresources, androidm
+page.keywords=バックアップ,自動バックアップ,プレビュー
+page.image=images/cards/card-auto-backup_2x.png
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本書の内容</h2>
+      <ol>
+        <li><a href="#overview">概要</a></li>
+        <li><a href="#configuring">データのバックアップを設定する</a></li>
+        <li><a href="#testing">バックアップ設定をテストする</a></li>
+        <li><a href="#issues">既知の問題</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  アプリ内のデータ作成や環境設定は、多大な労力と時間を必要とする作業です。
+端末が破損したり、新しい端末にアップグレードしたりする場合に、そのデータを保持することが、快適な操作性を提供する上で非常に重要です。
+Android M Preview を実行する端末では、アプリデータを Google ドライブに自動的にバックアップすることで、前述のような状況でも快適な操作性を実現できます。
+
+アプリデータは、ユーザーが端末を変更したりアップグレードしたりした場合に自動的に復元されます。
+
+</p>
+
+<p>
+  自動バックアップは、Android M Preview を実行する端末にインストールされているすべてのアプリで有効になっています。追加のアプリコードは必要ありません。
+ユーザーは、自動データ バックアップを使用しないよう選択することもできます。
+また、バックアップするアプリのデータを制限することもできます。
+</p>
+
+<p>
+  このドキュメントでは、新しいシステムの動作と、バックアップするアプリデータを指定する方法について説明します。
+
+</p>
+
+<h2 id="overview">概要</h2>
+
+<p>
+  自動バックアップ機能では、アプリがユーザーの端末上に作成するデータを、ユーザーの Google ドライブ アカウントにアップロードして暗号化することで、そのデータを保持します。
+開発者やユーザーにデータ ストレージの費用が発生することはなく、保存されたデータはユーザー個人のドライブ容量にはカウントされません。
+M Preview の期間中、ユーザーは 1 つの Android アプリにつき最大 25 MB までのデータを保存できます。
+
+</p>
+
+<p>
+  自動バックアップは、端末がアイドル中で、電源に接続されていて、Wi-Fi に接続されている場合に、24 時間ごとに実行されます。
+これらの条件を満たしたとき、バックアップ マネージャー サービスが利用可能なすべてのバックアップ データをクラウドにアップロードします。
+ユーザーが新しい端末に切り替えたり、バックアップされたアプリをアンインストールしたり再インストールしたりした場合、復元操作によりバックアップされたデータが新しくインストールされたアプリのデータ ディレクトリにコピーされます。
+
+
+</p>
+
+<p class="note">
+  <strong>注:</strong> アプリが以前の <a href="{@docRoot}google/backup/index.html">Android バックアップ サービス</a>を利用している場合、この新しい動作は適用されず、既存のバックアップ動作が引き続き適用されます。
+
+
+</p>
+
+
+<h3 id="auto-exclude">自動的に除外されたデータファイル</h3>
+
+<p>
+  一時ファイルやキャッシュなど、バックアップする必要のないアプリデータもあるため、自動バックアップ サービスではデフォルトで一部のデータ ファイルを除外します。
+
+</p>
+
+<ul>
+  <li>{@link android.content.Context#getCacheDir
+    getCacheDir()} メソッドと {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
+ メソッドに参照されるディレクトリ内のファイル。
+  </li>
+
+  <li>
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+ メソッドに参照されるディレクトリ内のものを除く、外部ストレージ内のファイル。
+  </li>
+
+  <li>
+{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} メソッドに参照されるディレクトリ内のファイル。
+  </li>
+</ul>
+
+<h2 id="configuring">データのバックアップを設定する</h2>
+
+<p>
+  前のセクションの自動除外ファイル一覧にあるものを除いて、M Preview 端末にインストールされたすべてのアプリで作成されるデータがバックアップ対象です。
+そこからさらに、アプリ マニフェストの設定を使用して、アプリからバックアップするデータを制限したり設定したりできます。
+
+</p>
+
+<h3 id="include-exclude">対象データと除外データ</h3>
+
+<p>
+  アプリに必要なデータとその保存方法によって、特定のファイルやディレクトリを対象とするか、除外するかの明確なルールが必要になる場合があります。
+自動バックアップ サービスでは、XML 構成ファイルとアプリ マニフェストを使ってそのようなバックアップ ツールを設定できます。
+
+アプリ マニフェストでは、次の例のように、バックアップ スキームの構成ファイルを指定できます。
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>
+  このサンプル コードでは、<code>android:fullBackupContent</code> 属性がアプリの開発プロジェクトの <code>res/xml/</code> ディレクトリにある <code>mybackupscheme.xml</code> という名前の XML ファイルを指定しています。
+
+この構成ファイルには、バックアップ対象とするファイルのルールが含まれています。
+次のサンプル コードは、バックアップから特定のファイルを除外する構成ファイルを示しています。
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;full-backup-content&gt;
+    &lt;exclude domain="database" path="device_info.db"/&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  この例のバックアップ構成では、特定のデータベース ファイルのみをバックアップから除外しています。
+  それ以外のファイルはすべてバックアップされます。
+</p>
+
+<h4>バックアップ設定の構文</h4>
+
+<p>
+  バックアップ サービスの設定では、バックアップに含める、または除外するファイルを指定できます。
+データ バックアップ設定の xml ファイルの構文は次のとおりです。
+</p>
+
+<pre>
+&lt;full-backup-content&gt;
+    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  次のエレメントと属性を使って、バックアップに含める、または除外するファイルを指定できます。
+
+</p>
+
+<ul>
+  <li>
+  <code>&lt;include&gt;</code>。システムにデフォルトでアプリのすべてのデータをバックアップさせるのではなく、バックアップするリソースを自身で指定する場合、このエレメントを使用します。
+<code>&lt;include&gt;</code> タグを指定すると、システムはこのエレメントで<em>指定されたリソースのみ</em>をバックアップします。
+
+
+  </li>
+
+  <li>
+  <code>&lt;exclude&gt;</code>。バックアップから除外するリソースを指定するには、このエレメントを使用します。
+システムは、このエレメントで指定されたリソース以外のすべてのアプリ データをバックアップします。
+
+  </li>
+
+  <li>
+  <code>domain.</code> バックアップに含める、または除外するリソースのタイプ。この属性を指定する際に有効な値: 
+
+  </li>
+
+  <li style="list-style: none">
+  <ul>
+    <li>
+    <code>root</code>。リソースがアプリのルート ディレクトリにあることを指定します。
+    </li>
+
+    <li>
+    <code>file</code>。
+{@link android.content.Context#getFilesDir getFilesDir()} メソッドで返されるディレクトリ内のリソースに相当します。
+    </li>
+
+    <li>
+    <code>database</code>。
+{@link android.content.Context#getDatabasePath getDatabasePath()} メソッドや 
+{@link android.database.sqlite.SQLiteOpenHelper} クラスを使用して返されるデータベースに相当します。
+    </li>
+
+    <li>
+    <code>sharedpref</code>。
+{@link android.content.Context#getSharedPreferences getSharedPreferences()} メソッドで返される 
+{@link android.content.SharedPreferences} オブジェクトに相当します。
+    </li>
+
+    <li>
+    <code>external</code>。リソースが外部ストレージにあることを指定し、
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+ メソッドで返されるディレクトリ内のファイルに相当します。
+    </li>
+
+    <li>
+    <code>path</code>。バックアップに含める、または除外するリソースへのファイルパス。
+
+    </li>
+  </ul>
+  </li>
+</ul>
+
+
+<h3 id="prohibit">データ バックアップの禁止</h3>
+
+<p>
+  マニフェストのアプリ エレメントにある <code>android:allowBackup</code> 属性を <code>false</code> に設定すると、一切のデータを自動バックアップしないように選択できます。
+
+この設定を、次のサンプル コードで示します。
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:allowBackup="false"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="testing">バックアップ設定をテストする</h2>
+
+<p>
+  バックアップ設定を作成したら、アプリでデータが保存され、正常に復元されることをテストして確認する必要があります。
+
+</p>
+
+
+<h4>バックアップのログの有効化</h4>
+
+<p>
+  バックアップで XML ファイルがどのように解析されるかを確認するため、テストのバックアップを実行する前にログ機能を有効にします。
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
+</pre>
+
+<h4>バックアップのテスト</h4>
+
+<p>手動でバックアップを実行するには、まず次のコマンドを呼び出してバックアップ マネージャーを初期化する必要があります。
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr run
+</pre>
+
+<p>
+  次に、次のコマンドを使って、アプリのパッケージ名を <code>&lt;PACKAGE&gt;</code> パラメータで指定して手動でアプリケーションをバックアップします。
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
+
+
+<h4>復元のテスト</h4>
+
+<p>
+  アプリのバックアップ後に手動で復元を開始するには、アプリのパッケージ名を <code>&lt;PACKAGE&gt;</code> パラメータで指定します。
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr restore &lt;PACKAGE&gt;
+</pre>
+
+<p class="warning">
+  <b>警告:</b> このアクションを実行すると、アプリが停止し、復元操作を実行する前にデータが消去されます。
+
+</p>
+
+<p>
+  アプリをアンインストールしてから再インストールすることで、アプリの復元プロセスを開始します。アプリのインストールが完了すると、アプリデータが自動的にクラウドから復元されます。
+
+</p>
+
+
+<h4>バックアップのトラブルシューティング</h4>
+
+<p>
+  問題が発生した場合は、<strong>[設定] &gt; [バックアップ]</strong>でバックアップをオン/オフに切り替え、端末を工場出荷時の状態にリセットするか、次のコマンドを呼び出して、バックアップ データと関連メタデータを消去できます。
+
+
+</p>
+
+<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
+
+<p>
+  <code>&lt;TRANSPORT&gt;</code> には、<code>com.google.android.gms</code> というプレフィクスが付く必要があります。
+  Transport の一覧を取得するには、次のコマンドを呼び出します。
+</p>
+
+<pre>$ adb shell bmgr list transports</pre>
+
+<h2 id="issues">既知の問題</h2>
+
+<p>自動バックアップ サービスには、次のような既知の問題があります。</p>
+
+<ul>
+  <li><strong>Google Cloud Messaging</strong> - プッシュ通知に Google Cloud Messaging を使用するアプリの場合、Messaging の登録時に返された登録 ID をバックアップすると、復元されたアプリのプッシュ通知が破損することがあるという既知の問題があります。古い登録 ID がバックアップされている場合を除いて、新しい端末へのインストール後は、新しい 登録 ID 用の API を照会することが重要です。
+
+
+
+
+これを回避するには、バックアップ対象ファイルから登録 ID を除外します。
+
+  </li>
+</ul>
diff --git a/docs/html-intl/intl/ja/preview/download.jd b/docs/html-intl/intl/ja/preview/download.jd
new file mode 100644
index 0000000..67b1bc4
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/download.jd
@@ -0,0 +1,359 @@
+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/app-linking.jd b/docs/html-intl/intl/ja/preview/features/app-linking.jd
new file mode 100644
index 0000000..92da0b42
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/features/app-linking.jd
@@ -0,0 +1,123 @@
+page.title=App Links
+page.image=images/cards/card-app-linking_2x.png
+page.keywords=applinking,deeplinks,intents
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本書の内容</h2>
+      <ol>
+        <li><a href="#web-assoc">ウェブサイトの関連を宣言する</a></li>
+        <li><a href="#verfy-links">App Link の検証を要求する</a></li>
+        <li><a href="#user-manage">App Link 設定を管理する</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Android インテント システムは、アプリでコンテンツや要求を処理できるようにする柔軟なメカニズムです。
+  複数のアプリが、それぞれのインテント フィルタに一致する URI パターンを宣言できます。デフォルトのローンチ ハンドラを持たないウェブリンクをユーザーがクリックしたとき、一致するインテント フィルタが宣言されているアプリの一覧から選択するダイアログがプラットフォームによってユーザーに表示されます。
+
+
+</p>
+
+<p>
+  Android M Developer Preview でサポートされる App Links では、既存のリンク処理が改善され、アプリ開発者が所有するウェブドメインとアプリを関連付けられるようになりました。
+デベロッパーがこの関連を作成すると、プラットフォームが特定のウェブリンクの処理に使用するデフォルトのアプリを自動的に決めることができ、ユーザーにアプリを選択させる操作をスキップできます。
+
+
+</p>
+
+
+<h2 id="web-assoc">ウェブサイトの関連付けを宣言する</h2>
+
+<p>
+  ウェブサイトのオーナーは、アプリのリンクを設定するための関連を宣言する必要があります。サイトのオーナーは、ドメインのよく知られた場所で {@code statements.json} という名前の JSON ファイルをホストすることで、アプリとの関係を宣言します。
+
+
+</p>
+
+<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<p class="note">
+  <strong>注:</strong> 
+  M Developer Preview の間、JSON ファイルは http プロトコルを介して検証されます。プラットフォームの正式リリースでは、ファイルは暗号化された https プロトコルで検証されます。
+
+</p>
+
+<p>
+  この JSON ファイルは、このドメイン下の URL のデフォルトのハンドラとして使用する必要のある Android アプリを示します。
+アプリは、次のフィールドに基づいて識別されます。
+</p>
+
+<ul>
+  <li>{@code package_name}:アプリのマニフェストで宣言されたパッケージ名。</li>
+
+  <li>{@code sha256_cert_fingerprints}:アプリの署名証明書の SHA256 のフィンガープリント。
+    Java Keytool を使用して、次のコマンドでフィンガープリントを生成できます。
+    <pre>keytool -list -v -keystore my-release-key.keystore</pre>
+  </li>
+</ul>
+
+<p>
+  次のファイル一覧は、
+{@code statements.json} ファイルのコンテンツと形式の例を示しています。
+</p>
+
+<pre>
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "<strong>&lt;package name&gt;</strong>",
+    "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+  }
+}]
+</pre>
+
+
+<h2 id="verfy-links">App Link の検証を要求する</h2>
+
+<p>
+  アプリから、インテント フィルタのデータ エレメントのホスト名で定義されたアプリのリンクを、それぞれのウェブドメインでホストされる {@code statements.json} ファイルに対してプラットフォームが自動的に検証するよう要求できます。
+
+アプリリンクの検証を要求するには、次のマニフェスト コード スニペットのように {@code android:autoVerify}
+ 属性をマニフェスト内の目的のインテント フィルタに追加します。
+
+</p>
+
+<pre>
+&lt;activity ...&gt;
+    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+        &lt;action android:name="android.intent.action.VIEW" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>
+  {@code android:autoVerify} 属性がアプリ マニフェストに存在する場合、プラットフォームはアプリのインストール時にアプリのリンクを検証しようとします。
+プラットフォームがアプリのリンクを正常に検証できない場合、アプリはウェブリンクの処理に適したアプリとして設定されません。
+次回ユーザーがいずれかのリンクを開いたとき、プラットフォームはユーザーに再度ダイアログを表示します。
+
+
+</p>
+
+<p class="note">
+  <strong>注:</strong> テスト時に、ユーザーがシステムの設定アプリを使ってサポートされているリンクを開くアプリを明示的に有効にしていると、誤検出が原因で検証が失敗する場合があります。この場合、ダイアログは表示されず、リンクは直接アプリに送られますが、これは検証が成功したからではなく、ユーザーの設定に基づいて動作したからです。
+
+
+
+</p>
+
+
+<h2 id="user-manage">App Link 設定を管理する</h2>
+
+<p>
+  ユーザーが希望する方法で URL を処理するように、ユーザー側でアプリのリンク設定を変更できます。アプリのリンクは、システムの設定アプリの <strong>[設定] &gt; [アプリ] &gt; [アプリ情報] &gt; [デフォルトでの起動]</strong> で確認、管理できます。
+
+
+</p>
diff --git a/docs/html-intl/intl/ja/preview/index.jd b/docs/html-intl/intl/ja/preview/index.jd
new file mode 100644
index 0000000..180f5ea
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/index.jd
@@ -0,0 +1,67 @@
+page.title=Android M Developer Preview
+page.tags="preview",
+meta.tags="preview, M preview", androidm
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">
+          次期バージョンの Android に向けて準備しましょう。Nexus 5、6、9、Nexus Player でアプリをテストします。
+<strong>実行時パーミッション</strong>、          <strong>Doze</strong>、<strong>App Standby</strong> 省電力機能、新しい          <strong>サポート テクノロジー</strong>などの新機能をご覧ください。
+
+
+        </p>
+
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          スタートガイド
+        </a><br>
+      </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>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <h1 class="dac-section-title">リソース</h1>
+  <div class="dac-section-subtitle">
+    Android M 向けにアプリを用意する際に役立つ必須情報をご提供します。
+  </div>
+ 
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/more"
+       data-cardSizes="6x6"
+       data-maxResults="16"></div>
+
+    <ul class="dac-section-links">
+      <li class="dac-section-link">
+        <a href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          問題の報告
+        </a>
+      </li> 
+      <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
+        <span class="dac-sprite dac-auto-chevron"></span>
+        Join G+ コミュニティ
+        </a>
+      </li>
+    </ul>
+  </div>
+</section>
+
diff --git a/docs/html-intl/intl/ja/preview/license.jd b/docs/html-intl/intl/ja/preview/license.jd
new file mode 100644
index 0000000..1e29b52
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/license.jd
@@ -0,0 +1,143 @@
+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 「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>
\ 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
new file mode 100644
index 0000000..6c44f4d
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/samples.jd
@@ -0,0 +1,70 @@
+page.title=サンプル
+page.image=images/cards/samples-new_2x.png
+@jd:body
+
+<p>
+  以下のコードサンプルは、M Developer Preview 用に提供しています。サンプルを Android Studio でダウンロードするには、<b>[File] &gt; [Import Samples]</b> メニュー オプションを選択します。
+
+</p>
+
+<p class="note">
+  <strong>注:</strong> 以下のダウンロード可能なプロジェクトは、Gradle と Android Studio でご利用いただくために提供しています。
+
+</p>
+
+
+<h3 id="RuntimePermissions">実行時パーミッション</h3>
+
+<p>
+ Android M では、システムのパーミッションの仕組みが変わります。ユーザーは、パーミッション要求の承認をインストール時ではなく、実行時に求められるようになります。
+このサンプルでは、このパーミッションの要求方法を紹介しています。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-RuntimePermissions">GitHub でサンプルを入手</a></p>
+
+<h3 id="ConfirmCredentials">資格情報の確認</h3>
+
+<p>
+ このサンプルでは、アプリで端末の資格情報を認証手段として使用する方法を紹介しています。
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">GitHub でサンプルを入手</a>
+</p>
+
+<h3 id="FingerprintDialog">指紋ダイアログ</h3>
+
+<p>
+ このサンプルでは、ユーザーを認証するために登録された指紋をアプリで識別する方法を紹介しています。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-FingerprintDialog">GitHub でサンプルを入手</a></p>
+
+<h3 id="AutomaticBackup">アプリの自動バックアップ</h3>
+
+<p>
+ Android M では、アプリの設定の自動バックアップが導入されました。このサンプルでは、設定のバックアップを管理するためにアプリにフィルタリング ルールを追加する方法を紹介しています。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">GitHub でサンプルを入手</a></p>
+
+<h3 id="CameraRaw">Camera 2 Raw</h3>
+
+<p>
+  このサンプルでは、<code>Camera2</code> API を使用して、RAW カメラバッファをキャプチャし、<code>DNG</code> ファイルとして保存する方法を紹介しています。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-Camera2Raw">GitHub でサンプルを入手</a></p>
+
+<h3 id="ActiveNotification">アクティブ通知</h3>
+
+<p>
+  このサンプルでは、その時点でアプリに表示されている通知の数を <a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a> を使って調べる方法を紹介しています。
+
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">GitHub でサンプルを入手</a></p>
diff --git a/docs/html-intl/intl/ja/preview/setup-sdk.jd b/docs/html-intl/intl/ja/preview/setup-sdk.jd
new file mode 100644
index 0000000..b4fe2e0
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/setup-sdk.jd
@@ -0,0 +1,207 @@
+page.title=Preview SDK のセットアップ
+page.image=images/cards/card-set-up_16-9_2x.png
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本書の内容</h2>
+      <ol>
+        <li><a href="#get-as13">Android Studio 1.3 を入手する</a></li>
+        <li><a href="#get-sdk">Preview SDK を入手する</a></li>
+        <li><a href="#create-update">プロジェクトを作成または更新する</a></li>
+        <li><a href="#setup-test">テスト用にセットアップする</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>M Developer Preview SDK は、Android SDK Manager から入手できます。このドキュメントは、Android SDK Manager の使用方法やプロジェクトの作成方法などの Android アプリ開発についての知識をお持ちの方を対象にしています。
+
+Android アプリを初めて開発する場合は、まず <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a> のトレーニング レッスンをご覧ください。</a>
+
+</p>
+
+<h2 id="get-as13">Android Studio 1.3 を入手する</h2>
+
+<p>Developer Preview は、現在プレビュー段階にある Android Studio 1.3 に最適化されています。
+Preview SDK をご使用になる場合は、Android Studio 1.3 のプレビュー版をインストールすることをお勧めします。
+</p>
+
+<p class="caution"><strong>注意:</strong> Android Studio 1.3 の Canary プレビューは、現在も開発中です。
+メインの開発用マシンを Developer Preview のテストに使用する場合、テスト用に 2 つ目の Android Studio をインストールできます。
+
+</p>
+
+<p>Android Studio 1.3 プレビューをインストールするには: </p>
+
+<ol>
+  <li><a href="{@docRoot}tools/studio/index.html">Android Studio</a> をダウンロードして起動します。
+
+  </li>
+
+  <li>[<strong>Settings</strong>] ウィンドウを開きます(Windows では、 <strong>[File] &gt; [Settings]</strong> を選択すると開くことができます)。
+<strong>[Appearance &amp; Behavior] &gt; [System Settings] &gt; [Updates]</strong> を選択します。
+
+
+
+    <p class="aside">OSX では、Android Studio の [<strong>Preferences</strong>] ウィンドウで、[<strong>Appearance &amp; Behavior</strong>] パネルを見つけることができます。
+
+</p>
+  </li>
+
+  <li> [<strong>Updates</strong>] パネルで、<strong>[Automatically check updates for:] に
+[Canary Channel]</strong> を選択します。
+  </li>
+
+  <li>[<strong>Updates</strong>] パネルで、[<strong>Check Now</strong>] を選択して最新の Canary ビルドの有無を確認します。
+メッセージが表示されたら、最新の Canary ビルドをダウンロードしてインストールします。
+
+  </li>
+</ol>
+
+<h2 id="get-sdk">Preview SDK を入手する</h2>
+
+<p>開発環境に Preview SDK コンポーネントを追加するには: </p>
+
+<ol>
+  <li>Android Studio 1.3 プレビューを起動します。
+  </li>
+
+  <li>[<strong>Settings</strong>] ウィンドウを開きます(Windows では、 <strong>[File] &gt; [Settings]</strong> を選択すると開くことができます)。
+<strong>[Appearance &amp; Behavior] &gt; [System Settings] &gt; [Updates]</strong> を選択します。
+
+
+
+    <p class="aside">OSX では、Android Studio の [<strong>Preferences</strong>] ウィンドウで、[<strong>Appearance &amp; Behavior</strong>] パネルを見つけることができます。
+
+</p>
+  </li>
+
+  <li>[<strong>Updates</strong>] パネルで、<strong>[Automatically check updates for:] に
+[Canary Channel]</strong> を、<strong>[Automatically check updates for Android SDK:] に
+[Preview Channel]</strong> を選択します。
+  </li>
+
+  <li>[<strong>Android SDK Manager</strong>] を起動します。(Android Studio 1.3 では、SDK Manager はスタンドアロン アプリケーションではなくなり Android Studio に統合されました。)
+
+
+  </li>
+
+  <li>[<strong>Platforms</strong>] セクションで、[<strong>Android MNC Preview</strong>] を選択します。
+
+  </li>
+
+  <li>[<strong>Tools</strong>] セクションで、最新の Android [<strong>SDK Tools</strong>]、[<strong>Platform-tools</strong>]、[<strong>Build-tools</strong>] を選択します。
+
+
+  </li>
+
+  <li>[<strong>Install packages</strong>] をクリックし、すべてのパッケージの使用許諾契約に同意します。
+
+  </li>
+
+  <li>[<strong>Settings</strong>] ウィンドウを開き、<strong>[Appearance &amp; Behavior] &gt; [System Settings] &gt; [Android SDK]</strong> を選択し、M Developer Preview がインストールされていることを確認します。
+
+</li>
+
+  <li>[<strong>Android SDK</strong>] パネルで、[<strong>SDK Platforms</strong>] を選択します。
+[<strong>Android MNC Preview</strong>] が [<em>Installed</em>] と表示されているはずです。
+また、[<strong>SDK Tools</strong>] タブを開き、最新のツールがインストールされていることを確認します。
+
+
+  </li>
+</ol>
+<p>上記の手順を完了すると、開発環境でプレビュー コンポーネントを利用できるようになります。
+ </p>
+
+
+<h2 id="create-update">プロジェクトを作成または更新する</h2>
+
+<p>
+  プレビュー API を使用するには、プレビュー コンポーネントを使用するために開発プロジェクトを作成または更新する必要があります。
+
+</p>
+
+
+<h3 id="create">新しいプロジェクトを作成する</h3>
+
+<p>
+  Preview SDK を使用してプロジェクトを作成するときには、Android Studio を使用することをお勧めします。<a href="{@docRoot}sdk/installing/create-project.html">Creating a Project</a> に記載されている手順に従い、プロジェクト ウィザードで [<em>Form Factors</em>] 画面が表示されるまで操作を進めます。
+
+次に、以下の手順に従い、Preview SDK 用に構成されたプロジェクトを作成します。
+
+</p>
+
+<ul>
+  <li>[<strong>Phone and Tablet</strong>] をチェックします。</li>
+  <li>[<strong>Minimum SDK</strong>] で、[<strong>MNC: Android M (Preview)</strong>] を選択します。
+</li>
+</ul>
+
+
+<h3 id="update">既存のプロジェクトを更新する</h3>
+
+<p>
+  既存のプロジェクトを使用する場合は、プロジェクト構成を変更してプレビュー API を有効にする必要があります。開発環境で、モジュールの <code>build.gradle</code> ファイルを開き、次のように値を設定します。
+
+
+</p>
+
+<ul>
+  <li><code>compileSdkVersion</code> に <code>'android-MNC'</code> を設定します。</li>
+  <li><code>minSdkVersion</code> に <code>'MNC'</code> を設定します。</li>
+  <li><code>targetSdkVersion</code> に <code>'MNC'</code> を設定します。</li>
+</ul>
+
+
+<h2 id="setup-test">テスト用にセットアップする</h2>
+
+<p>
+  Preview SDK でアプリをテストするには、プレビュー版のプラットフォームを使用して構成した端末または仮想端末が必要です。
+互換端末をお持ちの場合、テスト用にプレビュー プラットフォームをインストールできます。
+互換端末をお持ちでない場合は、テスト用に仮想端末を構成できます。
+</p>
+
+<h3 id="setup-device">物理端末をセットアップする</h3>
+
+<p>
+  Nexus 5、Nexus 6、Nexus 9、Android TV をお持ちの場合は、アプリのテスト用にこれらの端末にプレビュー システム イメージをインストールできます。Android Virtual Device Manager ツールを使用すると、Android Studio 内から仮想端末をプレビュー版のプラットフォームでセットアップできます。
+
+
+
+</p>
+
+<p class="caution">
+  <strong>重要:</strong> 端末にプレビュー イメージをインストールすると、<em>端末からすべてのデータが削除されます</em>。そのため、プレビュー イメージをインストールする前にすべてのデータをバックアップする必要があります。
+
+</p>
+
+<h3 id="setupAVD">仮想端末をセットアップする</h3>
+
+<p>
+  Android Virtual Device Manager ツールを使用すると、Android Studio 内からプレビュー版のプラットフォームで仮想端末をセットアップできます。
+
+</p>
+
+<p>AVD マネージャーで AVD を作成するには: </p>
+
+<ol>
+  <li><a href="{@docRoot}preview/setup-sdk.html">Preview SDK のセットアップ</a>の説明に従って、開発環境に Preview SDK をインストールします。
+
+</li>
+  <li><a href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD Manager</a> の手順に従います。
+
+以下の設定を使用します。
+    <ul>
+      <li><strong>端末:</strong> Nexus 5、Nexus 6、Nexus 9、Android TV</li>
+      <li><strong>対象:</strong> 
+       Android M (Preview) - API Level M</li>
+      <li><strong>ABI:</strong> x86</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  テスト用の仮想端末の作成についての詳細は、<a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a> をご覧ください。
+</p>
diff --git a/docs/html-intl/intl/ja/preview/testing/guide.jd b/docs/html-intl/intl/ja/preview/testing/guide.jd
new file mode 100644
index 0000000..b70e04d
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/testing/guide.jd
@@ -0,0 +1,187 @@
+page.title=テストガイド
+page.image=images/cards/card-build_16x9_2x.png
+page.keywords=プレビュー リソース,Android M,テスト,パーミッション
+
+@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 と App Standby をテストする</a></li>
+        <li><a href="#ids">自動バックアップと端末識別子</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Android M Developer Preview を利用すると、次期バージョンのプラットフォームでアプリが動作するか確認できます。
+Android M Developer Preview には、<a href="{@docRoot}preview/api-overview.html">API の概要</a>と<a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>に記載されているように、アプリに影響を与える可能性のある多くの API と動作の変更が含まれています。
+
+Android M Developer Preview でアプリをテストする時には、アプリの良好な使用感を確保するために、システムのいくつかの変更点に特に注意する必要があります。
+
+
+</p>
+
+<p>
+  このガイドでは、アプリで Android M Developer Preview の機能の何をどのようにテストすればよいか説明します。以下の機能は、アプリの動作に大きな影響を与える可能性があるので、優先してテストする必要があります。
+
+
+</p>
+
+<ul>
+  <li><a href="#runtime-permissions">パーミッション</a>
+  </li>
+  <li><a href="#doze-standby">Doze と App Standby</a>
+  </li>
+  <li><a href="#ids">自動バックアップと端末識別子</a></li>
+</ul>
+
+<p>
+  テスト用のプレビュー システム イメージを使用した端末または仮想端末のセットアップ方法の詳細については、<a href="{@docRoot}preview/setup-sdk.html">Preview 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] &lt;permission.name&gt; ...</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#">Preview SDK のセットアップ</a>をご覧ください。
+
+</p>
+
+<p>
+  パーミッションの取り消しと追加のさまざまな組み合わせをテストし、パーミッションに依存するユーザーフローを確認します。
+パーミッションへの依存性が明白または論理的ではない箇所では、依存性を取り除くため、またはパーミッションが必要な理由を明白にするために、フローのリファクタリングまたはコンパートメント化を検討する必要があります。
+
+
+</p>
+
+<p>
+  実行時パーミッションの動作、テスト、ベスト プラクティスについては、Developer Preview ページの<a href="{@docRoot}preview/features/runtime-permissions.html">パーミッション</a>をご覧ください。
+
+
+</p>
+
+
+<h2 id="doze-standby">Doze と App Standby をテストする</h2>
+
+<p>
+  省電力機能である Doze と App Standby により、端末がアイドル状態のときやそのアプリにフォーカスがないときに、アプリが実行できるバックグラウンド処理の量が制限されます。
+システムによってアプリに加えられる可能性のある制限には、ネットワーク アクセスの制限や停止、バックグラウンド タスクの停止、通知の停止、ウェイク リクエストの無視、アラームなどがあります。
+
+これらの省電力のための最適化が行われた状態で確実にアプリが適切に動作するように、これらの省電力状態をシミュレートしてアプリをテストする必要があります。
+
+
+</p>
+
+<h4 id="doze">アプリで Doze をテストする</h4>
+
+<p>アプリで Doze をテストするには: </p>
+
+<ol>
+<li>M Preview のシステム イメージを使用して、ハードウェア端末または仮想端末を構成します。</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">アプリで App Standby をテストする</h4>
+
+<p>アプリで App Standby モードをテストするには: </p>
+
+<ol>
+  <li>M Preview のシステム イメージを使用して、ハードウェア端末または仮想端末を構成します。</li>
+  <li>端末を開発マシンに接続し、アプリをインストールします。</li>
+  <li>アプリを実行し、アクティブ状態のままにします。</li>
+  <li>以下のコマンドを実行して、アプリのスタンバイ モードへの移行をシミュレートします。
+
+<pre>
+$ adb shell am broadcast -a android.os.action.DISCHARGING
+$ adb shell am set-idle &lt;packageName&gt; true
+</pre>
+
+  </li>
+  <li>以下のコマンドを使用して、アプリのウェイクをシミュレートします。
+    <pre>$ adb shell am set-idle &lt;packageName&gt; 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/testing/performance.jd b/docs/html-intl/intl/ja/preview/testing/performance.jd
new file mode 100644
index 0000000..1c3ae02
--- /dev/null
+++ b/docs/html-intl/intl/ja/preview/testing/performance.jd
@@ -0,0 +1,656 @@
+page.title=表示パフォーマンスのテスト
+page.image=images/cards/card-test-performance_2x.png
+page.keywords=パフォーマンス,fps,ツール
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本書の内容</h2>
+      <ol>
+        <li><a href="#measure">UI のパフォーマンスを測定する</a>
+          <ul>
+            <li><a href="#aggregate">フレームのデータを集計する</a></li>
+            <li><a href="#timing-info">正確なフレーム タイミング情報</a></li>
+            <li><a href="#timing-dump">簡易フレーム タイミング ダンプ</a></li>
+            <li><a href="#collection-window">データ収集用のウィンドウを制御する</a></li>
+            <li><a href="#diagnose">パフォーマンスの低下を診断する</a></li>
+            <li><a href="#resources">追加リソース</a></li>
+          </ul>
+        </li>
+        <li><a href="#automate">UI パフォーマンス テストを自動化する</a>
+          <ul>
+            <li><a href="#ui-tests">UI テストをセットアップする</a></li>
+            <li><a href="#automated-tests">自動化された UI テストをセットアップする</a></li>
+            <li><a href="#triage">見つけた問題を選別し解決する</a></li>
+          </ul>
+        </li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  ユーザー インターフェース(UI)のパフォーマンスをテストすることで、アプリが機能面での要件に合うだけでなく、ユーザーがアプリをスムーズに操作でき、毎秒安定して 60 フレーム(<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">why 60fps?</a>)で、フレームのドロップや遅延なしで、言い換えれば<em>ジャンク</em>なしで実行されるようにします。
+
+
+このドキュメントでは、UI のパフォーマンスを測定することができるツールについて説明し、UI パフォーマンスの測定値をテストで活用する方法を提示します。
+
+
+</p>
+
+
+<h2 id="measure">UI のパフォーマンスを測定する</h2>
+
+<p>
+  パフォーマンスを改善するには、まずシステムのパフォーマンスを測定し、次にパイプラインのさまざまな箇所で発生している問題を診断し識別する必要があります。
+
+
+</p>
+
+<p>
+  <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em> は端末上で動作し、システム サービスの状態についての情報をダンプする Android ツールです。
+
+<em>gfxinfo</em> コマンドを dumpsys に渡すと、記録中に実行されたアニメーションのフレームに関連するパフォーマンス情報が logcat に出力されます。
+
+
+</p>
+
+<pre>
+&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
+</pre>
+
+<p>
+  このコマンドは、フレーム タイミング データの複数の異なるバリアントを生成することがあります。
+</p>
+
+<h3 id="aggregate">フレームのデータを集計する</h3>
+
+<p>
+  M Preview では、このコマンドは、プロセスの生存期間全体を通して収集したフレームのデータの集計結果を logcat に出力します。
+次に例を示します。
+</p>
+
+<pre class="noprettyprint">
+Stats since: 752958278148ns
+Total frames rendered: 82189
+Janky frames: 35335 (42.99%)
+90th percentile: 34ms
+95th percentile: 42ms
+99th percentile: 69ms
+Number Missed Vsync: 4706
+Number High input latency: 142
+Number Slow UI thread: 17270
+Number Slow bitmap uploads: 1542
+Number Slow draw: 23342
+</pre>
+
+<p>
+  これらのデータは、アプリのレンダリングのパフォーマンスと多くのフレームの全体での安定性を大まかに示します。
+
+</p>
+
+
+<h3 id="timing-info">正確なフレーム タイミング情報</h3>
+
+<p>
+  M Preview では、gfxinfo のための新しいコマンド、<em>framestats</em> が採用され、最新のフレームのフレーム タイミングのきわめて詳細な情報を提供します。そのため、より正確に問題を追跡しデバッグできるようになります。
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
+</pre>
+
+<p>
+  このコマンドは、アプリによって生成された最新 120 フレームのフレーム タイミング情報を、ナノ秒の精度を持つタイムスタンプを使用して出力します。以下は、adb dumpsys gfxinfo
+  &lt;PACKAGE_NAME&gt; framestats による未加工の出力例です。
+
+</p>
+
+<pre class="noprettyprint">
+0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
+0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
+0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
+0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
+</pre>
+
+<p>
+  この出力の各行が、アプリによって生成される 1 つのフレームを示します。各ラインは、フレームを生成するパイプラインの各段階で費やされた時間を出力する固定された数の列を持ちます。
+次のセクションでは、各列が何を示しているかも含めて、フォーマットを詳細に説明します。
+
+</p>
+
+
+<h4 id="fs-data-format">Framestats データ形式</h4>
+
+<p>
+  データは CSV 形式で出力されるため、お好みのスプレッドシート ツールに簡単に貼り付けたり、スクリプトで簡単に集計して解析したりできます。
+以下のリストは、出力データ列のフォーマットを説明しています。
+すべてのタイムスタンプはナノ秒単位で出力されます。
+</p>
+
+<ul>
+  <li>FLAGS
+    <ul>
+      <li>FLAGS 列が「0」の行には、FRAME_COMPLETED 列から INTENDED_VSYNC 列を引いて計算されたフレームの総処理時間が示されます。
+
+      </li>
+
+      <li>FLAGS 列が「0」以外の場合、そのフレームは通常のパフォーマンスからの外れ値であると定められているのでその行は無視する必要があります。この場合、レイアウトと描画に 16 ミリ秒よりも長くかかることが想定されています。
+
+これは、以下の原因で起きることがあります。
+        <ul>
+          <li>ウィンドウのレイアウトが変更された(アプリケーションの最初のフレームの場合や画面が回転された後など)。
+
+          </li>
+
+          <li>フレームが省略された。この場合、いくつかの値には不適切なタイムスタンプが含まれます。
+たとえば 60 fps よりも速く実行されている場合や、画面上にダーティで終わったものが何もない場合など、フレームは省略することができます。これは必ずしもアプリに問題がある兆候ではありません。
+
+
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>INTENDED_VSYNC
+    <ul>
+      <li>フレームの意図された開始ポイント。この値が VSYNC と異なる場合、vsync 信号にすぐに応答することを阻止する動作が UI スレッド上で発生していたことを意味します。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>VSYNC
+    <ul>
+      <li>すべての vsync リスナーとフレームの描画(Choreographer フレーム コールバック、アニメーション、View.getDrawingTime() など)で使用された時間の値。
+
+      </li>
+
+      <li>VSYNC と VSYNC のアプリケーションへの影響の詳細については、<a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">Understanding VSYNC</a> のビデオをご覧ください。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>OLDEST_INPUT_EVENT
+    <ul>
+      <li>入力キューの最も古い入力イベントのタイムスタンプ。フレームの入力イベントが存在しない場合は、Long.MAX_VALUE。
+
+      </li>
+
+      <li>この値は、主にプラットフォームの動作のパフォーマンスを示すことを意図しており、アプリのデベロッパーが活用できる場面は限定されます。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>NEWEST_INPUT_EVENT
+    <ul>
+      <li>入力キューの最も新しい入力イベントのタイムスタンプ。フレームの入力イベントが存在しない場合は、0。
+
+      </li>
+
+      <li>この値は、主にプラットフォームの動作のパフォーマンスを示すことを意図しており、アプリのデベロッパーが活用できる場面は限定されます。
+
+      </li>
+
+      <li>ただし、FRAME_COMPLETED から NEWEST_INPUT_EVENT を引いた値を確認することによって、そのアプリが増やす待ち時間がどれくらいか大まかに知ることができます。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>HANDLE_INPUT_START
+    <ul>
+      <li>入力イベントがアプリケーションにディスパッチされるときのタイムスタンプ。
+      </li>
+
+      <li>この値と ANIMATION_START との間の時間を確認することで、アプリケーションが入力イベントを処理するために費やした時間を測定することができます。
+
+      </li>
+
+      <li>この値が大きい(&gt; 2 ミリ秒)の場合、View.onTouchEvent() などの入力イベントを処理するためにアプリが長い時間を費やしていることを意味します。これは、この動作の最適化または別のスレッドへの移行が必要なことを示している場合があります。
+
+新しいアクティビティやそれに類するものを起動するクリック イベントなどの一部のシナリオでは、この値が大きいことは想定済みであり許容範囲内です。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ANIMATION_START
+    <ul>
+      <li>Choreographer を使用して登録されたアニメーションが実行されたときのタイムスタンプ。
+      </li>
+
+      <li>この値と PERFORM_TRANVERSALS_START の間の時間を確認することで、実行中のすべてのアニメーター(ObjectAnimator、ViewPropertyAnimator、共通の遷移となっている Transitions)を評価するのにかかった時間を確認することができます。
+
+
+      </li>
+
+      <li>この値が大きい(&gt; 2 ミリ秒)の場合、アプリがカスタム アニメーターを記述していないか、また ObjectAnimators がアニメーション化しているのがどの項目かを確認して、それらがアニメーションに適しているかどうか確かめてください。
+
+
+      </li>
+
+      <li>Choreographer についての詳細は、<a href="https://developers.google.com/events/io/sessions/325418001">For Butter or Worse</a> のビデオをご覧ください。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>PERFORM_TRAVERSALS_START
+    <ul>
+      <li>この値から DRAW_START を引くと、レイアウトと測定のフェーズが完了するまでにかかる時間を知ることができます(スクロールまたはアニメーションの間は、この時間がゼロに近いことが望ましいことにご注意ください)。
+
+
+      </li>
+
+      <li>レンダリング パイプラインのレイアウトと測定のフェーズについての詳細は、<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">Invalidations, Layouts and Performance</a> のビデオをご覧ください。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>DRAW_START
+    <ul>
+      <li>performTraversals の描画のフェーズが開始された時間。これは、無効化されているビューのディスプレイ リストを記録する開始ポイントです。
+
+      </li>
+
+      <li>この値と SYNC_START の間の時間は、ツリー内のすべての無効化されているビュー上で View.draw() を呼び出すのにかかった時間を示します。
+
+      </li>
+
+      <li>描画モデルに関する詳細は、<a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">Hardware Acceleration</a> または <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">Invalidations, Layouts and Performance</a> のビデオをご覧ください。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SYNC_START
+    <ul>
+      <li>描画の同期フェーズが開始された時間。
+      </li>
+
+      <li>この値と ISSUE_DRAW_COMMANDS_START の間の時間が非常に大きい場合(&gt; 0.4 ミリ秒またはこれに近い値)、通常は、GPU にアップロードする必要がある多くの新しい Bitmaps が描画されたこと意味します。
+
+
+      </li>
+
+      <li>同期フェーズについての詳細は、<a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">Profile GPU Rendering</a> のビデオをご覧ください。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ISSUE_DRAW_COMMANDS_START
+    <ul>
+      <li>ハードウェア レンダラーが、GPU への描画コマンドの発行を開始した時間。
+      </li>
+
+      <li>この値と FRAME_COMPLETED の間の時間により、そのアプリがどれくらいの量の GPU 作業を生じさせているのか大まかに知ることができます。
+オーバードローが多すぎたりまたはレンダリング効果が不十分だったりという問題がある場合は、この時間にあらわれます。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SWAP_BUFFERS
+    <ul>
+      <li>eglSwapBuffers が呼び出された時間。プラットフォーム作業関連以外では、あまり重要ではない値です。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>FRAME_COMPLETED
+    <ul>
+      <li>すべてが完了した時間です。そのフレームを処理するのにかかった時間の合計は、FRAME_COMPLETED から INTENDED_VSYNC を引くと計算できます。
+
+      </li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>
+  このデータは、別の方法でも使用できます。たとえば、さまざまな遅延バケットでのフレームの処理にかかった時間(FRAME_COMPLETED - INTENDED_VSYNC)の分布を示す下記のヒストグラムは、単純ですが役に立ちます。
+
+このグラフを一目見るだけで、大部分のフレームは 16 ミリ秒の限界線(赤色の線)を大きく下回った良好な状態であるけれども、いくつかのフレームが限界線を著しく上回っていることがわかります。
+
+ヒストグラムで時間の経過に伴う変化を確認することで、大規模な変化が起きているのか、新しい外れ値が作成されているのか知ることができます。
+また、データに含まれる多くのタイムスタンプに基づいて、入力待ち時間、レイアウトにかかった時間、その他のこれに類する興味を引く指標をグラフにできます。
+
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-framestats.png">
+
+
+<h3 id="timing-dump">簡易フレーム タイミング ダンプ</h3>
+
+<p>
+  [開発者向けオプション] で [<strong>GPUレンダリングのプロフィール作成</strong>] を [<strong>adb shell dumpsys gfxinfo</strong>] に設定すると、<code>adb shell dumpsys gfxinfo</code> コマンドにより、最新の 120 フレームのタイミング情報が、いくつかの異なるカテゴリに分かれて、タブ区切りで出力されます。
+
+
+このデータは、描画パイプラインのどの部分の処理が遅いのかを大まかに知るのに役に立ちます。
+
+</p>
+
+<p>
+  上記の <a href="#fs-data-format">framestats</a> と同様に、お好みのスプレッドシート ツールに簡単に貼り付けたり、スクリプトで簡単に集計し解析したりできます。
+
+以下のグラフは、アプリによって生成された多くのフレームが時間を費やした箇所の内訳を示しています。
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
+
+<p>
+  このグラフは、gfxinfo を実行し、出力結果をコピーし、スプレッドシート アプリケーションに貼り付け、データを積み上げ棒グラフにしたものです。
+
+</p>
+
+<p>
+  各縦棒は、アニメーションの 1 フレームを示し、その高さはそのフレームを処理するのにかかるミリ秒の数を示しています。
+また、縦棒の色分けされた各部分は、レンダリング パイプラインの各段階を示しています。これにより、ボトルネックを生んでいる可能性があるのはアプリケーションのどの箇所か確認できます。
+
+レンダリング パイプラインとその最適化方法に関する詳細は、<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">Invalidations, Layouts and Performance</a> のビデオをご覧ください。
+
+
+</p>
+
+
+<h3 id="collection-window">データ収集用のウィンドウを制御する</h3>
+
+<p>
+  Framestats と簡易フレーム タイミングの両方とも、非常に短いウィンドウを通じて、約 2 秒相当のレンダリングについてデータを収集しています。
+たとえば、収集するデータを特定のアニメーションだけに限定したい場合、このタイミング データ収集用ウィンドウを正確にコントロールするには、すべてのカウンタをリセットし収集したデータを集計します。
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
+</pre>
+
+<p>
+  これは、ダンプ コマンドとあわせて使用することもでき、フレームの 2 秒未満のウィンドウを続けてキャプチャしながら、通常の流れで収集しリセットできます。
+
+
+</p>
+
+
+<h3 id="diagnose">パフォーマンスの低下を診断する</h3>
+
+<p>
+  パフォーマンスの低下を見つけることは、問題を見つけだし、アプリケーションの状態を良好に維持するための最初のステップです。
+ただし、dumpsys は、ただ問題の存在とその相対的な深刻度を明らかにするだけです。
+さらに、パフォーマンスの問題の具体的な原因を突き止め、解決するための適切な方法を見つける必要があります。
+それには、<a href="{@docRoot}tools/help/systrace.html">systrace</a> ツールを利用することをお勧めします。
+
+</p>
+
+
+<h3 id="resources">追加リソース</h3>
+
+<p>
+  Android のレンダリング パイプラインの仕組み、一般的な問題、それらの問題の修正方法についての詳細は、以下の資料が役に立ちます。
+
+
+</p>
+
+<ul>
+  <li>Rendering Performance 101
+  </li>
+  <li>Why 60fps?
+  </li>
+  <li>Android UI and the GPU
+  </li>
+  <li>Invalidations Layouts and performance
+  </li>
+  <li>Analyzing UI Performance with Systrace
+  </li>
+</ul>
+
+
+<h2 id="automate">UI パフォーマンス テストを自動化する</h2>
+
+<p>
+  UI パフォーマンスのテスト手法の 1 つに、対象のアプリ上で一連のユーザー操作を人間のテスターに実行してもらい、目視でジャンクを探すかツール主体の手法を使用して長い時間を費やしてジャンクを見つけるかのいずれかの方法をとるというものがあります。
+
+ただし、この人の力による方法は危険を伴います。フレームレートの変化に気付く能力は、人によって大きく異なります。また、この方法は、多くの時間が必要で単調で退屈なものであり、ミスも起こりがちです。
+
+
+</p>
+
+<p>
+  より効率的な手法は、自動化された UI テストにより主要なパフォーマンス指標のログを取って解析することです。
+Android M Developer Preview には、アプリケーションのアニメーションに対するジャンクの量と深刻度を簡単に確認することができ、現在のパフォーマンスを確認し将来のパフォーマンス目標を実現するための適切なプロセスを構築するために使用できる新しいログ記録機能が含まれています。
+
+
+
+</p>
+
+<p>
+  このドキュメントでは、この新しいログ機能によるデータを使用してパフォーマンス テストを自動化するための手法について紹介します。
+
+</p>
+
+<p>
+  この手法には、鍵となるアクションが 2 つあります。何をどのようにテストするかということを明確にすることと、自動化されたテスト環境をセットアップし管理することです。
+
+
+</p>
+
+
+<h3 id="ui-tests">UI テストをセットアップする</h3>
+
+<p>
+  自動化されたテストを実行する前に、テストの仕様や必要になる可能性があるものを適切に把握するために、いくつかの大まかな決定をしておくことが重要です。
+
+</p>
+
+<h4>
+  テストする重要なアニメーションやフローを明確にする
+</h4>
+
+<p>
+  パフォーマンスの低さがユーザーの目に最も多く触れるのは、アニメーションのスムーズさが失われる場合です。
+そのため、どのタイプの UI アクションをテストするか決めるときに、ユーザーが最もよく見る重要なアニメーションまたはユーザーの使用感にとって最も重要なアニメーションにフォーカスすると効果があります。
+
+以下にいくつかの一般的なシナリオをご紹介します。
+</p>
+
+<ul>
+  <li>プライマリ ListView または RecyclerView のスクロール
+  </li>
+
+  <li>非同期処理待ちサイクル中のアニメーション
+  </li>
+
+  <li>ビットマップを読み込んだり操作したりするアニメーション
+  </li>
+
+  <li>アルファブレンドを含むアニメーション
+  </li>
+
+  <li>キャンバスを使用して描画するカスタムビュー
+  </li>
+</ul>
+
+<p>
+  チームのエンジニア、デザイナー、プロダクト マネージャーと連携して、テスト範囲のこれらの重要な製品アニメーションの優先順位を決めてください。
+
+</p>
+
+<h4>
+  将来の目標を決め、実現を目指す
+</h4>
+
+<p>
+  具体的なパフォーマンス目標を明確にし、その目標に合わせてテストを作成しデータを収集することが重要な場合もあります。
+次に例を示します。
+</p>
+
+<ul>
+  <li>詳細を知るために、初めて UI パフォーマンスの追跡を開始したいだけですか。
+  </li>
+
+  <li>将来発生する可能性のあるパフォーマンスの低下を防止したいですか。
+  </li>
+
+  <li>現在のフレームのスムーズ度合いは 90% で、今四半期中に 98 % にしたいと考えていますか。
+  </li>
+
+  <li>現在のフレームのスムーズ度合い 98% を低下させたくないと考えていますか。
+  </li>
+
+  <li>ローエンド端末でのパフォーマンスを改善することが目標ですか。
+  </li>
+</ul>
+
+<p>
+  上記のすべての場合で、複数のバージョンのアプリケーションでのパフォーマンスを示すヒストリカル トラッキングが必要です。
+
+</p>
+
+<h4>
+  テストする端末を明確にする
+</h4>
+
+<p>
+  アプリケーションのパフォーマンスは、そのアプリケーションが実行される端末によって異なります。端末によっては、メモリが少なく、GPU のパワーが低く、CPU チップが遅いものもあります。
+つまり、あるハードウェアでスムーズに実行できるアニメーションが別のハードウェアではうまく実行できなかったり、さらに悪い場合は、パイプラインの別の箇所にボトルネックを生んだりすることになります。
+
+そのため、このようなハードウェアの違いに対処するために、最新のハイエンド端末と、ローエンド端末、タブレットなどの幅広い端末を選んでテストを実行する必要があります。
+
+さまざまな CPU 性能、RAM、画面密度、サイズ等の端末を用意してください。
+ハイエンド端末でうまくいったテストが、ローエンド端末では失敗することがあります。
+
+</p>
+
+<h4>
+  UI のテストの基本的なフレームワーク
+</h4>
+
+<p>
+  <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> や <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a> といったツールが、ユーザーがアプリケーション内を移動する動作を自動処理にするために用意されています。
+
+これらは、端末でのユーザーの操作を模倣するシンプルなフレームワークです。
+これらのフレームワークを使用するには、一連のユーザー アクションを実行する独自のスクリプトを作成して、端末上で実行します。
+
+
+</p>
+
+<p>
+  <code>dumpsys gfxinfo</code> と、これらの自動化されたテストを組み合わせることで、テストを実行できる再現可能なシステムを簡単に作成して、特定の条件でのパフォーマンス情報を測定できます。
+
+
+</p>
+
+
+<h3 id="automated-tests">自動化された UI テストをセットアップする</h3>
+
+<p>
+  UI テストを実行する機能と、1 つのテストからデータを集めるためのパイプラインを用意したら、次の重要なステップは、複数の端末で、そのテストを複数回実行でき、開発チームの解析用にパフォーマンス データを集計できるフレームワークを用意することです。
+
+
+
+</p>
+
+<h4>
+  テスト自動化のためのフレームワーク
+</h4>
+
+<p>
+  UI テストのフレームワーク(<a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> など)は、対象の端末やエミュレータ上で直接実行されます。
+<em>dumpsys gfxinfo</em> によるパフォーマンス情報の収集はホストマシンによって行われますが、コマンドの送信は ADB を通じて行われます。
+これらの別々に分かれている処理の自動化を橋渡しするために、<a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a> フレームワークは開発されました。このフレームワークは、ホストマシンで動作するスクリプティング システムで、接続されている端末にコマンドを発行できるとともに、それらの端末からデータを受け取ることもできます。
+
+
+
+</p>
+
+<p>
+  UI パフォーマンス テストの適切な自動化のためのスクリプトを作成することで、少なくとも、以下のタスクを MonkeyRunner を利用して実行することが可能になります。
+
+</p>
+
+<ul>
+  <li>対象の端末(1 台または複数台)またはエミュレータに任意の APK をロードして起動する
+  </li>
+
+  <li>UI Automator UI テストを起動して、実行できるようにする
+  </li>
+
+  <li><em>dumpsys gfxinfo</em>を通じて情報を収集する。<em></em>
+  </li>
+
+  <li>情報を集計し、デベロッパーに役に立つ形で表示する。
+  </li>
+</ul>
+
+
+<h3 id="triage">見つけた問題を選別し解決する</h3>
+
+<p>
+  問題のパターンまたはパフォーマンスの低下を確認したら、次に必要なことは問題の解決方法を見つけその方法を実行することです。
+その自動化されたテスト フレームワークがフレームの正確なタイミングの内訳を保存している場合、最近行われたコードやレイアウトの疑わしい変更を調べたり(パフォーマンスが低下している場合)、手作業での調査に切り替えたときにシステムのどの箇所を解析するか絞り込んだりするのに役立ちます。
+
+
+手作業での調査は、まず <a href="{@docRoot}tools/help/systrace.html">systrace</a> から開始することをお勧めします。systrace は、システムのレンダリング パイプラインのすべての段階、すべてのスレッド、コア、およびテスト担当者が定義したカスタム イベントについての正確なタイミング情報を表示します。
+
+
+</p>
+
+<h4>
+  一時的なタイミングを適切にプロファイリングする
+</h4>
+
+<p>
+  レンダリング パフォーマンスのタイミングを取得し測定することには困難を伴います。
+これらの数値は、その本質として、決定的なものではなく、多くの場合、システムの状態、利用可能なメモリ量、サーマル・スロットリング、その地域に最後に日照があった時間などに応じて変動します。
+
+つまり同じテストを 2 度実行した場合、近似するが完全に同じではない、わずかに異なる結果が出ることがあるということです。
+
+
+</p>
+
+<p>
+  この方法で適切にデータを集めプロファイリングするには、同じテストを複数回実行し、結果を平均値または中間値として集計します(以下では、この処理を「バッチ」と記載します)。これにより、テストのパフォーマンスの大まかな数字を、正確なタイミングを必要とすることなく取得できます。
+
+
+
+</p>
+
+<p>
+  バッチは、コード変更の合間にも、それらの変更がパフォーマンスにもたらす相対的な影響を確認するために使用できます。
+変更前のバッチの平均フレームレートが変更後のバッチよりも大きい場合、通常、WRT パフォーマンスが全面的に改善したと言えます。
+
+
+</p>
+
+<p>
+  つまり、自動化された UI テストでは、この考え方を取り入れることと、テスト中に発生する可能性のある異常を把握しておくことが必要です。
+たとえば、アプリケーションのパフォーマンスが、そのアプリケーションではなく何らかの端末の問題により突然低下した場合、通常時のタイミングを取得するためにバッチを再度実行した方がよいことがあります。
+
+
+
+</p>
+
+<p>
+  それでは、測定値を意味のあるものにするには、何回テストを実行すればよいでしょうか。少なくとも 10 回は必要であり、50 回や 100 回などのように回数が多いほど正確な結果が得られます(もちろん、時間と正確さはトレードオフの関係にあります)。
+
+
+</p>
diff --git a/docs/html-intl/intl/ko/about/versions/lollipop.jd b/docs/html-intl/intl/ko/about/versions/lollipop.jd
index f6f292a..bc4e5ba 100644
--- a/docs/html-intl/intl/ko/about/versions/lollipop.jd
+++ b/docs/html-intl/intl/ko/about/versions/lollipop.jd
@@ -3,14 +3,22 @@
 @jd:body
 
 
-  <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0">
-    <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" >
-  </div>
+<div style="float:right;">
+  <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x">
+</div>
 
-  <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;">
-  <div class="col-4 normal-links highlights" style="font-size:12px;">
-    <h3 id="thisd" >핵심 개발자 기능</h3>
-    <ul style="list-style-type:none;">
+<p>지금까지의 Android 출시 버전 중 가장 크고 야심 차게 준비한 Android 5.0 Lollipop을 소개합니다.</p>
+
+<p>이번 출시 버전에는 사용자를 위한 새로운 기능과 개발자를 위한 수천 가지의 새로운 API가 포함되어 있습니다. 이제 Android를 휴대전화, 태블릿, 웨어러블 기기뿐만 아니라 TV와 자동차에서도 사용할 수 있습니다.</p>
+
+<p>새로운 개발자 API에 대해 자세히 살펴보려면 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 개요</a>를 참조하세요. 또는 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>에서 소비자를 위한 Android 5.0에 대해 자세히 읽어 볼 수 있습니다.</p>
+
+
+<div id="qv-wrapper">
+<div id="qv">
+    <h2>핵심 개발자 기능</h2>
+  <ol>
+      <ul style="list-style-type:none;">
   <li><a href="#Material">머티리얼 디자인</a></li>
   <li><a href="#Perf">성능 중심</a></li>
   <li><a href="#Notifications">알림</a></li>
@@ -26,22 +34,12 @@
   <li><a href="#WebView">Chromium WebView</a></li>
   <li><a href="#Accessibility">접근성 및 입력</a></li>
   <li><a href="#Battery">배터리를 효율적으로 사용하는 앱을 위한 도구</a></li>
-    </ul>
+  </ol>
   </div>
 </div>
 
 
 
-
-
-
-
-<p>지금까지의 Android 출시 버전 중 가장 크고 야심 차게 준비한 Android 5.0 Lollipop을 소개합니다.</p>
-
-<p>이번 출시 버전에는 사용자를 위한 새로운 기능과 개발자를 위한 수천 가지의 새로운 API가 포함되어 있습니다. 이제 Android를 휴대전화, 태블릿, 웨어러블 기기뿐만 아니라 TV와 자동차에서도 사용할 수 있습니다.</p>
-
-<p>새로운 개발자 API에 대해 자세히 살펴보려면 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 개요</a>를 참조하세요. 또는 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>에서 소비자를 위한 Android 5.0에 대해 자세히 읽어 볼 수 있습니다.</p>
-
 <h2 id="Material">머티리얼 디자인</h2>
 
 <p>Android 5.0에서는 Android에 <a href="http://www.google.com/design/spec">머티리얼 디자인</a>을 도입하여 새로운 디자인 패턴을 앱과 간편하게 통합할 수 있는 확장된 UI 툴킷을 제공합니다.  </p>
@@ -69,7 +67,7 @@
 </div>
 
 
-<p>물결 애니메이션을 앱의 버튼, 체크박스, 기타 터치 컨트롤에 사용할 수 있습니다. 
+<p>물결 애니메이션을 앱의 버튼, 체크박스, 기타 터치 컨트롤에 사용할 수 있습니다.
 
 <p>또한 XML에서 벡터 드로어블을 정의하고 다양한 방법으로 애니메이션을 적용할 수도 있습니다. 벡터 드로어블은 정의 값을 잃지 않고 크기가 조절되므로 단일 색상 인앱 아이콘에 적합합니다.</p>
 
diff --git a/docs/html-intl/intl/ko/index.jd b/docs/html-intl/intl/ko/index.jd
index 59b9321..dd756a4 100644
--- a/docs/html-intl/intl/ko/index.jd
+++ b/docs/html-intl/intl/ko/index.jd
@@ -1,93 +1,89 @@
 fullpage=true
-page.viewport_width=970
 excludeFromSuggestions=true
-page.metaDescription=Android 개발자 공식 사이트 앱 개발자 및 디자이너에게 Android SDK 및 문서를 제공합니다.
+page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
 page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />
 
 @jd:body
 
-<div class="home-new-carousel-1">
-  <div class="fullscreen-carousel-content">
-    <div class="vcenter">
-      <div class="wrap clearfix">
+<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel">
+</div> -->
+<section class="dac-hero-carousel">
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
+<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> -->
+<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;">
+<a href="/preview/index.html">
+  <div class="wrap" style="max-width:1100px;">
+    <div class="cols dac-hero-content">
+      <div class="col-10of16 col-push-6of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png"
+             srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-6of16 col-pull-10of16">
+        <div class="dac-hero-tag"></div>
 
-      <div class="landing-section-header">
-            <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div>
-            <div class="col-5" style=" margin-top:70px ">
-            <h3 stye="font-weight:300;">Android 5.0 Lollipop</h3>
-            <p>Android 5.0 업데이트는 사용자 앱에 잠금화면상의 알림, 완전히 새로운 카메라 API, OpenGL ES 3.1, 신규 머티리얼 디자인(Material Design) 인터페이스 등 다양하고 새로운 기능을 추가합니다.</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">자세히 알아보기</a>
-            </div>
-          </div>
-          </div>
-        </div>
-       <h2>&nbsp;</h2>
-        <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16
-        no-section" data-query="collection:index/primary" data-resourcestyle="card"
-        data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget -->
-      </div> <!-- end .wrap -->
-    </div> <!-- end .vcenter -->
-  </div> <!-- end .fullscreen-carousel-content -->
-</div> <!-- end .fullscreen-carousel -->
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">Android의 다음 버전을 만나볼 준비가 
+        되셨습니까? 여러분의 앱을 Nexus 5, 6, 9 및 Player에서 테스트해보십시오. </p>
 
-<div class="actions-bar" style="margin-top:20px">
-  <div class="wrap">
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          지금 시작하세요!
+        </a>
+      </div>
+    </div>
+  </div>
+</a>
+</article></section>
+
+<div 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">SDK 받기</a></div>
-      <div><a href="{@docRoot}samples/index.html">샘플 둘러보기</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">비디오 시청</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">앱 관리</a></div>
+      <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="//www.youtube.com/user/androiddevelopers">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Watch Videos
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
 
 
-<div class="landing-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
+<section class="dac-section dac-section-light" id="build-apps"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    Resources to get you started with designing and developing for Android.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/primary"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-            <div class="landing-h1" style="margin-top:0px">멀티스크린 월드에 맞게 만들기</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          Android는 전 세계 수억 개의 휴대 기기에서 구동되고 있으며, <br>
+<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel">
+</div>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">멀티스크린 월드에 맞게 만들기</h1>
+    <div class="dac-section-subtitle">
+      Android는 전 세계 수억 개의 휴대 기기에서 구동되고 있으며, <br>
           이제 이 흥미진진하고 새로운 폼팩터를 지원합니다.
-        </div>
-      </div>
-      <div class="landing-body" style="margin-top: 50px;">
-        <div class="landing-breakout cols">
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
-              <p class="landing-small">
-                사용자가 필요로 할 때 언제든지 실시간으로 정보를 제공합니다.
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">Android Wear에 대해 알아보세요</a>
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png">
-              <p class="landing-small">
-                대형 스크린에 적합한 앱과 컨텐츠를 구성하세요.
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">Android TV에 대해 알아보세요</a>
-
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png">
-              <p class="landing-small">
-                음악 앱을 자동차 엔터테인먼트 시스템에 적용해보세요.
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">Android Auto에 대해 알아보세요</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+    </div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/multiscreen"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html-intl/intl/ko/preview/backup/index.jd b/docs/html-intl/intl/ko/preview/backup/index.jd
new file mode 100644
index 0000000..b3952d5
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/backup/index.jd
@@ -0,0 +1,327 @@
+page.title=앱용 자동 백업
+page.tags=backup, previewresources, androidm
+page.keywords=백업, 자동 백업, 미리 보기
+page.image=images/cards/card-auto-backup_2x.png
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>이 문서의 내용</h2>
+      <ol>
+        <li><a href="#overview">개요</a></li>
+        <li><a href="#configuring">데이터 백업 구성</a></li>
+        <li><a href="#testing">백업 구성 테스트</a></li>
+        <li><a href="#issues">알려진 문제</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  사용자는 앱 내에서 데이터를 생성하고 기본 설정을 설정하는 데 상당한 시간과 노력을 들이는 경우가 빈번합니다.
+ 사용자가 고장 난 기기를 교체하거나 새것으로 업그레이드하면 그러한 데이터를 보존해 두는 것이 훌륭한 사용자 환경을 보장하는 데 중요한 부분을 차지합니다.
+ Android M 미리 보기 시스템에서 실행되는 기기는 이러한 상황에서 사용자에게 좋은 환경을 보장하는 데 도움을 주기 위해 앱 데이터를 Google Drive에 자동으로 백업합니다.
+
+ 이런 앱 데이터는 사용자가 기기를 바꾸거나 업그레이드하면 자동으로 복원됩니다.
+
+</p>
+
+<p>
+  자동 백업 기능은 Android M 미리 보기에서 실행되는 기기에 설치된 모든 앱에 활성화되어 있습니다. 달리 앱 코드를 추가하지 않아도 됩니다.
+ 시스템은 사용자에게 자동 데이터 백업에서 옵트아웃할 수도 있습니다.
+ 앱에서 어떤 데이터를 백업할지 제한하는 쪽을 선택할 수도 있습니다.
+</p>
+
+<p>
+  이 문서에서는 새로운 시스템 동작과 앱에 대해 어느 데이터를 백업할지 지정하는 방법을 설명합니다.
+
+</p>
+
+<h2 id="overview">개요</h2>
+
+<p>
+  자동 백업 기능은 앱이 사용자 기기에서 생성한 데이터를 보존하기 위해 해당 데이터를 사용자의 Google Drive 계정에 업로드하고 암호화합니다.
+ 데이터 저장에 대해 개발자나 사용자에게 아무런 요금도 부과하지 않고, 저장된 데이터는 사용자 개인의 Drive 할당량을 사용한 것으로 감안하지 않습니다.
+ M 미리 보기 시행 기간 중 사용자는 Android 앱 한 개당 최대 25MB까지 저장할 수 있습니다.
+
+</p>
+
+<p>
+  자동 백업은 24시간마다 한 번씩, 기기가 유휴 상태일 때, 충전 중일 때 및 Wi-Fi 네트워크에 연결될 때마다 수행합니다.
+ 이러한 조건에 부합하면 백업 관리자 서비스가 이용 가능한 모든 백업 데이터를 클라우드에 업로드합니다.
+ 사용자가 새 기기로 전환하거나 백업된 앱을 제거했다가 다시 설치하면 복원 작업이 백업된 데이터를 새로 설치된 앱의 데이터 디렉터리 안에 복사합니다.
+
+
+</p>
+
+<p class="note">
+  <strong>참고:</strong> 레거시 <a href="{@docRoot}google/backup/index.html">Android 백업 서비스</a>를 이용하는 앱의 경우, 이 새 동작이 적용되지 않고 기존 백업 동작이 평소처럼 작동합니다.
+
+
+</p>
+
+
+<h3 id="auto-exclude">자동으로 배제된 데이터 파일</h3>
+
+<p>
+  데이터 중에는 예를 들어 임시 파일과 캐시 등 백업하지 않아도 되는 것도 있습니다. 따라서 자동 백업 서비스는 특정 데이터 파일을 기본적으로 배제합니다.
+
+</p>
+
+<ul>
+  <li>디렉터리 내의 파일 중 {@link android.content.Context#getCacheDir
+    getCacheDir()} 및 {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
+ 메서드로 참조되는 파일.
+  </li>
+
+  <li>외부 저장소에 위치한 파일 중(디렉터리에 상주하는 것이 아닌 한) 
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+ 메서드로 참조되는 파일.
+  </li>
+
+  <li>디렉터리에 위치한 파일 중 
+{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} 메서드로 참조되는 파일.
+  </li>
+</ul>
+
+<h2 id="configuring">데이터 백업 구성</h2>
+
+<p>
+  M 미리 보기 기기에 설치된 앱이 생성한 데이터는 모두 백업됩니다. 다만 이전 섹션에서 나열한 자동으로 배제되는 파일만은 예외입니다.
+ 앱에서 어느 데이터를 백업할지 좀 더 상세하게 제한하고 구성하려면 앱 매니페스트에 있는 설정을 사용하면 됩니다.
+
+</p>
+
+<h3 id="include-exclude">데이터 포함 또는 배제</h3>
+
+<p>
+  앱에 필요한 데이터가 무엇이며 어떤 식으로 저장하는지에 따라 특정 파일이나 디렉터리를 포함 또는 배제하기 위해 특정한 규칙을 설정해야 할 수 있습니다.
+ 자동 백업 서비스는 이러한 백업 규칙 설정을 지원하는 데 XML 구성 파일과 앱 매니페스트를 사용하는 방식을 씁니다.
+
+ 앱 매니페스트에서는 다음 예에서 표시된 것처럼 백업 구성표 구성 파일을 지정하면 됩니다.
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>
+  이 예시 코드에서는 <code>android:fullBackupContent</code> 특성이 XML 파일을 나타냅니다. 이는 앱 개발 프로젝트의 <code>res/xml/</code> 디렉터리 내에 위치하며, 일명 <code>mybackupscheme.xml</code>이라고 합니다.
+
+ 이 구성 파일에는 어느 파일이 백업되는지에 대한 규칙이 포함되어 있습니다.
+ 다음 예시 코드는 특정 파일을 백업에서 배제하는 구성 파일을 나타낸 것입니다.
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;full-backup-content&gt;
+    &lt;exclude domain="database" path="device_info.db"/&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  이 예에서의 백업 구성은 특정 데이터베이스 파일만 백업되지 않게 배제합니다.
+  나머지 파일은 모두 백업됩니다.
+</p>
+
+<h4>백업 구성 구문</h4>
+
+<p>
+  백업 서비스 구성을 사용하면 구체적으로 어느 파일을 백업에 포함시키고 백업에서 배제할지 지정할 수 있게 해줍니다.
+ 데이터 백업 구성 XML 파일에 사용되는 구문은 다음과 같습니다.
+</p>
+
+<pre>
+&lt;full-backup-content&gt;
+    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  다음의 요소와 특성을 사용하면 어느 파일을 백업에 포함시키거나 백업에서 배제할지 지정할 수 있게 해줍니다.
+
+</p>
+
+<ul>
+  <li>
+  <code>&lt;include&gt;</code>. 이 요소는 일련의 리소스를 백업하기로 지정하는 경우 사용하십시오. 시스템이 기본적으로 앱 안의 모든 데이터를 백업하는 대신 이 방식을 쓰면 됩니다.
+ 예를 들어 <code>&lt;include&gt;</code> 태그를 지정하면 시스템은 이 요소로 <em>지정된 리소스만</em> 백업합니다.
+
+
+  </li>
+
+  <li>
+  <code>&lt;exclude&gt;</code>. 이 요소는 일련의 리소스를 백업에서 배제하기로 지정하는 데 사용하세요.
+ 시스템이 앱 안의 모든 데이터를 백업하되, 이 요소로 지정된 리소스만 제외합니다.
+
+  </li>
+
+  <li>
+  <code>domain.</code> 백업에 포함시키거나 백업에서 배제하고자 하는 리소스 유형입니다. 이 특성에 대해 지정할 수 있는 유효한 값에는 다음과 같은 것들이 있습니다.
+
+  </li>
+
+  <li style="list-style: none">
+  <ul>
+    <li>
+    <code>root</code>. 리소스가 앱의 루트 디렉터리에 있음을 나타냅니다.
+    </li>
+
+    <li>
+    <code>file</code>. 디렉터리 내에 있는 리소스 중 
+    {@link android.content.Context#getFilesDir getFilesDir()} 메서드에 의해 반환된 것에 상응합니다.
+    </li>
+
+    <li>
+    <code>database</code>. 
+    {@link android.content.Context#getDatabasePath getDatabasePath()} 메서드에 의해, 또는 
+    {@link android.database.sqlite.SQLiteOpenHelper} 클래스를 사용하여 반환된 데이터베이스에 상응합니다.
+    </li>
+
+    <li>
+    <code>sharedpref</code>. {@link android.content.Context#getSharedPreferences getSharedPreferences()}
+ 메서드에 의해 반환된 {@link android.content.SharedPreferences} 객체에
+ 상응합니다.
+    </li>
+
+    <li>
+    <code>external</code>. 리소스가 외부 저장소에 있으며, 디렉터리 내의 파일 중 {@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 메서드에 의해 반환된 것에 상응합니다.
+
+
+    </li>
+
+    <li>
+    <code>path</code>. 백업에 포함시키거나 백업에서 배제하고자 하는 리소스로 이어지는 파일 경로입니다.
+
+    </li>
+  </ul>
+  </li>
+</ul>
+
+
+<h3 id="prohibit">데이터 백업 금지하기</h3>
+
+<p>
+  앱 데이터 중 어떤 것이라도 자동 백업을 방지하기로 선택할 수도 있습니다. 매니페스트의 앱 요소에서 <code>android:allowBackup</code> 특성을 <code>false</code>로 설정하면 됩니다.
+
+ 이 설정은 다음 예시 코드로 설명해 놓았습니다.
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:allowBackup="false"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="testing">백업 구성 테스트</h2>
+
+<p>
+  백업 구성을 만들었으면 앱이 데이터를 저장하고 제대로 복구되는지 확인하기 위해 테스트해보는 것이 좋습니다.
+
+</p>
+
+
+<h4>백업 로깅 활성화</h4>
+
+<p>
+  백업 기능이 XML 파일을 구문 분석하는 방법을 결정하는 데 도움이 되는 방법으로 테스트 백업을 수행하기 전에 로깅을 활성화하는 방안이 있습니다.
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
+</pre>
+
+<h4>백업 테스트</h4>
+
+<p>수동으로 백업을 실행하려면, 우선 다음과 같은 명령을 호출하여 백업 관리자를 초기화해야 합니다.
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr run
+</pre>
+
+<p>
+  다음으로, 다음과 같은 명령을 사용하여 애플리케이션을 수동으로 백업하되 앱의 패키지 이름을 <code>&lt;PACKAGE&gt;</code> 매개변수로 지정합니다.
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
+
+
+<h4>복구 테스트</h4>
+
+<p>
+  앱 데이터를 백업한 다음 수동으로 복구를 시작하려면, 다음 명령을 호출하되, 앱에 대한 패키지 이름을 <code>&lt;PACKAGE&gt;</code> 매개변수로 지정하십시오.
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr restore &lt;PACKAGE&gt;
+</pre>
+
+<p class="warning">
+  <b>경고:</b> 이 작업을 수행하면 앱이 중지되고 복구 작업을 수행하기 전에 데이터를 지워버립니다.
+
+</p>
+
+<p>
+  앱의 복구 프로세스를 시작하려면 앱을 제거했다가 다시 설치하면 됩니다. 앱 데이터는 앱 설치가 완료되면 클라우드에서 자동으로 복원됩니다.
+
+</p>
+
+
+<h4>백업 문제 해결</h4>
+
+<p>
+  문제에 직면하면 백업 데이터와 관련 메타데이터를 지우면 됩니다. 그러려면 <strong>설정 &gt; 백업</strong>에서 백업을 껐다가 켜거나, 기기를 공장 재설정하거나 아니면 다음의 명령을 호출하십시오.
+
+
+</p>
+
+<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
+
+<p>
+  <code>&lt;TRANSPORT&gt;</code> 값이 <code>com.google.android.gms</code>로 접두사가 붙어있어야 합니다.
+  전송 목록을 가져오려면 다음과 같은 명령을 호출하면 됩니다.
+</p>
+
+<pre>$ adb shell bmgr list transports</pre>
+
+<h2 id="issues">알려진 문제</h2>
+
+<p>다음은 자동 백업 서비스에 대해 알려진 문제입니다.</p>
+
+<ul>
+  <li><strong>Google Cloud 메시지</strong> - 푸시 알림에 Google Cloud 메시지를 사용하는 앱의 경우, Google Cloud 메시지 등록에 의해 반환된 등록 ID를 백업하면 복원된 앱에 대한 푸시 알림을 끊게 되는 문제가 알려져 있습니다. 새 기기에 설치된 다음에는 새 등록 ID에 대하여 API를 쿼리하는 것이 중요합니다. 이것은 기존 등록 ID가 백업된 경우는 해당되지 않습니다.
+
+
+
+
+ 이 문제를 피하려면 백업된 파일 집합에서 등록 ID를 배제하십시오.
+
+  </li>
+</ul>
diff --git a/docs/html-intl/intl/ko/preview/download.jd b/docs/html-intl/intl/ko/preview/download.jd
new file mode 100644
index 0000000..ff9dd7e
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/download.jd
@@ -0,0 +1,360 @@
+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/app-linking.jd b/docs/html-intl/intl/ko/preview/features/app-linking.jd
new file mode 100644
index 0000000..0e23801
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/features/app-linking.jd
@@ -0,0 +1,123 @@
+page.title=앱 링크
+page.image=images/cards/card-app-linking_2x.png
+page.keywords=applinking, 딥 링크, 인텐트
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>이 문서의 내용</h2>
+      <ol>
+        <li><a href="#web-assoc">웹사이트 연관 선언</a></li>
+        <li><a href="#verfy-links">앱 링크 확인 요청</a></li>
+        <li><a href="#user-manage">앱 링크 설정 관리</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Android 인텐트 시스템은 유연한 메커니즘이라 앱이 콘텐츠와 요청을 처리할 수 있습니다.
+  여러 개의 앱이 자신의 인텐트 필터에서 모두 일치하는 URI 패턴을 선언할 수 있습니다. 사용자가 기본 시작 처리자가 없는 웹 링크를 클릭하는 경우 플랫폼이 대화창을 표시하여 해당 사용자가 일치하는 인텐트 필터를 선언한 앱 목록에서 선택 할 수 있습니다.
+
+
+</p>
+
+<p>
+  Android M 개발자 미리 보기에서는 앱 링크에 대한 지원을 도입합니다. 이를 통해 앱 개발자들이 앱을 본인이 소유한 웹 도메인과 연관시켜 기존의 링크 처리를 한 단계 개선합니다.
+ 개발자가 이 연관 관계를 생성하면 플랫폼이 특정 웹 링크를 처리하는 데 사용된 기본 앱을 알아서 판단하여 사용자에게 물어보는 과정을 건너뛸 수 있습니다.
+
+
+</p>
+
+
+<h2 id="web-assoc">웹사이트 연관 선언</h2>
+
+<p>
+  웹사이트 소유자가 앱 링크를 설정하려면 앱과의 연관 관계를 선언해야 합니다. 사이트 소유자는 앱에 대한 이러한 관계를 선언하는 데 JSON 파일을 호스팅하는 방식을 씁니다. 일명 {@code statements.json}이라는 파일을 도메인에서 잘 알려진 위치에 선언합니다.
+
+
+</p>
+
+<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<p class="note">
+  <strong>참고:</strong>
+  M 개발자 미리 보기 기간 중에는 JSON 파일을 http 프로토콜을 통해 확인합니다. 플랫폼이 공식적으로 출시되면 이 파일을 암호화된 https 프로토콜에서 확인하게 됩니다.
+
+</p>
+
+<p>
+  이 JSON 파일은 이 도메인 아래에서 URL에 대한 기본 처리자로 사용되어야 하는 Android 앱을 나타냅니다.
+ 이것이 앱을 식별하는 기반은 다음과 같은 필드입니다.
+</p>
+
+<ul>
+  <li>{@code package_name}: 앱의 매니페스트에 선언된 패키지 이름입니다.</li>
+
+  <li>{@code sha256_cert_fingerprints}: 앱의 서명 인증서의 SHA256 지문입니다.
+    Java keytool을 사용하여 이 지문을 생성하려면 다음과 같은 명령을 사용십시오.
+    <pre>keytool -list -v -keystore my-release-key.keystore</pre>
+  </li>
+</ul>
+
+<p>
+  다음 파일 목록은
+{@code statements.json} 파일의 콘텐츠와 형식을 예를 들어 나타낸 것입니다.
+</p>
+
+<pre>
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "<strong>&lt;package name&gt;</strong>",
+    "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+  }
+}]
+</pre>
+
+
+<h2 id="verfy-links">앱 링크 확인 요청</h2>
+
+<p>
+  앱은 플랫폼에 자신의 인텐트 필터의 데이터 요소 내에서 호스트 이름으로 정의된 모든 앱 링크를 자동으로 확인해달라고 요청할 수 있습니다. 이때 비교 대상은 각각의 웹 도메인에서 호스팅된 {@code statements.json} 파일입니다.
+
+ 앱 링크 확인을 요청하려면 매니페스트에서 원하는 인텐트 필터 각각에 {@code android:autoVerify}
+특성을 하나씩 추가하면 됩니다. 다음 매니페스트 코드 조각에 나타낸 내용을 참고하십시오.
+
+</p>
+
+<pre>
+&lt;activity ...&gt;
+    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+        &lt;action android:name="android.intent.action.VIEW" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>
+  앱 매니페스트에 {@code android:autoVerify} 특성이 있으면, 플랫폼은 앱이 설치된 시점에 앱 링크를 확인하려 시도합니다.
+ 플랫폼이 앱 링크를 성공적으로 확인하지 못하면 해당 앱은 웹 링크를 처리하기 위한 기본 설정 앱으로 설정되지 않습니다.
+ 다음번에 사용자가 그런 링크 중 하나를 열면, 플랫폼은 사용자에게 메시지를 표시하는 방식으로 변경합니다.
+
+
+</p>
+
+<p class="note">
+  <strong>참고:</strong> 테스트 중에는 확인에 실패하고 나서 거짓 긍정 결과가 나올 가능성이 있지만, 사용자가 앱에 물어보지 않고 지원되는 링크를 열도록 명시적으로 활성화해 놓았고 이때 시스템 설정 앱을 사용한 경우, 대화창이 표시되지 않고 링크는 개발자 본인의 앱으로 이동하지만 이는 순전히 사용자 설정 때문이고 확인이 성공해서가 아닙니다.
+
+
+
+</p>
+
+
+<h2 id="user-manage">앱 링크 설정 관리</h2>
+
+<p>
+  사용자가 앱 링크 설정을 변경하여 URL을 본인이 선호하는 방식으로 처리하도록 할 수 있습니다. 앱 링크를 검토하고 관리하려면 <strong>설정 &gt; 앱 &gt; 앱 정보 &gt; 기본으로 열기</strong> 아래의 시스템 설정 앱에서 하면 됩니다.
+
+
+</p>
diff --git a/docs/html-intl/intl/ko/preview/index.jd b/docs/html-intl/intl/ko/preview/index.jd
new file mode 100644
index 0000000..15b14f9
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/index.jd
@@ -0,0 +1,67 @@
+page.title=Android M 개발자 미리 보기
+page.tags="preview",
+meta.tags="preview, M preview", androidm
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android M 개발자 미리 보기</h1>
+        <p class="dac-hero-description">
+          Android의 다음 버전을 만나볼 준비가 되셨습니까? 여러분의 앱을 Nexus 5, 6, 9 및 Player에서 테스트해보십시오.
+ 새로운 내용은 무엇인지 둘러보십시오. <strong>런타임 권한</strong>, <strong>Doze</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>
+      </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>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <h1 class="dac-section-title">리소스</h1>
+  <div class="dac-section-subtitle">
+    앱을 Android M에 대비시키는 데 유용한 중요 정보입니다.
+  </div>
+ 
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/more"
+       data-cardSizes="6x6"
+       data-maxResults="16"></div>
+
+    <ul class="dac-section-links">
+      <li class="dac-section-link">
+        <a href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          문제 보고
+</a>
+      </li> 
+      <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
+        <span class="dac-sprite dac-auto-chevron"></span>
+        G+ 커뮤니티 가입
+</a>
+      </li>
+    </ul>
+  </div>
+</section>
+
diff --git a/docs/html-intl/intl/ko/preview/license.jd b/docs/html-intl/intl/ko/preview/license.jd
new file mode 100644
index 0000000..71c9d45
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/license.jd
@@ -0,0 +1,143 @@
+page.title=라이선스 계약
+
+@jd:body
+
+<p>
+Android SDK 미리보기를 시작하려면 우선 다음과 같은 사용 약관에 동의해야 합니다. 아래에 설명한 바와 같이, 이것은 Android SDK의 미리 보기 버전이며 변경될 가능성이 있고 이를 사용하는 위험 부담은 계약자 본인에게 있음을 유의하십시오.
+  Android SDK 미리보기는 안정된 릴리스가 아니며, 오류나 결함이 들어있을 수 있고 이 때문에 컴퓨터 시스템, 기기 및 데이터에 심각한 손상을 초래할 수 있습니다.
+</p>
+
+<p>
+이것은 Android SDK 미리 보기 라이선스 계약서입니다(이하 "라이선스 계약").
+</p>
+<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
+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>
\ 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
new file mode 100644
index 0000000..aeb8fc2
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/samples.jd
@@ -0,0 +1,70 @@
+page.title=샘플
+page.image=images/cards/samples-new_2x.png
+@jd:body
+
+<p>
+  다음 코드 샘플은 M 개발자 미리 보기를 위해 제공된 것입니다. Android Studio에서 샘플을 다운로드하려면 <b>파일 &gt; 샘플 가져오기</b> 메뉴 옵션을 선택하십시오.
+
+</p>
+
+<p class="note">
+  <strong>참고:</strong> 이러한 다운로드 가능한 프로젝트는 Gradle 및 Android Studio와 함께 쓰도록 만들어진 것입니다.
+
+</p>
+
+
+<h3 id="RuntimePermissions">런타임 권한</h3>
+
+<p>
+ Android M은 시스템 권한이 작동하는 방식을 확 바꾸어 놓습니다. 사용자는 설치 중이 아니라 런타임에 권한 요청을 승인해 달라는 요청을 받습니다.
+ 이 샘플은 이와 같은 권한을 요청하는 방법을 나타낸 것입니다.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-RuntimePermissions">GitHub에서 가져오기</a></p>
+
+<h3 id="ConfirmCredentials">확인 자격 증명</h3>
+
+<p>
+ 이 샘플은 앱에서 기기 자격 증명을 인증 방법으로 사용하는 법을 나타낸 것입니다.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">GitHub에서 가져오기</a>
+</p>
+
+<h3 id="FingerprintDialog">지문 대화창</h3>
+
+<p>
+ 이 샘플은 앱에서 사용자를 인증하기 위해 등록된 지문을 인식하는 방법을 나타낸 것입니다.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-FingerprintDialog">GitHub에서 가져오기</a></p>
+
+<h3 id="AutomaticBackup">앱용 자동 백업</h3>
+
+<p>
+ Android M은 앱 설정에서 사용할 수 있는 자동 백업을 도입합니다. 이 샘플은 설정 백업을 관리하기 위해 앱에 필터링 규칙을 추가하는 방법을 나타낸 것입니다.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">GitHub에서 가져오기</a></p>
+
+<h3 id="CameraRaw">카메라 2 RAW</h3>
+
+<p>
+  <code>Camera2</code> API를 사용해 RAW 카메라 버퍼를 캡처하고 이를 <code>DNG</code> 파일로 저장하는 법을 나타낸 것입니다.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-Camera2Raw">GitHub에서 가져오기</a></p>
+
+<h3 id="ActiveNotification">활성 알림</h3>
+
+<p>
+  이 샘플은 <a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a>를 사용하여 앱이 현재 표시하고 있는 알림 수가 몇 개인지 알게 되는 원리를 나타낸 것입니다.
+
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">GitHub에서 가져오기</a></p>
diff --git a/docs/html-intl/intl/ko/preview/setup-sdk.jd b/docs/html-intl/intl/ko/preview/setup-sdk.jd
new file mode 100644
index 0000000..cf3084b
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/setup-sdk.jd
@@ -0,0 +1,207 @@
+page.title=미리 보기 SDK 설정하기
+page.image=images/cards/card-set-up_16-9_2x.png
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>이 문서의 내용</h2>
+      <ol>
+        <li><a href="#get-as13">Android Studio 1.3 가져오기</a></li>
+        <li><a href="#get-sdk">미리 보기 SDK 가져오기</a></li>
+        <li><a href="#create-update">프로젝트 생성 또는 업데이트</a></li>
+        <li><a href="#setup-test">테스트를 위해 설정</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>M 개발자 미리 보기 SDK는 Android SDK Manager에서 이용할 수 있습니다. 이 문서에서는 독자 여러분이 Android 앱 개발, 예를 들어 Android SDK Manager 사용이나 프로젝트 생성 등에 익숙하다고 가정합니다.
+
+ Android를 처음 사용하시는 경우, 우선 <a href="{@docRoot}training/basics/firstapp/index.html">첫 앱 구축하기</a> 학습 단원부터 참조하십시오.</a>
+
+</p>
+
+<h2 id="get-as13">Android Studio 1.3 가져오기</h2>
+
+<p>개발자 미리 보기는 역시 미리 보기 상태인 Android Studio 1.3과 함께 사용하는 것이 가장 좋습니다.
+ Android Studio 1.3의 미리 보기 버전을 설치하여 미리 보기 SDK 작업에 사용하는 것을 적극 추천합니다.
+</p>
+
+<p class="caution"><strong>주의:</strong> Android Studio 1.3의 카나리아 미리 보기는 아직도 활발히 개발 중인 상태입니다.
+ 기본 개발 머신을 사용하여 개발자 미리 보기를 테스트하는 경우, 두 번째 Android Studio 설치를 하나 더 생성해 테스트에 사용하면 됩니다.
+
+</p>
+
+<p>Android Studio 1.3 미리 보기를 설치하려면 다음과 같이 하면 됩니다.</p>
+
+<ol>
+  <li><a href="{@docRoot}tools/studio/index.html">Android Studio</a>를 다운로드하여 시작합니다.
+
+  </li>
+
+  <li><strong>설정</strong> 창을 엽니다(또는 Windows의 경우 <strong>파일 &gt; 설정</strong>을 선택해도 됩니다).
+ <strong>외관 및 동작 &gt; 시스템 &gt; 설정 &gt; 업데이트</strong> 패널을 선택하십시오.
+
+
+
+    <p class="aside">OSX의 경우, <strong>외관 및 동작</strong> 패널은 Android Studio의 <strong>기본 설정</strong> 창에 있습니다.
+
+</p>
+  </li>
+
+  <li> <strong>업데이트</strong> 패널에서 <strong>다음에 대해 업데이트 자동 확인:
+ Canary 채널</strong>이라는 선택 사항을 선택합니다.
+  </li>
+
+  <li><strong>업데이트</strong> 패널에서 <strong>지금 확인</strong>을 선택하여 최신 카나리아 빌드를 확인합니다.
+ 메시지가 표시되면 빌드를 다운로드하고 설치하십시오.
+
+  </li>
+</ol>
+
+<h2 id="get-sdk">미리 보기 SDK 가져오기</h2>
+
+<p>개발 환경에 미리 보기 SDK 구성 요소를 추가하려면 다음과 같이 하면 됩니다.</p>
+
+<ol>
+  <li>Android Studio 1.3 미리 보기를 시작합니다.
+  </li>
+
+  <li><strong>설정</strong> 창을 엽니다(또는 Windows의 경우 <strong>파일 &gt; 설정</strong>을 선택해도 됩니다).
+ <strong>외관 및 동작 &gt; 시스템 &gt; 설정 &gt; 업데이트</strong> 패널을 선택하십시오.
+
+
+
+    <p class="aside">OSX의 경우, <strong>외관 및 동작</strong> 패널은 Android Studio의 <strong>기본 설정</strong> 창에 있습니다.
+
+</p>
+  </li>
+
+  <li><strong>업데이트</strong> 패널에서 <strong>다음에 대해 업데이트 자동 확인:
+ Canary 채널</strong> 및 <strong>Android SDK에 대한 업데이트 자동 확인:
+ 미리 보기 채널</strong> 선택 사항을 선택합니다.
+  </li>
+
+  <li><strong>Android SDK Manager</strong>를 시작합니다 (Android Studio 1.3에서는 SDK Manager가 독립 실행형 애플리케이션이 아니고 Android Studio에 통합되어 있습니다).
+
+
+  </li>
+
+  <li><strong>플랫폼</strong> 섹션 아래에서 <strong>Android MNC 미리 보기</strong>를 선택하십시오.
+
+  </li>
+
+  <li><strong>도구</strong> 섹션에서 최신 Android <strong>SDK 도구</strong>, <strong>플랫폼-도구</strong>, 및 <strong>빌드-도구</strong>를 선택합니다.
+
+
+  </li>
+
+  <li><strong>패키지 설치</strong>를 클릭하고 패키지 전체에 대해 라이선스 사용 계약을 수락합니다.
+
+  </li>
+
+  <li>M 개발자 미리 보기가 설치되었는지 확인하려면 <strong>설정</strong> 창을 열고 <strong>외관 및 동작 &gt; 시스템 설정 &gt; Android SDK</strong> 패널을 선택하면 됩니다.
+
+</li>
+
+  <li><strong>Android SDK</strong> 패널에서 <strong>SDK 플랫폼</strong> 탭을 선택합니다.
+ <strong>Android MNC 미리 보기</strong>가 <em>설치됨</em> 아래 목록으로 나열되어 있는 것이 정상입니다.
+ 또한, <strong>SDK 도구</strong> 탭을 열어 최신 도구가 설치되었는지 확인하십시오.
+
+
+  </li>
+</ol>
+<p>이러한 단계를 완료하고 나면 미리 보기 구성 요소를 본인의 개발 환경에서 이용할 수 있습니다.
+ </p>
+
+
+<h2 id="create-update">프로젝트 생성 또는 업데이트</h2>
+
+<p>
+  미리 보기 API를 사용하려면 개발 프로젝트를 하나 생성하거나 업데이트하여 미리 보기 구성 요소를 사용해야 합니다.
+
+</p>
+
+
+<h3 id="create">새 프로젝트 생성하기</h3>
+
+<p>
+  미리 보기로 프로젝트를 생성하려면 Android Studio를 사용할 것을 권장합니다. <a href="{@docRoot}sdk/installing/create-project.html">프로젝트 생성하기</a>에 설명되어 있는 단계를 쭉 따라가다 보면 프로젝트 마법사의 <em>폼 팩터</em> 화면에 도달합니다.
+
+ 그러면 다음과 같은 단계를 따라 미리 보기에 맞게 구성된 프로젝트를 생성하면 됩니다.
+
+</p>
+
+<ul>
+  <li><strong>전화기 및 태블릿</strong>을 확인합니다.</li>
+  <li><strong>MNC: Android M(미리 보기)</strong>를 선택합니다. 이것은 <strong>최소 SDK</strong> 안에 있습니다.
+</li>
+</ul>
+
+
+<h3 id="update">기존 프로젝트 업데이트</h3>
+
+<p>
+  기존 프로젝트의 경우, 미리 보기 API를 활성화하려면 프로젝트 구성을 수정해야 합니다. 개발 환경에서 본인의 모듈에 대한 <code>build.gradle</code> 파일을 열고 다음의 값을 다음과 같이 설정합니다.
+
+
+</p>
+
+<ul>
+  <li><code>compileSdkVersion</code>을 <code>'android-MNC'</code>로 설정</li>
+  <li><code>minSdkVersion</code>을 <code>'MNC'</code>로 설정</li>
+  <li><code>targetSdkVersion</code>을 <code>'MNC'</code>로 설정</li>
+</ul>
+
+
+<h2 id="setup-test">테스트를 위해 설정</h2>
+
+<p>
+  앱을 미리 보기로 테스트하려면 플랫폼의 미리 보기 버전으로 구성한 기기 또는 가상 기기가 있어야 합니다.
+ 호환되는 기기를 가지고 있으면 미리 보기 플랫폼을 설치하여 테스트에 쓰면 됩니다.
+ 그렇지 않은 경우, 가상 기기를 구성하여 테스트에 사용할 수도 있습니다.
+</p>
+
+<h3 id="setup-device">물리적 기기 설정</h3>
+
+<p>
+  Nexus 5, Nexus 6, Nexus 9 또는 Android TV를 가지고 있는 경우, 이들 기기에 미리 보기 시스템 이미지를 설치하여 앱을 테스트하는 데 쓸 수 있습니다. 플랫폼의 미리 보기 버전으로 가상 기기를 설정하려면 Android Studio 내에서 해당 버전을 다운로드하면 됩니다. 이때 Android 가상 기기 관리자 도구를 사용하십시오.
+
+
+
+</p>
+
+<p class="caution">
+  <strong>중요:</strong> 기기에 미리 보기 이미지를 설치하면 <em>기기에서 모든 데이터를 제거하므로</em>, 미리 보기 이미지를 설치하기에 앞서 데이터를 모두 백업하는 것이 좋습니다.
+
+</p>
+
+<h3 id="setupAVD">가상 기기 설정</h3>
+
+<p>
+  플랫폼의 미리 보기 버전으로 가상 기기를 설정하려면 Android Studio 내에서 해당 버전을 다운로드하면 됩니다. 이때 Android 가상 기기 관리자 도구를 사용하십시오.
+
+</p>
+
+<p>AVD Manager로 AVD를 생성하려면 다음과 같이 하면 됩니다.</p>
+
+<ol>
+  <li><a href="{@docRoot}preview/setup-sdk.html">미리 보기 SDK 설정하기</a>에 설명된 바에 따라 개발 환경에 미리 보기 SDK를 설치합니다.
+
+</li>
+  <li><a href="{@docRoot}tools/devices/managing-avds.html">AVD Manager로 AVD 관리하기</a>에 나온 단계를 따르십시오.
+
+ 다음과 같은 설정을 사용하면 됩니다.
+    <ul>
+      <li><strong>기기:</strong> Nexus 5, Nexus 6, Nexus 9 또는 Android TV</li>
+      <li><strong>대상:</strong>
+       Android M(미리 보기) - API 레벨 M</li>
+      <li><strong>ABI:</strong> x86</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  테스트를 위해 가상 기기를 생성하는 데 대한 자세한 정보는 <a href="{@docRoot}tools/devices/index.html">가상 기기 관리하기</a>를 참조하십시오.
+</p>
diff --git a/docs/html-intl/intl/ko/preview/testing/guide.jd b/docs/html-intl/intl/ko/preview/testing/guide.jd
new file mode 100644
index 0000000..7f17071
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/testing/guide.jd
@@ -0,0 +1,187 @@
+page.title=테스트 가이드
+page.image=images/cards/card-build_16x9_2x.png
+page.keywords=previewresources,androidm,testing,permissions
+
+@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 M 개발자 미리 보기에서는 앱이 플랫폼의 다음 버전에서 제대로 작동할 것인지 확인해볼 기회를 부여합니다.
+ 이 미리 보기에는 앱에 영향을 미칠 수 있는 수많은 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">Doze 및 앱 대기 모드</a>
+  </li>
+  <li><a href="#ids">자동 백업 및 기기 식별자</a></li>
+</ul>
+
+<p>
+  테스트용 미리 보기 시스템 이미지로 기기 또는 가상 기기를 설정하는 방법에 대한 자세한 정보는 <a href="{@docRoot}preview/setup-sdk.html">미리 보기 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] &lt;permission.name&gt; ...</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#">미리 보기 SDK 설정하기</a>를 참조하십시오.
+
+</p>
+
+<p>
+  불러내고 추가한 여러 가지 권한들을 다양하게 조합해서 테스트해보면 권한에 좌우되는 사용자 흐름을 강조할 수 있습니다.
+ 종속성이 분명하지 않거나 논리적인 경우, 리팩터링을 고려해 보거나 해당 흐름을 구분하여 종속성을 제거, 또는 해당 권한이 왜 필요한지 분명히 하는 방안을 고려해야 합니다.
+
+
+</p>
+
+<p>
+  런타임 권한의 동작, 테스트 및 모범 사례에 대한 자세한 정보는 <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>하드웨어 기기 또는 가상 기기를 M 미리 보기 시스템 이미지로 구성합니다.</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>하드웨어 기기 또는 가상 기기를 M 미리 보기 시스템 이미지로 구성합니다.</li>
+  <li>기기를 개발 머신에 연결시키고 앱을 설치합니다.</li>
+  <li>앱을 실행시킨 다음 활성 상태로 그냥 둡니다.</li>
+  <li>앱이 대기 모드에 들어가는 것을 시뮬레이트하려면 다음 명령을 실행하십시오.
+
+<pre>
+$ adb shell am broadcast -a android.os.action.DISCHARGING
+$ adb shell am set-idle &lt;packageName&gt; true
+</pre>
+
+  </li>
+  <li>앱이 절전 모드 해제되는 상태를 시뮬레이트하려면 다음 명령을 사용하면 됩니다.
+    <pre>$ adb shell am set-idle &lt;packageName&gt; false</pre>
+  </li>
+  <li>앱이 절전 모드에서 해제되면서 어떻게 동작하는지 살펴보십시오. 대기 모드에서 정상적으로 복구되는지 확인해야 합니다.
+ 특히, 앱의 알림과 배경 작업이 계속 예상했던 대로 기능하는지 확인해야 합니다.
+</li>
+</ol>
+
+<h2 id="ids">앱용 자동 백업 및 기기별 식별자</h2>
+
+<p>앱이 내부 저장소에서 각 기기에 따라 다른 식별자를 유지하는 경우(예: Google Cloud 메시지 등록 ID), 모범 사례를 따라 저장소 위치를 자동 백업에서 배제해야 합니다. 이 내용은 <a href="{@docRoot}preview/backup/index.html">앱용 자동 백업</a>에 설명되어 있습니다.
+
+
+
+ </p>
diff --git a/docs/html-intl/intl/ko/preview/testing/performance.jd b/docs/html-intl/intl/ko/preview/testing/performance.jd
new file mode 100644
index 0000000..ce2bf27
--- /dev/null
+++ b/docs/html-intl/intl/ko/preview/testing/performance.jd
@@ -0,0 +1,656 @@
+page.title=표시 성능 테스트
+page.image=images/cards/card-test-performance_2x.png
+page.keywords=성능, FPS, 도구
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>이 문서의 내용</h2>
+      <ol>
+        <li><a href="#measure">UI 성능 측정</a>
+          <ul>
+            <li><a href="#aggregate">프레임 상태 집계</a></li>
+            <li><a href="#timing-info">정확한 프레임 타이밍 정보</a></li>
+            <li><a href="#timing-dump">단순한 프레임 타이밍 덤프</a></li>
+            <li><a href="#collection-window">상태 수집 창 제어</a></li>
+            <li><a href="#diagnose">성능 저하 진단</a></li>
+            <li><a href="#resources">추가 리소스</a></li>
+          </ul>
+        </li>
+        <li><a href="#automate">UI 성능 테스트 자동화</a>
+          <ul>
+            <li><a href="#ui-tests">UI 테스트 설정</a></li>
+            <li><a href="#automated-tests">자동화된 UI 테스트 설정</a></li>
+            <li><a href="#triage">관측된 문제 심사 및 수정</a></li>
+          </ul>
+        </li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  사용자 인터페이스(UI) 성능 테스트를 수행하면 앱이 기능적인 요건에 부합할 뿐만 아니라 사용자가 앱과 부드럽고 매끈하게 상호작용하며 초당 60 프레임의 일관된 속도로(<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">왜 60fps일까요?</a>) 생략되거나 지연된 프레임, 또는 전문 용어로 <em>jank</em>(프레임이 넘어가는 현상)가 없이 실행되게 보장할 수 있습니다.
+
+
+ 이 문서에서는 UI 성능을 측정하는 데 사용할 수 있는 몇 가지 도구를 설명하고, 테스트 방법에 UI 성능 측정법을 통합하는 데 쓰이는 접근법을 보여드립니다.
+
+
+</p>
+
+
+<h2 id="measure">UI 성능 측정</h2>
+
+<p>
+  성능을 개선하려면 우선 시스템의 성능을 측정할 수 있는 능력부터 갖추고, 그 다음에 파이프라인의 여러 부분에서 나올 수 있는 다양한 문제를 진단하고 식별해야 합니다.
+
+
+</p>
+
+<p>
+  <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em>는 Android 도구의 일종으로 기기에서 실행되면서 시스템 서비스의 상태에 대한 흥미로운 정보를 덤프하는 역할을 합니다.
+
+ <em>gfxinfo</em> 명령을 dumpsys에 전달하면 기록 단계 중에 발생하는 애니메이션 프레임과 관련된 성능 정보가 담긴 logcat으로 출력을 제공합니다.
+
+
+</p>
+
+<pre>
+&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
+</pre>
+
+<p>
+  이 명령은 프레임 타이밍 데이터의 서로 다른 변형을 여러 개 작성할 수 있습니다.
+</p>
+
+<h3 id="aggregate">프레임 상태 집계</h3>
+
+<p>
+  M 미리 보기에서 이 명령은 프레임 데이터의 집계된 분석을 logcat으로 출력합니다. 이는 프로세스의 전 수명을 통틀어 수집한 것입니다.
+ 예를 들면 다음과 같습니다.
+</p>
+
+<pre class="noprettyprint">
+Stats since: 752958278148ns
+Total frames rendered: 82189
+Janky frames: 35335 (42.99%)
+90th percentile: 34ms
+95th percentile: 42ms
+99th percentile: 69ms
+Number Missed Vsync: 4706
+Number High input latency: 142
+Number Slow UI thread: 17270
+Number Slow bitmap uploads: 1542
+Number Slow draw: 23342
+</pre>
+
+<p>
+  이와 같은 높은 레벨의 통계는 레벨이 높을 때 앱의 렌더링 성능을 나타내며, 이외에도 여러 프레임에 걸친 앱의 안정성을 나타내기도 합니다.
+
+</p>
+
+
+<h3 id="timing-info">정확한 프레임 타이밍 정보</h3>
+
+<p>
+  M 미리 보기에서는 gfxinfo에 사용할 수 있는 새 명령어를 도입했습니다. 바로 <em>framestats</em>로, 이는 최근 프레임으로부터 극히 상세한 프레임 타이밍 정보를 제공하여 문제를 더욱 정확하게 추적하고 디버그할 수 있습니다.
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
+</pre>
+
+<p>
+  이 명령은 프레임 타이밍 정보를 나노초 타임스탬프로 출력하며, 그 출처는 앱이 만든 마지막 120개의 프레임입니다. 아래는 adb dumpsys gfxinfo
+  &lt;PACKAGE_NAME&gt; framestats에서 가져온 원시 출력을 예로 나타낸 것입니다.
+
+</p>
+
+<pre class="noprettyprint">
+0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
+0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
+0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
+0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
+</pre>
+
+<p>
+  이 출력의 각 줄은 앱이 만든 프레임을 나타냅니다. 각 줄에는 정해진 숫자의 열이 있으며 이 열은 프레임 제작 파이프라인의 각 단계에서 소요한 시간을 나타냅니다.
+ 다음 섹션에서는 각 열이 무엇을 나타내는지 등, 이 형식에 대해 좀 더 자세히 다뤄보겠습니다.
+
+</p>
+
+
+<h4 id="fs-data-format">Framestats 데이터 형식</h4>
+
+<p>
+  데이터 블록은 CSV 형식으로 출력되기 때문에 이를 개발자가 선택한 스프레드시트 도구에 붙여넣거나 수집해서 스크립트로 구문 분석하기 등의 작업이 매우 단도직입적입니다.
+ 다음 표는 출력 데이터 열의 형식을 설명한 것입니다.
+ 타임스탬프는 모두 나노초 단위입니다.
+</p>
+
+<ul>
+  <li>플래그
+    <ul>
+      <li>플래그 열에 '0'이 기재되어 있는 행의 경우, 총 프레임 시간을 계산하려면 FRAME_COMPLETED 열에서 INTENDED_VSYNC 열을 빼면 됩니다.
+
+      </li>
+
+      <li>이것이 0이 아니면 그 행은 무시해야 합니다. 해당 프레임이 정상 성능의 이상값인 것으로 판별되었기 때문이며, 여기에서는 레이아웃과 그리기에 16ms 이상이 걸릴 것으로 예상됩니다.
+
+ 다음은 이런 일이 일어나는 몇 가지 이유입니다.
+        <ul>
+          <li>창 레이아웃이 변경되었습니다(애플리케이션의 첫 프레임 또는 한 회 회전 이후).
+
+          </li>
+
+          <li>프레임을 건너뛰었을 가능성도 있습니다. 이 경우 몇몇 값에 가비지 타임스탬프가 있을 것입니다.
+ 프레임을 건너뛰는 것은 해당 프레임이 60fps를 초과하는 경우 또는 화상에 나타난 것 중 아무 것도 변한 것이 없을 때 등이며, 이는 반드시 앱에 문제가 있음을 나타내는 징후는 아닙니다.
+
+
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>INTENDED_VSYNC
+    <ul>
+      <li>프레임에 대한 원래 의도한 시작 지점입니다. 이 값이 VSYNC와 다른 경우, UI 스레드에서 발생한 작업이 있어 이것이 vsync 신호에 적절한 시간 내에 응답하지 못하도록 한 것입니다.
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>VSYNC
+    <ul>
+      <li>Vsync 수신기 전체와 프레임에 대한 드로잉에서 사용된 시간 값입니다.(Choreographer 프레임 콜백, 애니메이션, View.getDrawingTime() 등)
+
+      </li>
+
+      <li>VSYNC와 이것이 애플리케이션에 미치는 영향에 대해 더 자세히 알아보려면 <a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">VSYNC 이해하기</a> 비디오를 확인하십시오.
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>OLDEST_INPUT_EVENT
+    <ul>
+      <li>입력 대기열에서 가장 오래된 입력 이벤트의 타임스탬프 또는 프레임에 대한 입력 이벤트가 없는 경우 Long.MAX_VALUE입니다.
+
+      </li>
+
+      <li>이 값은 기본적으로 플랫폼 작업을 위해 의도된 것이며 앱 개발자에게는 한정된 정도로 유용한 값입니다.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>NEWEST_INPUT_EVENT
+    <ul>
+      <li>입력 대기열에서 가장 최근 입력 이벤트의 타임스탬프 또는 프레임에 대한 입력 이벤트가 없는 경우 Long.MAX_VALUE입니다.
+
+      </li>
+
+      <li>이 값은 기본적으로 플랫폼 작업을 위해 의도된 것이며 앱 개발자에게는 한정된 정도로 유용한 값입니다.
+
+      </li>
+
+      <li>다만 앱이 얼마나 긴 대기 시간을 추가하고 있는지를 대략적으로 알아볼 수는 있습니다. (FRAME_COMPLETED - NEWEST_INPUT_EVENT)를 살펴보면 됩니다.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>HANDLE_INPUT_START
+    <ul>
+      <li>입력 이벤트가 애플리케이션에 발송된 시점의 타임스탬프입니다.
+      </li>
+
+      <li>이것과 ANIMATION_START 사이의 시간을 보면 애플리케이션이 입력 이벤트를 처리하느라 보낸 시간을 측정할 수 있습니다.
+
+      </li>
+
+      <li>이 숫자가 크면(2ms 초과) 이는 앱이 입력 이벤트를 처리하느라 보기 드물게 긴 시간을 소요한다는 뜻입니다. 예를 들어 View.onTouchEvent()는 이 작업을 최적화해야 하거나 다른 스레드로 오프로드해야 한다는 뜻일 수 있습니다.
+
+ 다른 시나리오도 몇 가지 있을 수 있다는 점을 유의하십시오. 예를 들어 새 액티비티를 시작하는 클릭 이벤트나 그와 비슷한 것의 경우, 이 숫자가 클 것을 예상하고 받아들일 수 있습니다.
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ANIMATION_START
+    <ul>
+      <li>Choreographer에 등록된 애니메이션이 실행된 시점의 타임스탬프입니다.
+      </li>
+
+      <li>이것과 PERFORM_TRANVERSALS_START 사이의 시간을 보면 실행 중인 애니메니터 전체((ObjectAnimator, ViewPropertyAnimator 및 Transitions가 보편적인 것들임)를 평가하는 데 시간이 얼마나 걸렸는지 판단할 수 있습니다.
+
+
+      </li>
+
+      <li>이 숫자가 크면(2ms 초과), 앱이 사용자 지정 애니메이터를 작성한 적이 있는지 확인하십시오. 아니면 ObjectAnimators가 애니메이션 효과를 실행하는 필드가 어느 것인지 알아보고 이들이 애니메이션에 대해 적절한지 확인해야 합니다.
+
+
+      </li>
+
+      <li>Choreographer에 대한 자세한 정보는 <a href="https://developers.google.com/events/io/sessions/325418001">버터거나 나쁘거나(For Butter or Worse)</a> 비디오를 참조하십시오.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>PERFORM_TRAVERSALS_START
+    <ul>
+      <li>이 값에서 DRAW_START를 빼면 레이아웃과 측정 단계를 완료하는 데 얼마나 걸렸는지 추출할 수 있습니다(스크롤 또는 애니메이션 중에는 이 값이 0에 가까울 것이라는 예상이 나와야 한다는 점을 유의하십시오).
+
+
+      </li>
+
+      <li>렌더링 파이프라인의 측정 및 레이아웃 단계에 대한 자세한 정보는 <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">무효화, 레이아웃 및 성능</a> 비디오를 참조하십시오.
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>DRAW_START
+    <ul>
+      <li>PerformTraversals의 그리기 단계가 시작된 시점입니다. 이것은 무효화된 모든 보기의 표시 목록을 기록하는 시작 지점입니다.
+
+      </li>
+
+      <li>이것과 SYNC_START 사이의 시간이 트리의 모든 무효화된 보기에서 View.draw()를 호출하는 데 걸린 시간입니다.
+
+      </li>
+
+      <li>드로잉 모델에 대한 자세한 정보는 <a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">하드웨어 가속</a> 또는 <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">무효화, 레이아웃 및 성능</a> 비디오를 참조하십시오.
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SYNC_START
+    <ul>
+      <li>드로잉의 동기화 단계가 시작된 시점입니다.
+      </li>
+
+      <li>이것과 ISSUE_DRAW_COMMANDS_START 사이의 시간이 상당히 큰 값인 경우(0.4ms 초과 또는 그와 유사), 일반적으로 새로운 비트맵이 많이 그려져서 이를 GPU에 업로드해야 한다는 뜻입니다.
+
+
+      </li>
+
+      <li>동기화 단계에 대해 더 자세히 알아보려면 <a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">프로필 GPU 렌더링</a> 비디오를 참조하십시오.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ISSUE_DRAW_COMMANDS_START
+    <ul>
+      <li>하드웨어 렌더러가 GPU에 드로잉 명령을 발행하기 시작한 시점입니다.
+      </li>
+
+      <li>이것과 FRAME_COMPLETED 사이의 시간을 보면 앱이 얼마나 많은 GPU 작업을 생성하고 있는지 대략적으로 알 수 있습니다.
+ Overdraw가 너무 많거나 렌더링 효과가 비효율적인 것 등의 문제가 여기에 나타납니다.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SWAP_BUFFERS
+    <ul>
+      <li>EglSwapBuffers가 호출된 시점으로, 플랫폼 작업 외에는 비교적 흥미롭지 않습니다.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>FRAME_COMPLETED
+    <ul>
+      <li>모두 끝났습니다! 이 프레임에 작업하느라 소요된 총 시간을 계산하려면 FRAME_COMPLETED - INTENDED_VSYNC를 수행하면 됩니다.
+
+      </li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>
+  이 데이터는 여러 가지 방법으로 사용할 수 있습니다. 한 가지 단순하면서도 유용한 시각화는 프레임 시간의 분배(FRAME_COMPLETED - INTENDED_VSYNC)를 여러 가지 대기 시간 버킷에서 표시한 히스토그램을 예로 들 수 있습니다. 아래 그림을 참조하십시오.
+
+ 이 그래프를 보면 한 눈에 대부분의 프레임이 아주 양호했다는 것을 알아볼 수 있습니다. 대부분 16ms 최종 기한(빨간색으로 표시)보다 한참 아래에 있지만, 최종 기한을 크게 넘어선 프레임도 몇 개 있습니다.
+
+ 이 히스토그램에서 시간 경과에 따른 변화를 살펴보면 대규모 이동이나 새 이상값이 생성되는 것을 확인할 수 있습니다.
+ 이외에도 데이터 내의 수많은 타임스탬프를 근거로 입력 대기 시간, 레이아웃에서 보낸 시간 또는 여타 비슷한 흥미로운 메트릭도 그래프로 표현할 수 있습니다.
+
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-framestats.png">
+
+
+<h3 id="timing-dump">단순한 프레임 타이밍 덤프</h3>
+
+<p>
+  <strong>프로필 GPU 렌더링</strong>이 개발자 옵션에서 <strong>adb 셸의 dumpsys gfxinfo</strong>로 설정된 경우, <code>adb shell dumpsys gfxinfo</code> 명령이 가장 최근의 120개 프레임에 대한 타이밍 정보를 출력하되, 몇 개의 서로 다른 카테고리로 나누어 탭으로 구분된 값을 담아 표현합니다.
+
+
+ 이 데이터를 사용하면 드로잉 파이프라인의 어떤 부분이 레벨이 높을 때 느려지는지 나타내는 데 유용합니다.
+
+</p>
+
+<p>
+  위의 <a href="#fs-data-format">framestats</a>와 마찬가지로, 이것을 개발자가 선택한 스프레드시트 도구에 붙여넣거나 수집해서 스크립트로 구문 분석하는 작업은 매우 단도직입적입니다.
+
+ 다음 그래프는 앱이 생성한 수많은 프레임이 어디에서 시간을 보내는지 분석한 내용을 표시한 것입니다.
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
+
+<p>
+  Gfxinfo를 실행한 결과, 그 출력을 복사하여 이를 스프레드시트 애플리케이션에 붙여넣은 다음 데이터를 누적 가로 막대형 그래프로 나타내는 것입니다.
+
+</p>
+
+<p>
+  각 세로 막대는 애니메이션 한 프레임을 나타냅니다. 그 막대의 높이가 해당 애니메이션 프레임을 계산하는 데 걸린 밀리초 수를 나타냅니다.
+ 막대에서 색이 지정된 각 세그먼트는 렌더링 파이프라인의 각기 다른 단계를 나타내므로, 개발자는 이것을 보고 애플리케이션의 어떤 부분이 병목 현상을 유발하고 있는지 확인할 수 있습니다.
+
+ 렌더링 파이프라인을 잘 이해하고 이에 맞게 최적화하는 법에 대한 자세한 내용은 <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">무효화 레이아웃 및 성능</a> 비디오를 참조하십시오.
+
+
+</p>
+
+
+<h3 id="collection-window">상태 수집 창 제어</h3>
+
+<p>
+  Framestats와 단순한 프레임 타이밍은 양쪽 모두 아주 짧은 시간 범위 동안 데이터를 수집합니다. 렌더링 약 2초에 상당하는 시간입니다.
+ 이 시간 범위를 정확하게 제어하려면(예: 데이터를 특정 애니메이션에 제한), 카운터를 모두 초기화한 다음 수집한 통계를 집계하면 됩니다.
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
+</pre>
+
+<p>
+  이 방법은 명령 자체를 덤프하는 방법과 함께 써서 정기적인 간격을 두고 수집과 초기화를 반복하여 계속해서 2초 미만의 프레임 창을 캡처하도록 하는 데 쓰일 수도 있습니다.
+
+
+</p>
+
+
+<h3 id="diagnose">성능 저하 진단</h3>
+
+<p>
+  성능이 저하된 것을 알아내는 것은 문제를 추적하고 애플리케이션의 건강 상태를 높은 수준으로 유지 관리하는 데 좋은 첫 단계입니다.
+ 그러나 dumpsys는 문제의 존재 여부와 상대적인 심각도만 식별하는 데 그치지 않습니다.
+ 각 성능 문제의 제각기 다른 원인을 진단하고 이를 해결하기 위해 적절한 방법을 찾아야 하는 것은 변하지 않습니다.
+ 이를 위해, <a href="{@docRoot}tools/help/systrace.html">systrace</a> 도구를 사용하는 것을 적극적으로 추천합니다.
+
+</p>
+
+
+<h3 id="resources">추가 리소스</h3>
+
+<p>
+  Android의 렌더링 파이프라인의 작동 원리나 여기에서 마주칠 수 있는 보편적인 문제와 그 해결 방법에 대한 자세한 정보를 원하시면, 다음 리소스 중 몇 가지를 유용하게 쓸 수 있습니다.
+
+
+</p>
+
+<ul>
+  <li>렌더링 성능의 기초
+  </li>
+  <li>왜 60fps일까요?
+  </li>
+  <li>Android UI와 GPU
+  </li>
+  <li>무효화 레이아웃 및 성능
+  </li>
+  <li>Systrace로 UI 성능 분석하기
+  </li>
+</ul>
+
+
+<h2 id="automate">UI 성능 테스트 자동화</h2>
+
+<p>
+  UI 성능 테스트에 대한 한 가지 관점은 그저 인간 테스터가 대상 앱에서 일련의 사용자 작업을 수행하도록 하는 것입니다. 그러면서 육안으로 jank가 있는지 살펴보든가, 아니면 오랜 시간을 들여 도구 중심적인 관점으로 jank를 찾아내는 것입니다.
+
+ 하지만 이와 같은 수동식 방법은 위험 투성이입니다. 프레임 속도 변화를 인지하는 사람의 능력에는 개인차가 극명하고, 시간도 오래 걸릴 뿐더러 지루하고 오류가 발생할 가능성이 높습니다.
+
+
+</p>
+
+<p>
+  보다 효율적인 접근 방식은 자동화된 UI 테스트로부터 가져온 주요 성능 메트릭을 기록하고 분석하는 것입니다.
+ Android M 개발자 미리 보기에는 새로운 로깅 기능이 포함되어 있어 애플리케이션 애니메이션의 jank의 양과 심각도를 판별하기 쉽고, 이를 사용해 현재 성능을 판단하고 앞으로의 성능 목표를 추적하기 위해 철저한 프로세스를 구축할 수도 있습니다.
+
+
+
+</p>
+
+<p>
+  이 글에서는 그러한 데이터를 사용하여 성능 테스트를 자동화하는 데 권장되는 방안을 찬찬히 알려드립니다.
+
+</p>
+
+<p>
+  이것은 주로 두 가지 주요 작업으로 나뉘어 있습니다. 첫째로 무엇을 테스트할지, 어떻게 테스트할지를 확인합니다. 그런 다음 두 번째로 자동화된 테스트 환경을 설정하고 유지 관리하는 것입니다.
+
+
+</p>
+
+
+<h3 id="ui-tests">UI 테스트 설정</h3>
+
+<p>
+  자동화된 테스트를 시작하기 전에 우선 몇 가지 수준 높은 결정을 내려야 합니다. 그래야 테스트 공간과 스스로에게 필요한 부분을 제대로 숙지할 수 있습니다.
+
+</p>
+
+<h4>
+  테스트할 주요 애니메이션/흐름 알아내기
+</h4>
+
+<p>
+  성능이 불량한 것이 사용자에게 가장 눈에 띄는 것은 애니메이션이 원활히 작동하지 않을 때라는 점을 명심하십시오.
+ 따라서, 테스트할 UI 작업 유형을 식별할 때에는 사용자가 가장 많이 접하게 되는 애니메이션이나 사용자 환경에 가장 중요한 것에 주안점을 두면 유용합니다.
+
+ 예를 들어 다음은 이처럼 식별하는 데 유용하게 쓰일 수 있는 몇 가지 보편적인 시나리오입니다.
+</p>
+
+<ul>
+  <li>기본 ListView 또는 RecyclerView를 스크롤링
+  </li>
+
+  <li>비동기 대기 주기 동안 표시되는 애니메이션
+  </li>
+
+  <li>비트맵 로딩/조작이 들어 있을 수 있는 모든 애니메이션
+  </li>
+
+  <li>알파 혼합이 포함된 애니메이션
+  </li>
+
+  <li>Canvas로 사용자 지정 보기 드로잉
+  </li>
+</ul>
+
+<p>
+  팀 구성원인 엔지니어, 디자이너와 제품 관리자와 협력하여 이와 같이 테스트 대상 범위에 넣어야 하는 주요 제품 애니메이션의 우선 순위를 지정하십시오.
+
+</p>
+
+<h4>
+  앞으로의 목표를 정의하고 그것을 추적하기
+</h4>
+
+<p>
+  레벨이 높을 때에는 특정한 성능 목표를 알아내고 테스트 작성에 집중하며, 그에 관한 데이터를 수집하는 것이 매우 중요할 수 있습니다.
+ 예를 들면 다음과 같습니다.
+</p>
+
+<ul>
+  <li>처음에만 UI 성능을 추적하여 좀 더 자세히 알아보기만 했으면 합니까?
+  </li>
+
+  <li>앞으로 마주치게 될 성능 저하를 방지하고자 합니까?
+  </li>
+
+  <li>지금은 매끄러운 프레임 비율이 약 90% 정도이지만 이번 사분기 내에 98%까지 올리고자 합니까?
+  </li>
+
+  <li>지금 매끄러운 프레임이 약 98%이고 성능이 저하되지 않기를 바랍니까?
+  </li>
+
+  <li>저사양 기기에서 성능을 개선하는 것이 목표입니까?
+  </li>
+</ul>
+
+<p>
+  이 모든 경우, 애플리케이션의 여러 버전에 걸쳐 성능을 나타내주는 사용 기록 추적을 수행하는 것이 좋습니다.
+
+</p>
+
+<h4>
+  테스트할 기기 정하기
+</h4>
+
+<p>
+  애플리케이션의 성능은 어느 기기에서 실행되는지에 따라 여러 가지로 달라집니다. 메모리 용량이 적고 GPU 파워가 딸리거나 CPU 칩 속도가 느린 기기도 있습니다.
+ 이는 즉 한 가지 하드웨어 세트에서는 잘 작동하는 애니메이션이 다른 곳에서는 그렇지 않을 수도 있다는 뜻입니다. 더 나쁜 경우로는 파이프라인의 서로 다른 부분에서 병목 현상이 일어나는 결과를 초래할 수도 있습니다.
+
+ 따라서, 사용자가 볼 수도 있는 이러한 변형을 감안하기 위해 테스트를 실행할 기기를 여러 가지로 선택하는 것이 중요합니다. 최신 고사양 기기, 저사양 기기, 태블릿 등 양쪽 측면을 모두 고려하십시오.
+
+ CPU 성능, RAM, 화면 밀도, 크기 등의 변형을 잘 살피십시오.
+ 고사양 기기를 통과하는 테스트가 저사양 기기에서는 실패할 수도 있습니다.
+
+</p>
+
+<h4>
+  UI 테스트의 기본 프레임워크
+</h4>
+
+<p>
+  <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>와 <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a> 등의 도구 스위트는 개발자의 애플리케이션을 통과하는 사용자의 동작을 자동화하는 데 도움이 되도록 구축된 것입니다.
+
+ 이들은 단순한 프레임워크로, 사용자와 기기의 상호작용을 흉내 냅니다.
+ 이러한 프레임워크를 사용하려면, 사실상 개발자가 나름의 고유한 스크립트를 생성해야 합니다. 이는 일련의 사용자-동작을 통해 실행되고, 이를 기기 자체에서 재생합니다.
+
+
+</p>
+
+<p>
+  이렇게 자동화된 테스트를 여러 가지로 조합하여 <code>dumpsys gfxinfo</code>와 함께 사용하면 재현 가능한 시스템을 재빨리 만들어내 테스트를 실행하고 해당 조건 하에서 성능 정보를 측정할 수 있습니다.
+
+
+</p>
+
+
+<h3 id="automated-tests">자동화된 UI 테스트 설정</h3>
+
+<p>
+  UI 테스트를 실행할 수 있게 되고, 한 번의 테스트로부터 데이터를 수집할 파이프라인을 갖추게 되면 다음으로 중요한 단계는 해당 테스트를 여러 번, 여러 기기에 걸쳐 실행하고 그 결과 도출된 성능 데이터를 집계하여 개발 팀이 한층 더 상세하게 분석할 수 있게 해주는 프레임워크를 채택하는 것입니다.
+
+
+
+</p>
+
+<h4>
+  테스트 자동화를 위한 프레임워크
+</h4>
+
+<p>
+  UI 테스트 프레임워크(예: <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>)는 대상 기기/에뮬레이터에서 직접 실행된다는 점에 주목할 만한 가치가 있습니다.
+ 반면 <em>dumpsys gfxinfo</em>에 의해 완료되는 성능 수집 정보는 호스트 머신이 구동하여 ADB를 통해 명령을 전송합니다.
+ 이러한 각각의 항목 자동화를 연결하는 데 도움을 주기 위해 <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a> 프레임워크가 개발되었습니다. 이것은 호스트 머신에서 실행되는 스크립팅 시스템으로, 일련의 연결된 기기에 명령을 발행하기도 하고 이들로부터 데이터를 수신할 수도 있습니다.
+
+
+
+</p>
+
+<p>
+  UI 성능 테스트를 제대로 자동화하기 위해 최소한의 수준으로 일련의 스크립트를 구축하는 경우, 다음과 같은 작업을 수행하기 위해 monkeyRunner를 활용할 수 있어야 합니다.
+
+</p>
+
+<ul>
+  <li>원하는 APK를 대상 기기(하나 이상일 수 있음) 또는 에뮬레이터에 로드하여 시작합니다.
+  </li>
+
+  <li>UI Automator UI 테스트를 시작하고 실행되도록 허용하십시오.
+  </li>
+
+  <li><em>dumpsys gfxinfo</em><em></em>를 통해 성능 정보를 수집합니다.
+  </li>
+
+  <li>정보를 집계하고 이를 다시 유용한 방식으로 표시해 개발자에게 보여줍니다.
+  </li>
+</ul>
+
+
+<h3 id="triage">관측된 문제 심사 및 수정</h3>
+
+<p>
+  문제의 패턴이나 성능 저하를 확인했으면, 다음 단계는 해결 방법을 알아내어 적용합니다.
+ 자동화된 테스트 프레임워크가 프레임에 대해 정확한 타이밍 분석을 유지하는 경우, 최근의 의심스러운 코드/레이아웃 변경 내용을 꼼꼼히 훑어보거나(성능 저하의 경우) 수동 조사로 전환했을 때 시스템의 어느 부분을 분석할지 범위를 좁히는 데 도움이 될 수 있습니다.
+
+
+ 수동 조사의 경우, <a href="{@docRoot}tools/help/systrace.html">systrace</a>부터 시작하는 것이 좋습니다. 이렇게 하면 렌더링 파이프라인의 모든 단계, 시스템에 있는 모든 스레드와 코어는 물론 개발자가 정의한 사용자 지정 이벤트 마커 일체에 대해 정확한 타이밍 정보를 나타내주기 때문입니다.
+
+
+</p>
+
+<h4>
+  임시 타이밍을 적절하게 프로파일링하기
+</h4>
+
+<p>
+  렌더링 성능에서 타이밍을 가져와 이를 측정하는 데 수반되는 몇 가지 어려움을 알아두는 것이 중요합니다.
+ 이와 같은 숫자는 본래 결정적인 것이 아니고 시스템 상태, 이용 가능한 메모리 용량, 열 제한 및 개발자가 사는 지역에 태양 플레어가 마지막으로 영향을 미친 시점 등에 따라 변동폭이 큽니다.
+
+ 요점은 같은 테스트를 두 번 실행하면서 서로 근사치이지만 완전히 똑같지는 않은, 약간 다른 숫자를 얻어내는 데 있습니다.
+
+
+</p>
+
+<p>
+  이런 식으로 데이터를 제대로 수집하고 프로파일링한다는 것은 같은 테스트를 여러 번 거듭 실행하면서 얻어지는 결과를 평균 또는 중간값(너무 복잡해지니 이것을 '배치(batch)'라고 부르기로 합시다)으로 누적한다는 것을 뜻합니다. 이렇게 하면 테스트 성과를 대략적으로 어림잡을 수 있으면서 정확한 타이밍은 없어도 됩니다.
+
+
+
+</p>
+
+<p>
+  이러한 배치를 코드 변경 사이사이에 사용하여 그러한 변경 내용이 성능에 미치는 상대적인 영향을 알아볼 수도 있습니다.
+ 변경 전 배치의 평균 프레임 속도가 변경 후 배치에서보다 빠른 경우, 해당 변경에 대해 전반적으로 좋은 WRT 성능을 성취했다는 뜻입니다.
+
+
+</p>
+
+<p>
+  이는 즉 개발자가 수행하는 자동화된 UI 테스트는 모두 이 개념을 감안해야 한다는 뜻이기도 하고, 테스트 중에 일어나는 모든 변칙적인 부분 또한 감안해야 한다는 뜻입니다.
+ 예를 들어 애플리케이션 성능이 일종의 기기 문제(본인의 애플리케이션에서 기인한 것이 아님) 때문에 갑자기 뚝 떨어지는 경우라면 해당 배치를 다시 실행하여 조금 덜 혼란스러운 타이밍을 얻어야 할 수도 있습니다.
+
+
+
+</p>
+
+<p>
+  그렇다면 측정값이 의의를 지니려면 테스트를 몇 번이나 수행하는 것이 좋습니까? 최소한 10번은 해야 합니다. 실행 횟수가 50이나 100처럼 커질수록 더욱 정확한 경과를 도출할 수 있습니다(물론, 이제는 정확도와 시간을 맞바꿔야 하는 셈입니다).
+
+
+</p>
diff --git a/docs/html-intl/intl/pt-br/about/versions/lollipop.jd b/docs/html-intl/intl/pt-br/about/versions/lollipop.jd
index cb76376..eb966c0 100644
--- a/docs/html-intl/intl/pt-br/about/versions/lollipop.jd
+++ b/docs/html-intl/intl/pt-br/about/versions/lollipop.jd
@@ -2,20 +2,25 @@
 
 @jd:body
 
+<div style="float:right;">
+  <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x">
+</div>
 
 
+<p>Bem-vindo ao Android 5.0 Lollipop, a maior e mais ambiciosa versão para Android já lançada!</p>
+
+<p>Esta versão está repleta de novos recursos para usuários e milhares de novas APIs para desenvolvedores. Ele expande o Android ainda mais, de telefones, tablets e acessórios a TVs e carros.</p>
+
+<p>Para uma análise mais detalhada das novas APIs para desenvolvedores, consulte a <a href="{@docRoot}about/versions/android-5.0.html">Visão geral da API do Android 5.0</a>. Ou leia mais sobre o Android 5.0 para consumidores em <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>.</p>
+
+<p style="    padding: 10px;    background: #eee;    width: 250px;    border: 1px solid #ccc;    margin-top: 20px;">Para testar seus apps em um dispositivo real, inclua um Nexus 5 ou 7 com a <br><a href="/preview/index.html#Start"><b>IMAGEM DE VISUALIZAÇÃO DO SISTEMA DO ANDROID</b></a>.</p>
 
 
-
-
-  <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0">
-    <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" >
-  </div>
-
-  <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;">
-  <div class="col-4 normal-links highlights" style="font-size:12px;">
-    <h3 id="thisd" >Principais recursos para desenvolvedores</h3>
-    <ul style="list-style-type:none;">
+   <div id="qv-wrapper">
+   <div id="qv">
+    <h2>Principais recursos para desenvolvedores</h2>
+  <ol>
+      <ul style="list-style-type:none;">
   <li><a href="#Material">Material design</a></li>
   <li><a href="#Perf">Foco no desempenho</a></li>
   <li><a href="#Notifications">Notificações</a></li>
@@ -31,27 +36,11 @@
   <li><a href="#WebView">Chromium WebView</a></li>
   <li><a href="#Accessibility">Acessibilidade e entrada </a></li>
   <li><a href="#Battery">Ferramentas para apps com consumo eficaz de bateria</a></li>
-    </ul>
+  </ol>
   </div>
 </div>
 
 
-
-
-
-
-
-<p>Bem-vindo ao Android 5.0 Lollipop, a maior e mais ambiciosa versão para Android já lançada!</p>
-
-<p>Esta versão está repleta de novos recursos para usuários e milhares de novas APIs para desenvolvedores. Ele expande o Android ainda mais, de telefones, tablets e acessórios a TVs e carros.</p>
-
-<p>Para uma análise mais detalhada das novas APIs para desenvolvedores, consulte a <a href="{@docRoot}about/versions/android-5.0.html">Visão geral da API do Android 5.0</a>. Ou leia mais sobre o Android 5.0 para consumidores em <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>.</p>
-
-
-
-<p style="    padding: 10px;    background: #eee;    width: 250px;    border: 1px solid #ccc;    margin-top: 20px;">Para testar seus apps em um dispositivo real, inclua um Nexus 5 ou 7 com a <br><a href="/preview/index.html#Start"><b>IMAGEM DE VISUALIZAÇÃO DO SISTEMA DO ANDROID</b></a>.</p>
-
-
 <h2 id="Material">Material design</h2>
 
 <p>O Android 5.0 traz o <a href="http://www.google.com/design/spec">Material design</a> para o Android e fornece um kit de ferramentas de interface de usuário para integrar os novos padrões de design facilmente em seus apps.  </p>
@@ -79,7 +68,7 @@
 </div>
 
 
-<p>Animações com ondulação estão disponíveis para botões, caixas de seleção e outros controles de toque em seu app. 
+<p>Animações com ondulação estão disponíveis para botões, caixas de seleção e outros controles de toque em seu app.
 
 <p>Você também pode definir drawables de vetor em XML e animá-los de várias formas. Drawables de vetor são dimensionados sem perder definição, então eles são perfeitos para ícones de uma cor em apps.</p>
 
diff --git a/docs/html-intl/intl/pt-br/index.jd b/docs/html-intl/intl/pt-br/index.jd
index bf6c57d..dd48fe2 100644
--- a/docs/html-intl/intl/pt-br/index.jd
+++ b/docs/html-intl/intl/pt-br/index.jd
@@ -1,93 +1,89 @@
 fullpage=true
-page.viewport_width=970
 excludeFromSuggestions=true
-page.metaDescription=O site oficial dos desenvolvedores Android. Fornece o Android SDK e a documentação para desenvolvedores e projetistas de aplicativos.
-page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" /> 
+page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
+page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />
 
 @jd:body
 
-<div class="home-new-carousel-1">
-  <div class="fullscreen-carousel-content">
-    <div class="vcenter">
-      <div class="wrap clearfix">
+<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel">
+</div> -->
+<section class="dac-hero-carousel">
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
+<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> -->
+<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;">
+<a href="/preview/index.html">
+  <div class="wrap" style="max-width:1100px;">
+    <div class="cols dac-hero-content">
+      <div class="col-10of16 col-push-6of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png"
+             srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-6of16 col-pull-10of16">
+        <div class="dac-hero-tag"></div>
 
-      <div class="landing-section-header">
-            <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div>
-            <div class="col-5" style=" margin-top:70px ">
-            <h3 stye="font-weight:300;">Android 5.0 Lollipop</h3>
-            <p>A atualização do Android 5.0 adiciona diversos novos recursos aos aplicativos, como notificações na tela de bloqueio, uma API de câmera totalmente nova, OpenGL ES 3.1, a nova interface do Material Design e muito mais.</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">Saiba mais</a>
-            </div>
-          </div>
-          </div>
-        </div>
-       <h2>&nbsp;</h2>
-        <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16
-        no-section" data-query="collection:index/primary" data-resourcestyle="card"
-        data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget -->
-      </div> <!-- end .wrap -->
-    </div> <!-- end .vcenter -->
-  </div> <!-- end .fullscreen-carousel-content -->
-</div> <!-- end .fullscreen-carousel -->
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">Prepare-se para a próxima versão do
+        Android. Teste os aplicativos no Nexus 5, 6, 9 e Player.  </p>
 
-<div class="actions-bar" style="margin-top:20px">
-  <div class="wrap">
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Comece!
+        </a>
+      </div>
+    </div>
+  </div>
+</a>
+</article></section>
+
+<div 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">Obtenha o SDK</a></div>
-      <div><a href="{@docRoot}samples/index.html">Procure amostras</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">Assista a vídeos</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">Gerencie seus aplicativos</a></div>
+      <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="//www.youtube.com/user/androiddevelopers">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Watch Videos
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
 
 
-<div class="landing-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
+<section class="dac-section dac-section-light" id="build-apps"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    Resources to get you started with designing and developing for Android.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/primary"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-            <div class="landing-h1" style="margin-top:0px">Crie para um mundo multitela</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          O Android funciona em milhões de dispositivos portáteis em todo o mundo <br>
+<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel">
+</div>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">Crie para um mundo multitela</h1>
+    <div class="dac-section-subtitle">
+      O Android funciona em milhões de dispositivos portáteis em todo o mundo <br>
           e agora é compatível com esses novos e empolgantes recursos.
-        </div>
-      </div>
-      <div class="landing-body" style="margin-top: 50px;">
-        <div class="landing-breakout cols">
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/wear-wordmark.png"><img src="{@docRoot}images/home/wear.png">
-              <p class="landing-small">
-                Forneça informações constantemente aos usuários, sempre que precisarem.
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">Conheça o Android Wear</a>
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png">
-              <p class="landing-small">
-                Crie aplicativos para a telona e dê vida ao conteúdo.
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">Conheça o Android TV</a>
-
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png">
-              <p class="landing-small">
-                Estenda seus aplicativos de música a sistema de entretenimento de automóveis.
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">Conheça o Android Auto</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+    </div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/multiscreen"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html-intl/intl/pt-br/preview/backup/index.jd b/docs/html-intl/intl/pt-br/preview/backup/index.jd
new file mode 100644
index 0000000..1ba039b
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/backup/index.jd
@@ -0,0 +1,327 @@
+page.title=Backup automático para aplicativos
+page.tags=backup, previewresources, androidm
+page.keywords=backup, autobackup, preview
+page.image=images/cards/card-auto-backup_2x.png
+@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="#configuring">Configurar backup de dados</a></li>
+        <li><a href="#testing">Testar configuração de backup</a></li>
+        <li><a href="#issues">Problemas conhecidos</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Frenquentemente, os usuários investem muito tempo e esforço para criar dados e configurar preferências
+ nos aplicativos. Preservar esses dados para os usuários caso substituam um dispositivo quebrado ou atualizem-se para um novo
+ é importante para garantir uma ótima experiência de usuário. Dispositivos que executam o sistema Android M Preview
+ ajudam a garantir uma boa experiência para os usuários nessas circunstâncias realizando o backup dos dados do aplicativo
+ automaticamente no Google Drive. Os dados do aplicativo são restaurados automaticamente se um usuário alterar ou atualizar um
+ dispositivo.
+</p>
+
+<p>
+  Os backups automáticos estão ativos para todos os aplicativos instalados nos dispositivos que executam o Android M Preview. Nenhum
+ código adicional de aplicativo é necessário. O sistema fornece aos usuários a habilidade de decisão
+ sobre os backups automáticos de dados. Também é possível limitar quais dados do aplicativo devem ter o backup.
+</p>
+
+<p>
+  Este documento descreve o novo comportamento do sistema e como especificar quais dados terão backup
+ para o aplicativo.
+</p>
+
+<h2 id="overview">Visão geral</h2>
+
+<p>
+  O recurso de backup automático preserva os dados que o aplicativo cria em um dispositivo de usuário enviando-os
+ à conta do Google Drive do usuário e criptografando-os. Não há cobranças para você ou para o usuário
+ em relação ao armazenamento de dados e os dados salvos não contam para a cota do Drive pessoal do usuário. Durante
+ o período do M Preview, os usuários podem armazenar até 25 MB por aplicativo do Android.
+</p>
+
+<p>
+  Os backups automáticos ocorrem a cada 24 horas, quando o dispositivo está ocioso, carregando e conectado
+ a uma rede Wi-Fi. Quando esses requisitos são atendidos, o serviço Backup Manager envia todos os dados de backup
+ disponíveis à nuvem. Quando um usuário transita para um novo dispositivo, ou desinstala e reinstala
+ o aplicativo com backup realizado, uma operação de restauração copia os dados de backup para o diretório de dados
+ do aplicativo recém-instalado.
+</p>
+
+<p class="note">
+  <strong>Observação:</strong> se o usuário usar o
+ <a href="{@docRoot}google/backup/index.html">serviço de Backup do Android</a> de legado, este novo comportamento
+ não se aplicará aos trabalhos de comportamento de backup existentes com o normal.
+</p>
+
+
+<h3 id="auto-exclude">Arquivos de dados excluídos automaticamente</h3>
+
+<p>
+  Nem todos os dados do aplicativo devem ter backup, como arquivos temporários e de armazenamento em cachê. Portanto, o serviço de backup automático
+ exclui determinados arquivos de dados por padrão:
+</p>
+
+<ul>
+  <li>Arquivos em diretórios identificados pelos métodos {@link android.content.Context#getCacheDir
+ getCacheDir()} e {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
+.
+  </li>
+
+  <li>Arquivos localizados no armazenamento externo, a não ser que estejam no diretório identificado pelo método
+ {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+.
+  </li>
+
+  <li>Arquivos localizados no diretório identificado pelo método
+ {@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()}.
+  </li>
+</ul>
+
+<h2 id="configuring">Configurar backup de dados</h2>
+
+<p>
+  Os dados criados por qualquer aplicativo instalado em um dispositivo M Preview têm backup, exceto
+ os arquivos excluídos automaticamente listados na seção anterior. É possível limitar e configurar
+ quais dados terão backup no seu aplicativo usando as configurações no manifesto do aplicativo.
+</p>
+
+<h3 id="include-exclude">Incluir ou excluir dados</h3>
+
+<p>
+  Dependendo de quais dados o aplicativo precisar e do modo que forem salvos, você precisará definir
+ regras específicas para incluir ou excluir determinados arquivos ou diretórios. O serviço de backup automático suporta
+ a configuração dessas regras de backup por meio do uso de um arquivo de configuração XML e do
+ manifesto do aplicativo. No manifesto do aplicativo, é possível especificar o arquivo de configuração de esquema de backup como exibido
+ no seguinte exemplo:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>
+  Neste código de exemplo, o atributo <code>android:fullBackupContent</code> especifica um arquivo XML,
+ localizado no diretório <code>res/xml/</code> do projeto de desenvolvimento do aplicativo, chamado
+ <code>mybackupscheme.xml</code>. Este arquivo de configuração inclui as regras de quais arquivos terão
+ backup. O seguinte código de exemplo mostra um arquivo de configuração que exclui um arquivo específico
+ dos backups:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;full-backup-content&gt;
+    &lt;exclude domain="database" path="device_info.db"/&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  Esta configuração de backup de exemplo exclui do backup somente um arquivo específico do banco de dados.
+  Todos os outros arquivos terão backup.
+</p>
+
+<h4>Sintaxe da configuração de backup</h4>
+
+<p>
+  A configuração do serviço de backup permite que você especifique quais arquivos incluir ou excluir do
+backup. A sintaxe para o arquivo XML de configuração de backup de dados é a seguinte:
+</p>
+
+<pre>
+&lt;full-backup-content&gt;
+    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  Os seguintes elementos e atributos permitem que você especifique os arquivos que serão incluídos ou excluídos
+ do backup:
+</p>
+
+<ul>
+  <li>
+  <code>&lt;include&gt;</code>. Use este elemento se quiser especificar um conjunto de recursos
+para o backup, em vez de fazer o sistema realizar o backup de todos os dados no aplicativo por padrão. Ao especificar
+ uma tag <code>&lt;include&gt;</code>, o sistema realiza apenas o backup <em>dos recursos especificados</em>
+ com este elemento.
+  </li>
+
+  <li>
+  <code>&lt;exclude&gt;</code>. Use este elemento para especificar um conjunto de recursos que será excluído
+ do backup. O sistema realiza o backup de todos os dados no aplicativo, exceto os recursos especificados
+ com este elemento.
+  </li>
+
+  <li>
+  <code>domain.</code> O tipo de recurso que deseja excluir ou incluir no backup. Os valores válidos
+ que podem ser especificados para este atributo incluem:
+  </li>
+
+  <li style="list-style: none">
+  <ul>
+    <li>
+    <code>root</code>. Especifica que o recurso está no diretório raiz do aplicativo.
+    </li>
+
+    <li>
+    <code>file</code>. Corresponde ao recurso no diretório retornado
+ pelo método {@link android.content.Context#getFilesDir getFilesDir()}.
+    </li>
+
+    <li>
+    <code>database</code>. Corresponde ao banco de dados retornado
+ pelo método {@link android.content.Context#getDatabasePath getDatabasePath()} ou usando
+ a classe {@link android.database.sqlite.SQLiteOpenHelper}.
+    </li>
+
+    <li>
+    <code>sharedpref</code>. Corresponde a um objeto {@link android.content.SharedPreferences}
+ retornado pelo método {@link android.content.Context#getSharedPreferences getSharedPreferences()}
+.
+    </li>
+
+    <li>
+    <code>external</code>. Especifica que o recurso está no armazenamento externo e corresponde
+ a um arquivo no diretório retornado pelo método
+ {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}.
+    </li>
+
+    <li>
+    <code>path</code>. O caminho de arquivo para um recurso que deseja excluir ou incluir
+ no backup.
+    </li>
+  </ul>
+  </li>
+</ul>
+
+
+<h3 id="prohibit">Proibir backup de dados</h3>
+
+<p>
+  É possível optar por evitar backups automáticos de quaisquer dados do aplicativo configurando
+ o atributo <code>android:allowBackup</code> para <code>false</code> no elemento do aplicativo
+ do manifesto. Esta configuração é ilustrada no seguinte código de exemplo:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:allowBackup="false"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="testing">Testar configuração de backup</h2>
+
+<p>
+  Ao criar uma configuração de backup, deve-se testá-la para garantir que o aplicativo
+ salva os dados e que eles podem ser restaurados corretamente.
+</p>
+
+
+<h4>Ativar registro de backup</h4>
+
+<p>
+  Para ajudar a determinar como o recurso de backup analisa o arquivo XML, ative o registro
+ antes de realizar um backup de teste:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
+</pre>
+
+<h4>Teste de backup</h4>
+
+<p>Para executar um backup manualmente, primeiro deve-se inicializar o Backup Manager chamando o seguinte
+ comando:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr run
+</pre>
+
+<p>
+  Em seguida, realiza-se o backup manualmente do aplicativo usando o seguinte comando, especificando o nome
+ do pacote para o aplicativo como o parâmetro <code>&lt;PACKAGE&gt;</code>:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
+
+
+<h4>Teste de restauração</h4>
+
+<p>
+  Para iniciar manualmente uma restauração após o backup dos dados do aplicativo, chame o seguinte comando,
+ especificando o nome do pacote para o aplicativo como o parâmetro <code>&lt;PACKAGE&gt;</code>:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr restore &lt;PACKAGE&gt;
+</pre>
+
+<p class="warning">
+  <b>Aviso:</b> esta ação impede o aplicativo de apagar os dados antes de realizar
+ a operação de restauração.
+</p>
+
+<p>
+  Para iniciar o processo de restauração do aplicativo, deve-se desinstalar e reinstalá-lo. Os dados
+ do aplicativo são restaurados automaticamente a partir da nuvem quando a instalação do aplicativo for concluída.
+</p>
+
+
+<h4>Resolução de problemas de backups</h4>
+
+<p>
+  Caso ocorra problemas, é possível apagar os dados de backup e os metadados associados desativando o backup
+ e reativando-o em <strong>Settings (Configurações) &gt; Backup</strong>, redefinindo o dispositivo para as especificações de fábrica, ou
+ chamando este comando:
+</p>
+
+<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
+
+<p>
+  O valor <code>&lt;TRANSPORT&gt;</code> deve ser prefixado por <code>com.google.android.gms</code>.
+  Para obter uma lista de transportes, chame o seguinte comando:
+</p>
+
+<pre>$ adb shell bmgr list transports</pre>
+
+<h2 id="issues">Problemas conhecidos</h2>
+
+<p>A seguir estão os problemas conhecidos com o serviço de backup automático:</p>
+
+<ul>
+  <li><strong>Google Cloud Messaging</strong> -
+ Para aplicativos que usam o Google Cloud Messaging para notificações push, há um problema conhecido
+ onde o backup do ID de registro retornado pelo registro do Google Cloud Messaging pode
+ desencadear notificações push para o aplicativo restaurado. É importante consultar a API para obter um novo ID de registro
+ após a instalação em um novo dispositivo, o que não deve ser o caso se o ID de registro antigo
+ tiver backup. Para evitar isto, exclua o ID de registro do conjunto de arquivos
+ de backup.
+  </li>
+</ul>
diff --git a/docs/html-intl/intl/pt-br/preview/download.jd b/docs/html-intl/intl/pt-br/preview/download.jd
new file mode 100644
index 0000000..12ef194
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/download.jd
@@ -0,0 +1,360 @@
+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/app-linking.jd b/docs/html-intl/intl/pt-br/preview/features/app-linking.jd
new file mode 100644
index 0000000..17a9896
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/features/app-linking.jd
@@ -0,0 +1,123 @@
+page.title=Links de aplicativos
+page.image=images/cards/card-app-linking_2x.png
+page.keywords=applinking, deeplinks, intents
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Neste documento</h2>
+      <ol>
+        <li><a href="#web-assoc">Declarar uma associação de site</a></li>
+        <li><a href="#verfy-links">Solicitar verificação de link de aplicativo</a></li>
+        <li><a href="#user-manage">Gerenciar configurações de link de aplicativo</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  O sistema de intenções do Android é um mecanismo flexível para possibilitar que aplicativos lidem com conteúdos e solicitações.
+  Vários aplicativos podem declarar padrões de URI correspondentes em seus filtros de intenções. Quando um usuário clica em um
+ link da web que não tem um manipulador de inicialização padrão, a plataforma pode exibir um diálogo para
+ o usuário selecionar entre uma lista de aplicativos que declararam filtros de intenções correspondentes.
+</p>
+
+<p>
+  O Android M Developer Preview introduz suporte para links de aplicativos, que aprimora
+ a manipulação de links existentes, permitindo que desenvolvedores de aplicativos associem um aplicativo a um domínio da web pertencente a eles. Quando
+ os desenvolvedores criam esta associação, a plataforma pode automaticamente determinar o aplicativo padrão usado
+ para lidar com um link da web particular e ignorar a solicitação aos usuários.
+</p>
+
+
+<h2 id="web-assoc">Declarar uma associação de site</h2>
+
+<p>
+  Os donos de sites da web devem declarar as associações aos aplicativos para estabelecer um link de aplicativo. O dono do site
+ declara a relação com um aplicativo hospedando um arquivo JSON chamado {@code statements.json} no
+ local bem conhecido no domínio:
+</p>
+
+<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<p class="note">
+  <strong>Observação:</strong>
+  durante o período do M Developer Preview, o arquivo JSON é verificado por meio de protocolo http. Para
+ o lançamento oficial da plataforma, o arquivo é verificado com o protocolo http criptografado.
+</p>
+
+<p>
+  Este arquivo JSON indica o aplicativo do Android que deve ser usado como o manipulador padrão para URLs
+ neste domínio. Ele identifica o aplicativo com base nestes campos:
+</p>
+
+<ul>
+  <li>{@code package_name}: o nome do pacote declarado no manifesto do arquivo.</li>
+
+  <li>{@code sha256_cert_fingerprints}: a impressão digital SHA256 do certificado assinado do aplicativo.
+    É possível usar o Java Keytool para gerar a impressão digital usando o seguinte comando:
+    <pre>keytool -list -v -keystore my-release-key.keystore</pre>
+  </li>
+</ul>
+
+<p>
+  A seguinte lista de arquivos exibe um exemplo de conteúdo e formato
+ de um arquivo {@code statements.json}:
+</p>
+
+<pre>
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "<strong>&lt;package name&gt;</strong>",
+    "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+  }
+}]
+</pre>
+
+
+<h2 id="verfy-links">Solicitar verificação de link de aplicativo</h2>
+
+<p>
+  Um aplicativo pode solicitar que a plataforma verifique automaticamente quaisquer links de aplicativo relacionados aos arquivos {@code statements.json}
+ hospedados nos respectivos domínios da web que são definidos pelos nomes de host
+ nos elementos de dados dos seus filtros de intenções. Para solicitar a verificação de link de aplicativo, adicione um atributo {@code android:autoVerify}
+ a cada filtro de intenção desejado no manifesto, como exibido no seguinte fragmento
+ de código do manifesto:
+</p>
+
+<pre>
+&lt;activity ...&gt;
+    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+        &lt;action android:name="android.intent.action.VIEW" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>
+  Quando o atributo {@code android:autoVerify} está presente em um manifesto do aplicativo, a plataforma
+ tenta verificar os links do aplicativo quando o aplicativo é instalado. Se a plataforma não conseguir
+ verificar os links do aplicativo, o aplicativo não será definido como o aplicativo preferencial para lidar com os links da web. Na próxima vez
+ que um usuário tentar abrir um dos links, a plataforma voltará a apresentar ao usuário
+ uma caixa de diálogo.
+</p>
+
+<p class="note">
+  <strong>Observação:</strong> no teste, há chances de ocorrer um falso positivo se a verificação
+ falhar, mas o usuário explicitamente permitiu que o aplicativo abrisse links sem solicitar, usando
+ o aplicativo do sistema Settings (Configurações). Neste caso, nenhum diálogo é exibido e o link vai direto para o
+ aplicativo, mas somente devido à configuração do usuário, e não porque a verificação foi bem-sucedida.
+</p>
+
+
+<h2 id="user-manage">Gerenciar configurações de link de aplicativo</h2>
+
+<p>
+  Os usuários podem alterar as configurações de link de aplicativo para que os URLs sejam tratados da maneira que preferirem. É possível revisar e
+ gerenciar os links de aplicativo no aplicativo Settings (Configurações) do sistema, em <strong>Settings (Configurações) &gt; Apps (Aplicativos) &gt; App Info (Informações do aplicativo) &gt;
+ Open by default (Abrir por padrão)</strong>.
+</p>
diff --git a/docs/html-intl/intl/pt-br/preview/index.jd b/docs/html-intl/intl/pt-br/preview/index.jd
new file mode 100644
index 0000000..1e0252f
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/index.jd
@@ -0,0 +1,67 @@
+page.title=Android M Developer Preview
+page.tags="preview",
+meta.tags="preview, M preview", androidm
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">
+          Prepare-se para a próxima versão do Android. Teste os aplicativos no Nexus 5, 6, 9 e
+ Player. Explore o que há de novo &mdash; <strong>permissões em tempo de execução</strong>,
+ recursos de economia de energia <strong>aplicativo em espera</strong> e <strong>soneca</strong>, novas
+ <strong>tecnologias de auxílio</strong> e muito mais.
+        </p>
+
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Comece!
+</a><br>
+      </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>
+
+<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 os aplicativos para Android M.
+  </div>
+ 
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/more"
+       data-cardSizes="6x6"
+       data-maxResults="16"></div>
+
+    <ul class="dac-section-links">
+      <li class="dac-section-link">
+        <a href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Relate problemas
+</a>
+      </li> 
+      <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
+        <span class="dac-sprite dac-auto-chevron"></span>
+        Junte-se à comunidade do G+
+</a>
+      </li>
+    </ul>
+  </div>
+</section>
+
diff --git a/docs/html-intl/intl/pt-br/preview/license.jd b/docs/html-intl/intl/pt-br/preview/license.jd
new file mode 100644
index 0000000..9e28b8a
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/license.jd
@@ -0,0 +1,143 @@
+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 isto é uma versão de prévia do Android SDK, sujeita a alterações, que deve ser usada a 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 "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 da 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 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 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>
\ 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
new file mode 100644
index 0000000..a664837
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/samples.jd
@@ -0,0 +1,70 @@
+page.title=Exemplos
+page.image=images/cards/samples-new_2x.png
+@jd:body
+
+<p>
+  Os seguintes exemplos de código são fornecidos para o M Developer Preview. Para fazer o download
+ dos exemplos no Android Studio, selecione a opção do menu <b>File (Arquivo) &gt; Import Samples (Importar exemplos)</b>.
+</p>
+
+<p class="note">
+  <strong>Observação:</strong> estes projetos disponíveis para download foram feitos
+para serem usados com Gradle e Android Studio.
+</p>
+
+
+<h3 id="RuntimePermissions">Permissões em tempo de execução</h3>
+
+<p>
+ O Android M altera a maneira como as permissões do sistema funcionam. Os usuários são solicitados a aprovar
+ as permissões em tempo de execução em vez de aprovar durante a instalação. Este exemplo mostra como solicitar
+ essas permissões.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-RuntimePermissions">Obtenha isto no GitHub</a></p>
+
+<h3 id="ConfirmCredentials">Confirmação de credencial</h3>
+
+<p>
+ Este exemplo demonstra como usar as credenciais do dispositivo como um método de autenticação no aplicativo.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">Obtenha isto
+no GitHub</a></p>
+
+<h3 id="FingerprintDialog">Diálogo de impressão digital</h3>
+
+<p>
+ Este exemplo demonstra como reconhecer as impressões digitais registradas para autenticar o usuário
+ no aplicativo.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-FingerprintDialog">Obtenha isto no GitHub</a></p>
+
+<h3 id="AutomaticBackup">Backup automático para aplicativos</h3>
+
+<p>
+ O Android M introduz o backup automático para as configurações de aplicativos. Este exemplo demonstra como adicionar
+ regras de filtro a um aplicativo para gerenciar o backup de configurações.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">Obtenha isto no GitHub</a></p>
+
+<h3 id="CameraRaw">Câmera 2 Bruta</h3>
+
+<p>
+  Demonstra como usar a API <code>Camera2</code> API para capturar buffers de câmera RAW e salvá-los
+ como arquivos <code>DNG</code>.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-Camera2Raw">Obtenha isto no GitHub</a></p>
+
+<h3 id="ActiveNotification">Notificação ativa</h3>
+
+<p>
+  Este exemplo demonstra como o
+ <a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a>
+ pode dizer quantas notificações o aplicativo está exibindo.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">Obtenha isto no GitHub</a></p>
diff --git a/docs/html-intl/intl/pt-br/preview/setup-sdk.jd b/docs/html-intl/intl/pt-br/preview/setup-sdk.jd
new file mode 100644
index 0000000..894fe43
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/setup-sdk.jd
@@ -0,0 +1,207 @@
+page.title=Configuração do Preview SDK
+page.image=images/cards/card-set-up_16-9_2x.png
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Neste documento</h2>
+      <ol>
+        <li><a href="#get-as13">Obter o Android Studio 1.3</a></li>
+        <li><a href="#get-sdk">Obter o Preview SDK</a></li>
+        <li><a href="#create-update">Criar ou atualizar um projeto</a></li>
+        <li><a href="#setup-test">Configurar para teste</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>O M Developer Preview SDK está disponível a partir do Android SDK Manager.
+Este documento assume que você está familiarizado com o desenvolvimento de aplicativos do Android,
+como o uso do Android SDK Manager e criação de projetos. Caso seja novo no
+Android, consulte a lição de treinamento <a href="{@docRoot}training/basics/firstapp/index.html">Como criar o primeiro
+aplicativo</a> primeiro.</a></p>
+
+<h2 id="get-as13">Obter o Android Studio 1.3</h2>
+
+<p>A prévia de desenvolvedor é melhor usada com o Android Studio 1.3, que está no estado
+de prévia. É altamente recomendado que você instale a versão de prévia
+do Android Studio 1.3 para que funcione com o Preview SDK.</p>
+
+<p class="caution"><strong>Cuidado:</strong> a prévia canário do Android
+Studio 1.3 ainda está em desenvolvimento ativo. Caso esteja usando a máquina de desenvolvimento principal
+para testar a prévia de desenvolvedor, é possível criar uma segunda instalação
+do Android Studio para usar em testes.</p>
+
+<p>Para instalar a prévia do Android Studio 1.3:</p>
+
+<ol>
+  <li>Faça o download e inicie o <a href="{@docRoot}tools/studio/index.html">Android
+ Studio</a>.
+  </li>
+
+  <li>Abra a janela <strong>Settings (Configurações)</strong> (no Windows, é possível fazer isto
+ escolhendo <strong>File (Arquivo) &gt; Settings (Configurações)</strong>). Escolha o painel
+ <strong>Appearance &amp; Behavior (Aparência e comportamento) &gt; System
+ Settings (Configurações do sistema) &gt; Updates (Atualizações)</strong>.
+
+    <p class="aside">No OSX, é possível encontrar o painel <strong>Appearance &amp;
+ Behavior (Aparência e comportamento)</strong>
+ na janela <strong>Preferences (Preferências)</strong> do Android Studio.</p>
+  </li>
+
+  <li> No painel <strong>Updates (Atualizações)</strong>, escolha a opção
+ <strong>Automatically check updates for: Canary Channel (Verificar atualizações automaticamente para: canal canário)</strong>.
+  </li>
+
+  <li>No painel <strong>Updates (Atualizações)</strong>, selecione <strong>Check Now (Verificar agora)</strong>
+ para verificar a versão mais recente da versão canário. Faça o download e instale a versão
+ quando solicitado.
+  </li>
+</ol>
+
+<h2 id="get-sdk">Obter o Preview SDK</h2>
+
+<p>Para adicionar os componentes do Preview SDK ao ambiente de desenvolvimento:</p>
+
+<ol>
+  <li>Inicie a prévia do Android Studio 1.3.
+  </li>
+
+  <li>Abra a janela <strong>Settings (Configurações)</strong> (no Windows, é possível fazer isto
+ escolhendo <strong>File (Arquivo) &gt; Settings (Configurações)</strong>). Escolha o painel
+ <strong>Appearance &amp; Behavior (Aparência e comportamento) &gt; System
+ Settings (Configurações do sistema) &gt; Updates (Atualizações)</strong>.
+
+    <p class="aside">No OSX, é possível encontrar o painel <strong>Appearance &amp;
+ Behavior (Aparência e comportamento)</strong>
+ na janela <strong>Preferences (Preferências)</strong> do Android Studio.</p>
+  </li>
+
+  <li>No painel <strong>Updates (Atualizações)</strong>, escolha a opção
+ <strong>Automatically check updates for: Canary Channel (Verificar atualizações automaticamente para: canal canário)</strong> e
+ <strong>Automatically check atualização for Android SDK: Preview Channel (Verificar atualizações automaticamente para: canal de pré-visualização)</strong>.
+  </li>
+
+  <li>Inicie o <strong>Android SDK Manager</strong>. (Com o Android Studio 1.3,
+ o SDK Manager está integrado no Android Studio, em vez de ser
+ um aplicativo independente.)
+  </li>
+
+  <li>Na seção <strong>Platforms (Plataformas)</strong>, selecione <strong>Android MNC
+ Preview</strong>.
+  </li>
+
+  <li>Na seção <strong>Tools (Ferramentas)</strong>, selecione o Android <strong>
+SDK Tools</strong>, <strong>Platform-tools</strong> e 
+<strong>Build-tools</strong> mais recentes.
+  </li>
+
+  <li>Clique em <strong>Install packages (Instalar pacotes)</strong> e aceite o contrato de licença
+ para todos os pacotes.
+  </li>
+
+  <li>Verifique se o M Developer Preview está instalado abrindo a janela <strong>
+Settings (Configurações)</strong> e escolhendo o painel <strong>Appearance &amp; Behavior (Aparência e comportamento) 
+&gt; System Settings (Configurações do sistema) &gt; Android SDK</strong>.</li>
+
+  <li>No painel <strong>Android SDK</strong>, escolha
+ a guia <strong>SDK Platforms (Plataformas SDK)</strong>. <strong>Android MNC
+ Preview</strong> deve estar listado como <em>Installed (Instalado)</em>. Além disso, abra a guia
+ <strong>SDK Tools (Ferramentas SDK)</strong> para verificar se as ferramentas mais recentes
+ estão instaladas.
+  </li>
+</ol>
+<p>Após concluir estas etapas, os componentes de prévia estarão disponíveis
+ no ambiente de desenvolvimento. </p>
+
+
+<h2 id="create-update">Criar ou atualizar um projeto</h2>
+
+<p>
+  Para usar as APIs de prévia, deve-se criar ou atualizar um projeto de desenvolvimento para usar
+ os componentes de prévia.
+</p>
+
+
+<h3 id="create">Criar um novo projeto</h3>
+
+<p>
+  Recomendamos o uso do Android Studio para criar um projeto com a prévia. Siga as etapas
+ descritas em <a href="{@docRoot}sdk/installing/create-project.html">Criar um projeto</a>
+ até chegar na tela <em>Form Factors (Novas especificações)</em> no assistente do projeto. Em seguida,
+ realize as seguintes etapas para criar um projeto configurado para a prévia.
+</p>
+
+<ul>
+  <li>Verifique <strong>Phone and Tablet (Telefone e tablet)</strong>.</li>
+  <li>Selecione <strong>MNC: Android M (Preview)</strong> em <strong>Minimum
+ SDK (SDK mínimo)</strong>.</li>
+</ul>
+
+
+<h3 id="update">Atualizar um projeto existente</h3>
+
+<p>
+  Para projetos existentes, deve-se modificar a configuração de projeto para ativar as APIs de prévia. No
+ ambiente de desenvolvimento, abra o arquivo <code>build.gradle</code> para o módulo
+ e defina estes valores da seguinte forma:
+</p>
+
+<ul>
+  <li><code>compileSdkVersion</code> para <code>'android-MNC'</code></li>
+  <li><code>minSdkVersion</code> para <code>'MNC'</code></li>
+  <li><code>targetSdkVersion</code> para <code>'MNC'</code></li>
+</ul>
+
+
+<h2 id="setup-test">Configurar para teste</h2>
+
+<p>
+  Testar um aplicativo com a prévia requer que você tenha um dispositivo ou dispositivo virtual configurado
+ com a versão de prévia da plataforma. Caso tenha um dispositivo compatível, é possível instalar a plataforma
+ de prévia para teste. Caso contrário, é possível configurar um dispositivo virtual para o teste.
+</p>
+
+<h3 id="setup-device">Configurar um dispositivo físico</h3>
+
+<p>
+  Caso tenha um Nexus 5, Nexus 6, Nexus 9 ou Android TV, é possível instalar uma imagem do sistema
+ de prévia nestes dispositivos para testar o aplicativo.
+ É possível configurar um dispositivo virtual com a versão de prévia da plataforma a partir do Android Studio
+ usando a ferramenta Android Virtual Device Manager.
+</p>
+
+<p class="caution">
+  <strong>Importante:</strong> instalar uma imagem de prévia em um dispositivo <em>remove todos os dados
+ dele</em>. Portanto, deve-se realizar o backup de quaisquer dados antes de instalar uma imagem de prévia.
+</p>
+
+<h3 id="setupAVD">Configurar um dispositivo virtual</h3>
+
+<p>
+  É possível configurar um dispositivo virtual com a versão de prévia da plataforma dentro do Android Studio
+ usando a ferramenta Android Virtual Device Manager.
+</p>
+
+<p>Para criar um AVD com o AVD Manager:</p>
+
+<ol>
+  <li>Instale o Preview SDK no ambiente de desenvolvimento, como descrito
+ em <a href="{@docRoot}preview/setup-sdk.html">Configurar o Preview
+ SDK.</a></li>
+  <li>Siga as etapas em
+ <a href="{@docRoot}tools/devices/managing-avds.html">Como gerenciar AVDs com
+ o Gerenciador de AVD</a>. Use as seguintes configurações:
+    <ul>
+      <li><strong>Dispositivo:</strong> Nexus 5, Nexus 6, Nexus 9 ou Android TV</li>
+      <li><strong>Alvo:</strong>
+       Android M (Preview) - Nível da API M</li>
+      <li><strong>ABI:</strong> x86</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  Para obter mais informações sobre como criar dispositivos virtuais para teste, consulte <a href="{@docRoot}tools/devices/index.html">Gerenciamento de dispositivos virtuais</a>.
+</p>
diff --git a/docs/html-intl/intl/pt-br/preview/testing/guide.jd b/docs/html-intl/intl/pt-br/preview/testing/guide.jd
new file mode 100644
index 0000000..b995f8b
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/testing/guide.jd
@@ -0,0 +1,187 @@
+page.title=Guia de teste
+page.image=images/cards/card-build_16x9_2x.png
+page.keywords=previewresources,androidm,testing,permissions
+
+@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 aplicativo em espera</a></li>
+        <li><a href="#ids">Identificadores de dispositivo e backup automático</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  O Android M Developer Preview fornece uma oportunidade de garantir que os aplicativos funcionem
+ na próxima versão da plataforma. Esta prévia inclui um número 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 aplicativo 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 Preview 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] &lt;permission.name&gt; ...</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 dos usuários 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 Preview 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 aplicativo em espera</h2>
+
+<p>
+  Os recursos de economia de energia de aplicativo 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 M Preview.</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 o aplicativo no modo de 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 M Preview.</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 &lt;packageName&gt; true
+</pre>
+
+  </li>
+  <li>Simule o despertar do aplicativo usando o seguinte comando:
+    <pre>$ adb shell am set-idle &lt;packageName&gt; 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/testing/performance.jd b/docs/html-intl/intl/pt-br/preview/testing/performance.jd
new file mode 100644
index 0000000..d541be1
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/preview/testing/performance.jd
@@ -0,0 +1,656 @@
+page.title=Teste de desempenho de exibição
+page.image=images/cards/card-test-performance_2x.png
+page.keywords=performance, fps, tools
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Neste documento</h2>
+      <ol>
+        <li><a href="#measure">Medir desempenho da IU</a>
+          <ul>
+            <li><a href="#aggregate">Agregar estatísticas de quadro</a></li>
+            <li><a href="#timing-info">Informações de precisão de quadro</a></li>
+            <li><a href="#timing-dump">Despejo de precisão de quadro simples</a></li>
+            <li><a href="#collection-window">Controlar janela de coleta de estatísticas</a></li>
+            <li><a href="#diagnose">Diagnosticar regressões de desempenho</a></li>
+            <li><a href="#resources">Recursos adicionais</a></li>
+          </ul>
+        </li>
+        <li><a href="#automate">Automatizar teste de desempenho da IU</a>
+          <ul>
+            <li><a href="#ui-tests">Configurar testes da IU</a></li>
+            <li><a href="#automated-tests">Configurar testes automatizados da IU</a></li>
+            <li><a href="#triage">Triagem e resolução de problemas observados</a></li>
+          </ul>
+        </li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  O teste de desempenho da interface do usuário (IU) garante que o aplicativo
+ não só esteja de acordo com os requisitos funcionais, como também que as interações de usuários
+ sejam muito mais suaves, executando a 60 quadros por segundo de forma consistente (<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">por que
+ 60 qps?</a>), sem nenhum quadro atrasado ou descartado ou, como gostamos de chamar, <em>"jank"</em>. Este documento explica as ferramentas disponíveis
+ para medir o desempenho da IU e dispõe uma abordagem para integrar
+ as medidas de desempenho de IU nas práticas de teste.
+</p>
+
+
+<h2 id="measure">Medir desempenho da IU</h2>
+
+<p>
+  Para aprimorar o desempenho, deve-se primeiro ter a habilidade de medir o desempenho
+ do sistema e, em seguida, diagnosticar e identificar problemas que podem ocorrer
+ em várias partes do processo.
+</p>
+
+<p>
+  <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em> é uma ferramenta
+ do Android que é executada no dispositivo e despeja informações interessantes sobre o estado
+ dos serviços do sistema. Passar o comando <em>gfxinfo</em> para dumpsys fornece uma saída no logcat
+ com informações de desempenho relacionada aos quadros de animação que ocorrem
+ durante a fase de registro.
+</p>
+
+<pre>
+&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
+</pre>
+
+<p>
+  Este comando pode produzir diversas variáveis de dados de precisão de quadro.
+</p>
+
+<h3 id="aggregate">Agregar estatísticas de quadro</h3>
+
+<p>
+  Com o M Preview, o comando emite uma análise agregada dos dados de quadro para logcat,
+ coletados em todo o ciclo de vida do processo. Por exemplo:
+</p>
+
+<pre class="noprettyprint">
+Stats since: 752958278148ns
+Total frames rendered: 82189
+Janky frames: 35335 (42.99%)
+90th percentile: 34ms
+95th percentile: 42ms
+99th percentile: 69ms
+Number Missed Vsync: 4706
+Number High input latency: 142
+Number Slow UI thread: 17270
+Number Slow bitmap uploads: 1542
+Number Slow draw: 23342
+</pre>
+
+<p>
+  Estas estatísticas de alto nível carregam um alto nível de desempenho de renderização do aplicativo,
+ bem como a estabilidade em vários quadros.
+</p>
+
+
+<h3 id="timing-info">Informações de precisão de quadro</h3>
+
+<p>
+  Com o M Preview, há um novo comando para gfxinfo, o <em>framestats</em>, que fornece
+ informações de precisão de quadros extremamente detalhadas dos quadros recentes para que você possa rastrear
+ e depurar os problemas de forma mais precisa.
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
+</pre>
+
+<p>
+  Este comando emite informações de precisão de quadros, com marcações de data e hora, dos últimos 120
+ quadros produzidos pelo aplicativo. Abaixo, há um exemplo de saída bruta das estatísticas
+ de quadro de adb dumpsys gfxinfo &lt;PACKAGE_NAME&gt;:
+</p>
+
+<pre class="noprettyprint">
+0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
+0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
+0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
+0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
+</pre>
+
+<p>
+  Cada linha desta saída representa um quadro produzido pelo aplicativo. Cada linha tem um número fixo
+ de colunas que descrevem o tempo gasto em cada estágio do pipeline que produz quadros. A próxima seção descreve
+ este formato com detalhes, incluindo o que cada coluna representa.
+</p>
+
+
+<h4 id="fs-data-format">Formato de dados de estatísticas de quadro</h4>
+
+<p>
+  Como o bloco de dados é a saída no formato CSV, basta colá-lo na ferramenta
+ de planilha de sua escolha ou coletá-lo e analisá-lo com o script. A tabela a seguir explica o formato
+ das colunas de dados de saída. Todas as marcações de data e hora estão em nanossegundos.
+</p>
+
+<ul>
+  <li>SINALIZADORES
+    <ul>
+      <li>Linhas com ‘0’ para a coluna FLAGS podem ter o tempo total de quadros calculado
+ subtraindo a coluna INTENDED_VSYNC da coluna FRAME_COMPLETED.
+      </li>
+
+      <li>Se for um número diferente de zero, a linha deverá ser ignorada, pois o quadro será determinado
+ como exceção em comparação ao desempenho normal, onde espera-se que o layout e o desenho
+ demorem mais do que 16 ms. Eis alguns motivos para que isto ocorra:
+        <ul>
+          <li>Layout da janela alterado (como o primeiro quadro do aplicativo
+ ou após uma rotação)
+          </li>
+
+          <li>Também é possível que o quadro seja ignorado, quando alguns valores
+ ainda terão marcações de data e hora de lixo. Um quadro pode ser ignorado se, por exemplo,
+ estiver executando a 60 quadros por segundo ou se nada na tela estiver incorreto, o que não necessariamente
+ é um sinal de problema no aplicativo.
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>INTENDED_VSYNC
+    <ul>
+      <li>O ponto inicial planejado para o quadro. Se este valor for diferente de VSYNC,
+ significa que há um trabalho ocorrendo no encadeamento da IU que não permitiu que ele respondesse
+ ao sinal de vsync de forma precisa.
+      </li>
+    </ul>
+  </li>
+
+  <li>VSYNC
+    <ul>
+      <li>O valor de tempo foi usado em todos os escutadores vsync e no desenho para o quadro
+ (retorno de chamada do quadro Choreographer, animações, View.getDrawingTime(), etc.)
+      </li>
+
+      <li>Para entender mais sobre VSYNC e como ele influencia o aplicativo, assista ao vídeo
+ <a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">
+Entendimento do VSYNC</a>.
+      </li>
+    </ul>
+  </li>
+
+  <li>OLDEST_INPUT_EVENT
+    <ul>
+      <li>A marcação de data e hora do evento de entrada mais antigo na fila de entrada, ou Long.MAX_VALUE
+ se não houver eventos de entrada para o quadro.
+      </li>
+
+      <li>Este valor é principalmente planejado para o trabalho da plataforma e tem utilidade limitada
+ para desenvolvedores de aplicativos.
+      </li>
+    </ul>
+  </li>
+
+  <li>NEWEST_INPUT_EVENT
+    <ul>
+      <li>A marcação de data e hora do evento de entrada mais recente na fila de entrada
+ ou 0 se não houver eventos de entrada para o quadro.
+      </li>
+
+      <li>Este valor é principalmente planejado para o trabalho da plataforma e tem utilidade limitada
+ para desenvolvedores de aplicativos.
+      </li>
+
+      <li>No entanto, é possível ter uma breve ideia da quantidade de latência que o aplicativo
+ está adicionado verificando (FRAME_COMPLETED - NEWEST_INPUT_EVENT).
+      </li>
+    </ul>
+  </li>
+
+  <li>HANDLE_INPUT_START
+    <ul>
+      <li>A marcação de data e hora em que os eventos de entrada foram despachados para o aplicativo.
+      </li>
+
+      <li>Ao olhar o horário entre isto e ANIMATION_START, é possível medir o tempo que o aplicativo
+ gastou para lidar com os eventos de entrada.
+      </li>
+
+      <li>Se este número for alto (&gt; 2 ms), indica que o aplicativo está gastando
+ tempo demais processando os eventos de entrada, como View.onTouchEvent(), o que pode indicar
+ que este trabalho precisa ser otimizado ou descarregado para um encadeamento diferente. Observe que há algumas situações,
+ como eventos de clique que iniciam novas atividades,
+ em que é esperado e aceitável que este número seja grande.
+      </li>
+    </ul>
+  </li>
+
+  <li>ANIMATION_START
+    <ul>
+      <li>A marcação de data e hora em que as animações registradas com Choreographer foram executadas.
+      </li>
+
+      <li>Ao olhar para o tempo entre isto e PERFORM_TRANVERSALS_START,
+ é possível determinar o tempo levado para avaliar todos os animadores
+ (ObjectAnimator, ViewPropertyAnimator e Transitions sendo as mais comuns) que estão sendo executados.
+      </li>
+
+      <li>Se este número for alto (&gt; 2 ms), verifique se o aplicativo gravou qualquer animador
+ personalizado ou quais campos de ObjectAnimators estão animando
+ e certifique-se de que eles sejam adequados para uma animação.
+      </li>
+
+      <li>Para saber mais sobre Choreographer, assista ao vídeo
+ <a href="https://developers.google.com/events/io/sessions/325418001">Para melhor ou pior</a>.
+      </li>
+    </ul>
+  </li>
+
+  <li>PERFORM_TRAVERSALS_START
+    <ul>
+      <li>Se você subtrair o DRAW_START deste valor, será possível extrair o tempo que as fases de medida e layout
+ levaram para serem concluídas (observação: durante uma rolagem ou animação,
+ espera-se que este valor seja próximo a zero).
+      </li>
+
+      <li>Para saber mais sobre as fases de medida e layout do pipeline de renderização,
+ assista ao vídeo <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">
+Invalidações, layouts e desempenho</a>
+      </li>
+    </ul>
+  </li>
+
+  <li>DRAW_START
+    <ul>
+      <li>O horário em que a fase de desenho de performTraversals foi iniciada. Este é o ponto inicial
+ do registro de listas de exibição de vistas que foram invalidadas.
+      </li>
+
+      <li>O tempo entre isto e SYNC_START é o tempo levado para chamar View.draw()
+ em todas as vistas invalidadas na árvore.
+      </li>
+
+      <li>Para obter mais informações sobre o modelo de desenho, assista aos vídeos <a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">Aceleração de hardware</a>
+ ou <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">
+ Invalidações, layouts e desempenho</a>
+      </li>
+    </ul>
+  </li>
+
+  <li>SYNC_START
+    <ul>
+      <li>O horário em que a fase de sincronização do desenho foi iniciada.
+      </li>
+
+      <li>Se o tempo entre isto e ISSUE_DRAW_COMMANDS_START for substancial (aproximadamente &gt; 0,4ms),
+ geralmente indicará que vários Bitmaps novos que foram desenhados deverão
+ ser enviados para o GPU.
+      </li>
+
+      <li>Para entender mais sobre a fase de sincronização, assista ao vídeo <a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">
+Renderização de GPU de perfil</a>
+      </li>
+    </ul>
+  </li>
+
+  <li>ISSUE_DRAW_COMMANDS_START
+    <ul>
+      <li>O horário em que o renderizador de hardware começou a emitir comandos de desenho para a GPU.
+      </li>
+
+      <li>O tempo entre isto e FRAME_COMPLETED fornece uma breve ideia da quantidade de trabalho de GPU
+ que o aplicativo está produzindo. Problemas com excesso ou efeitos de renderização
+ ineficientes são exibidos aqui.
+      </li>
+    </ul>
+  </li>
+
+  <li>SWAP_BUFFERS
+    <ul>
+      <li>O horário em que o eglSwapBuffers foi chamado, relativamente desinteressante
+ fora do trabalho da plataforma.
+      </li>
+    </ul>
+  </li>
+
+  <li>FRAME_COMPLETED
+    <ul>
+      <li>Tudo feito! O tempo total gasto trabalhando neste quadro pode ser calculando
+ realizando FRAME_COMPLETED - INTENDED_VSYNC.
+      </li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>
+  É possível usar estes dados de várias formas. Uma visualização simples mas útil é o histograma
+ exibindo a distribuição dos tempos dos quadros (FRAME_COMPLETED - INTENDED_VSYNC)
+ em diferentes espaços de latência. Consulte a figura abaixo. Este gráfico mostra brevemente que a maioria
+ dos quadros estavam bons — bem abaixo do limite de 16 ms (representado em vermelho) —,
+ mas que alguns quadros estavam bem acima do limite. Podemos verificar as alterações neste histograma
+ com o tempo para encontrar as mudanças indiscriminadas ou novas exceções sendo criadas. Também é possível colocar em gráfico a latência de entrada,
+ o tempo gasto no layout ou outras medidas interessantes com base
+ nas várias marcações de data e hora nos dados.
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-framestats.png">
+
+
+<h3 id="timing-dump">Despejo de precisão de quadro simples</h3>
+
+<p>
+  Se a <strong>renderização de GPU de perfil</strong> for definida para <strong>em adb shell dumpsys gfxinfo</strong>
+ nas opções de desenvolvedor, o comando <code>adb shell dumpsys gfxinfo</code> emitirá informações
+ de precisão para os 120 quadros mais recentes, divididas em algumas categorias
+ com valores separados por guias. Estes dados podem ser úteis para indicar quais partes do pipeline
+ de desenho podem estar lentas em um nível alto.
+</p>
+
+<p>
+  Semelhante às <a href="#fs-data-format">estatísticas de quadro</a> acima,
+ basta colá-los na ferramenta de planilha de sua escolha ou coletá-los e analisá-los
+ com um script. O gráfico a seguir exibe um detalhamento de onde os vários quadros produzidos
+ pelo aplicativo gastaram o tempo.
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
+
+<p>
+  O resultado de executar gfxinfo, copiar a saída, colá-lo no aplicativo de planilha
+ e gerar um gráfico dos dados como barras empilhadas.
+</p>
+
+<p>
+  Cada barra vertical representa um quadro da animação; sua altura representa a quantidade
+ de milissegundos para calcular este quadro de animação. Cada segmento colorido da barra
+ representa um estágio diferente do pipeline de renderização para que você possa ver que partes do aplicativo
+ podem estar criando um afunilamento. Para obter mais informações sobre o entendimento do pipeline
+ de renderização e como otimizá-lo, assista ao vídeo <a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">
+Invalidações, layouts e desempenho</a>.
+</p>
+
+
+<h3 id="collection-window">Controlar janela de coleta de estatísticas</h3>
+
+<p>
+  As precisões de quadro simples e estatísticas de quadro coletam dados
+ em um período muito curto — cerca de dois segundos de renderização. Para controlar este período de forma precisa — por exemplo,
+ restringir os dados para uma animação em particular —, é possível redefinir
+ todos os contadores e agregar as estatísticas coletadas.
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
+</pre>
+
+<p>
+  Isto também pode ser usado em conjunto com os próprios comandos de despejo para coletar
+ e redefinir em uma cadência regular, capturando períodos de menos de dois segundos de quadros
+ continuamente.
+</p>
+
+
+<h3 id="diagnose">Diagnosticar regressões de desempenho</h3>
+
+<p>
+  A identificação de regressões é uma boa primeira etapa para rastrear os problemas
+ e manter o bem-estar do aplicativo. No entanto, o dumpsys identifica apenas a existência
+ e a gravidade relativa dos problemas. Ainda é necessário diagnosticar a causa particular dos problemas
+ de desempenho e encontrar maneiras adequadas de resolvê-los. Para isso, é altamente recomendado
+ o uso da ferramenta <a href="{@docRoot}tools/help/systrace.html">systrace</a>.
+</p>
+
+
+<h3 id="resources">Recursos adicionais</h3>
+
+<p>
+  Para obter mais informações sobre como o pipeline de renderização do Android funciona,
+ problemas comuns que podem ser encontrados e como resolvê-los,
+ alguns dos seguintes recursos podem ser úteis:
+</p>
+
+<ul>
+  <li>Desempenho de renderização 101
+  </li>
+  <li>Por que 60 qps?
+  </li>
+  <li>GPU e IU do Android
+  </li>
+  <li>Invalidações, layouts e desempenho
+  </li>
+  <li>Análise do desempenho de IU com Systrace
+  </li>
+</ul>
+
+
+<h2 id="automate">Automatizar teste de desempenho da IU</h2>
+
+<p>
+  Uma abordagem para o teste de desempenho da IU é fazer com que um testador humano
+ realize uma série de operações de usuário no aplicativo-alvo e procure visualmente problemas
+ ou gaste uma grande quantidade de tempo usando uma abordagem de ferramenta para encontrá-los. No entanto, esta abordagem manual
+ é repleta de riscos: a habilidade humana de notar alterações na taxa de quadros varia tremendamente,
+ além de consumir tempo, ser tedioso e propenso a erros.
+</p>
+
+<p>
+  Uma abordagem mais eficiente é registrar e analisar as métricas de desempenho essenciais
+ dos testes de IU automatizados. O Android M Developer Preview inclui novas capacidades de registro que facilitam
+ a determinação da quantidade e da gravidade de erros nas animações do aplicativo
+ e que podem ser usadas para compilar um processo rigoroso para determinar o desempenho atual
+ e rastrear os futuros objetivos de desempenho.
+</p>
+
+<p>
+  Este artigo mostra uma abordagem recomendada para usar estes dados para automatizar
+ o teste de desempenho.
+</p>
+
+<p>
+  Ele é geralmente dividido em duas ações principais. Primeiro: identificar o que está testando
+ e como será testado. Segundo: configuração e manutenção
+ de um ambiente de teste automatizado.
+</p>
+
+
+<h3 id="ui-tests">Configurar de testes da IU</h3>
+
+<p>
+  Antes de iniciar o teste automatizado, é importante determinar algumas decisões de alto nível
+ para entender corretamente o espaço de teste e as possíveis necessidades.
+</p>
+
+<h4>
+  Identificar principais animações/fluxos a testar
+</h4>
+
+<p>
+  Lembre-se que um desempenho ruim é mais visível aos usuários quando
+ interrompe uma animação suave. Portanto, ao identificar que tipos de ações de IU serão testadas, é útil se concentrar
+ nas animações principais que os usuários veem
+ ou nas mais importantes para a experiência. Por exemplo, eis alguns cenários comuns que pode ser útil identificar:
+</p>
+
+<ul>
+  <li>Rolagem de um ListView ou RecyclerView principal
+  </li>
+
+  <li>Animações durante ciclos de espera assíncrona
+  </li>
+
+  <li>Qualquer animação que possa ter manipulação ou carregamento de bitmap
+  </li>
+
+  <li>Animações com mistura alpha
+  </li>
+
+  <li>Desenho de vista personalizada com Canvas
+  </li>
+</ul>
+
+<p>
+  Trabalhe com engenheiros, designers, e gerentes de produto em sua equipe para priorizar
+ as animações de produto essenciais para a cobertura de teste.
+</p>
+
+<h4>
+  Defina os futuros objetivos e faça um rastreamento
+</h4>
+
+<p>
+  De um alto nível, talvez seja essencial identificar os objetivos específicos de desempenho
+ e concentrar-se em escrever testes e coletar dados. Por exemplo:
+</p>
+
+<ul>
+  <li>Quer apenas iniciar o rastreamento de desempenho de IU pela primeira vez para aprender mais?
+  </li>
+
+  <li>Quer evitar regressões que possam ser introduzidas no futuro?
+  </li>
+
+  <li>Está com 90% de quadros suaves hoje e deseja chegar a 98% neste trimestre?
+  </li>
+
+  <li>Está com 98% de quadros suaves e não quer regredir?
+  </li>
+
+  <li>O seu objetivo é aprimorar o desempenho em dispositivos de baixo nível?
+  </li>
+</ul>
+
+<p>
+  Em todos esses casos, você optará pelo rastreamento histórico, que exibe o desempenho
+ entre várias versões do aplicativo.
+</p>
+
+<h4>
+  Identificar dispositivos para realizar testes
+</h4>
+
+<p>
+  O desempenho do aplicativo varia dependendo do dispositivo em que está sendo executado. Alguns dispositivos podem
+ conter menos memória, GPUs menos eficientes ou chips de CPU mais lentos. Isto significa que as animações que podem
+ ter um bom desempenho em um conjunto de hardwares podem não ter o mesmo desempenho em outras,
+ podendo ser o resultado de um afunilamento em uma parte diferente do pipeline. Portanto, para contabilizar
+ esta variação em o que o usuário pode ver, escolha uma variação de dispositivos
+ para executar os testes: dispositivos e tablets de alto e baixo nível etc. Procure variações no desempenho de CPU,
+ RAM, densidade da tela, tamanho etc. Testes que passam em dispositivos de alto nível
+ podem falhar em dispositivos de baixo nível.
+</p>
+
+<h4>
+  Estruturas básicas para teste de IU
+</h4>
+
+<p>
+  Conjuntos de ferramenta, como <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> e
+ <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a>,
+ são integrados para ajudar na automatização da ação de um usuário movendo-se pelo aplicativo. São estruturas simples
+ que imitam a interação de usuário no dispositivo. Para usar estas estruturas,
+ você cria efetivamente scripts únicos que executam um conjunto
+ de ações de usuário e reproduzem-nas no próprio dispositivo.
+</p>
+
+<p>
+  Ao combinar estes testes automatizados, juntamente com <code>dumpsys gfxinfo</code>, é possível criar
+ rapidamente um sistema reproduzível que permite a execução de um teste e a medição das informações
+ de desempenho desta condição em particular.
+</p>
+
+
+<h3 id="automated-tests">Configurar testes automatizados da IU</h3>
+
+<p>
+  Com a habilidade de executar um teste de IU e um pipeline para coletar
+ os dados de um único teste, a próxima etapa importante é adotar uma estrutura que pode executar
+ esse teste várias vezes, em vários dispositivos, e agregar os dados de desempenho resultados
+ para futuras análises da equipe de desenvolvimento.
+</p>
+
+<h4>
+  Uma estrutura para automatização de testes
+</h4>
+
+<p>
+  Vale observar que as estruturas de teste de IU (como o <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>)
+ são executadas diretamente no emulador/dispositivo alvo. Enquanto as informações de coleta de desempenho feita
+ pelo <em>dumpsys gfxinfo</em> forem direcionadas por uma máquina hospedeira, envie comandos pelo ADB. Para ajudar a transmitir
+ a automatização dessas entidades separadas, a estrutura <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a>
+ foi desenvolvida: um sistema de script que é executado na máquina host que pode
+ emitir comandos para um conjunto de dispositivos conectados, bem como receber dados deles.
+</p>
+
+<p>
+  A compilação de um conjunto de scripts para uma automatização adequada de teste de desempenho de IU,
+ no mínimo, deve ser capaz de utilizar o MonkeyRunner para realizar as seguintes tarefas:
+</p>
+
+<ul>
+  <li>Carregar e iniciar um APK desejado para um emulador ou dispositivo alvo.
+  </li>
+
+  <li>Iniciar um teste de IU do UI Automator e permitir que ele seja executado.
+  </li>
+
+  <li>Coletar informações de desempenho por meio de <em>dumpsys gfxinfo</em><em>.</em>
+  </li>
+
+  <li>Agregar informações e exibi-las de forma útil para o desenvolvedor.
+  </li>
+</ul>
+
+
+<h3 id="triage">Triagem e resolução de problemas observados</h3>
+
+<p>
+  Quando os padrões ou regressões dos problemas forem identificados, a próxima etapa
+ é identificar e aplicar a resolução. Se a estrutura de teste automatizado preservar o detalhamento preciso para os quadros,
+ ela poderá ajudar na inspeção de alterações de layout/código suspeitos recentes (em caso
+ de regressão) ou reduzir a parte do sistema que você está analisando ao alternar
+ para a investigação manual. Para a investigação manual, <a href="{@docRoot}tools/help/systrace.html">systrace</a> é um ótimo lugar para começar,
+ exibindo as informações de precisão sobre cada estágio do pipeline de renderização,
+ cada encadeamento e núcleo no sistema, bem como quaisquer marcadores de evento personalizados definidos.
+</p>
+
+<h4>
+  Geração de perfis adequada de precisões temporais
+</h4>
+
+<p>
+  É importante observar as dificuldades em obter e medir as precisões
+ do desempenho de renderização. Esses números são, por natureza, não determinísticos e frequentemente
+ oscilam dependendo do estado do sistema, da quantidade de memória disponível,
+ da diminuição termal e da última vez em que a luz do sol atingiu a sua área da Terra. Ou seja, é possível executar
+ o mesmo teste duas vezes e receber números levemente diferentes
+ que podem ser muito próximos, mas não idênticos.
+</p>
+
+<p>
+  A coleta e a geração de perfil de dados nesta maneira significa executar o mesmo teste,
+ várias vezes, e acumular os resultados como uma média ou valor mediano (para a simplicidade,
+ chamemos de "lote"). Isto fornece uma aproximação do desempenho do teste,
+ já que precisões exatas não são necessárias.
+</p>
+
+<p>
+  Os lotes podem ser usados entre alterações de códigos para verificar o impacto relativo
+ dessas alterações no desempenho. Se a taxa de quadros média para o lote antes da alteração
+ for maior do que o lote após a alteração, então o resultado de desempenho wrt geral será um sucesso
+ para esta alteração em particular.
+</p>
+
+<p>
+  Isto significa que qualquer teste de IU automatizado feito deve levar este conceito
+ em consideração, bem como quaisquer anomalias que possam ocorrer durante um teste. Por exemplo,
+ se o desempenho do aplicativo repentinamente cair devido a algum problema do dispositivo
+ (que não tenha sido causado pelo aplicativo), então talvez seja necessário executar
+ o lote novamente para obter precisões menos caóticas.
+</p>
+
+<p>
+  Logo, quantas vezes deve-se realizar um teste antes de as medidas terem algum sentido? 10 vezes deve ser o mínimo,
+ com números altos como 50 ou 10 oferecendo resultados mais precisos
+ (é claro que se deve levar em consideração o tempo para ter mais precisão).
+</p>
diff --git a/docs/html-intl/intl/ru/about/versions/lollipop.jd b/docs/html-intl/intl/ru/about/versions/lollipop.jd
index 2f814be..a69872e 100644
--- a/docs/html-intl/intl/ru/about/versions/lollipop.jd
+++ b/docs/html-intl/intl/ru/about/versions/lollipop.jd
@@ -2,20 +2,22 @@
 
 @jd:body
 
+<div style="float:right;">
+  <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x">
+</div>
+
+<p>Представляем вам Android 5.0 Lollipop&nbsp;– самую новую и продвинутую версию операционной системы Android!</p>
+
+<p>В этой версии реализовано множество новых функций для пользователей и тысячи API для разработчиков. Android теперь используется не только для телефонов, планшетов и носимых устройств, но также для телевизоров и автомобилей.</p>
+
+<p>Подробнее о новых API для разработчиков см. в соответствующем <a href="{@docRoot}about/versions/android-5.0.html">обзоре</a>. Если же вас интересует информация об Android 5.0 для пользователей, посетите сайт <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>.</p>
 
 
-
-
-
-
-  <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0">
-    <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" >
-  </div>
-
-  <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;">
-  <div class="col-4 normal-links highlights" style="font-size:12px;">
-    <h3 id="thisd" >Ключевые функции для разработчиков</h3>
-    <ul style="list-style-type:none;">
+<div id="qv-wrapper">
+<div id="qv">
+    <h2>Ключевые функции для разработчиков</h2
+  <ol>
+      <ul style="list-style-type:none;">
   <li><a href="#Material">Material Design</a></li>
   <li><a href="#Perf">Оптимизация и эффективность</a></li>
   <li><a href="#Notifications">Уведомления</a></li>
@@ -31,22 +33,11 @@
   <li><a href="#WebView">Chromium WebView</a></li>
   <li><a href="#Accessibility">Специальные возможности и способы ввода</a></li>
   <li><a href="#Battery">Инструменты для создания приложений с экономией энергии</a></li>
-    </ul>
+   </ol>
   </div>
 </div>
 
 
-
-
-
-
-
-<p>Представляем вам Android 5.0 Lollipop&nbsp;– самую новую и продвинутую версию операционной системы Android!</p>
-
-<p>В этой версии реализовано множество новых функций для пользователей и тысячи API для разработчиков. Android теперь используется не только для телефонов, планшетов и носимых устройств, но также для телевизоров и автомобилей.</p>
-
-<p>Подробнее о новых API для разработчиков см. в соответствующем <a href="{@docRoot}about/versions/android-5.0.html">обзоре</a>. Если же вас интересует информация об Android 5.0 для пользователей, посетите сайт <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>.</p>
-
 <h2 id="Material">Material Design</h2>
 
 <p>В Android 5.0 реализована концепция <a href="http://www.google.com/design/spec">Material Design</a>. Расширенный набор инструментов в интерфейсе позволяет c легкостью использовать новые возможности в приложениях.  </p>
@@ -74,7 +65,7 @@
 </div>
 
 
-<p>Для кнопок, флажков и других элементов управления в приложении можно создать пульсирующую анимацию. 
+<p>Для кнопок, флажков и других элементов управления в приложении можно создать пульсирующую анимацию.
 
 <p>Вы также можете определять векторные области рисования в XML и по-разному их анимировать. Векторные области масштабируются без потери разрешения, поэтому они идеально подходят для одноцветных значков в приложениях.</p>
 
diff --git a/docs/html-intl/intl/ru/index.jd b/docs/html-intl/intl/ru/index.jd
index eb7ffe4..f59a136 100644
--- a/docs/html-intl/intl/ru/index.jd
+++ b/docs/html-intl/intl/ru/index.jd
@@ -1,93 +1,91 @@
 fullpage=true
-page.viewport_width=970
 excludeFromSuggestions=true
-page.metaDescription=Официальный сайт для разработчиков Android. На этом сайте вы найдете пакеты Android SDK и документацию для дизайнеров и разработчиков приложений.
+page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
 page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />
 
 @jd:body
 
-<div class="home-new-carousel-1">
-  <div class="fullscreen-carousel-content">
-    <div class="vcenter">
-      <div class="wrap clearfix">
+<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel">
+</div> -->
+<section class="dac-hero-carousel">
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
+<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> -->
+<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;">
+<a href="/preview/index.html">
+  <div class="wrap" style="max-width:1100px;">
+    <div class="cols dac-hero-content">
+      <div class="col-10of16 col-push-6of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png"
+             srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-6of16 col-pull-10of16">
+        <div class="dac-hero-tag"></div>
 
-      <div class="landing-section-header">
-            <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div>
-            <div class="col-5" style=" margin-top:70px ">
-            <h3 stye="font-weight:300;">Android 5.0 Lollipop</h3>
-            <p>Обновление Android 5.0 содержит различные новые возможности для приложений: уведомления на заблокированном экране, совершено новый API камеры, OpenGL ES 3.1, новый интерфейс Material Design и множество других функций.</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">Подробнее</a>
-            </div>
-          </div>
-          </div>
-        </div>
-       <h2>&nbsp;</h2>
-        <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16
-        no-section" data-query="collection:index/primary" data-resourcestyle="card"
-        data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget -->
-      </div> <!-- end .wrap -->
-    </div> <!-- end .vcenter -->
-  </div> <!-- end .fullscreen-carousel-content -->
-</div> <!-- end .fullscreen-carousel -->
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">Подготовьтесь к выходу следующей версии
+        платформы Android. Протестируйте ваши приложения на устройствах Nexus
+        5, 6, 9 и Player. </p>
 
-<div class="actions-bar" style="margin-top:20px">
-  <div class="wrap">
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Итак, приступим!
+        </a>
+      </div>
+    </div>
+  </div>
+</a>
+</article></section>
+
+<div 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">Пакет SDK</a></div>
-      <div><a href="{@docRoot}samples/index.html">Примеры</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">Видеоролики</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">Управление приложениями</a></div>
+      <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="//www.youtube.com/user/androiddevelopers">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Watch Videos
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
 
 
-<div class="landing-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
+<section class="dac-section dac-section-light" id="build-apps"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    Resources to get you started with designing and developing for Android.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/primary"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-            <div class="landing-h1" style="margin-top:0px">ОС для многоэкранных устройств</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          Сотни миллионов мобильных устройств по всему миру работают под управлением операционной системы Android. <br>
+<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel">
+</div>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">ОС для многоэкранных устройств</h1>
+    <div class="dac-section-subtitle">
+      Сотни миллионов мобильных устройств по всему миру работают под управлением
+      операционной системы Android. <br>
           А теперь эта система радует и обладателей устройств других форм-факторов.
-        </div>
-      </div>
-      <div class="landing-body" style="margin-top: 50px;">
-        <div class="landing-breakout cols">
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
-              <p class="landing-small">
-                Предоставляйте пользователям информацию прямо на ходу, когда бы им это ни потребовалось.
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">Подробнее об Android Wear</a>
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png">
-              <p class="landing-small">
-                Создавайте приложения для использования на большом экране телевизора и разрабатывайте динамичный контент.
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">Подробнее об Android TV</a>
-
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png">
-              <p class="landing-small">
-                Автомобильные мультимедийные системы — прекрасная возможность расширить список поддерживаемых устройств для музыкальных приложений.
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">Подробнее об Android Auto</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+    </div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/multiscreen"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html-intl/intl/ru/preview/backup/index.jd b/docs/html-intl/intl/ru/preview/backup/index.jd
new file mode 100644
index 0000000..1f9dacc
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/backup/index.jd
@@ -0,0 +1,327 @@
+page.title=Автоматическое резервное копирование для приложений
+page.tags=backup, previewresources, androidm
+page.keywords=резервное копирование, автоматическое резервное копирование, предварительная версия
+page.image=images/cards/card-auto-backup_2x.png
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Содержание документа</h2>
+      <ol>
+        <li><a href="#overview">Обзор</a></li>
+        <li><a href="#configuring">Настройка резервного копирования данных</a></li>
+        <li><a href="#testing">Тестирование конфигурации резервного копирования</a></li>
+        <li><a href="#issues">Известные проблемы</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Пользователи зачастую тратят очень много времени и усилий на создание данных и настройку параметров в приложениях.
+ Поэтому одна из важнейших задач при разработке платформы — сделать так, чтобы пользователь не терял свои данные, если его устройство вышло из строя или он решил перейти на новое.
+ Устройства под управлением Android M Preview
+отлично справляются с этой задачей, автоматически выполняя резервное копирование данных
+приложения в Google Drive. Если пользователь перейдет на новое устройство, данные приложений будут автоматически перенесены
+на него.
+</p>
+
+<p>
+  Автоматическое резервное копирование предусмотрено для всех приложений, установленных на устройствах под управлением Android M Preview. При этом
+вам не нужно добавлять в приложение дополнительный код. Система сама предложит пользователю возможность включить или отключить
+автоматическое резервное копирование данных. Вы также можете указать, для каких данных приложения следует создавать резервные копии, а для каких — нет.
+</p>
+
+<p>
+  В этой статье описывается новое поведение системы и порядок указания данных приложения,
+подлежащих резервному копированию.
+</p>
+
+<h2 id="overview">Обзор</h2>
+
+<p>
+  При автоматическом резервном копировании данные, создаваемые в вашем приложении на устройстве пользователя, отпраляются в
+Google Drive пользователя и происходит их шифрование, что позволяет предотварить потерю данных. Хранилище для ваших данных предоставляется совершенно
+бесплатно. Более того, данные резервного копирования засчитываются вне личной квоты пользователя на использование ресурсов Google Drive. В период использования M Developer Preview
+пользователи могут хранить в облаке до 25 МБ данных для каждого приложения Android.
+</p>
+
+<p>
+  Автоматическое резервное копирование выполняется каждые 24 часа, когда устройство не используется, находится в режиме зарядки и подключено к сети
+Wi-Fi. При соблюдении необходимых условий служба диспетчера резервного копирования отправляет все доступные резервные копии данных
+в облако. Когда пользователь переходит на использование нового устройства или удаляет и заново устанавливает
+приложение, для которого имеется резервная копия, выполняется операция восстановления и резервные копии данных переносятся в каталог
+переустановленного приложения.
+</p>
+
+<p class="note">
+  <strong>Примечание.</strong> Если ваше приложение использует устаревшую
+<a href="{@docRoot}google/backup/index.html">службу резервного копирования Android</a>, то
+вместо нового поведения системы будет применяться существующий механизм резервного копирования.
+</p>
+
+
+<h3 id="auto-exclude">Автоматически исключаемые файлы данных</h3>
+
+<p>
+  Не все данные приложения подлежат резервному копированию. В частности, временные файлы и кэш сохранять не нужно. Поэтому служба
+автоматического резервного копирования по умолчанию исключает из этого процесса определенные файлы данных:
+</p>
+
+<ul>
+  <li>файлы в каталогах, на которые ссылаются методы {@link android.content.Context#getCacheDir
+getCacheDir()} и {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()};
+
+  </li>
+
+  <li>файлы во внешнем хранилище, кроме файлов, находящихся в каталогах, на которые ссылается метод
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()};
+
+  </li>
+
+  <li>файлы в каталоге, на который ссылается метод
+{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()}.
+  </li>
+</ul>
+
+<h2 id="configuring">Настройка резервного копирования данных</h2>
+
+<p>
+  Резервные копии создаются для данных, создаваемых любым приложением, которое установлено на устройстве под управлением M Preview, исключение составляют только 
+файлы, обозначенные в предыдущем разделе. Если вы хотите самостоятельно определить,
+какие данные вашего приложения подлежат резервному копированию, а какие нет, это можно сделать с помощью соответствующих настроек в манифесте приложения.
+</p>
+
+<h3 id="include-exclude">Включение или исключение данных</h3>
+
+<p>
+  В зависимости о того, какие данные требуются вашему приложению и как вы их сохраняете, вам может потребоваться задать определенные правила
+для включения или исключения определенных файлов или каталогов. Служба автоматического резервного копирования
+поддерживает настройку таких правил посредством XML-файла конфигурации и
+манифеста приложения. В манифесте приложения можно указать файл конфигурации схемы резервного копирования, как показано в примере
+ниже.
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>
+  В этом примере кода атрибут <code>android:fullBackupContent</code> задает XML-файл,
+расположенный в каталоге <code>res/xml/</code> проекта приложения, который называется
+<code>mybackupscheme.xml</code>. В этом файле конфигурации содержатся правила резервного
+копирования файлов. В следующем примере кода демонстрируется файл конфигурации, в котором из процесса резервного копирования исключается определенный
+файл:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;full-backup-content&gt;
+    &lt;exclude domain="database" path="device_info.db"/&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  В этом примере конфигурации резервного копирования из операции исключается только определенный файл базы данных.
+  Для всех остальных файлов будут создаваться резервные копии.
+</p>
+
+<h4>Синтаксис конфигурации резервного копирования</h4>
+
+<p>
+  Служба резервного копирования предоставляет вам возможность указать, какие файлы следует включить в процесс резервного копирования или
+исключить из него. Синтаксис XML-файла конфигурации резервного копирования данных следующий:
+</p>
+
+<pre>
+&lt;full-backup-content&gt;
+    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  С помощью перечисленных ниже элементов и атрибутов можно указать файлы, которые вы хотите включить в процесс резервного копирования или исключить из
+него:
+</p>
+
+<ul>
+  <li>
+  <code>&lt;include&gt;</code>: используйте этот элемент, если хотите, чтобы система не создавала резервные копии всех данных в вашем приложении, как это происходит по умолчанию, а копировала только определенный набор данных.
+ Если указан тег
+<code>&lt;include&gt;</code>, система создает резервные копии <em>только для ресурсов</em>
+с этим элементом.
+  </li>
+
+  <li>
+  <code>&lt;exclude&gt;</code>: используйте этот элемент, чтобы указать набор ресурсов, которые
+следует исключить из процесса резервного копирования. В таком случае система будет создавать резервные копии всех данных в приложении, кроме ресурсов с этим
+элементом;
+  </li>
+
+  <li>
+  <code>domain.</code>: тип ресурса, который необходимо включить в резервное копирование или исключить из него. Допустимые
+значения для этого атрибута могут быть следующие:
+  </li>
+
+  <li style="list-style: none">
+  <ul>
+    <li>
+    <code>root</code>: указывает на то, что ресурс находится в корневом каталоге приложения;
+    </li>
+
+    <li>
+    <code>file</code>: соответствует ресурсу в каталоге, возвращаемом методом
+{@link android.content.Context#getFilesDir getFilesDir()};
+    </li>
+
+    <li>
+    <code>database</code>: соответствует базе данных, возвращаемой методом
+{@link android.content.Context#getDatabasePath getDatabasePath()} или классом
+{@link android.database.sqlite.SQLiteOpenHelper};
+    </li>
+
+    <li>
+    <code>sharedpref</code>: соответствует объекту {@link android.content.SharedPreferences},
+возвращаемому методом
+{@link android.content.Context#getSharedPreferences getSharedPreferences()};
+    </li>
+
+    <li>
+    <code>external</code>: указывает на то, что ресурс находится во внешнем хранилище, и соответствует
+файлу в каталоге, возвращаемом методом
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()};
+    </li>
+
+    <li>
+    <code>path</code>: путь к ресурсу, который необходимо включить в резервное копирование или исключить
+из него.
+    </li>
+  </ul>
+  </li>
+</ul>
+
+
+<h3 id="prohibit">Запрет резервного копирования данных</h3>
+
+<p>
+  Можно запретить автоматическое резервное копирование любых данных приложения. Для этого в манифесте в элементе приложения задайте для атрибута
+<code>android:allowBackup</code> значение<code>false</code>.
+ Как это делается, видно в примере кода ниже:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:allowBackup="false"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="testing">Тестирование конфигурации резервного копирования</h2>
+
+<p>
+  После создания конфигурации резервного копирования необходимо ее протестировать и убедиться, что ваше приложение сохраняет данные и впоследствии
+они могут быть должным образом восстановлены.
+</p>
+
+
+<h4>Включение журнала резервного копирования</h4>
+
+<p>
+  Чтобы упростить для себя анализ обработки вашего XML-файла функцией резервного копирования, прежде чем приступать к тестированию,
+включите ведение журнала:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
+</pre>
+
+<h4>Тестирование резервного копирования</h4>
+
+<p>Чтобы вручную запустить процесс резервного копирования, сначала активируйте диспетчер резервного копирования, выполнив следующую
+команду:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr run
+</pre>
+
+<p>
+  Затем вручную выполните резервное копирование вашего приложения с помощью следующей команды, указав название
+пакета в виде параметра <code>&lt;PACKAGE&gt;</code>:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
+
+
+<h4>Тестирование восстановления</h4>
+
+<p>
+  Чтобы вручную запустить процесс восстановления после резервного копирования данных приложения, выполните следующую команду, указав название
+пакета в виде параметра <code>&lt;PACKAGE&gt;</code>:
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr restore &lt;PACKAGE&gt;
+</pre>
+
+<p class="warning">
+  <b>Предупреждение.</b> При выполнении этого действия перед операцией
+восстановления работа приложения будет остановлена и все его данные удалены.
+</p>
+
+<p>
+  Чтобы запустить процесс восстановления, удалите ваше приложение и снова установите его. Данные
+приложения будут автоматически восстановлены из облака сразу по завершении установки.
+</p>
+
+
+<h4>Устранение неполадок резервного копирования</h4>
+
+<p>
+  При возникновении проблем можно стереть резервные копии данных и все связанные с ними метаданные. Для этого 
+отключите и повторного включите резервное копирование в разделе <strong>Настройки &gt; Резервное копирование</strong>, восстановите заводские настройки устройства или выполните
+следующую команду:
+</p>
+
+<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
+
+<p>
+  Перед значением <code>&lt;TRANSPORT&gt;</code> должен быть префикс <code>com.google.android.gms</code>.
+  Чтобы получить список транспорта, выполните следующую команду:
+</p>
+
+<pre>$ adb shell bmgr list transports</pre>
+
+<h2 id="issues">Известные проблемы</h2>
+
+<p>Ниже перечислены известные проблемы в работе службы автоматического резервного копирования.</p>
+
+<ul>
+  <li><strong>Google Cloud Messaging</strong>
+– существует проблема с приложениями, использующими Google Cloud Messaging для отправки push-уведомлений. Она связана с тем,
+что при резервном копировании кода регистрации, возвращаемого Google Cloud Messaging, может нарушиться отправка
+push-уведомлений для восстановленного приложения. Важно запросить у API-интерфейса новый код
+регистрации после установки приложения на новое устройство, что не выполняется в случае резервного копирования
+старого кода регистрации. Чтобы избежать этого, исключите код регистрации из списка файлов
+для резервного копирования.
+  </li>
+</ul>
diff --git a/docs/html-intl/intl/ru/preview/download.jd b/docs/html-intl/intl/ru/preview/download.jd
new file mode 100644
index 0000000..13872d1
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/download.jd
@@ -0,0 +1,359 @@
+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/app-linking.jd b/docs/html-intl/intl/ru/preview/features/app-linking.jd
new file mode 100644
index 0000000..f991717
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/features/app-linking.jd
@@ -0,0 +1,123 @@
+page.title=Связи приложений
+page.image=images/cards/card-app-linking_2x.png
+page.keywords=связывание приложений, прямые ссылки, намерения
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Содержание документа</h2>
+      <ol>
+        <li><a href="#web-assoc">Объявление связи с веб-сайтом</a></li>
+        <li><a href="#verfy-links">Запрос проверки связи приложений</a></li>
+        <li><a href="#user-manage">Настройки связи приложений</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Система намерений Android представляет собой гибкий механизм, позволяющий приложениям обрабатывать контент и запросы.
+  Многие приложения могут объявлять в своих фильтрах намерений соответствующие шаблоны URI. При нажатии пользователем на веб-ссылку
+, у которой нет обработчика запуска по умолчанию, платформа может выдать ему диалоговое окно со списком доступных
+ приложений, объявивших соответствующие фильтры намерений.
+</p>
+
+<p>
+  В Android M Developer Preview представлена поддержка связей приложений. Она выгодно отличается от существующих методов обработки ссылок,
+ предоставляя разработчикам возможность связывать приложение с принадлежащим им веб-доменом. Благодаря этой связи
+платформа автоматически, не спрашивая у пользователя, определит приложение, которое следует использовать по умолчанию для обработки определенной
+веб-ссылки.
+</p>
+
+
+<h2 id="web-assoc">Объявление связи с веб-сайтом</h2>
+
+<p>
+  Чтобы установить связь, владельцу сайта следует объявить связь с приложением. Для этого владелец 
+размещает в домене файл JSON с именем {@code statements.json}. Местопложение файла должно быть хорошо известно.
+
+</p>
+
+<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<p class="note">
+  <strong>Примечание.</strong>
+  В период использования M Developer Preview проверка файла JSON выполняется по протоколу HTTP. В официальном
+выпуске платформы она будет осуществляться по зашифрованному протоколу HTTPS.
+</p>
+
+<p>
+  В этом файле JSON содержатся сведения о приложении Android, которое следует использовать в качестве обработчика по умолчанию для URL
+в этом домене. Для определения приложения используются следующие поля:
+</p>
+
+<ul>
+  <li>{@code package_name}: имя пакета, объявленное в манифесте приложения;</li>
+
+  <li>{@code sha256_cert_fingerprints}: контрольная сумма SHA256 сертификата, который использовался для подписи вашего приложения.
+    Чтобы сгенерировать контрольную сумму, можно выполнить следующую команду в программе Java keytool:
+    <pre>keytool -list -v -keystore my-release-key.keystore</pre>
+  </li>
+</ul>
+
+<p>
+  Ниже представлен пример содержимого и формата файла
+{@code statements.json}.
+</p>
+
+<pre>
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "<strong>&lt;package name&gt;</strong>",
+    "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+  }
+}]
+</pre>
+
+
+<h2 id="verfy-links">Запрос проверки связи приложений</h2>
+
+<p>
+  Приложение может отправить платформе запрос об автоматической проверке любых связей приложений, определенных в именах узлов в элементах данных
+его фильтров намерений, с использованием файлов {@code statements.json}, размещенных в
+соответствующих веб-доменах. Чтобы запросить проверку связи приложений, добавьте к каждому необходимому фильтру намерений в манифесте атрибут {@code android:autoVerify},
+как показано в следующем фрагменте кода
+манифеста:
+</p>
+
+<pre>
+&lt;activity ...&gt;
+    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+        &lt;action android:name="android.intent.action.VIEW" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>
+  Если в манифесте приложения присутствует атрибут {@code android:autoVerify}, платформа пытается
+проверить связи приложений при установке приложения. Если платформе не
+удается сделать это, приложение не выбирается в качестве предпочтительного для обработки веб-ссылок. В следующий раз, когда пользователь
+нажмет на одну из ссылок, платформа снова отобразит для него
+соответствующее диалоговое окно.
+</p>
+
+<p class="note">
+  <strong>Примечание.</strong> При тестировании существует вероятность ложных срабатываний, когда проверка завершается
+сбоем, но при этом пользователь установил в системном приложении «Настройки» ваше приложение как используемое по умолчанию при вызове поддерживаемых ссылок
+. В таком случае диалоговое окно не отображается, а ссылка ведет напрямую в ваше приложение,
+однако это происходит из-за настроек пользователя и не означает, что проверка пройдена успешно.
+</p>
+
+
+<h2 id="user-manage">Настройки связи приложений</h2>
+
+<p>
+  Пользователи могут изменить настройки связи приложений и выбрать предпочтительный для них способ обработки URL. Для просмотра связей приложений и управления ими
+можно воспользоваться системным приложением «Настройки» (в разделе <strong>Настройки &gt; Приложения &gt; Информация о приложении &gt;
+Открывать по умолчанию</strong>.
+</p>
diff --git a/docs/html-intl/intl/ru/preview/index.jd b/docs/html-intl/intl/ru/preview/index.jd
new file mode 100644
index 0000000..27adbf9
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/index.jd
@@ -0,0 +1,67 @@
+page.title=Android M Developer Preview
+page.tags="preview",
+meta.tags="preview, M preview", androidm
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">
+          Подготовьтесь к выходу следующей версии платформы Android. Протестируйте ваши приложения на устройствах Nexus 5, 6, 9 и
+Player. Узнайте о новых возможностях:&mdash; <strong>разрешениях на выполнение</strong>,
+новых функциях энергосбережения — <strong>режим «Doze»</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>
+      </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>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <h1 class="dac-section-title">Ресурсы</h1>
+  <div class="dac-section-subtitle">
+    Важная информация, которая поможет вам подготовить ваши приложения для работы в Android M.
+  </div>
+ 
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/more"
+       data-cardSizes="6x6"
+       data-maxResults="16"></div>
+
+    <ul class="dac-section-links">
+      <li class="dac-section-link">
+        <a href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          Сообщить о проблеме
+</a>
+      </li> 
+      <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
+        <span class="dac-sprite dac-auto-chevron"></span>
+        Присоединиться к сообществу в G+
+</a>
+      </li>
+    </ul>
+  </div>
+</section>
+
diff --git a/docs/html-intl/intl/ru/preview/license.jd b/docs/html-intl/intl/ru/preview/license.jd
new file mode 100644
index 0000000..fe9901b
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/license.jd
@@ -0,0 +1,143 @@
+page.title=Лицензионное соглашение
+
+@jd:body
+
+<p>
+Чтобы приступить к работе с пакетом SDK Android Preview, примите указанные ниже положения и условия. 
+Как описано ниже, обратите внимание, что это предварительная версия пакета SDK Android, которая может быть изменена и которую вы используете на свой страх и риск.  Пакет SDK Android Preview не является стабильным и может содержать ошибки и дефекты, которые могут повредить ваши компьютеры, устройства и данные.
+</p>
+
+<p>
+Это лицензионное соглашение для пакета SDK Android Preview (далее «Лицензионное соглашение»).
+</p>
+<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
+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 для разработки приложений вы обязуетесь обеспечивать конфиденциальность данных и защищать юридические права пользователей. 
+
+4.3. Вы соглашаетесь с тем, что при использовании SDK для разработки приложений для неопределенного круга пользователей вы обязуетесь обеспечивать конфиденциальность данных и защищать юридические права таких пользователей. В случае если пользователи предоставляют вам свои имена, пароли или иные данные для входа либо свои персональные сведения, вы обязуетесь уведомить пользователей о том, что такая информация будет присутствовать в вашем приложении, и вы также обязуетесь предоставить таким пользователям юридически соответствующее уведомление о конфиденциальности и средства правовой защиты. Если в вашем приложении хранится персональная или конфиденциальная информация, предоставленная пользователями, вы обязуетесь обеспечить ее надлежащую защиту. Если пользователь предоставляет вам сведения о своей учетной записи 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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/preview/samples.jd b/docs/html-intl/intl/ru/preview/samples.jd
new file mode 100644
index 0000000..f8115e7
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/samples.jd
@@ -0,0 +1,70 @@
+page.title=Примеры
+page.image=images/cards/samples-new_2x.png
+@jd:body
+
+<p>
+  Ниже представлены примеры кода для M Developer Preview. Чтобы загрузить примеры в
+Android Studio, выберите <b>File &gt; Import Samples</b>.
+</p>
+
+<p class="note">
+  <strong>Примечание.</strong> Эти проекты предназначены для использования
+в Gradle и Android Studio.
+</p>
+
+
+<h3 id="RuntimePermissions">Разрешения на выполнение</h3>
+
+<p>
+ В Android M изменился подход к использованию системных разрешений. Пользователям теперь предлагается предоставить разрешения
+во время выполнения, а не во время установки приложения. В примере ниже показано, как запрашивать такие разрешения.
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-RuntimePermissions">Загрузить с сайта GitHub</a></p>
+
+<h3 id="ConfirmCredentials">Подтверждение учетных данных</h3>
+
+<p>
+ В этом примере проиллюстрировано, как использовать учетные данные устройства для авторизации в приложении.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">Загрузить с сайта 
+GitHub</a></p>
+
+<h3 id="FingerprintDialog">Диалоговое окно авторизации по отпечатку пальца</h3>
+
+<p>
+ В этом примере показано, как распознавать зарегистрированные отпечатки пальцев для авторизации пользователя в
+приложении.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-FingerprintDialog">Загрузить с сайта GitHub</a></p>
+
+<h3 id="AutomaticBackup">Автоматическое резервное копирование для приложений</h3>
+
+<p>
+ В Android M представлена функция автоматического резервного копирования настроек приложений. В примере кода ниже показано,
+как добавить в приложение правила фильтрации для управления резервным копированием настроек.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">Загрузить с сайта GitHub</a></p>
+
+<h3 id="CameraRaw">Camera 2 RAW</h3>
+
+<p>
+  В этом примере кода можно увидеть порядок использования API-интерфейса <code>Camera2</code> для получения буферов камеры RAW и сохранения их
+в виде файлов <code>DNG</code>.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-Camera2Raw">Загрузить с сайта GitHub</a></p>
+
+<h3 id="ActiveNotification">Активные уведомления</h3>
+
+<p>
+  В примере кода ниже показано, как
+<a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a>
+может сообщить о количестве уведомлений, которое в настоящее время отображает ваше приложение.
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">Загрузить с сайта GitHub</a></p>
diff --git a/docs/html-intl/intl/ru/preview/setup-sdk.jd b/docs/html-intl/intl/ru/preview/setup-sdk.jd
new file mode 100644
index 0000000..1ffc2cd
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/setup-sdk.jd
@@ -0,0 +1,207 @@
+page.title=Настройка пакета SDK Preview
+page.image=images/cards/card-set-up_16-9_2x.png
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Содержание документа</h2>
+      <ol>
+        <li><a href="#get-as13">Загрузка Android Studio 1.3</a></li>
+        <li><a href="#get-sdk">Загрузка пакета SDK Preview</a></li>
+        <li><a href="#create-update">Создание или обновление проекта</a></li>
+        <li><a href="#setup-test">Настройка для тестирования</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>Пакет SDK M Developer Preview можно загрузить с помощью менеджера SDK Android.
+В этой статье мы исходим из того, что вы уже знакомы с разработкой приложений Android и умеете работать с
+менеджером SDK Android и создавать проекты. Тем, кто только начинает работу с
+Android, рекомендуется сначала обратиться к разделу <a href="{@docRoot}training/basics/firstapp/index.html">Создание
+первого приложения</a>.</a></p>
+
+<h2 id="get-as13">Загрузка Android Studio 1.3</h2>
+
+<p>Для работы Developer Preview лучше всего подходит Android Studio 1.3, которая, кстати,
+также является предварительной версией. Для работы с пакетом SDK Preview настоятельно рекомендуется установить предварительную версию
+Android Studio 1.3.</p>
+
+<p class="caution"><strong>Внимание!</strong> Предварительная версия Android
+Studio 1.3 (сборка Canary) по-прежнему находится на стадии разработки. Если для тестирования
+ M Developer Preview вы используете свой основной компьютер для разработки, вы можете дополнительно установить
+Android Studio для целей тестирования.</p>
+
+<p>Порядок установки предварительной версии Android Studio 1.3</p>
+
+<ol>
+  <li>Загрузите и запустите <a href="{@docRoot}tools/studio/index.html">Android
+Studio</a>.
+  </li>
+
+  <li>Откройте окно <strong>Settings</strong> (в ОС Windows для этого выберите
+<strong>File &gt; Settings</strong>). Перейдите к панели
+<strong>Appearance &amp; Behavior &gt; System
+Settings &gt; Updates</strong>.
+
+    <p class="aside">В операционной системе OSX панель <strong>Appearance &amp;
+Behavior</strong>
+находится в Android Studio в окне <strong>Preferences</strong>.</p>
+  </li>
+
+  <li> На панели <strong>Updates</strong> выберите
+<strong>Automatically check updates for: Canary Channel</strong>.
+  </li>
+
+  <li>На панели <strong>Updates</strong> выберите <strong>Check Now</strong>,
+чтобы проверить наличие актуальных обновлений для сборки Canary. При появлении соответствующего запроса загрузите
+и установите сборку.
+  </li>
+</ol>
+
+<h2 id="get-sdk">Загрузка пакета SDK Preview</h2>
+
+<p>Порядок добавления компонентов SDK Preview в среду разработки</p>
+
+<ol>
+  <li>Запустите предварительную версию Android Studio 1.3.
+  </li>
+
+  <li>Откройте окно <strong>Settings</strong> (в ОС Windows для этого выберите
+<strong>File &gt; Settings</strong>). Перейдите к панели
+<strong>Appearance &amp; Behavior &gt; System
+Settings &gt; Updates</strong>.
+
+    <p class="aside">В операционной системе OSX панель <strong>Appearance &amp;
+Behavior</strong>
+находится в Android Studio в окне <strong>Preferences</strong>.</p>
+  </li>
+
+  <li>На панели <strong>Updates</strong> выберите параметры
+<strong>Automatically check updates for: Canary Channel</strong> и
+<strong>Automatically check updates for Android SDK: Preview Channel</strong>.
+  </li>
+
+  <li>Запустите <strong>менеджер SDK Android</strong>. (Менеджер SDK входит в состав Android Studio 1.3;
+теперь это не отдельное
+приложение.)
+  </li>
+
+  <li>В разделе <strong>Platforms</strong> выберите <strong>Android MNC
+Preview</strong>.
+  </li>
+
+  <li>В разделе <strong>Tools</strong> выберите последние инструменты
+<strong>SDK Tools</strong>, <strong>Platform-tools</strong> и
+<strong>Build-tools</strong> для Android.
+  </li>
+
+  <li>Нажмите на кнопку <strong>Install packages</strong> и примите условия лицензионного соглашения
+для всех пакетов.
+  </li>
+
+  <li>Убедитесь, что платформа M Developer Preview установлена. Для этого откройте окно
+<strong>Settings</strong> и перейдите к панели<strong>Appearance &amp; Behavior
+&gt; System Settings &gt; Android SDK</strong>.</li>
+
+  <li>На панели <strong>Android SDK</strong> выберите вкладку
+<strong>SDK Platforms</strong>. Для элемента <strong>Android MNC
+Preview</strong> должно быть указано <em>Installed</em>. Кроме того, перейдите на вкладку
+<strong>SDK Tools</strong> и убедитесь в том, что установлены актуальные
+версии инструментов.
+  </li>
+</ol>
+<p>После выполнения этих действий компоненты предварительной версии
+доступны для использования в вашей среде разработки. </p>
+
+
+<h2 id="create-update">Создание или обновление проекта</h2>
+
+<p>
+  Если вы хотите воспользоваться API-интерфейсами предварительной версии, создайте или обновите проект разработки так, чтобы в нем использовались
+компоненты предварительной версии.
+</p>
+
+
+<h3 id="create">Создание нового проекта</h3>
+
+<p>
+  Для создания проекта в предварительной версии рекомендуется использовать Android Studio. Выполните действия,
+приведенные в разделе <a href="{@docRoot}sdk/installing/create-project.html">Создание проекта</a>,
+пока в мастере проекта не появится экран <em>Form Factors</em>. Затем выполните
+действия по созданию проекта, настроенного для предварительной версии.
+</p>
+
+<ul>
+  <li>Установите флажок <strong>Phone and Tablet</strong>.</li>
+  <li>Выберите <strong>MNC: Android M (Preview)</strong> в разделе <strong>Minimum
+SDK</strong>.</li>
+</ul>
+
+
+<h3 id="update">Обновление существующего проекта</h3>
+
+<p>
+  В существующем проекте следует изменить его конфигурацию и настроить его на использование API-интерфейсов предварительной версии. В
+среде разработки откройте файл <code>build.gradle</code> для вашего модуля и задайте
+значения следующим образом:
+</p>
+
+<ul>
+  <li>для параметра <code>compileSdkVersion</code> задайте значение <code>'android-MNC'</code>;</li>
+  <li>для параметра <code>minSdkVersion</code> задайте значение <code>'MNC'</code>;</li>
+  <li>для параметра <code>targetSdkVersion</code> задайте значение <code>'MNC'</code>.</li>
+</ul>
+
+
+<h2 id="setup-test">Настройка для тестирования</h2>
+
+<p>
+  Для тестирования приложения в предварительной версии необходимо физическое или виртуальное устройство, настроенное с помощью
+предварительной версии платформы. Если имеется совместимое устройство, можно установить предварительную версию
+платформы для тестирования. Для тестирования также можно настроить виртуальное устройство.
+</p>
+
+<h3 id="setup-device">Настройка физического устройства</h3>
+
+<p>
+  Если у вас имеется устройство Nexus 5, Nexus 6, Nexus 9 или Android TV, для тестирования приложений вы можете установить на эти устройства
+системный образ предварительной версии.
+Также в Android Studio можно настроить виртуальное устройство с предварительной версией платформы,
+используя для этого диспетчер виртуальных устройств Android.
+</p>
+
+<p class="caution">
+  <strong>Внимание!</strong> Установка на устройство образа с предварительной версией платформы <em>приведет к удалению всех данных с
+устройства</em>, поэтому перед установкой обязательно создайте резервные копии необходимых данных.
+</p>
+
+<h3 id="setupAVD">Настройка виртуального устройства</h3>
+
+<p>
+  В Android Studio можно настроить виртуальное устройство с предварительной версией платформы,
+используя для этого диспетчер виртуальных устройств Android.
+</p>
+
+<p>Порядок настройки AVD в диспетчере AVD</p>
+
+<ol>
+  <li>Установите SDK Preview в свою среду разработки, как описано в разделе
+<a href="{@docRoot}preview/setup-sdk.html">Настройка пакета
+SDK Preview</a>.</li>
+  <li>Выполните действия, указанные в статье
+<a href="{@docRoot}tools/devices/managing-avds.html">Управление виртуальными устройствами с помощью диспетчера
+AVD</a>. Используйте следующие настройки:
+    <ul>
+      <li><strong>Device:</strong> Nexus 5, Nexus 6, Nexus 9 или Android TV</li>
+      <li><strong>Target:</strong>
+       Android M (Preview) – API Level M</li>
+      <li><strong>ABI:</strong> x86</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  Дополнительные сведения о создании виртуальных устройств для тестирования представлены в статье <a href="{@docRoot}tools/devices/index.html">Управление виртуальными устройствами</a>.
+</p>
diff --git a/docs/html-intl/intl/ru/preview/testing/guide.jd b/docs/html-intl/intl/ru/preview/testing/guide.jd
new file mode 100644
index 0000000..8beb0ed
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/testing/guide.jd
@@ -0,0 +1,187 @@
+page.title=Руководство по тестированию
+page.image=images/cards/card-build_16x9_2x.png
+page.keywords=ресурсы для предварительной версии,androidm,тестирование,разрешения
+
+@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 M Developer Preview предлагает вам проверить, как будут работать ваши приложения в следующей версии
+платформы. В ней реализован ряд изменений в 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">режим «Doze» и ждущий режим для приложений</a>;
+  </li>
+  <li><a href="#ids">автоматическое резервное копирование и идентификаторы устройств</a>.</li>
+</ul>
+
+<p>
+  Дополнительные сведения о том, как настроить физические или виртуальные устройства с помощью системного образа предварительной версии платформы
+к тестированию, представлены в статье <a href="{@docRoot}preview/setup-sdk.html">Настройка SDK Preview</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] &lt;permission.name&gt; ...</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#">Настройка SDK Preview</a>.
+</p>
+
+<p>
+  Протестируйте работу приложения при различных сочетаниях предоставленных и отозванных разрешений, чтобы определить варианты работы пользователя,
+которые зависят от разрешений. В случаях, когда зависимость не явная или не логичная, подумайте, можно ли
+перестроить или структурировать такой вариант работы, чтобы устранить зависимость или четко обозначить,
+для чего требуется каждое разрешение.
+</p>
+
+<p>
+  Дополнительные сведения о поведении разрешений на выполнение и тестировании, а также советы и рекомендации по данному вопросу представлены на странице
+<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>Установите на физическое или виртуальное устройство системный образ M Preview.</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>Установите на физическое или виртуальное устройство системный образ M Preview.</li>
+  <li>Подключите устройство к компьютеру для разработки и установите ваше приложение.</li>
+  <li>Запустите ваше приложение и не закрывайте его.</li>
+  <li>Смоделируйте переход приложения в ждущий режим, выполнив следующие команды:
+
+<pre>
+$ adb shell am broadcast -a android.os.action.DISCHARGING
+$ adb shell am set-idle &lt;packageName&gt; true
+</pre>
+
+  </li>
+  <li>Смоделируйте выход приложения из ждущего режима, выполнив следующую команду:
+    <pre>$ adb shell am set-idle &lt;packageName&gt; false</pre>
+  </li>
+  <li>Понаблюдайте за поведением приложения, когда оно возобновляет свою работу. Убедитесь, что оно
+выходит из ждущего режима без сбоев. Обратите особое внимание на работу уведомлений и выполнение фоновых задач приложения
+.</li>
+</ol>
+
+<h2 id="ids">Автоматическое резервное копирование для приложений и идентификаторы устройств</h2>
+
+<p>Если во внутреннем хранилище вашего приложения имеются какие-либо идентификаторы устройства, такие как идентификатор Google
+Cloud Messaging,
+обязательно воспользуйтесь советами и рекомендациями, приведенными в статье
+<a href="{@docRoot}preview/backup/index.html">Автоматическое резервное копирование для приложений</a>,чтобы исключить расположение
+хранилища из списка объектов для автоматического резервного копирования. </p>
diff --git a/docs/html-intl/intl/ru/preview/testing/performance.jd b/docs/html-intl/intl/ru/preview/testing/performance.jd
new file mode 100644
index 0000000..fc88cbd
--- /dev/null
+++ b/docs/html-intl/intl/ru/preview/testing/performance.jd
@@ -0,0 +1,656 @@
+page.title=Тестирование скорости отображения
+page.image=images/cards/card-test-performance_2x.png
+page.keywords=скорость отображения, кадр/с, инструменты
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Содержание документа</h2>
+      <ol>
+        <li><a href="#measure">Измерение производительности интерфейса</a>
+          <ul>
+            <li><a href="#aggregate">Агрегированные статические данные о кадрах</a></li>
+            <li><a href="#timing-info">Точная информация о кадровой синхронизации</a></li>
+            <li><a href="#timing-dump">Дамп простой кадровой синхронизации</a></li>
+            <li><a href="#collection-window">Управление промежутком времени для сбора статистических данных</a></li>
+            <li><a href="#diagnose">Диагностика снижения производительности</a></li>
+            <li><a href="#resources">Дополнительные ресурсы</a></li>
+          </ul>
+        </li>
+        <li><a href="#automate">Автоматизация тестирования производительности интерфейса</a>
+          <ul>
+            <li><a href="#ui-tests">Настройка тестов интерфейса</a></li>
+            <li><a href="#automated-tests">Настройка автоматизированного тестирования интерфейса</a></li>
+            <li><a href="#triage">Определение и устранение обнаруженных проблем</a></li>
+          </ul>
+        </li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  Тестирование производительности интерфейса позволяет убедиться в том, что ваше приложение не только соответствует функциональным требованиям,
+но и гарантирует пользователю безупречное взаимодействие с интерфейсом с постоянной частотой отображения
+60 кадров в секунду (<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">почему именно
+60 кадров/с?</a>), без каких-либо задержек и пропущенных кадров или, как их называют, <em>глюков</em>. В этой
+статье рассматриваются инструменты для измерения производительности интерфейса, а также предлагается подход к
+интеграции этих процедур измерения производительности в ваши методы тестирования приложений.
+</p>
+
+
+<h2 id="measure">Измерение производительности интерфейса</h2>
+
+<p>
+  Чтобы улучшить производительность, прежде всего у вас должна иметься возможность измерить производительность
+вашей системы. Когда это сделано, необходимо диагностировать и определить проблемы, которые могут возникнуть на разных этапах
+процесса разработки.
+</p>
+
+<p>
+  <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em>
+– это инструмент Android, который запускается на устройстве и создает дамп интересной информации о состоянии системных
+служб. После передачи в dumpsys команды <em>gfxinfo</em> в журнал устройства (logcat)
+записываются сведения о производительности, касающиеся скорости анимации на этапе
+записи.
+</p>
+
+<pre>
+&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
+</pre>
+
+<p>
+  Эта команда может создавать множество различных вариантов данных кадровой синхронизации.
+</p>
+
+<h3 id="aggregate">Агрегированные статические данные о кадрах</h3>
+
+<p>
+  В M Preview эта команда фиксирует в logcat агрегированный анализ данных о кадрах, полученных
+за весь жизненный цикл процесса. Например:
+</p>
+
+<pre class="noprettyprint">
+Stats since: 752958278148ns
+Total frames rendered: 82189
+Janky frames: 35335 (42.99%)
+90th percentile: 34ms
+95th percentile: 42ms
+99th percentile: 69ms
+Number Missed Vsync: 4706
+Number High input latency: 142
+Number Slow UI thread: 17270
+Number Slow bitmap uploads: 1542
+Number Slow draw: 23342
+</pre>
+
+<p>
+  Приведенные выше статистические данные высокого уровня демонстрируют производительность отрисовки, которой обладает приложение,
+а также ее стабильность при обработке множества кадров.
+</p>
+
+
+<h3 id="timing-info">Точная информация о кадровой синхронизации</h3>
+
+<p>
+  В M Preview представлена новая команда для gfxinfo – <em>framestats</em>. Она позволяет получить
+чрезвычайно точную информацию о кадровой синхронизации из последних кадров, что поможет вам отслеживать проблемы
+и устранять их.
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
+</pre>
+
+<p>
+  Данная команда предоставляет информацию о кадровой синхронизации буквально по наносекундам на основании последних 120
+кадров, созданных приложением. Ниже приводится пример необработанного результата из журнала adb после выполнения команды dumpsys gfxinfo
+&lt;PACKAGE_NAME&gt; framestats:
+</p>
+
+<pre class="noprettyprint">
+0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
+0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
+0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
+0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
+</pre>
+
+<p>
+  Каждая строка здесь представляет собой кадр, созданный приложением. В каждой строке имеется фиксированное количество
+столбцов, где указано время, затраченное на каждом этапе процесса создания кадра. Более подробно этот формат рассматривается в следующем разделе,
+включая сведения о том, что означает каждый столбец.
+</p>
+
+
+<h4 id="fs-data-format">Формат данных, возвращаемых командой framestats</h4>
+
+<p>
+  Поскольку блок данных выводится в формате CSV, вы можете с легкостью вставить его в любую программу
+для работы с электронными таблицами, а также собрать и обработать данные с помощью сценария. Ниже рассматривается формат
+столбцов выходных данных. Все временные метки указаны в наносекундах.
+</p>
+
+<ul>
+  <li>FLAGS
+    <ul>
+      <li>В строках, в которых в столбце FLAGS указано «0», общее время смены кадра вычислялось путем
+вычитания значения в столбце INTENDED_VSYNC из значения в столбце FRAME_COMPLETED.
+      </li>
+
+      <li>Если это значение не равно нулю, то строку следует пропустить, поскольку кадр был определен как отличающийся от
+обычной производительности, при которой ожидается, что размещение и прорисовка кадра займут
+больше 16 мс. Причина этого может заключаться в следующем:
+        <ul>
+          <li>макет окна был изменен (например, первый кадр приложения или после
+вращения);
+          </li>
+
+          <li>также, возможно, кадр был пропущен, в результате чего временные метки некоторых значений
+содержат бессмысленную информацию; кадр можно пропустить, если, например, скорость отображения превышает 60 кадров/с или если
+на экране от этого не появяются шумы; это не обязательно указывает на проблему
+в приложении.
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>INTENDED_VSYNC
+    <ul>
+      <li>Предполагаемая начальная точка кадра. Если данное значение отличается от значения в столбце VSYNC, это указывает на то,
+что поток был занят и не смог своевременно среагировать на сигнал
+vsync.
+      </li>
+    </ul>
+  </li>
+
+  <li>VSYNC
+    <ul>
+      <li>Значение времени, которое использовалось во всех приемниках vsync, а также которое было затрачено на прорисовку кадра
+(обратные вызовы кадров Choreographer и анимации, View.getDrawingTime() и т. д.)
+      </li>
+
+      <li>Чтобы узнать подробнее о VSYNC и о том, какое значение это имеет для вашего приложения, просмотрите
+видеоролик,
+<a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">посвященный общим сведениям о VSYNC</a>.
+      </li>
+    </ul>
+  </li>
+
+  <li>OLDEST_INPUT_EVENT
+    <ul>
+      <li>Временная метка для самого старого события ввода в очереди ввода или Long.MAX_VALUE, если
+для кадра отсутствуют события ввода.
+      </li>
+
+      <li>Это значение в первую очередь предназначено для платформы и имеет ограниченную практическую ценность для разработчиков
+приложений.
+      </li>
+    </ul>
+  </li>
+
+  <li>NEWEST_INPUT_EVENT
+    <ul>
+      <li>Временная метка для самого нового события ввода в очереди ввода или 0, если
+для кадра отсутствуют события ввода.
+      </li>
+
+      <li>Это значение в первую очередь предназначено для платформы и имеет ограниченную практическую ценность для разработчиков
+приложений.
+      </li>
+
+      <li>Однако оно позволяет получить приблизительное представление о том, какая задержка возникает у приложения,
+обратившись к значению разницы (FRAME_COMPLETED - NEWEST_INPUT_EVENT).
+      </li>
+    </ul>
+  </li>
+
+  <li>HANDLE_INPUT_START
+    <ul>
+      <li>Временная метка отправки событий ввода в приложение.
+      </li>
+
+      <li>Разность между этим значением и значением ANIMATION_START позволяет определить,
+сколько времени было затрачено приложением на обработку событий ввода.
+      </li>
+
+      <li>Если разность достаточно велика (&gt;2 мс), это означает, что приложение затрачивает очень
+много времени на обработку событий ввода, таких как View.onTouchEvent(). В свою очередь, это может указывать на
+необходимость оптимизации этого процесса обработки или переноса этой нагрузки в другой поток. Следует помнить, что существуют
+сценарии, когда такое
+поведение ожидается и является приемлемым. Имеются в виду нажатия или аналогичные сценарии, в которых запускаются новые операции.
+      </li>
+    </ul>
+  </li>
+
+  <li>ANIMATION_START
+    <ul>
+      <li>Временная метка запуска анимаций, зарегистрированных с помощью Choreographer.
+      </li>
+
+      <li>Разность между этим значением и PERFORM_TRANVERSALS_START позволяет
+определить, сколько времени потребовалось на оценку всех запущенных аниматоров (ObjectAnimator,
+ViewPropertyAnimator и общих переходов).
+      </li>
+
+      <li>Если разность достаточно велика (&gt;2 мс), проверьте наличие в приложении настраиваемых
+аниматоров, а также то, какие поля анимируют классы ObjectAnimator. Убедитесь, что
+эти поля подходят для анимации.
+      </li>
+
+      <li>Чтобы узнать подробнее о Choreographer, просмотрите видео <a href="https://developers.google.com/events/io/sessions/325418001">For Butter or Worse</a>.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>PERFORM_TRAVERSALS_START
+    <ul>
+      <li>Если вычесть значение DRAW_START из этого значения, вы можете узнать, сколько времени было затрачено на разметку и
+измерение. (Обратите внимание, что во время прокрутки или анимации это значение должно быть близко
+к нулю.)
+      </li>
+
+      <li>Чтобы узнать подробнее об этапах разметки и измерения во время рендеринга интерфейса приложения, просмотрите
+видео, посвященное
+<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">аннулированию, макетам и производительности</a>.
+      </li>
+    </ul>
+  </li>
+
+  <li>DRAW_START
+    <ul>
+      <li>Время начала этапа отрисовки с помощью метода performTraversals. Это точка начала
+записи списков отображения любых представлений, которые были аннулированы.
+      </li>
+
+      <li>Разность между этим значением и значением SYNC_START означает, сколько времени потребовалось на вызов метода View.draw() для всех
+аннулированных представлений в дереве.
+      </li>
+
+      <li>Дополнительные сведения о модели отрисовки представлены в видео, посвященном <a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">аппаратному ускорению</a>
+или
+<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">аннулированию, макетам и производительности</a>.
+      </li>
+    </ul>
+  </li>
+
+  <li>SYNC_START
+    <ul>
+      <li>Время начала этапа синхронизации отрисовки.
+      </li>
+
+      <li>Если разность между этим значением и значением ISSUE_DRAW_COMMANDS_START достаточно велика (&gt;0,4 мс или около этого),
+обычно это указывает на наличие большого количество новых растровых изображений, которые следует передать
+ЦП.
+      </li>
+
+      <li>Чтобы узнать подробнее об этапе синхронизации, просмотрите видео, посвященное
+<a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">рендерингу профиля с помощью ЦП</a>.
+      </li>
+    </ul>
+  </li>
+
+  <li>ISSUE_DRAW_COMMANDS_START
+    <ul>
+      <li>Время начала отправки аппаратным обработчиком команд на отрисовку для ЦП.
+      </li>
+
+      <li>Разность между этим значением и значением FRAME_COMPLETED позволяет получить приблизительное представление об объеме ресурсов ЦП, используемых
+приложением. Здесь отображаются такие проблемы, как превышение или недостаток эффектов рендеринга.
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SWAP_BUFFERS
+    <ul>
+      <li>Время вызова eglSwapBuffers;
+относится к работе платформы и имеет ограниченную практическую ценность для разработчиков приложений.
+      </li>
+    </ul>
+  </li>
+
+  <li>FRAME_COMPLETED
+    <ul>
+      <li>Все готово! Общее время, затраченное на обработку этого кадра, вычисленное по следующей формуле:
+FRAME_COMPLETED - INTENDED_VSYNC.
+      </li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>
+  Эти данные можно использовать несколькими способами. Простым, но полезным примером может служить
+график, иллюстрирующий распределение времени кадров (FRAME_COMPLETED - INTENDED_VSYNC) в
+различных диапазонах задержки (см. рисунок ниже). На графике ясно видно, что с большинством кадров
+никаких проблем не возникло (ниже отметки в 16 мс; обозначено красным), однако для некоторых кадров
+это значение значительно превышено. Можно обратиться к этому графику и пронаблюдать изменения по времени,
+чтобы увидеть общую картину смещения или новые отличающиеся значения. Также можно создать график задержи ввода,
+времени, затраченного на разметку или других интересующих вас показателей, руководствуясь множеством временных меток,
+имеющихся в данных.
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-framestats.png">
+
+
+<h3 id="timing-dump">Дамп простой кадровой синхронизации</h3>
+
+<p>
+  Если в разделе настроек для разработчиков для параметра <strong>Profile GPU rendering</strong> задано значение <strong>In adb shell dumpsys gfxinfo</strong>,
+команда <code>adb shell dumpsys gfxinfo</code> выдает сведения о синхронизации
+по времени для последних 120 кадров. При этом вы увидите несколько категорий значений,
+разделенные знаком табуляции. Эти данные могут оказаться полезными для определения частей конвейера отрисовки, которые могут работать с задержкой
+при высоком уровне обработки.
+</p>
+
+<p>
+  Как и в случае с командой
+<a href="#fs-data-format">framestats</a>, описанной выше, вы можете с легкостью вставить полученные данные в любую программу
+для работы с электронными таблицами, а также собрать и обработать их с помощью сценария. На графике ниже иллюстрируется разбивка со сведениями о количестве созданных кадров и времени, которое приложение затратило на
+это.
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
+
+<p>
+  Результаты выполнения команды gfxinfo, копирования полученного результата, передачи его в приложение для работы
+с электронными таблицами и построения графика представлены в виде столбцов.
+</p>
+
+<p>
+  Каждый столбец представляет собой один кадр анимации; его высота обозначает количество миллисекунд,
+затраченных на вычисление этого кадра. Каждый цветной сегмент столбца
+обозначает различный этап процесса рендеринга, что позволяет определить проблемные компоненты
+приложения в плане производительности. Дополнительные сведения о
+процессе рендеринга, а также о том, как оптимизировать его, представлены в видео, посвященном
+<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">аннулированию, макетам и производительности</a>.
+</p>
+
+
+<h3 id="collection-window">Управление промежутком времени для сбора статистических данных</h3>
+
+<p>
+  При выполнении команды framestats, равно как и при вычислении простой кадровой синхронизации, данные собираются за достаточно короткий промежуток времени – порядка
+двух секунд рендеринга. Чтобы точно указать этот промежуток времени (например,
+чтобы ограничить данные определенной анимацией), можно сбросить все счетчики
+и объединить собранные статистические данные.
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
+</pre>
+
+<p>
+  Это также можно сделать совместно с выполнением самих команд создания дампа, чтобы выполнять сбор
+и сброс регулярно, непрерывно получая данные за промежутки времени продолжительностью менее двух секунд.
+
+</p>
+
+
+<h3 id="diagnose">Диагностика снижения производительности</h3>
+
+<p>
+  Определение снижений производительности послужит отличным началом для отслеживания проблем, а также позволит всегда поддерживать
+хорошую работоспособность приложения. Однако инструмент dumpsys позволяет лишь определить наличие проблем и приблизительный уровень их
+серьезности. Вам же требуется диагностировать каждую конкретную проблему с
+производительностью и найти подходящие способы ее устранения. Для этих целей прекрасно
+подходит инструмент <a href="{@docRoot}tools/help/systrace.html">systrace</a>.
+</p>
+
+
+<h3 id="resources">Дополнительные ресурсы</h3>
+
+<p>
+  Дополнительные сведения о принципе работы конвейера рендеринга платформы Android, информация об общих проблемах, с которыми можно столкнуться при его использовании,
+а также способы их устранения представлены на указанных ниже
+полезных ресурсах.
+</p>
+
+<ul>
+  <li>Производительность визуализации 101
+  </li>
+  <li>Частота 60 кадров в секунду
+  </li>
+  <li>Пользовательский интерфейс Android и графический процессор
+  </li>
+  <li>Аннулирование макетов и производительность
+  </li>
+  <li>Анализ производительности интерфейса с помощью systrace
+  </li>
+</ul>
+
+
+<h2 id="automate">Автоматизация тестирования производительности интерфейса</h2>
+
+<p>
+  Один из подходов к тестированию производительности интерфейса заключается в простом привлечении тестировщиков, чтобы они выполнили ряд
+операций с целевым приложением, а также либо просто визуально убедились в отсутствии глюков, либо уделили достаточно много времени
+тестированию приложения с помощью соответствующего инструмента. Однако такой подход имеет один важный недостаток
+– человек физически не способен обрабатывать информацию при очень быстрой смене кадров.
+Кроме того, такая работа занимает много времени, утомляет и не гарантирует полное отсутствие ошибок.
+</p>
+
+<p>
+  Гораздо эффективнее записать ключевые показатели производительности, полученные в ходе автоматического
+тестирования интерфейса, и проанализировать их. В состав Android M Developer Preview входят новые функции ведения журналов, которые позволяют с легкостью
+определить объем и серьезность глюков анимации в приложении.
+Их также можно использовать для того, чтобы создать строгий процесс определения текущей производительности и отслеживать соответствие требованиям будущих задач
+производительности.
+</p>
+
+<p>
+  В этой статье мы расскажем вам, как мы рекомендуем использовать такие данные, чтобы автоматизировать
+тестирование производительности.
+</p>
+
+<p>
+  Этот подход большей частью сводится к двум ключевым шагам. Шаг первый: определите, что вы
+тестируете и как вы это делаете. Шаг второй: произведите настройку
+среды автоматизированного тестирования и ее обслуживание.
+</p>
+
+
+<h3 id="ui-tests">Настройка тестов интерфейса</h3>
+
+<p>
+  Прежде чем приступить к автоматизированному тестированию, необходимо принять ряд важных решений,
+чтобы правильно определить область тестирования и ваши требования.
+</p>
+
+<h4>
+  Определение ключевых анимаций или потоков для тестирования
+</h4>
+
+<p>
+  Помните, что плохая производительность чаще всего выражается для пользователей в отсутствии плавной
+анимации. Поэтому при определении того, какие типы действий в пользовательском интерфейсе следует протестировать, полезно
+сосредоточить внимание на ключевых анимациях, наиболее важных для
+взаимодействия пользователя с приложением. Ниже представлены примеры наиболее распространенных сценариев, которые может оказаться полезным определить.
+</p>
+
+<ul>
+  <li>Прокрутка основного представления ListView или RecyclerView
+  </li>
+
+  <li>Анимации во время циклов асинхронного ожидания
+  </li>
+
+  <li>Любые анимации, включающие загрузку растровых изображений или манипуляции с ними
+  </li>
+
+  <li>Анимации, включающие смешивание альфа-канала
+  </li>
+
+  <li>Отрисовка настраиваемого представления на экране
+  </li>
+</ul>
+
+<p>
+  Определите, какие из этих
+ключевых анимаций следует протестироваит в первую очередь. При принятии решения подключите инженеров, дизайнеров и менеджеров по продукту.
+</p>
+
+<h4>
+  Определите свои будущие задачи и отслеживайте их выполнение
+</h4>
+
+<p>
+  С профессиональной точки зрения, может оказаться крайне важным решить, каких именно показателей производительности вы хотите добиться, и
+сосредоточить усилия на создании необходимых тестов и сборе соответствующих данных. Например:
+</p>
+
+<ul>
+  <li>Вы только хотите начать отслеживание производительности интерфейса, чтобы получить дополнительные сведения?
+  </li>
+
+  <li>Вы хотите предотвратить возможно снижение производительности в будущем?
+  </li>
+
+  <li>На сегодняшний день 90% кадров анимируются плавно. Вы хотите увеличить этот показатель до 98% в этом квартале?
+  </li>
+
+  <li>На сегодняшний день 98% кадров анимируются плавно. Вы не хотите, чтобы производительность снизилась?
+  </li>
+
+  <li>Вы хотите улучшить производительность на бюджетных устройствах?
+  </li>
+</ul>
+
+<p>
+  Во всех перечисленных случаях вам потребуется хронологическое отслеживание показателей, демонстрирующих производительность
+разных версий вашего приложения.
+</p>
+
+<h4>
+  Определение устройств для тестирования
+</h4>
+
+<p>
+  Производительность приложения может меняться в зависимости от того, на каком устройстве оно установлено. Некоторые устройства могут обладать недостаточным
+объемом памяти, менее производительными графическими процессорами или слабыми ЦП. Это означает, что анимации,
+которые прекрасно работают на устройстве с одним оборудованием, могут вообще не работать на устройстве с другим оборудованием, и, что хуже всего, препятствовать
+нормальной работе другой части конвейера. Поэтому, учитывая такую разницу
+в отображении интерфейса для пользователей, выберите диапазон устройств для выполнения тестов, включив в него
+как современные высокотехнологичные, так и бюджетные устройства, планшеты и т. д. При выборе диапазона устройств учитывайте разницу в производительности ЦП
+, ОЗУ, разрешение экрана, его размер и т. д. Тесты, которые успешно прошли на устройстве верхнего ценового сегмента,
+могут завершиться сбоем на бюджетных моделях.
+</p>
+
+<h4>
+  Базовые средства для тестирования пользовательского интерфейса
+</h4>
+
+<p>
+  Такие наборы инструментов, как <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> и
+<a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a>,
+призваны помочь автоматизировать действия пользователей при взаимодействии с вашим приложением. Это простые инструменты,
+имитирующие работу пользователя на устройстве. Для использования этих инструментов
+вам необходимо создать уникальные сценарии, которые будут включать выполнение ряда действий, и воспроизвести
+их на устройстве.
+</p>
+
+<p>
+  Используя эти автоматизированные тесты в сочетании с командой <code>dumpsys gfxinfo</code>, вы можете быстро создать
+воспроизводимую систему, позволяющую выполнять тестирование и анализировать
+полученную информацию о производительности для каждого определенного условия.
+</p>
+
+
+<h3 id="automated-tests">Настройка автоматизированного тестирования интерфейса</h3>
+
+<p>
+  Получив возможность протестировать интерфейс, а также настроив конвейер на сбор результатов
+отдельного теста, важно выбрать инструмент, который позволит многократно выполнить
+тест на нескольких устройствах, а также объединить данные о результатах
+тестирования производительности для их дальнейшего анализа вашими специалистами по разработке.
+</p>
+
+<h4>
+  Инструмент для автоматизации тестирования
+</h4>
+
+<p>
+  Следует отметить, что инструменты для тестирования интерфейса (такие как <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>)
+можно запускать прямо на целевом устройстве или в эмуляторе. Тогда как сбор командой
+<em>dumpsys gfxinfo</em> информации о производительности выполняется на хост-компьютере, который отправляет команды из ADB. Чтобы объединить
+усилия этих двух инструментов, был разработан <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a>. 
+Эта система написания сценариев, работающая на хост-компьютере, отправляет команды на
+подключенные устройства, а также получает данные от них.
+</p>
+
+<p>
+  Набор сценариев для надлежащей автоматизации тестирования производительности интерфейса должен включать использование
+системы MonkeyRunner хотя бы для выполнения следующих задач:
+</p>
+
+<ul>
+  <li>загрузка и запуск на целевые устройства или в эмулятор необходимого пакета APK;
+  </li>
+
+  <li>запуск теста UI Automator и его выполнение;
+  </li>
+
+  <li>сбор информации о производительности с помощью <em>dumpsys gfxinfo</em><em>;</em>
+  </li>
+
+  <li>объединение полученной информации и ее отображение для разработчика в удобочитаемой форме.
+  </li>
+</ul>
+
+
+<h3 id="triage">Определение и устранение обнаруженных проблем</h3>
+
+<p>
+  После обнаружения проблемных мест или причин снижения производительности необходимо понять, что должно быть исправлено
+и внести соответствующие изменения. Если используемый инструмент для автоматизированного тестирования обеспечивает соблюдение точной разбивки
+кадровой синхронизации по времени, то с его помощью можно тщательно изучить недавние подозрительные изменения в коде или макете (в случае
+со снижением производительности), а также ограничить область системы, которая подлежит анализу, когда вы переключаетесь на изучение проблемы
+вручную. В последнем случае прекрасно подойдет <a href="{@docRoot}tools/help/systrace.html">systrace</a>. С помощью этого инструмента вы можете получить подробнейшую информацию
+о синхронизации относительно каждого этапа конвейера рендеринга, относительно каждого потока и каждого ядра
+системы, а также относительно любых настраиваемых маркеров событий, которые вы задаете.
+</p>
+
+<h4>
+  Надлежащее профилирование синхронизации по времени
+</h4>
+
+<p>
+  Важно отметить трудности, с которыми можно столкнуться при получении и анализе данных синхронизации, связанных
+с производительностью визуализации. Результаты по своей природе недетерминированные и зачастую
+изменяются в зависимости от состояния системы, объема доступной памяти, температурного
+дросселирования и времени суток. Смысл в том, что
+вы можете выполнить один и тот же тест дважды и получить результаты,
+которые будут похожи, но не совпадут в точности.
+</p>
+
+<p>
+  Правильный сбор и профилирование данных означает выполнение одного и того же теста
+несколько раз и накопление результатов для вычисления среднего значения (для простоты назовем это
+пакетом результатов). Это позволяет получить приблизительное представление о производительности
+теста, когда нет необходимости в точных данных.
+</p>
+
+<p>
+  Пакеты можно использовать при изучении изменений кода, чтобы увидеть их относительное влияние на
+производительность. Если средняя частота кадров для пакета результатов, полученных до изменения, больше значения для пакета, полученного
+после изменения, обычно вы получаете общее повышение производительности в результате этого конкретного
+изменения.
+</p>
+
+<p>
+  При выполнении любого автоматизированного тестирования интерфейса следует учитывать этот момент,
+равно как и любые аномалии, которые могут возникнуть во время теста. Например,
+если производительность вашего приложения неожиданно резко падает из-за проблем с оборудованием устройства (которые
+не вызваны вашим приложением), возможно, вы захотите выполнить пакет повторно, чтобы получить
+менее беспорядочные данные о синхронизации.
+</p>
+
+<p>
+  Итак, сколько раз следует выполнять тест, прежде чем его результаты станут значимыми? Не менее 10!
+ Чем больше раз вы выполняете тест (например, можно сделать 50–100 прогонов), тем выше точность результатов
+(хотя, конечно, ради точности приходится поступаться временем).
+</p>
diff --git a/docs/html-intl/intl/zh-cn/about/versions/lollipop.jd b/docs/html-intl/intl/zh-cn/about/versions/lollipop.jd
index 3403630..1676c27 100644
--- a/docs/html-intl/intl/zh-cn/about/versions/lollipop.jd
+++ b/docs/html-intl/intl/zh-cn/about/versions/lollipop.jd
@@ -1,21 +1,23 @@
-page.title=Android Lollipop 
+page.title=Android Lollipop
 @jd:body
 
+<div style="float:right;">
+  <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x">
+</div>
 
 
+<p>欢迎使用 Android 5.0 Lollipop,这是迄今为止规模最大最为雄心勃勃的 Android 版本!</p>
+
+<p>此版本为用户推出了各种崭新的新功能,为开发者则提供了数千个新的 API。不仅如此,它将 Android 的疆土扩展得更远,小到手机、平板电脑和穿戴式设备,大到电视和汽车,都可以是它活跃的领地。</p>
+
+<p>要深入了解面向开发者的新 API,请参阅 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 概述</a>。有关适合消费者阅读的更多 Android 5.0 内容,请访问 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>。</p>
 
 
-
-
-
-  <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0">
-    <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" >
-  </div>
-
-  <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;">
-  <div class="col-4 normal-links highlights" style="font-size:12px;">
-    <h3 id="thisd" >面向开发者的主要功能</h3>
-    <ul style="list-style-type:none;">
+<div id="qv-wrapper">
+<div id="qv">
+    <h2>面向开发者的主要功能</h2>
+  <ol>
+      <ul style="list-style-type:none;">
   <li><a href="#Material">Material Design 设计</a></li>
   <li><a href="#Perf">注重性能</a></li>
   <li><a href="#Notifications">通知</a></li>
@@ -31,24 +33,12 @@
   <li><a href="#WebView">Chromium WebView</a></li>
   <li><a href="#Accessibility">辅助功能和输入</a></li>
   <li><a href="#Battery">构建低电耗应用</a></li>
-    </ul>
+    </ol>
   </div>
 </div>
 
 
 
-
-
-
-
-<p>欢迎使用 Android 5.0 Lollipop,这是迄今为止规模最大最为雄心勃勃的 Android 版本!</p>
-
-<p>此版本为用户推出了各种崭新的新功能,为开发者则提供了数千个新的 API。不仅如此,它将 Android 的疆土扩展得更远,小到手机、平板电脑和穿戴式设备,大到电视和汽车,都可以是它活跃的领地。</p>
-
-<p>要深入了解面向开发者的新 API,请参阅 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 概述</a>。有关适合消费者阅读的更多 Android 5.0 内容,请访问 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>。</p>
-
-
-
 <h2 id="Material">Material design 设计</h2>
 
 <p>Android 5.0 将 <a href="http://www.google.com/design/spec">Material design 设计</a>引入 Android 系统,它自带一个扩展的界面工具包,可以让您轻松地将新的设计图案集成到自己的应用中。  </p>
@@ -76,7 +66,7 @@
 </div>
 
 
-<p>您可以对按钮、复选框以及应用中的其他触摸控件加上涟漪动画。 
+<p>您可以对按钮、复选框以及应用中的其他触摸控件加上涟漪动画。
 
 <p>您还可以在 XML 文件中定义可动的矢量图,让它们展现出各种不同的动画效果。矢量图在自由缩放的同时不会失真,非常适合用作应用中的纯色图标。</p>
 
diff --git a/docs/html-intl/intl/zh-cn/index.jd b/docs/html-intl/intl/zh-cn/index.jd
index 1c2fb99..67035ea 100644
--- a/docs/html-intl/intl/zh-cn/index.jd
+++ b/docs/html-intl/intl/zh-cn/index.jd
@@ -1,93 +1,89 @@
 fullpage=true
-page.viewport_width=970
 excludeFromSuggestions=true
-page.metaDescription=Android 开发人员的官方网站。为应用开发人员以及设计师提供 Android SDK 和文档。
+page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
 page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />
 
 @jd:body
 
-<div class="home-new-carousel-1">
-  <div class="fullscreen-carousel-content">
-    <div class="vcenter">
-      <div class="wrap clearfix">
+<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel">
+</div> -->
+<section class="dac-hero-carousel">
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
+<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> -->
+<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;">
+<a href="/preview/index.html">
+  <div class="wrap" style="max-width:1100px;">
+    <div class="cols dac-hero-content">
+      <div class="col-10of16 col-push-6of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png"
+             srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-6of16 col-pull-10of16">
+        <div class="dac-hero-tag"></div>
 
-      <div class="landing-section-header">
-            <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div>
-            <div class="col-5" style=" margin-top:70px ">
-            <h3 stye="font-weight:300;">Android 5.0 Lollipop</h3>
-            <p>Android 5.0 更新将为您的应用增添各种新功能,例如锁定屏幕通知、全新的相机 API、OpenGL ES 3.1、全新的 Material Design 界面等等。</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">了解详情</a>
-            </div>
-          </div>
-          </div>
-        </div>
-       <h2>&nbsp;</h2>
-        <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16
-        no-section" data-query="collection:index/primary" data-resourcestyle="card"
-        data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget -->
-      </div> <!-- end .wrap -->
-    </div> <!-- end .vcenter -->
-  </div> <!-- end .fullscreen-carousel-content -->
-</div> <!-- end .fullscreen-carousel -->
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">准备迎接 Android 的下一版本。在 Nexus 5、
+        6、9 和 Player 中测试应用。 </p>
 
-<div class="actions-bar" style="margin-top:20px">
-  <div class="wrap">
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          开始!
+        </a>
+      </div>
+    </div>
+  </div>
+</a>
+</article></section>
+
+<div 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">获得 SDK</a></div>
-      <div><a href="{@docRoot}samples/index.html">浏览示例</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">观看视频</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">管理您的应用</a></div>
+      <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="//www.youtube.com/user/androiddevelopers">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Watch Videos
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
 
 
-<div class="landing-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
+<section class="dac-section dac-section-light" id="build-apps"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    Resources to get you started with designing and developing for Android.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/primary"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-            <div class="landing-h1" style="margin-top:0px">专为多屏幕时代而设</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          Android 在全球各地的数亿台手持设备上运行, <br>
+<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel">
+</div>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">专为多屏幕时代而设</h1>
+    <div class="dac-section-subtitle">
+      Android 在全球各地的数亿台手持设备上运行, <br>
           如今更支持下列激动人心的新设备和配置。
-        </div>
-      </div>
-      <div class="landing-body" style="margin-top: 50px;">
-        <div class="landing-breakout cols">
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
-              <p class="landing-small">
-                让您的用户即便在途中亦能随时随地获得所需的信息。
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">了解关于 Android Wear 的信息</a>
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png">
-              <p class="landing-small">
-                将您的应用搬上大屏幕,使您的内容栩栩如生。
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">了解关于 Android TV 的信息</a>
-
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png">
-              <p class="landing-small">
-                将您的音乐应用扩展至车载娱乐系统。
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">了解关于 Android Auto 的信息</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+    </div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/multiscreen"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html-intl/intl/zh-cn/preview/backup/index.jd b/docs/html-intl/intl/zh-cn/preview/backup/index.jd
new file mode 100644
index 0000000..39786a3
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/backup/index.jd
@@ -0,0 +1,327 @@
+page.title=自动备份应用
+page.tags=备份, 预览版资源, androidm
+page.keywords=备份, 自动备份, 预览版
+page.image=images/cards/card-auto-backup_2x.png
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文内容</h2>
+      <ol>
+        <li><a href="#overview">概览</a></li>
+        <li><a href="#configuring">配置数据备份</a></li>
+        <li><a href="#testing">测试备份配置</a></li>
+        <li><a href="#issues">已知问题</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  通常,用户需要投入大量的时间和精力在应用内创建数据和设置首选项。
+如果用户更换破损设备或升级至新设备,则保留用户数据对于确保提供卓越的用户体验至关重要。
+在这些情况下,运行 Android M 预览版系统的设备可以通过将应用数据自动备份到 Google Drive,帮助确保提供卓越的用户体验。
+
+这样,即使用户更换或升级设备,应用数据也可自动恢复。
+
+</p>
+
+<p>
+  对于运行 Android M 预览版的设备中所有已安装的应用,均可启用自动备份。无需额外提供应用代码。
+该系统允许用户选择禁止自动数据备份。
+此外,您还可以选择限制要备份应用中的哪些数据。
+</p>
+
+<p>
+  本文介绍了新系统行为,阐述了如何指定要为应用备份哪些数据。
+
+</p>
+
+<h2 id="overview">概览</h2>
+
+<p>
+  自动备份功能可以通过将应用在用户设备中创建的数据上传到用户的 Google Drive 帐户并进行加密,来保留这些数据。
+您或用户无需为数据存储付费,且保存的数据不计入用户个人的 Drive 配额。
+在 M 预览版运行期间,用户可针对每个 Android 应用存储多达 25MB 的数据。
+
+</p>
+
+<p>
+  当设备处于空闲、充电以及连接至 Wi-Fi 网络时,会每 24 小时自动备份一次数据。
+满足上述这些条件后,备份管理器服务会将所有可用的备份数据上传至云端。
+当用户改用新设备或卸载并重新安装备份的应用时,恢复操作会将备份的数据复制到新安装的应用的数据目录中。
+
+
+</p>
+
+<p class="note">
+  <strong>注:</strong>如果应用使用旧版 <a href="{@docRoot}google/backup/index.html">Android 备份服务</a>,则此新行为不适用,不过现有的备份行为会照常运行。
+
+
+</p>
+
+
+<h3 id="auto-exclude">自动排除的数据文件</h3>
+
+<p>
+  并非所有应用数据均应备份,例如临时文件和缓存文件就无需备份,因此自动备份服务会默认排除如下一些特定的数据文件:
+
+</p>
+
+<ul>
+  <li>通过 {@link android.content.Context#getCacheDir
+    getCacheDir()} 和 {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
+ 方法所引用的目录中的文件
+  </li>
+
+  <li>位于外部存储中的文件,除非这些文件是驻留在通过 
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+ 方法所引用的目录中
+  </li>
+
+  <li>位于通过 
+{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} 方法所引用的目录中的文件
+  </li>
+</ul>
+
+<h2 id="configuring">配置数据备份</h2>
+
+<p>
+  除了上一部分中列出的自动排除的文件外,凡 M 预览版设备中安装的任何应用所创建的数据均会备份。
+您可以使用应用清单文件中的设置,进一步限制和配置应用中的哪些数据需要备份。
+
+</p>
+
+<h3 id="include-exclude">包括或排除数据</h3>
+
+<p>
+  根据应用所需的数据及其保存方式,您可能需要针对包括或排除哪些特定的文件或目录设置具体的规则。
+自动备份服务支持使用 XML 配置文件和应用清单文件来设置这些备份规则。
+
+您可以在应用清单文件中指定备份架构配置文件,如下例所示:
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>
+  在此示例代码中,<code>android:fullBackupContent</code> 属性指定了一个 XML 文件。该文件名为 
+<code>mybackupscheme.xml</code>,位于应用开发项目的 <code>res/xml/</code> 目录中。
+此配置文件包括关于要备份哪些文件的规则。
+下列示例代码显示了将某一特定文件排除在备份之外的配置文件:
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;full-backup-content&gt;
+    &lt;exclude domain="database" path="device_info.db"/&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  此示例备份配置仅将一个特定数据库文件排除在备份之外。
+  所有其他文件均予以备份。
+</p>
+
+<h4>备份配置语法</h4>
+
+<p>
+  您可以通过备份服务配置指定备份中要包括或排除哪些文件。
+数据备份配置 xml 文件的语法如下:
+</p>
+
+<pre>
+&lt;full-backup-content&gt;
+    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  您可以使用下列元素和属性指定备份中要包括或排除哪些文件:
+
+</p>
+
+<ul>
+  <li>
+  <code>&lt;include&gt;</code>。如果您想指定一组要备份的资源,而不是默认由系统备份应用中的所有数据,请使用此元素。
+如果您指定了 <code>&lt;include&gt;</code> 标记,系统将仅备份使用此元素指定的资源。<em></em>
+
+
+  </li>
+
+  <li>
+  <code>&lt;exclude&gt;</code>。使用此元素指定一组要排除在备份之外的资源。
+除了使用此元素指定的资源外,系统将备份应用中的所有数据。
+
+  </li>
+
+  <li>
+  <code>domain.</code> 您想要在备份中包括或排除的资源类型。您可为此属性指定的有效值包括:
+
+  </li>
+
+  <li style="list-style: none">
+  <ul>
+    <li>
+    <code>root</code>。指定资源处于应用的根目录中
+    </li>
+
+    <li>
+    <code>file</code>。与通过 
+{@link android.content.Context#getFilesDir getFilesDir()} 方法返回的目录中的某个资源相对应
+    </li>
+
+    <li>
+    <code>database</code>。与通过 
+{@link android.content.Context#getDatabasePath getDatabasePath()} 方法或使用 
+{@link android.database.sqlite.SQLiteOpenHelper} 类返回的某个数据库相对应
+    </li>
+
+    <li>
+    <code>sharedpref</code>。与通过 {@link android.content.Context#getSharedPreferences getSharedPreferences()}
+ 方法返回的某个 {@link android.content.SharedPreferences} 对象相对应
+
+    </li>
+
+    <li>
+    <code>external</code>。指定资源位于外部存储中,且与通过 
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 方法返回的目录中的某个文件相对应
+
+    </li>
+
+    <li>
+    <code>path</code>。您想要在备份中包括或排除的资源的文件路径
+
+    </li>
+  </ul>
+  </li>
+</ul>
+
+
+<h3 id="prohibit">禁止数据备份</h3>
+
+<p>
+  通过在清单文件的应用元素中将 
+<code>android:allowBackup</code> 属性设置为 <code>false</code>,您可选择阻止自动备份任何应用数据。
+此设置如下列示例代码所示:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:allowBackup="false"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="testing">测试备份配置</h2>
+
+<p>
+  创建备份配置后,您应立即进行测试,确保应用能够保存数据,且数据能够正确恢复。
+
+</p>
+
+
+<h4>启用备份日志记录</h4>
+
+<p>
+  要帮助确定备份功能如何解析 XML 文件,请在执行测试备份之前启用日志记录功能:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
+</pre>
+
+<h4>测试备份</h4>
+
+<p>要手动运行备份,您首先必须通过调用下列命令初始化备份管理器:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr run
+</pre>
+
+<p>
+  然后,使用下列命令并以 <code>&lt;PACKAGE&gt;</code> 参数指定应用的软件包名称来手动备份应用:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
+
+
+<h4>测试恢复</h4>
+
+<p>
+  要在备份应用数据后手动启动数据恢复,请调用下列命令,并以 <code>&lt;PACKAGE&gt;</code> 参数指定应用的软件包名称:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr restore &lt;PACKAGE&gt;
+</pre>
+
+<p class="warning">
+  <b>警告:</b>执行恢复操作之前,此操作将阻止您的应用运行并擦除其数据。
+
+</p>
+
+<p>
+  您可以通过卸载并重新安装应用来启动数据恢复进程。应用安装完成后,系统会立即自动从云中恢复应用数据。
+
+</p>
+
+
+<h4>诊断备份问题</h4>
+
+<p>
+  如果遇到问题,可通过在<strong>设置 &gt; 备份</strong>中先关闭然后重新打开备份、将设备恢复出厂设置或者调用以下命令,来清除备份数据及关联的元数据:
+
+
+</p>
+
+<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
+
+<p>
+  <code>&lt;TRANSPORT&gt;</code> 值必须以 <code>com.google.android.gms</code> 为前缀。
+  要获取传输列表,请调用下列命令:
+</p>
+
+<pre>$ adb shell bmgr list transports</pre>
+
+<h2 id="issues">已知问题</h2>
+
+<p>以下是自动备份服务的已知问题:</p>
+
+<ul>
+  <li><strong>Google 云消息传递</strong>:对于使用 Google 云消息传递推送通知的应用,存在一个已知问题,即:备份通过 Google 云消息传递注册所返回的注册 ID 时,可能会中断已恢复应用的推送通知。为此,应用安装到新设备后,务必查询 API,看是否具有新注册 ID,这一点至关重要。如果已备份旧注册 ID,则不会出现这种情况。
+
+
+
+
+为避免这种现象,请从已备份文件集中排除注册 ID。
+
+  </li>
+</ul>
diff --git a/docs/html-intl/intl/zh-cn/preview/download.jd b/docs/html-intl/intl/zh-cn/preview/download.jd
new file mode 100644
index 0000000..ba5249a
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/download.jd
@@ -0,0 +1,359 @@
+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/app-linking.jd b/docs/html-intl/intl/zh-cn/preview/features/app-linking.jd
new file mode 100644
index 0000000..77a532f
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/features/app-linking.jd
@@ -0,0 +1,123 @@
+page.title=应用链接
+page.image=images/cards/card-app-linking_2x.png
+page.keywords=应用链接, 深层链接, 意向
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文内容</h2>
+      <ol>
+        <li><a href="#web-assoc">声明网站关联</a></li>
+        <li><a href="#verfy-links">请求应用链接验证</a></li>
+        <li><a href="#user-manage">管理应用链接设置</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Android 意向系统是一种让应用能够处理内容和请求的灵活机制。
+  可能会有多个应用在其意向过滤器中声明一致的 URI 模式。如果用户点击的 Web 链接没有默认的启动处理程序,平台可能会显示一个对话框,让用户从一系列已声明一致意向过滤器的应用中进行选择。
+
+
+</p>
+
+<p>
+  Android M 开发者预览版引入了对应用链接的支持,后者在现有链接处理方式基础上进行了改进,允许应用开发者将应用与他们拥有的 Web 域进行关联。
+当开发者创建此关联时,平台可以自动确定在处理特定 Web 链接时默认使用的应用,略过询问用户的步骤。
+
+
+</p>
+
+
+<h2 id="web-assoc">声明网站关联</h2>
+
+<p>
+  网站所有者必须声明与应用的关联才能建立应用链接。网站所有者可以通过在域上众所周知的位置承载一个名为 {@code statements.json} 的 JSON 文件声明与应用的关系:
+
+
+</p>
+
+<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<p class="note">
+  <strong>注:</strong>
+  在 M 开发者预览版运行期间,系统会通过 HTTP 协议对该 JSON 文件进行验证。当平台正式发布后,系统将通过 HTTPS 加密协议对该文件进行验证。
+
+</p>
+
+<p>
+  该 JSON 文件指定应作为该域下 URL 默认处理程序使用的 Android 应用。
+它根据以下字段标识该应用:
+</p>
+
+<ul>
+  <li>{@code package_name}:该应用的清单文件中声明的软件包名称;</li>
+
+  <li>{@code sha256_cert_fingerprints}:应用签名证书的 SHA256 指纹。
+    您可以利用 Java 密钥工具,通过以下命令生成该指纹:
+    <pre>keytool -list -v -keystore my-release-key.keystore</pre>
+  </li>
+</ul>
+
+<p>
+  以下文件清单显示的是一个 
+{@code statements.json} 文件的内容和格式示例:
+</p>
+
+<pre>
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "<strong>&lt;package name&gt;</strong>",
+    "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+  }
+}]
+</pre>
+
+
+<h2 id="verfy-links">请求应用链接验证</h2>
+
+<p>
+  应用可以请求平台自动根据相应 Web 域上承载的 {@code statements.json} 文件验证由其意向过滤器数据元素内的主机名称定义的任何应用链接。
+
+要请求应用链接验证,请按以下清单文件代码段中所示向清单文件中所需的每个意向过滤器添加一个 {@code android:autoVerify}
+ 属性:
+
+</p>
+
+<pre>
+&lt;activity ...&gt;
+    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+        &lt;action android:name="android.intent.action.VIEW" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>
+  如果应用清单文件中存在 {@code android:autoVerify} 属性,平台会在安装应用时尝试验证应用链接。
+如果平台无法成功验证应用链接,则不会将应用设置为处理 Web 链接的首选应用。
+用户下一次打开其中一个链接时,平台将退回原有模式,向用户显示一个对话框。
+
+
+</p>
+
+<p class="note">
+  <strong>注:</strong>在测试时,如果验证失败,但用户已经使用系统的“设置”应用显式允许应用在不询问用户的情况下打开受支持的链接,则可能会出现误报。在这种情况下,不会显示对话框,链接会直接指向您的应用,不过这完全是由于用户设置的缘故,并不是因为验证成功。
+
+
+
+</p>
+
+
+<h2 id="user-manage">管理应用链接设置</h2>
+
+<p>
+  用户可以更改应用链接设置,让系统按首选方式处理 URL。您可以在系统“设置”应用的<strong>设置 &gt; 应用 &gt; 应用信息 &gt; 默认打开</strong>下查看和管理应用链接。
+
+
+</p>
diff --git a/docs/html-intl/intl/zh-cn/preview/index.jd b/docs/html-intl/intl/zh-cn/preview/index.jd
new file mode 100644
index 0000000..19b4b78
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/index.jd
@@ -0,0 +1,67 @@
+page.title=Android M 开发者预览版
+page.tags="preview",
+meta.tags="preview, M preview", androidm
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android M 开发者预览版</h1>
+        <p class="dac-hero-description">
+          准备迎接 Android 的下一版本。在 Nexus 5、6、9 和 Player 中测试应用。
+了解新功能:<strong>运行权限</strong>、<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>
+      </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>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <h1 class="dac-section-title">资源</h1>
+  <div class="dac-section-subtitle">
+    帮助您的应用准备使用 Android M 的必备信息。
+  </div>
+ 
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/more"
+       data-cardSizes="6x6"
+       data-maxResults="16"></div>
+
+    <ul class="dac-section-links">
+      <li class="dac-section-link">
+        <a href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          报告问题
+</a>
+      </li> 
+      <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
+        <span class="dac-sprite dac-auto-chevron"></span>
+        加入 G+ 社区
+</a>
+      </li>
+    </ul>
+  </div>
+</section>
+
diff --git a/docs/html-intl/intl/zh-cn/preview/license.jd b/docs/html-intl/intl/zh-cn/preview/license.jd
new file mode 100644
index 0000000..31363be
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/license.jd
@@ -0,0 +1,143 @@
+page.title=许可协议
+
+@jd:body
+
+<p>
+在开始使用 Android SDK 预览版之前,您必须同意下列条款和条件。正如下文所述,请注意:这是 Android SDK 的预览版本,可能随时更改,恕不另行通知,您使用此版本的风险由您自行承担。
+Android SDK 预览版并非稳定版本,可能包含会对您的计算机系统、设备和数据造成损害的错误和缺陷。
+</p>
+
+<p>
+本协议是 Android SDK 预览版许可协议(以下称为“许可协议”)。
+</p>
+<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
+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>
\ 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
new file mode 100644
index 0000000..9f16319
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/samples.jd
@@ -0,0 +1,70 @@
+page.title=示例
+page.image=images/cards/samples-new_2x.png
+@jd:body
+
+<p>
+  以下是 M 开发者预览版的代码示例。要在 Android Studio 中下载示例,请选择<b>文件 &gt; 导入示例</b>菜单选项。
+
+</p>
+
+<p class="note">
+  <strong>注:</strong>这些可下载的项目设计用于与 Gradle 和 Android Studio 结合使用。
+
+</p>
+
+
+<h3 id="RuntimePermissions">运行时权限</h3>
+
+<p>
+ Android M 改变了系统权限运行的方式。系统会在运行时(而不是安装期间)要求用户批准权限请求。
+此示例显示了如何请求这些权限。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-RuntimePermissions">在 GitHub 中获取</a></p>
+
+<h3 id="ConfirmCredentials">确认凭据</h3>
+
+<p>
+ 此示例演示了在您的应用中如何使用设备凭据作为身份验证方法。
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">在 GitHub 中获取</a>
+</p>
+
+<h3 id="FingerprintDialog">指纹对话框</h3>
+
+<p>
+ 此示例演示了在您的应用中如何识别已注册的指纹以验证用户的身份。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-FingerprintDialog">在 GitHub 中获取</a></p>
+
+<h3 id="AutomaticBackup">自动备份应用</h3>
+
+<p>
+ Android M 引入了自动备份应用设置功能。此示例演示如何向应用添加筛选规则,以管理设置备份。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">在 GitHub 中获取</a></p>
+
+<h3 id="CameraRaw">相机 2 RAW</h3>
+
+<p>
+  演示如何使用 <code>Camera2</code> API 捕获 RAW 相机缓冲区并将其另存为 <code>DNG</code> 文件。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-Camera2Raw">在 GitHub 中获取</a></p>
+
+<h3 id="ActiveNotification">活动通知</h3>
+
+<p>
+  此示例演示 <a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a>
+ 如何让您了解应用当前显示的通知数量。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">在 GitHub 中获取</a></p>
diff --git a/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd b/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd
new file mode 100644
index 0000000..e9910b4
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd
@@ -0,0 +1,207 @@
+page.title=设置预览版 SDK
+page.image=images/cards/card-set-up_16-9_2x.png
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文内容</h2>
+      <ol>
+        <li><a href="#get-as13">获取 Android Studio 1.3</a></li>
+        <li><a href="#get-sdk">获取预览版 SDK</a></li>
+        <li><a href="#create-update">创建或更新项目</a></li>
+        <li><a href="#setup-test">测试设置</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>M 开发者预览版 SDK 可通过 Android SDK 管理器获取。本文假定您熟悉 Android 应用开发的相关操作,例如:使用 Android SDK 管理器和创建项目。
+
+如果您是首次使用 Android,请先参阅<a href="{@docRoot}training/basics/firstapp/index.html">开发您的第一款应用</a>培训课程。</a>
+
+</p>
+
+<h2 id="get-as13">获取 Android Studio 1.3</h2>
+
+<p>开发者预览版与处于预览版状态的 Android Studio 1.3 结合使用时效果最佳。
+强烈建议您安装 Android Studio 1.3 的预览版本,以便与预览版 SDK 结合使用。
+</p>
+
+<p class="caution"><strong>注意:</strong>Android Studio 1.3 的 Canary 预览版仍处于活动的开发状态。
+如果您正使用主要开发机器测试开发者预览版,则可创建另一套 Android Studio 安装系统供测试使用。
+
+</p>
+
+<p>要安装 Android Studio 1.3 预览版,请执行以下操作:</p>
+
+<ol>
+  <li>下载并启动 <a href="{@docRoot}tools/studio/index.html">Android Studio</a>。
+
+  </li>
+
+  <li>打开<strong>设置</strong>窗口(在 Windows 中,您可通过选择<strong>文件 &gt; 设置</strong>执行此操作)。
+选择<strong>外观和行为 &gt; 系统设置 &gt; 更新</strong>面板。
+
+
+
+    <p class="aside">在 OSX 中,您可在 Android Studio 的<strong>首选项</strong>窗口中找到<strong>外观和行为</strong>面板。
+
+</p>
+  </li>
+
+  <li> 在<strong>更新</strong>面板中,选择选项<strong>自动检查更新:
+Canary 渠道</strong>。
+  </li>
+
+  <li>在<strong>更新</strong>面板中,选择<strong>立即检查</strong>,以检查最新的 Canary 内部版本。
+当系统出现提示时,请下载并安装该内部版本。
+
+  </li>
+</ol>
+
+<h2 id="get-sdk">获取预览版 SDK</h2>
+
+<p>要将预览版 SDK 组件添加到开发环境,请执行以下操作:</p>
+
+<ol>
+  <li>启动 Android Studio 1.3 预览版。
+  </li>
+
+  <li>打开<strong>设置</strong>窗口(在 Windows 中,您可通过选择<strong>文件 &gt; 设置</strong>执行此操作)。
+选择<strong>外观和行为 &gt; 系统设置 &gt; 更新</strong>面板。
+
+
+
+    <p class="aside">在 OSX 中,您可在 Android Studio 的<strong>首选项</strong>窗口中找到<strong>外观和行为</strong>面板。
+
+</p>
+  </li>
+
+  <li>在<strong>更新</strong>面板中,选择选项<strong>自动检查更新:
+Canary 渠道</strong>和<strong>自动检查 Android SDK 的更新:
+预览版渠道</strong>。
+  </li>
+
+  <li>启动 <strong>Android SDK 管理器</strong>。(对于 Android Studio 1.3,SDK 管理器已集成至 Android Studio,而不是独立应用。)
+
+
+  </li>
+
+  <li>在<strong>平台</strong>部分下,选择 <strong>Android MNC 预览版</strong>。
+
+  </li>
+
+  <li>在<strong>工具</strong>部分中,选择最新的 Android <strong>SDK 工具</strong>、<strong>平台工具</strong>和<strong>构建工具</strong>。
+
+
+  </li>
+
+  <li>点击<strong>安装软件包</strong>并接受所有软件包的许可协议。
+
+  </li>
+
+  <li>验证是否已安装 M 开发者预览版,具体方式如下:打开<strong>设置</strong>窗口并选择<strong>外观与行为 &gt; 系统设置 &gt; Android SDK</strong> 面板。
+
+</li>
+
+  <li>在 <strong>Android SDK</strong> 面板中,选择 <strong>SDK 平台</strong>选项卡。
+<strong>Android MNC 预览版</strong>应作为“已安装”列出<em></em>。
+另外,打开 <strong>SDK 工具</strong>选项卡,确认是否已安装最新工具。
+
+
+  </li>
+</ol>
+<p>完成上述步骤后,预览版组件即可用于您的开发环境。
+ </p>
+
+
+<h2 id="create-update">创建或更新项目</h2>
+
+<p>
+  为使用预览版 API,您必须创建或更新一个使用预览版组件的开发项目。
+
+</p>
+
+
+<h3 id="create">创建新项目</h3>
+
+<p>
+  建议使用 Android Studio 创建一个使用该预览版的项目。按照<a href="{@docRoot}sdk/installing/create-project.html">创建项目</a>中所描述的步骤操作,直到转到项目向导中的“外形”<em></em>屏幕为止。
+
+然后执行下列步骤,创建为该预览版配置的项目。
+
+</p>
+
+<ul>
+  <li>选中<strong>手机和平板电脑</strong>。</li>
+  <li>选择 <strong>MNC:Android M (预览版)</strong>(在<strong>最低 SDK</strong> 中)。
+</li>
+</ul>
+
+
+<h3 id="update">更新现有项目</h3>
+
+<p>
+  对于现有项目,您必须修改项目配置以启用预览版 API。在开发环境中,打开模块的 <code>build.gradle</code> 文件,并按如下所示设置这些值:
+
+
+</p>
+
+<ul>
+  <li>将 <code>compileSdkVersion</code> 设置为 <code>'android-MNC'</code></li>
+  <li>将 <code>minSdkVersion</code> 设置为 <code>'MNC'</code></li>
+  <li>将 <code>targetSdkVersion</code> 设置为 <code>'MNC'</code></li>
+</ul>
+
+
+<h2 id="setup-test">测试设置</h2>
+
+<p>
+  要使用预览版测试应用,您必须拥有已配置平台预览版本的物理设备或虚拟设备。
+如果您拥有兼容设备,则可安装预览版平台进行测试。
+另外,您可以配置用于测试的虚拟设备。
+</p>
+
+<h3 id="setup-device">设置物理设备</h3>
+
+<p>
+  如果您拥有 Nexus 5、Nexus 6、Nexus 9 或 Android TV,则可在这些设备中安装预览版系统映像,来测试您的应用。通过使用 Android 虚拟设备管理器工具,您可从 Android Studio 内设置带有平台预览版本的虚拟设备。
+
+
+
+</p>
+
+<p class="caution">
+  <strong>重要说明:</strong>在设备中安装预览版映像会删除此设备中的所有数据,因此您应在安装预览版映像之前备份数据。<em></em>
+
+</p>
+
+<h3 id="setupAVD">设置虚拟设备</h3>
+
+<p>
+  通过使用 Android 虚拟设备管理器工具,您可从 Android Studio 内设置带有平台预览版本的虚拟设备。
+
+</p>
+
+<p>要使用 AVD 管理器创建 AVD,请执行以下操作:</p>
+
+<ol>
+  <li>在开发环境中安装预览版 SDK,如<a href="{@docRoot}preview/setup-sdk.html">设置预览版 SDK</a> 中所述。
+
+</li>
+  <li>按照<a href="{@docRoot}tools/devices/managing-avds.html">使用 AVD 管理器管理 AVD </a>中的步骤操作。
+
+使用以下设置:
+    <ul>
+      <li><strong>设备:</strong>Nexus 5、Nexus 6、Nexus 9 或 Android TV</li>
+      <li><strong>目标:</strong>
+       Android M(预览版)- API 级别 M</li>
+      <li><strong>ABI:</strong>x86</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  如需了解有关创建测试用虚拟设备的详细信息,请参阅<a href="{@docRoot}tools/devices/index.html">管理虚拟设备</a>。
+</p>
diff --git a/docs/html-intl/intl/zh-cn/preview/testing/guide.jd b/docs/html-intl/intl/zh-cn/preview/testing/guide.jd
new file mode 100644
index 0000000..256d5bb
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/testing/guide.jd
@@ -0,0 +1,187 @@
+page.title=测试指南
+page.image=images/cards/card-build_16x9_2x.png
+page.keywords=预览资源,androidm,测试,权限
+
+@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 M 开发者预览版,您有机会确保应用可使用下一平台版本。
+如 <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">瞌睡模式和应用待机模式</a>
+  </li>
+  <li><a href="#ids">自动备份和设备标识符</a></li>
+</ul>
+
+<p>
+  如需了解有关如何使用预览版系统映像设置设备或虚拟设备以进行测试的详细信息,请参阅<a href="{@docRoot}preview/setup-sdk.html">设置预览版 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] &lt;permission.name&gt; ...</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#">设置预览版 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>使用 M 预览版系统映像配置硬件设备或虚拟设备</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>使用 M 预览版系统映像配置硬件设备或虚拟设备</li>
+  <li>将设备连接到开发计算机并安装应用</li>
+  <li>运行应用并使其保持活动状态</li>
+  <li>通过运行以下命令,模拟进入待机模式的应用:
+
+<pre>
+$ adb shell am broadcast -a android.os.action.DISCHARGING
+$ adb shell am set-idle &lt;packageName&gt; true
+</pre>
+
+  </li>
+  <li>使用以下命令模拟如何唤醒应用:
+    <pre>$ adb shell am set-idle &lt;packageName&gt; 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/testing/performance.jd b/docs/html-intl/intl/zh-cn/preview/testing/performance.jd
new file mode 100644
index 0000000..1f88854
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/preview/testing/performance.jd
@@ -0,0 +1,656 @@
+page.title=测试显示性能
+page.image=images/cards/card-test-performance_2x.png
+page.keywords=性能, fps, 工具
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文内容</h2>
+      <ol>
+        <li><a href="#measure">测量 UI 性能</a>
+          <ul>
+            <li><a href="#aggregate">聚合帧统计信息</a></li>
+            <li><a href="#timing-info">精确的帧时间信息</a></li>
+            <li><a href="#timing-dump">简单的帧时间转储</a></li>
+            <li><a href="#collection-window">控制统计信息收集的时段</a></li>
+            <li><a href="#diagnose">诊断性能回归</a></li>
+            <li><a href="#resources">其他资源</a></li>
+          </ul>
+        </li>
+        <li><a href="#automate">自动化 UI 性能测试</a>
+          <ul>
+            <li><a href="#ui-tests">设置 UI 测试</a></li>
+            <li><a href="#automated-tests">设置自动化 UI 测试</a></li>
+            <li><a href="#triage">分类并解决观察到的问题</a></li>
+          </ul>
+        </li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  用户界面 (UI) 性能测试可确保您的应用不仅满足其功能要求,同时确保用户与应用之间的交互顺畅无比,能够以每秒连续 60 帧(<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">为什么选择 60fps?</a>)的帧速运行,而不会出现任何帧丢失或延迟的现象,也就是我们通常所说的“卡顿”。<em></em>
+
+
+本文档介绍可用于测量 UI 性能的工具并提出一种将 UI 性能测量集成到测试实践中的方法。
+
+
+</p>
+
+
+<h2 id="measure">测量 UI 性能</h2>
+
+<p>
+  为了改善性能,您首先必须能够测量系统性能,然后诊断并识别可能来自管道各个部分的问题。
+
+
+</p>
+
+<p>
+  <a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a> 是一种在设备上运行并转储感兴趣的系统服务状态信息的 Android 工具。<em></em>
+
+通过向 dumpsys 传递“gfxinfo”命令,可以提供 logcat 格式的输出,其中包含有关与录制阶段期间发生的动画帧相关的性能信息。
+
+<em></em>
+</p>
+
+<pre>
+&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
+</pre>
+
+<p>
+  此命令可以生成多个不同表达形式的帧时间数据。
+</p>
+
+<h3 id="aggregate">聚合帧统计信息</h3>
+
+<p>
+  借助 M 预览版,该命令可将在整个进程生命周期中收集的帧数据的聚合分析打印输出到 logcat。
+例如:
+</p>
+
+<pre class="noprettyprint">
+Stats since: 752958278148ns
+Total frames rendered: 82189
+Janky frames: 35335 (42.99%)
+90th percentile: 34ms
+95th percentile: 42ms
+99th percentile: 69ms
+Number Missed Vsync: 4706
+Number High input latency: 142
+Number Slow UI thread: 17270
+Number Slow bitmap uploads: 1542
+Number Slow draw: 23342
+</pre>
+
+<p>
+  这些高级统计信息可以较高水平地传达应用的呈现性能及其在多个帧之间的稳定性。
+
+</p>
+
+
+<h3 id="timing-info">精确的帧时间信息</h3>
+
+<p>
+  M 预览版附带提供了一个适用于 gfxinfo 的新命令,即:framestats,该命令根据最近的帧提供非常详细的帧时间信息,让您能够更准确地查出并调试问题。<em></em>
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
+</pre>
+
+<p>
+  此命令根据应用生成的最后 120 帧,打印输出带有纳秒时间戳的帧时间信息。以下是来自 adb dumpsys gfxinfo &lt;软件包名称&gt; framestats 的原始输出示例:
+
+
+</p>
+
+<pre class="noprettyprint">
+0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
+0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
+0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
+0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
+</pre>
+
+<p>
+  每行输出均代表应用生成的一帧。每行都有固定的列数,用于描述帧生成管道的每个阶段所花的时间。
+下文将详细描述此格式,包括每列代表的具体内容。
+
+</p>
+
+
+<h4 id="fs-data-format">Framestats 数据格式</h4>
+
+<p>
+  由于数据块是 CSV 格式的输出,因此将其粘贴到所选的电子表格工具或使用脚本进行收集和解析非常简单。
+下表解释了输出数据列的格式。
+所有时间戳均以纳秒计。
+</p>
+
+<ul>
+  <li>标志
+    <ul>
+      <li>“标志”列带有“0”的行可以通过从 FRAME_COMPLETED 列中减去 INTENDED_VSYNC 列计算得出总帧时间。
+
+      </li>
+
+      <li>该列为非零值的行将被忽略,因为其对应的帧已被确定为偏离正常性能,其布局和绘制时间预计超过 16 毫秒。
+
+可能出现这种情况有如下几个原因:
+        <ul>
+          <li>窗口布局发生变化(例如,应用的第一帧或在旋转后)
+
+          </li>
+
+          <li>此外,如果帧的某些值包含无意义的时间戳,则也可能跳过该帧。
+例如,如果帧的运行速度超过 60fps,或者如果屏幕上的所有内容最终都准确无误,则可能跳过该帧,这不一定表示应用中存在问题。
+
+
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>INTENDED_VSYNC
+    <ul>
+      <li>帧的预期起点。如果此值不同于 VSYNC,则表示 UI 线程中发生的工作使其无法及时响应垂直同步信号。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>VSYNC
+    <ul>
+      <li>所有垂直同步侦听器中使用的时间值和帧绘图(Choreographer 帧回调、动画、View.getDrawingTime() 等等)
+
+      </li>
+
+      <li>如需进一步了解 VSYNC 及其对应用产生的影响,请观看<a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">了解 VSYNC</a> 视频。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>OLDEST_INPUT_EVENT
+    <ul>
+      <li>输入队列中最早输入事件的时间戳或 Long.MAX_VALUE(如果帧没有输入事件)。
+
+      </li>
+
+      <li>此值主要用于平台工作,对应用开发者的作用有限。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>NEWEST_INPUT_EVENT
+    <ul>
+      <li>输入队列中最新输入事件的时间戳或 0(如果帧没有输入事件)。
+
+      </li>
+
+      <li>此值主要用于平台工作,对应用开发者的作用有限。
+
+      </li>
+
+      <li>但是,可以通过查看 (FRAME_COMPLETED - NEWEST_INPUT_EVENT) 大致了解应用增加的延迟时间。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>HANDLE_INPUT_START
+    <ul>
+      <li>将输入事件分派给应用的时间戳。
+      </li>
+
+      <li>通过观察此时间戳与 ANIMATION_START 之间的时差,可以测量应用处理输入事件所花的时间。
+
+      </li>
+
+      <li>如果这个数字较高(&gt; 2 毫秒),则表明应用处理 View.onTouchEvent() 等输入事件所花的时间太长,这意味着此工作需要进行优化或转交给其他线程。
+
+请注意,有些情况下(例如,启动新Activity或类似活动的点击事件),这个数字较大是预料之中并且可以接受的。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ANIMATION_START
+    <ul>
+      <li>在 Choreographer 中注册的动画运行的时间戳。
+      </li>
+
+      <li>通过观察此时间戳与 PERFORM_TRANVERSALS_START 之间的时差,可以确定评估正在运行的所有动画(ObjectAnimator、ViewPropertyAnimator 和通用转换)所需的时间。
+
+
+      </li>
+
+      <li>如果这个数字较高(&gt; 2 毫秒),请检查您的应用是否编写了任何自定义动画,或检查 ObjectAnimator 在对哪些字段设置动画并确保它们适用于动画。
+
+
+      </li>
+
+      <li>如需了解有关 Choreographer 的更多信息,请观看<a href="https://developers.google.com/events/io/sessions/325418001">利弊</a>视频。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>PERFORM_TRAVERSALS_START
+    <ul>
+      <li>如果您从此值中扣除 DRAW_START,则可推断出完成布局和测量阶段所需的时间(请注意,在滚动或动画期间,您会希望此时间接近于零)。
+
+
+      </li>
+
+      <li>如需了解有关呈现管道的测量和布局阶段的更多信息,请观看<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">失效、布局和性能</a>视频。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>DRAW_START
+    <ul>
+      <li>performTraversals 绘制阶段的开始时间。这是记录任何失效视图的显示列表的起点。
+
+      </li>
+
+      <li>此时间与 SYNC_START 之间的时差就是对树中的所有失效视图调用 View.draw() 所需的时间。
+
+      </li>
+
+      <li>如需了解有关绘图模型的详细信息,请参阅<a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">硬件加速</a>或<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">失效、布局和性能</a>视频。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SYNC_START
+    <ul>
+      <li>绘制同步阶段的开始时间。
+      </li>
+
+      <li>如果此时间与 ISSUE_DRAW_COMMANDS_START 之间的时差较大(约 &gt; 0.4 毫秒),则通常表示绘制了大量必须上传到 GPU 的新位图。
+
+
+      </li>
+
+      <li>如需进一步了解同步阶段,请观看 <a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">GPU 呈现模式分析</a>视频。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ISSUE_DRAW_COMMANDS_START
+    <ul>
+      <li>硬件呈现器开始向 GPU 发出绘图命令的时间。
+      </li>
+
+      <li>此时间与 FRAME_COMPLETED 之间的时差让您可以大致了解应用生成的 GPU 工作量。
+绘制过度或呈现效果不佳等问题都会在此显示出来。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SWAP_BUFFERS
+    <ul>
+      <li>调用 eglSwapBuffers 的时间,此调用不属于平台工作,相对乏味。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>FRAME_COMPLETED
+    <ul>
+      <li>全部完成!处理此帧所花的总时间可以通过执行 FRAME_COMPLETED - INTENDED_VSYNC 计算得出。
+
+      </li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>
+  您可以通过不同的方法使用此数据。一种简单却有用的可视化方式就是在不同的延迟时段中显示帧时间 (FRAME_COMPLETED - INTENDED_VSYNC) 分布的直方图(参见下图)。
+
+此图直观地表明,大部分帧非常有效,截止时间远低于 16 毫秒(显示为红色),但是少数帧明显超出了截止时间。
+
+我们可以观察此直方图中的变化趋势,了解所产生的整体变化或新异常值。
+此外,您还可以根据数据中的多个时间戳绘制表示输入延迟、布局所用时间或其他类似关注指标的图形。
+
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-framestats.png">
+
+
+<h3 id="timing-dump">简单的帧时间转储</h3>
+
+<p>
+  如果在“开发者选项”中将 <strong>GPU 呈现模式分析</strong>设置为<strong>在 adb shell dumpsys gfxinfo 中</strong>,则 <code>adb shell dumpsys gfxinfo</code> 命令会打印输出最近 120 帧的时间信息,这些信息分为几个不同的类别,其相应的值以制表符分隔。
+
+
+这些数据可以用于大致表明绘图管道的哪些部分可能速度较慢。
+
+</p>
+
+<p>
+  与上述 <a href="#fs-data-format">framestats</a> 类似,将其粘贴到所选的电子表格工具或使用脚本进行收集和解析同样非常简单。
+
+下图详细显示了应用生成的许多帧的具体时间分布。
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
+
+<p>
+  运行 gfxinfo、复制输出、将其粘贴到电子表格应用并将数据绘制成堆积条形图的结果。
+
+</p>
+
+<p>
+  每个垂直条均代表一个动画帧;其高度代表计算该动画帧所需的毫秒数。
+垂直条的每个彩色分段均代表呈现管道的一个不同阶段,因此您可以看到应用的哪些部分可能会出现瓶颈。
+
+如需了解有关呈现管道的详细信息,请参阅<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">失效、布局和性能</a>视频。
+
+
+</p>
+
+
+<h3 id="collection-window">控制统计信息收集的时段</h3>
+
+<p>
+  Framestats 和简单的帧计时均可在极短的时间内(相当于约呈现 2 秒)收集数据。
+要精确控制此时间范围(例如,将数据限制于特定动画),您可以重置所有计数器并汇总收集的统计信息。
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
+</pre>
+
+<p>
+  这也可以与转储命令结合使用来定期进行收集和重置,从而持续捕获时间范围不到 2 秒的帧。
+
+
+</p>
+
+
+<h3 id="diagnose">诊断性能回归</h3>
+
+<p>
+  要查出问题并保持应用运行状况良好,第一步最好是识别回归。
+但是,dumpsys 仅确定是否存在问题及其相对严重性。
+您仍需诊断性能问题的具体原因并找到适当的解决方法。
+为此,我们强烈建议您使用 <a href="{@docRoot}tools/help/systrace.html">systrace</a> 工具。
+
+</p>
+
+
+<h3 id="resources">其他资源</h3>
+
+<p>
+  如需了解有关 Android 呈现管道的工作原理、可能存在的常见问题以及如何解决这些问题的详细信息,以下其他资源可能对您有所帮助:
+
+
+</p>
+
+<ul>
+  <li>呈现性能 101
+  </li>
+  <li>为什么选择 60fps?
+  </li>
+  <li>Android UI 和 GPU
+  </li>
+  <li>失效、布局和性能
+  </li>
+  <li>使用 Systrace 分析 UI 性能
+  </li>
+</ul>
+
+
+<h2 id="automate">自动化 UI 性能测试</h2>
+
+<p>
+  UI 性能测试方法之一是让测试人员对目标应用执行一系列用户操作,并目视检查是否存在卡顿现象,或花费大量时间使用工具驱动型方法来查明是否存在卡顿现象。
+
+但是,这种人工方法充满风险:人为感知帧率变化的能力参差不齐,并且此过程又费时、繁琐且易于出错。
+
+
+</p>
+
+<p>
+  更为有效的方法是记录并分析自动化 UI 测试中的关键性能指标。
+Android M 开发者预览版包括新的日志记录功能。利用这些功能,您可以轻松确定应用动画中的卡顿数量和严重性,您还可以使用这些功能构建严格的流程,用于确定当前性能并跟踪未来的性能目标。
+
+
+
+</p>
+
+<p>
+  本文将向您介绍一种使用这些数据自动化性能测试的推荐方法。
+
+</p>
+
+<p>
+  此方法主要分为两个关键操作。首先,确定测试对象和测试方法;其次,设置和维护自动化测试环境。
+
+
+</p>
+
+
+<h3 id="ui-tests">设置 UI 测试</h3>
+
+<p>
+  在开始进行自动化测试之前,您必须做出一些较高层次的决策,以便准确了解测试空间和可能存在的需求。
+
+</p>
+
+<h4>
+  识别要测试的关键动画/流程
+</h4>
+
+<p>
+  请记住,流畅的动画中断时,用户对低劣性能的感触最深。
+因此,在识别要测试的 UI 操作类型时,集中精力处理用户最常见或对用户体验最为重要的关键动画非常有用。
+
+例如,以下是对识别有所帮助的一些常见场景:
+</p>
+
+<ul>
+  <li>滚动主要的 ListView 或 RecyclerView
+  </li>
+
+  <li>异步等待周期内的动画
+  </li>
+
+  <li>可能涉及位图加载/操纵的所有操作
+  </li>
+
+  <li>包括 Alpha 值混合处理在内的动画
+  </li>
+
+  <li>使用画布绘制的自定义视图
+  </li>
+</ul>
+
+<p>
+  与团队中的工程师、设计师和产品经理开展合作,优先处理测试覆盖范围内的这些关键产品动画。
+
+</p>
+
+<h4>
+  定义未来的目标并予以跟踪
+</h4>
+
+<p>
+  从较高层面来看,确定具体的性能目标、专注于编写测试并收集相关数据至关重要。
+例如:
+</p>
+
+<ul>
+  <li>您是否只是首次想要开始跟踪 UI 性能以了解详情?
+  </li>
+
+  <li>您是否想要防止未来可能引入的性能回归?
+  </li>
+
+  <li>您当前是否有 90% 的帧运行顺畅且希望在本季度达到 98%?
+  </li>
+
+  <li>您是否有 98% 的帧运行顺畅且不希望出现性能回归?
+  </li>
+
+  <li>提高低端设备上的性能是否为您的目标?
+  </li>
+</ul>
+
+<p>
+  在所有这些情况下,您都将需要进行历史跟踪,以显示多个应用版本中的性能。
+
+</p>
+
+<h4>
+  识别用于测试的设备
+</h4>
+
+<p>
+  应用性能因其所在设备而异。某些设备的内存可能更少,GPU 功能略弱或 CPU 芯片速度较慢。
+这意味着动画在一套硬件上表现良好,但在其他硬件上可能并非如此,而且可能因为其他管道部分中出现的瓶颈表现更为糟糕。
+
+因此,考虑到用户可能会看到的这种变化,请选取各种设备(包括当前的高端设备、低端设备、平板电脑等)来执行测试。
+
+找出 CPU 性能、RAM、屏幕密度、尺寸等方面的变化。
+在高端设备上顺利通过的测试在低端设备上可能会失败。
+
+</p>
+
+<h4>
+  基本的 UI 测试框架
+</h4>
+
+<p>
+  <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> 和 <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a> 等测试套件是为了帮助自动化用户使用应用过程中的操作而构建。
+
+这些套件是模拟用户与您的设备进行交互的简单框架。
+要使用这些框架,您需要有效创建通过一组用户操作运行的独特脚本,并在设备中演示这些脚本。
+
+
+</p>
+
+<p>
+  通过结合这些自动化测试以及 <code>dumpsys gfxinfo</code>,您可以快速创建可再生成的系统,然后您可使用此系统执行测试并测量特定条件的性能信息。
+
+
+</p>
+
+
+<h3 id="automated-tests">设置自动化 UI 测试</h3>
+
+<p>
+  您能够执行 UI 测试并拥有从单一测试收集数据的管道后,下一个重要步骤就是采用可以在多种设备上多次执行该测试的框架,并汇总生成的性能数据,以供开发团队做进一步分析。
+
+
+
+</p>
+
+<h4>
+  测试自动化框架
+</h4>
+
+<p>
+  有一点值得注意,UI 测试框架(例如,<a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>)直接在目标设备/模拟器上运行,
+而性能信息收集则是由主机通过 ADB 发送命令来驱动 dumpsys gfxinfo 完成的。<em></em>
+为帮助桥接这些单独实体的自动化,我们开发了 <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a> 框架;这是一款在主机上运行的脚本编写系统,可以向一组连接设备发出命令并从中接收数据。
+
+
+
+</p>
+
+<p>
+  为正确自动化 UI 性能测试而构建一套脚本时,至少应当能够利用 monkeyRunner 完成以下任务:
+
+</p>
+
+<ul>
+  <li>向一个或多个目标设备或模拟器加载并启动所需的 APK。
+  </li>
+
+  <li>启动 UI Automator 的 UI 测试并允许执行该测试
+  </li>
+
+  <li>通过 dumpsys gfxinfo 收集性能信息。<em></em><em></em>
+  </li>
+
+  <li>汇总信息并以有效的方式重新向开发者显示。
+  </li>
+</ul>
+
+
+<h3 id="triage">分类并解决观察到的问题</h3>
+
+<p>
+  一旦确定问题模式或回归,下一步就是识别和应用修复。
+如果自动化测试框架保持帧的精确时间分解,则可帮助您审查最近的可疑代码/布局更改(出现回归时),或在切换到人工调查时缩小分析的系统范围。
+
+
+对于人工调查,<a href="{@docRoot}tools/help/systrace.html">systrace</a> 是一个很好的着手点,它可显示有关呈现管道的每个阶段、系统中的每个线程和核心以及您定义的任何自定义事件标记的精确时间信息。
+
+
+</p>
+
+<h4>
+  准确分析时间
+</h4>
+
+<p>
+  需要注意的是,获取和测量呈现性能所需的时间并非易事。
+就其本质而言,这些数字不具有确定性,往往会随系统状态、可用内存量、热节流以及太阳耀斑到达地面的最后时间而波动。
+
+问题在于,尽管同一测试可以运行两次,但获得的结果可能略有不同,它们彼此接近,却并不完全相同。
+
+
+</p>
+
+<p>
+  以这种方式准确收集和分析数据意味着多次运行同一测试,且以平均值或中值的形式累积结果(为了简单起见,我们将其称为“批处理”)。这可为您提供测试性能的粗略近似值,而无需确切的时间。
+
+
+
+</p>
+
+<p>
+  您可对代码更改前和更改后的应用均使用批处理,了解这些更改对性能产生的相对影响。
+如果更改前批处理的平均帧率大于更改后批处理的平均帧率,则此特定更改通常可为您带来全面的性能优势。
+
+
+</p>
+
+<p>
+  这意味着您执行的任何自动化 UI 测试均应考虑这一概念以及测试期间可能出现的任何异常。
+例如,如果应用性能因某些设备问题(不是由应用引起)骤降,则您可能需要重新运行批处理以便获得更精确的时间。
+
+
+
+</p>
+
+<p>
+  那么,在获得更有意义的测量结果之前,您应运行多少次测试?至少应运行 10 次,次数越多(例如 50 或 100 次)获得的结果更精确(当然,您现在是牺牲时间换取精确度)
+
+
+</p>
diff --git a/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd b/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd
index d05e5db..21929d1 100644
--- a/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd
+++ b/docs/html-intl/intl/zh-tw/about/versions/lollipop.jd
@@ -3,22 +3,22 @@
 @jd:body
 
 
+<div style="float:right;">
+  <img src="{@docRoot}images/home/l-hero_2x.png" srcset="/images/home/l-hero.png 1x, /images/home/l-hero_2x.png 2x">
+</div>
 
 
+<p>歡迎使用 Android 5.0 Lollipop,這是目前為止規模最大、功能最強的 Android 版本!</p>
 
+<p>這個版本不僅為使用者提供了許多新功能,也為開發人員提供了數以千計的全新 API。Android 的應用領域也因此從手機、平板電腦、穿戴式裝置,進一步擴展到電視和汽車。</p>
 
+<p>如要深入瞭解全新的開發人員 API,請參閱 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 總覽</a>。如需適合一般消費者閱讀的 Android 5.0 相關資訊,請前往 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>。</p>
 
-
-
-
-  <div style="padding:0px 0px 0px 20px;float:right;margin:0 -10px 0 0">
-    <img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="460" height="300" >
-  </div>
-
-  <div class="landing-docs" style="float:right;clear:both;margin:68px 0 2em 3em;">
-  <div class="col-4 normal-links highlights" style="font-size:12px;">
-    <h3 id="thisd" >主要開發人員功能</h3>
-    <ul style="list-style-type:none;">
+<div id="qv-wrapper">
+<div id="qv">
+    <h2>主要開發人員功能</h2>
+  <ol>
+      <ul style="list-style-type:none;">
   <li><a href="#Material">實感設計</a></li>
   <li><a href="#Perf">聚焦優異效能</a></li>
   <li><a href="#Notifications">通知</a></li>
@@ -34,22 +34,11 @@
   <li><a href="#WebView">Chromium WebView</a></li>
   <li><a href="#Accessibility">協助工具和輸入功能</a></li>
   <li><a href="#Battery">用於打造低耗電應用程式的工具</a></li>
-    </ul>
+    </ol>
   </div>
 </div>
 
 
-
-
-
-
-
-<p>歡迎使用 Android 5.0 Lollipop,這是目前為止規模最大、功能最強的 Android 版本!</p>
-
-<p>這個版本不僅為使用者提供了許多新功能,也為開發人員提供了數以千計的全新 API。Android 的應用領域也因此從手機、平板電腦、穿戴式裝置,進一步擴展到電視和汽車。</p>
-
-<p>如要深入瞭解全新的開發人員 API,請參閱 <a href="{@docRoot}about/versions/android-5.0.html">Android 5.0 API 總覽</a>。如需適合一般消費者閱讀的 Android 5.0 相關資訊,請前往 <a href="http://www.android.com/versions/lollipop-5-0/">www.android.com</a>。</p>
-
 <h2 id="Material">實感設計</h2>
 
 <p>Android 5.0 將<a href="http://www.google.com/design/spec">實感設計</a>功能 (Material Design) 導入到 Android 中,並為您提供了更加完善的使用者介面工具套件,讓您輕鬆將全新的設計模式整合到應用程式中。  </p>
@@ -77,7 +66,7 @@
 </div>
 
 
-<p>您可以為按鈕、核取方塊和應用程式中的其他觸控控制項套用波紋動畫。 
+<p>您可以為按鈕、核取方塊和應用程式中的其他觸控控制項套用波紋動畫。
 
 <p>您也能以 XML 定義向量圖形可繪項目,並透過多種方式套用動畫效果。向量圖形可繪項目縮放時不會失真,因此最適合用於應用程式內的單色圖示。</p>
 
diff --git a/docs/html-intl/intl/zh-tw/index.jd b/docs/html-intl/intl/zh-tw/index.jd
index 56ae4cf..e788062 100644
--- a/docs/html-intl/intl/zh-tw/index.jd
+++ b/docs/html-intl/intl/zh-tw/index.jd
@@ -1,92 +1,89 @@
 fullpage=true
-page.viewport_width=970excludeFromSuggestions=true
-page.metaDescription=適用於 Android 開發人員的官方網站。提供適用於應用程式開發人員與設計師的 Android SDK 與文件。
-page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" /> 
+excludeFromSuggestions=true
+page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
+page.customHeadTag=<meta name="google-site-verification" content="sa-bIAI6GKvct3f61-WpRguHq-aNjtF7xJjMTSi79as" />
 
 @jd:body
 
-<div class="home-new-carousel-1">
-  <div class="fullscreen-carousel-content">
-    <div class="vcenter">
-      <div class="wrap clearfix">
+<!-- <div class="dac-hero-carousel" data-carousel-query="collection:index/carousel">
+</div> -->
+<section class="dac-hero-carousel">
 
-        <div class="static resource-flow-layout wrap col-16">
-          <div class="resource resource-card resource-card-18x6">
+<!-- <article class="dac-expand dac-hero dac-invert active" style="background-color: rgb(38, 50, 56);"> -->
+<article class="dac-expand dac-hero dac-invert active" style="background-color: #455A64;">
+<a href="/preview/index.html">
+  <div class="wrap" style="max-width:1100px;">
+    <div class="cols dac-hero-content">
+      <div class="col-10of16 col-push-6of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png"
+             srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-6of16 col-pull-10of16">
+        <div class="dac-hero-tag"></div>
 
-      <div class="landing-section-header">
-            <div class="col-10"><img src="{@docRoot}images/home/l-hero_2x.png" srcset="{@docRoot}images/home/l-hero.png 1x, {@docRoot}images/home/l-hero_2x.png 2x" width="510" style="margin:20px 30px 0 30px"></div>
-            <div class="col-5" style=" margin-top:70px ">
-            <h3 stye="font-weight:300;">Android 5.0 棒棒糖</h3>
-            <p>Android 5.0 更新新增了許多新功能到您的應用程式,例如鎖定螢幕上的通知、全新的相機 API、OpenGL ES 3.1、新的材料設計介面,還有更多其他功能。</p>
-            <a href="{@docRoot}about/versions/lollipop.html" class="landing-button landing-primary">深入了解</a>
-            </div>
-          </div>
-          </div>
-        </div>
-       <h2>&nbsp;</h2>
-        <div style="margin-top:20px;height:115px" class="resource-widget resource-flow-layout wrap col-16
-        no-section" data-query="collection:index/primary" data-resourcestyle="card"
-        data-sortorder="-timestamp" data-maxresults="3" data-cardsizes="6x2,6x2,6x2"></div> <!-- end .resource-widget -->
-      </div> <!-- end .wrap -->
-    </div> <!-- end .vcenter -->
-  </div> <!-- end .fullscreen-carousel-content -->
-</div> <!-- end .fullscreen-carousel -->
+        <h1 class="dac-hero-title">Android M Developer Preview</h1>
+        <p class="dac-hero-description">準備使用新版 Android。在 Nexus 5、6、9 和 
+        Player 上測試您的應用程式。 </p>
 
-<div class="actions-bar" style="margin-top:20px">
-  <div class="wrap">
+        <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          開始使用!
+        </a>
+      </div>
+    </div>
+  </div>
+</a>
+</article></section>
+
+<div 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">取得 SDK</a></div>
-      <div><a href="{@docRoot}samples/index.html">瀏覽範例</a></div>
-      <div><a href="//www.youtube.com/user/androiddevelopers">觀賞影片</a></div>
-      <div><a href="{@docRoot}distribute/googleplay/developer-console.html">管理您的應用程式</a></div>
+      <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="//www.youtube.com/user/androiddevelopers">
+        <span class="dac-sprite dac-auto-chevron-large"></span>
+        Watch Videos
+      </a></div>
     </div><!-- end .actions -->
   </div><!-- end .wrap -->
 </div><!-- end .actions-bar -->
 
 
 
-<div class="landing-rest-of-page">
-  <div class="landing-section">
-    <div class="wrap">
-      <div class="landing-section-header">
+<section class="dac-section dac-section-light" id="build-apps"><div class="wrap">
+  <h1 class="dac-section-title">Build Beautiful Apps</h1>
+  <div class="dac-section-subtitle">
+    Resources to get you started with designing and developing for Android.
+  </div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/primary"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
 
-            <div class="landing-h1" style="margin-top:0px">針對多螢幕世界建置</div>
-        <div class="landing-subhead" style="margin-top: 20px;">
-          Android 在全球數百萬部手持式裝置上執行, <br>
+<div class="dac-hero-carousel" data-carousel-query="collection:index/secondary/carousel">
+</div>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <div class="cols"><div class="col-10of12 col-push-1of12">
+    <h1 class="dac-section-title">針對多螢幕世界建置</h1>
+    <div class="dac-section-subtitle">
+      Android 在全球數百萬部手持式裝置上執行, <br>
           而且它現在支援這些令人興奮、各種尺寸的裝置。
-        </div>
-      </div>
-      <div class="landing-body" style="margin-top: 50px;">
-        <div class="landing-breakout cols">
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
-              <p class="landing-small">
-                為您的使用者提供可隨時隨地存取的資訊。
-            </p>
-            <p class="landing-small">
-              <a href="{@docRoot}wear/index.html">了解 Android Wear</a>
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/tv-wordmark.png"> <img src="{@docRoot}images/home/tv.png">
-              <p class="landing-small">
-                為大螢幕建置您的應用程式,並將您的內容帶到生活中。
-              </p>
-            <p class="landing-small">
-              <a href="{@docRoot}tv/index.html">了解 Android TV</a>
-
-            </p>
-          </div>
-          <div class="col-3-wide">
-              <img src="{@docRoot}images/home/auto-wordmark.png"> <img src="{@docRoot}images/home/auto.png">
-              <p class="landing-small">
-                將您的音樂應用程式延伸到車用娛樂系統。
-             </p>
-            <p class="landing-small">
-              <a href="{@docRoot}auto/index.html">了解 Android Auto</a>
-            </p>
-          </div>
-        </div>
-      </div>
-    </div>  <!-- end .wrap -->
-  </div> <!-- end .landing-section -->
\ No newline at end of file
+    </div>
+  </div></div>
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:index/multiscreen"
+       data-cardSizes="6x6"
+       data-maxResults="3"></div>
+</div></section>
diff --git a/docs/html-intl/intl/zh-tw/preview/backup/index.jd b/docs/html-intl/intl/zh-tw/preview/backup/index.jd
new file mode 100644
index 0000000..edb8b98
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/backup/index.jd
@@ -0,0 +1,327 @@
+page.title=針對應用程式進行自動備份
+page.tags=backup, previewresources, androidm
+page.keywords=backup, autobackup, preview
+page.image=images/cards/card-auto-backup_2x.png
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文件內容</h2>
+      <ol>
+        <li><a href="#overview">總覽</a></li>
+        <li><a href="#configuring">設定資料備份</a></li>
+        <li><a href="#testing">測試備份設定</a></li>
+        <li><a href="#issues">已知問題</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  使用者通常會在應用程式中花費很多時間精力建立資料和設定偏好設定。
+如果使用者換掉壞掉的裝置或升級到新的裝置時,能夠保存裝置上的資料,就能夠讓使用者獲得良好的體驗。
+執行 Android M 預覽版系統的裝置可以協助在上述情況自動將應用程式資料備份到 Google 雲端硬碟,讓使用者獲得良好的體驗。
+
+如果使用者變更或升級裝置,應用程式資料會自動儲存。
+
+</p>
+
+<p>
+  在執行 Android M 預覽版的裝置上安裝的所有應用程式,預設都會啟用自動備份。不需要任何額外的應用程式程式碼。
+系統則提供使用者不進行自動備份資料的選項。
+您也可以選擇限制要備份應用程式的哪些資料。
+</p>
+
+<p>
+  本文件說明新的系統行為,以及如何指定備份應用程式的哪些資料。
+
+</p>
+
+<h2 id="overview">總覽</h2>
+
+<p>
+  自動備份功能保存應用程式資料的方法,是將使用者裝置上建立的資料上傳到使用者的 Google 雲端硬碟帳戶,然後將資料加密。
+儲存資料不會向您或使用者收費,儲存的資料也不會計入使用者個人雲端硬碟的容量配額。
+在 M 預覽版期間,使用者最多可以為每個 Android 應用程式儲存 25 MB 的資料。
+
+</p>
+
+<p>
+  當裝置閒置、正在充電且連線到 Wi-Fi 網路時,每 24 小時會執行一次自動備份。
+當符合上述情況時,備份管理員服務就會將所有可用的備份資料上傳到雲端。
+當使用者轉換到新的裝置,或者解除安裝又重新安裝已備份的應用程式時,系統會進行一項還原作業,將備份的資料複製到新安裝之應用程式的資料目錄。
+
+
+</p>
+
+<p class="note">
+  <strong>注意:</strong>如果您的應用程式使用舊版
+ <a href="{@docRoot}google/backup/index.html">Android 備份服務</a>,這個新的行為就不適用,現有的備份行為還是如往常運作。
+
+</p>
+
+
+<h3 id="auto-exclude">自動排除的資料檔案</h3>
+
+<p>
+  並非所有應用程式資料都需要備份,例如暫存檔案和快取,因此自動備份服務預設會排除某些資料檔案:
+
+</p>
+
+<ul>
+  <li>{@link android.content.Context#getCacheDir
+getCacheDir()} 和 {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
+方法所參考目錄中的檔案。
+  </li>
+
+  <li>位於外部儲存空間的檔案,除非這些檔案位於
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+方法所參考的目錄中。
+  </li>
+
+  <li>{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} 方法所參考目錄中的檔案。
+
+  </li>
+</ul>
+
+<h2 id="configuring">設定資料備份</h2>
+
+<p>
+  除了上一節所列自動排除的檔案之外,其餘由 M 預覽版裝置上安裝的任何應用程式所建立的資料一律都會備份。
+您可以使用應用程式宣示說明中的設定,進一步限制和設定要備份應用程式的哪些資料。
+
+</p>
+
+<h3 id="include-exclude">納入或排除資料</h3>
+
+<p>
+  根據您的應用程式需要的資料和您儲存資料的方式,您可能需要設定特定的規則來納入或排除某些檔案或目錄。
+自動備份服務支援使用 XML 設定檔和應用程式宣示說明來設定這些備份規則。
+
+在應用程式宣示說明中,您可以依照下列範例指定備份配置設定檔:
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>
+  在此範例程式碼中,<code>android:fullBackupContent</code> 屬性指定應用程式開發專案的 <code>res/xml/</code> 目錄中,名為
+<code>mybackupscheme.xml</code> 的 XML 檔案。
+此設定檔包含要備份哪些檔案的規則。
+下列範例程式碼顯示排除特定檔案不要進行備份的設定檔:
+
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;full-backup-content&gt;
+    &lt;exclude domain="database" path="device_info.db"/&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  此範例備份設定只排除特定資料庫檔案不要進行備份。
+  其他所有檔案都會備份。
+</p>
+
+<h4>備份設定語法</h4>
+
+<p>
+  您可以使用備份服務設定指定要將哪些檔案納入或排除備份。
+資料備份設定 XML 檔案的語法如下所示:
+</p>
+
+<pre>
+&lt;full-backup-content&gt;
+    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
+&lt;/full-backup-content&gt;
+</pre>
+
+<p>
+  您可以使用下列元素和屬性指定要將哪些檔案納入備份或從備份排除:
+
+</p>
+
+<ul>
+  <li>
+  <code>&lt;include&gt;</code>。如果您想要指定備份一組資源,請使用此元素,而不要讓系統預設備份應用程式的所有資料。
+當您指定
+<code>&lt;include&gt;</code> 標籤時,系統只會備份此元素「指定的資源」<em></em>。
+
+  </li>
+
+  <li>
+  <code>&lt;exclude&gt;</code>。如果您想要指定一組資源不要進行備份,請使用此元素。
+系統會備份應用程式中除了此元素指定之資源以外的其他所有資料。
+
+  </li>
+
+  <li>
+  <code>domain.</code> 您想要納入或排除備份的資源類型。此屬性可以指定的有效值包括:
+
+  </li>
+
+  <li style="list-style: none">
+  <ul>
+    <li>
+    <code>root</code>。指定資源位於應用程式的根目錄。
+    </li>
+
+    <li>
+    <code>file</code>。位於
+{@link android.content.Context#getFilesDir getFilesDir()} 方法傳回的目錄中的資源。
+    </li>
+
+    <li>
+    <code>database</code>。{@link android.content.Context#getDatabasePath getDatabasePath()} 方法或使用
+{@link android.database.sqlite.SQLiteOpenHelper} 類別傳回的資料庫。
+
+    </li>
+
+    <li>
+    <code>sharedpref</code>。{@link android.content.Context#getSharedPreferences getSharedPreferences()}
+方法傳回的 {@link android.content.SharedPreferences} 物件。
+
+    </li>
+
+    <li>
+    <code>external</code>。指定資源位於外部儲存空間,並且位於
+{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 方法傳回的目錄中的檔案。
+
+    </li>
+
+    <li>
+    <code>path</code>。您想要納入或排除備份的資源檔案路徑。
+
+    </li>
+  </ul>
+  </li>
+</ul>
+
+
+<h3 id="prohibit">禁止資料備份</h3>
+
+<p>
+  您可以在應用程式的宣示說明元素中將
+<code>android:allowBackup</code> 屬性設定為 <code>false</code>,選擇不要對任何應用程式資料進行自動備份。
+此設定如下列範例程式碼所示:
+</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        package="com.my.appexample"&gt;
+    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
+    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
+    &lt;app ...
+<strong>        android:allowBackup="false"&gt;</strong>
+    &lt;/app&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="testing">測試備份設定</h2>
+
+<p>
+  如果您建立了備份設定,就要進行測試,以確保您的應用程式能正確儲存和還原資料。
+
+</p>
+
+
+<h4>啟用備份記錄</h4>
+
+<p>
+  如要協助判斷備份功能如何剖析您的 XML 檔案,請在執行測試備份之前先啟用記錄功能:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
+</pre>
+
+<h4>測試備份</h4>
+
+<p>如要手動執行備份,首先您必須呼叫下列命令以初始化備份管理員:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr run
+</pre>
+
+<p>
+  接著,您要使用下列命令,將 <code>&lt;PACKAGE&gt;</code> 參數指定為您應用程式的套件名稱,手動備份您的應用程式:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
+
+
+<h4>測試還原</h4>
+
+<p>
+  如要在應用程式資料備份之後手動啟動還原,請呼叫下列命令,將 <code>&lt;PACKAGE&gt;</code> 參數指定為您應用程式的套件名稱:
+
+</p>
+
+<pre class="noprettyprint">
+$ adb shell bmgr restore &lt;PACKAGE&gt;
+</pre>
+
+<p class="warning">
+  <b>警告:</b>這個動作在執行還原作業之前會先停止您的應用程式,然後清除其中的資料。
+
+</p>
+
+<p>
+  如果解除安裝又重新安裝應用程式,就會針對應用程式啟動還原程序。應用程式安裝完成之後,就會自動從雲端還原應用程式資料。
+
+</p>
+
+
+<h4>疑難排解備份</h4>
+
+<p>
+  如果您遇到問題,可以在 [設定] &gt; [備份]<strong></strong> 中關閉備份再開啟、將裝置重設為出廠值,或是呼叫下列命令,清除備份資料及相關的中繼資料:
+
+
+</p>
+
+<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
+
+<p>
+  <code>&lt;TRANSPORT&gt;</code> 值前面必須加上 <code>com.google.android.gms</code>。
+  如要取得傳輸清單,請呼叫下列命令:
+</p>
+
+<pre>$ adb shell bmgr list transports</pre>
+
+<h2 id="issues">已知問題</h2>
+
+<p>以下是自動備份服務的已知問題:</p>
+
+<ul>
+  <li><strong>Google 雲端通訊</strong> - 使用「Google 雲端通訊」推送通知的應用程式有一個已知問題,亦即備份由「Google 雲端通訊」註冊程序傳回的註冊 ID,會讓還原後的應用程式無法傳送推送通知。在新裝置安裝 API 之後,需要向 API 查詢新的註冊 ID,因此如果之前備份了舊的註冊 ID,就會發生問題。
+
+
+
+
+如要避免發生這個情況,請不要備份包含註冊 ID 的檔案。
+
+  </li>
+</ul>
diff --git a/docs/html-intl/intl/zh-tw/preview/download.jd b/docs/html-intl/intl/zh-tw/preview/download.jd
new file mode 100644
index 0000000..3b54080
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/download.jd
@@ -0,0 +1,359 @@
+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/app-linking.jd b/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd
new file mode 100644
index 0000000..5be8a0f
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/features/app-linking.jd
@@ -0,0 +1,123 @@
+page.title=應用程式連結
+page.image=images/cards/card-app-linking_2x.png
+page.keywords=應用程式連結, 深層連結, 意圖
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文件內容</h2>
+      <ol>
+        <li><a href="#web-assoc">宣告網站關聯</a></li>
+        <li><a href="#verfy-links">要求應用程式連結驗證</a></li>
+        <li><a href="#user-manage">管理應用程式連結設定</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>
+  Android 意圖系統是一個彈性機制,讓應用程式能夠用來處理內容和要求。
+  有許多應用程式可能會在它們的意圖篩選條件中宣告相符的 URI 模式。當使用者按一下不含預設啟動處理常式的 Web 連結時,平台可能會顯示一個對話方塊,讓使用者能夠從具備已宣告相符意圖篩選條件的應用程式清單中選取。
+
+
+</p>
+
+<p>
+  Android M 開發人員預覽版引進了應用程式連結的支援,這樣就能藉由允許應用程式開發人員將應用程式關聯至他們所擁有的 Web 網域,來改善現有的連結處理。
+當開發人員建立這個關聯時,平台可以自動判斷要用來處理特定 Web 連結的預設應用程式,並略過詢問使用者的程序。
+
+
+</p>
+
+
+<h2 id="web-assoc">宣告網站關聯</h2>
+
+<p>
+  網站擁有者必須宣告與應用程式的關聯,才能建立應用程式連結。站台擁有者可藉由在網域上的已知位置裝載名為 {@code statements.json} 的 JSON 檔案,來宣告與應用程式的關係:
+
+
+</p>
+
+<pre>http://&lt;domain&gt;:&lt;optional port&gt;/.well-known/statements.json</pre>
+
+<p class="note">
+  <strong>注意:</strong>
+  在 M 開發人員預覽版期間,會透過 http 通訊協定來驗證 JSON 檔案。如果是平台的正式版本,就會透過加密的 https 通訊協定來驗證該檔案。
+
+</p>
+
+<p>
+  這個 JSON 檔案會指出應該在這個網域中用來做為 URL 預設處理常式的 Android 應用程式。
+它會根據下列欄位來識別應用程式:
+</p>
+
+<ul>
+  <li>{@code package_name}:宣告於應用程式宣示說明中的套件名稱。</li>
+
+  <li>{@code sha256_cert_fingerprints}:您應用程式簽署憑證的 SHA256 指紋。
+    您可以使用 Java 金鑰工具,利用下列命令來產生指紋:
+    <pre>keytool -list -v -keystore my-release-key.keystore</pre>
+  </li>
+</ul>
+
+<p>
+  下列檔案清單會顯示
+{@code statements.json} 檔案的內容與格式範例:
+</p>
+
+<pre>
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "<strong>&lt;package name&gt;</strong>",
+    "sha256_cert_fingerprints": ["<strong>6C:EC:C5:0E:34:AE....EB:0C:9B</strong>"]
+  }
+}]
+</pre>
+
+
+<h2 id="verfy-links">要求應用程式連結驗證</h2>
+
+<p>
+  應用程式可以要求平台根據裝載於個別 Web 網域上的 {@code statements.json} 檔案,自動驗證在其意圖篩選條件的資料元素中由主機名稱所定義的任何應用程式連結。
+
+如要要求應用程式連結驗證,請將 {@code android:autoVerify}
+ 屬性新增到宣示說明中每個所需的意圖篩選條件中,如下列宣示說明程式碼片段所示:
+
+</p>
+
+<pre>
+&lt;activity ...&gt;
+    &lt;intent-filter <strong>android:autoVerify="true"</strong>&gt;
+        &lt;action android:name="android.intent.action.VIEW" /&gt;
+        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+        &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
+        &lt;data android:scheme="http" android:host="www.android.com" /&gt;
+        &lt;data android:scheme="https" android:host="www.android.com" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>
+  當 {@code android:autoVerify} 屬性出現在應用程式宣示說明時,平台即會在安裝該應用程式時嘗試驗證應用程式連結。
+如果平台無法成功驗證應用程式連結,就無法將該應用程式設定為偏好使用的應用程式來處理 Web 連結。
+當使用者下次開啟其中一個連結時,平台就切換回為該使用者展示一個對話方塊。
+
+
+</p>
+
+<p class="note">
+  <strong>注意:</strong>在測試期間,如果驗證失敗,可能會產生誤判,但是使用者已經使用系統「設定」應用程式,明確地啟用應用程式來自動開啟支援的連結。在此案例中,不會顯示任何對話方塊,而且連結會直接連至您的應用程式,但這只是基於使用者的設定,而不是因為驗證成功所致。
+
+
+
+</p>
+
+
+<h2 id="user-manage">管理應用程式連結設定</h2>
+
+<p>
+  使用者可以變更應用程式連結設定,讓他們能夠以偏好使用的方式來處理 URL。您可以在系統「設定」應用程式中,於 [設定] &gt; [應用程式] &gt; [應用程式資訊] &gt; [預設開啟]<strong></strong> 下方,檢閱和管理應用程式連結。
+
+
+</p>
diff --git a/docs/html-intl/intl/zh-tw/preview/index.jd b/docs/html-intl/intl/zh-tw/preview/index.jd
new file mode 100644
index 0000000..f57728c
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/index.jd
@@ -0,0 +1,67 @@
+page.title=Android M 開發人員預覽版
+page.tags="preview",
+meta.tags="preview, M preview", androidm
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+  <div class="wrap">
+    <div class="cols dac-hero-content">
+      <div class="col-9of16 col-push-7of16 dac-hero-figure">
+        <img class="dac-hero-image" src="{@docRoot}images/home/devices-hero_620px_2x.png" srcset="{@docRoot}images/home/devices-hero_620px.png 1x,
+             {@docRoot}images/home/devices-hero_620px_2x.png 2x">
+      </div>
+      <div class="col-7of16 col-pull-9of16">
+        <h1 class="dac-hero-title">Android M 開發人員預覽版</h1>
+        <p class="dac-hero-description">
+          準備使用新版 Android。在 Nexus 5、6、9 和 Player 上測試您的應用程式。
+瞭解新功能 &mdash; <strong>執行階段權限</strong>、<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>
+      </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>
+
+<section class="dac-section dac-gray"><div class="wrap">
+  <h1 class="dac-section-title">資源</h1>
+  <div class="dac-section-subtitle">
+    以下重要資訊可幫助您的應用程式準備好使用 Android M。
+  </div>
+ 
+  <div class="resource-widget resource-flow-layout col-16"
+       data-query="collection:preview/landing/more"
+       data-cardSizes="6x6"
+       data-maxResults="16"></div>
+
+    <ul class="dac-section-links">
+      <li class="dac-section-link">
+        <a href="https://code.google.com/p/android-developer-preview/">
+          <span class="dac-sprite dac-auto-chevron"></span>
+          回報問題
+</a>
+      </li> 
+      <li class="dac-section-link"><a href="http://g.co/dev/AndroidMDevPreview">
+        <span class="dac-sprite dac-auto-chevron"></span>
+        參加 G+ 社群
+</a>
+      </li>
+    </ul>
+  </div>
+</section>
+
diff --git a/docs/html-intl/intl/zh-tw/preview/license.jd b/docs/html-intl/intl/zh-tw/preview/license.jd
new file mode 100644
index 0000000..c4acb91
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/license.jd
@@ -0,0 +1,143 @@
+page.title=授權協議
+
+@jd:body
+
+<p>
+如果想要開始使用 Android SDK 預覽版,您必須同意遵守下列條款和條件。如下方所述,請注意這是 Android SDK 預覽版,可能隨時會有變更,請您自負使用風險。
+Android SDK 預覽版還不是穩定的版本,可能會包含許多錯誤和瑕疵而對您的電腦系統、裝置和資料造成嚴重的損害。
+</p>
+
+<p>
+這是「Android SDK 預覽版授權協議」(以下稱「授權協議」)。
+</p>
+<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
+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 您同意不會使用此「預覽版」從事任何不當活動,例如開發或散佈會以未經授權的方式干擾、妨礙、損害或存取 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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/preview/samples.jd b/docs/html-intl/intl/zh-tw/preview/samples.jd
new file mode 100644
index 0000000..2ef9a60
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/samples.jd
@@ -0,0 +1,70 @@
+page.title=範例
+page.image=images/cards/samples-new_2x.png
+@jd:body
+
+<p>
+  下列提供 M 開發人員預覽版的程式碼範例。如要下載 Android Studio 的範例,請選取 [File] (檔案) &gt; [Import Samples] (匯入範例) 選單選項。
+<b></b>
+</p>
+
+<p class="note">
+  <strong>注意:</strong>這些可下載的專案是專為與 Gradle 和 Android Studio 一起使用而設計。
+
+</p>
+
+
+<h3 id="RuntimePermissions">執行階段權限</h3>
+
+<p>
+ Android M 改變系統權限的運作方式。改為在執行階段才要求使用者核准權限要求,而不是安裝期間。
+這個範例顯示如何要求這些權限。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-RuntimePermissions">在 GitHub 上取得</a></p>
+
+<h3 id="ConfirmCredentials">確認認證</h3>
+
+<p>
+ 這個範例示範如何在您的應用程式中使用裝置認證做為驗證方法。
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ConfirmCredential">在 GitHub 上取得</a>
+</p>
+
+<h3 id="FingerprintDialog">指紋對話方塊</h3>
+
+<p>
+ 這個範例示範如何在您的應用程式中辨識註冊的指紋以驗證使用者。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-FingerprintDialog">在 GitHub 上取得</a></p>
+
+<h3 id="AutomaticBackup">針對應用程式進行自動備份</h3>
+
+<p>
+ Android M 導入自動備份應用程式設定的功能。這個範例示範如何將篩選規則新增至應用程式以管理設定備份。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-AutoBackupForApps">在 GitHub 上取得</a></p>
+
+<h3 id="CameraRaw">相機 2 Raw</h3>
+
+<p>
+  示範如何使用 <code>Camera2</code> API,以擷取 RAW 相機緩衝區並另存為 <code>DNG</code> 檔案。
+
+</p>
+
+<p><a href="https://github.com/googlesamples/android-Camera2Raw">在 GitHub 上取得</a></p>
+
+<h3 id="ActiveNotification">使用中通知</h3>
+
+<p>
+  這個範例示範 
+<a href="{@docRoot}reference/android/app/NotificationManager.html"><code>NotificationManager</code></a>
+ 如何將您應用程式目前顯示的通知數目告訴您。
+</p>
+
+<p><a href="https://github.com/googlesamples/android-ActiveNotifications">在 GitHub 上取得</a></p>
diff --git a/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd
new file mode 100644
index 0000000..1769f74
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd
@@ -0,0 +1,207 @@
+page.title=設定預覽版 SDK
+page.image=images/cards/card-set-up_16-9_2x.png
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文件內容</h2>
+      <ol>
+        <li><a href="#get-as13">取得 Android Studio 1.3</a></li>
+        <li><a href="#get-sdk">取得預覽版 SDK</a></li>
+        <li><a href="#create-update">建立或更新專案</a></li>
+        <li><a href="#setup-test">設定以進行測試</a></li>
+      </ol>
+  </div>
+</div>
+
+<p>M 開發人員預覽版 SDK 可以從 Android SDK Manager 取得。本文件假設您熟悉 Android 應用程式開發工作,例如使用 Android SDK Manager 和建立專案。
+
+如果您是 Android 的新手,請先參閱<a href="{@docRoot}training/basics/firstapp/index.html">建置您的第一個應用程式</a>訓練課程。
+</a>
+</p>
+
+<h2 id="get-as13">取得 Android Studio 1.3</h2>
+
+<p>開發人員預覽版最適合與處於預覽版狀態的 Android Studio 1.3 一起使用。
+強烈建議您安裝 Android Studio 1.3 預覽版與開發人員預覽版一起使用。
+</p>
+
+<p class="caution"><strong>注意:</strong>Android Studio 1.3 的測試預覽版仍在持續開發中。
+如果您使用主要開發電腦來測試開發人員預覽版,可以建立第二個 Android Studio 安裝以用於測試。
+
+</p>
+
+<p>如要安裝 Android Studio 1.3 預覽版:</p>
+
+<ol>
+  <li>下載並啟動 <a href="{@docRoot}tools/studio/index.html">Android Studio</a>。
+
+  </li>
+
+  <li>開啟 [Settings] (設定) 視窗 (在 Windows 上,您可以選擇 [檔案] &gt; [設定] 來執行此動作)。<strong>
+</strong><strong></strong>選擇 [Appearance &amp; Behavior] (外觀和行為) &gt; [System Settings] (系統設定) &gt; [Updates] (更新) 面板。<strong></strong>
+
+
+
+    <p class="aside">在 OSX 上,您可以在 Android Studio 的「Preferences」(偏好設定) 視窗中,找到 [Appearance &amp; Behavior] (外觀和行為) 面板。<strong></strong><strong></strong>
+
+</p>
+  </li>
+
+  <li> 在「Updates」(更新) 面板上,選擇以下選項:[Automatically check updates for: (自動檢查以下的可用更新:)
+<strong></strong><strong>Canary Channel] (測試版管道)。</strong>
+  </li>
+
+  <li>在「Updates」(更新) 面板上,選取 [Check Now] (立即檢查) 以檢查是否有可用的最新測試版建置。<strong></strong><strong></strong>
+版本請在系統提示您時,下載並安裝該版本。
+
+  </li>
+</ol>
+
+<h2 id="get-sdk">取得預覽版 SDK</h2>
+
+<p>如要將預覽版 SDK 元件新增至您的開發環境:</p>
+
+<ol>
+  <li>啟動 Android Studio 1.3 預覽版。
+  </li>
+
+  <li>開啟 [Settings] (設定) 視窗 (在 Windows 上,您可以選擇 [檔案] &gt; [設定] 來執行此動作)。<strong></strong><strong></strong>
+選擇 [Appearance &amp; Behavior] (外觀和行為) &gt; [System Settings] (系統設定) &gt; [Updates] (更新) 面板。<strong></strong>
+
+
+
+    <p class="aside">在 OSX 上,您可以在 Android Studio 的「Preferences」(偏好設定) 視窗中,找到 [Appearance &amp; Behavior] (外觀和行為) 面板。<strong></strong><strong></strong>
+
+</p>
+  </li>
+
+  <li>在「Updates」(更新) 面板上,選擇以下選項:[Automatically check updates for: (自動檢查以下的可用更新:)
+<strong></strong><strong></strong>Canary Channel] (測試版管道) 以及 [Automatically check updates for Android SDK: (自動檢查 Android SDK 的可用更新:)<strong>
+Preview Channel] (預覽版管道)。</strong>
+  </li>
+
+  <li>啟動 <strong>Android Studio Manager</strong>。(使用 Android Studio 1.3,SDK Manager 會與 Android Studio 整合,而不是獨立的應用程式。)
+
+
+  </li>
+
+  <li>在「Platforms」(平台) 區段下,選取 [Android MNC Preview] (Android MNC 預覽版)。<strong></strong><strong></strong>
+
+  </li>
+
+  <li>在「Tools」(工具) 區段中,選擇最新的 Android SDK 工具、平台工具以及建置工具。<strong></strong><strong></strong><strong></strong><strong></strong>
+
+
+  </li>
+
+  <li>按一下 [Install packages] (安裝套件) 並接受所有套件的授權合約。<strong></strong>
+
+  </li>
+
+  <li>開啟 [Settings] (設定) 視窗,然後選擇 [Appearance &amp; Behavior] (外觀和行為) &gt; [System Settings] (系統設定) &gt; [Android SDK] 面板,來驗證已安裝 M 開發人員預覽版。<strong></strong><strong></strong>
+
+</li>
+
+  <li>在「Android SDK」面板上,選擇 [SDK Platforms] (SDK 平台) 索引標籤。<strong></strong><strong></strong>
+「Android MNC Preview」(Android MNC 預覽版) 應該會列在「Installed」(已安裝)。<strong></strong><em></em>
+此外,開啟 [SDK Tools] (SDK 工具) 索引標籤以確認已經安裝最新的工具。<strong></strong>
+
+
+  </li>
+</ol>
+<p>完成這些步驟之後,就能在您的開發環境中使用預覽版元件。
+ </p>
+
+
+<h2 id="create-update">建立或更新專案</h2>
+
+<p>
+  為了使用預覽版 API,您必須建立或更新開發專案,才能使用預覽版元件。
+
+</p>
+
+
+<h3 id="create">建立新專案</h3>
+
+<p>
+  建議您使用 Android Studio 搭配預覽版來建立專案。依照<a href="{@docRoot}sdk/installing/create-project.html">建立專案</a>中所述的步驟執行,直到您到達專案精靈中的「大小」畫面。
+
+<em></em>接著,執行下列步驟以建立為預覽版設定的專案。
+
+</p>
+
+<ul>
+  <li>核取 [Phone and Tablet] (手機與平板電腦)。<strong></strong></li>
+  <li>選取 [MNC:<strong></strong>Android M (Preview)] (Android M (預覽版)),它位於 [Minimum SDK] (SDK 最低版本)。<strong></strong>
+</li>
+</ul>
+
+
+<h3 id="update">更新現有的專案</h3>
+
+<p>
+  對於現有專案,您必須修改專案設定以啟用預覽版 API。在您的開發環境中,開啟模組的 <code>build.gradle</code> 檔案,然後將這些值設定如下:
+
+
+</p>
+
+<ul>
+  <li>將 <code>compileSdkVersion</code> 設定為 <code>'android-MNC'</code></li>
+  <li>將 <code>minSdkVersion</code> 設定為 <code>'MNC'</code></li>
+  <li>將 <code>targetSdkVersion</code> 設定為 <code>'MNC'</code></li>
+</ul>
+
+
+<h2 id="setup-test">設定以進行測試</h2>
+
+<p>
+  利用預覽版測試應用程式,需要您將裝置或虛擬裝置設定為使用平台的預覽版本。
+如果您有相容的裝置,您可以安裝預覽版平台以用於測試。
+否則,您可以設定虛擬裝置以用於測試。
+</p>
+
+<h3 id="setup-device">設定實體裝置</h3>
+
+<p>
+  如果您有 Nexus 5、Nexus 6、Nexus 9 或 Android 電視,您可以在這些裝置上安裝預覽版系統映像,以測試您的應用程式。您可以使用 Android Virtual Device Manager (Android 虛擬裝置管理員) 工具,從 Android Studio 內設定使用平台預覽版本的虛擬裝置。
+
+
+
+</p>
+
+<p class="caution">
+  <strong>重要說明:</strong>在裝置上安裝預覽版映像,會「移除當中的所有資料」,因此您應該在安裝預覽版映像之前備份任何資料。<em></em>
+
+</p>
+
+<h3 id="setupAVD">設定虛擬裝置</h3>
+
+<p>
+  您可以使用 Android Virtual Device Manager (Android 虛擬裝置管理員) 工具,從 Android Studio 內設定使用平台預覽版本的虛擬裝置。
+
+</p>
+
+<p>如要使用 AVD Manager 來建立 AVD:</p>
+
+<ol>
+  <li>請在您的開發環境中安裝預覽版 SDK,如<a href="{@docRoot}preview/setup-sdk.html">設定預覽版 SDK</a> 中所述。
+
+</li>
+  <li>依照<a href="{@docRoot}tools/devices/managing-avds.html">使用 AVD Manager 來管理 AVD</a>中的步驟執行。
+
+使用下列設定:
+    <ul>
+      <li><strong>裝置:</strong>Nexus 5、Nexus 6、Nexus 9 或 Android 電視</li>
+      <li><strong>目標:</strong>
+       Android M (預覽版) - API 級別 M</li>
+      <li><strong>ABI:</strong> x86</li>
+    </ul>
+  </li>
+</ol>
+
+<p>
+  如需建立虛擬裝置以用於測試的詳細資訊,請參閱<a href="{@docRoot}tools/devices/index.html">管理虛擬裝置</a>。
+</p>
diff --git a/docs/html-intl/intl/zh-tw/preview/testing/guide.jd b/docs/html-intl/intl/zh-tw/preview/testing/guide.jd
new file mode 100644
index 0000000..879ec02
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/testing/guide.jd
@@ -0,0 +1,187 @@
+page.title=測試指南
+page.image=images/cards/card-build_16x9_2x.png
+page.keywords=previewresources,androidm,testing,permissions
+
+@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 M 開發人員預覽版能夠讓您有機會確保您的應用程式能搭配下一個版本的平台運作。
+此預覽版包含許多 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">設定預覽版 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] &lt;permission.name&gt; ...</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#">設定預覽版 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>設定 M 預覽版系統映像的硬體裝置或虛擬裝置。</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>設定 M 預覽版系統映像的硬體裝置或虛擬裝置。</li>
+  <li>將裝置連線到您的開發電腦並安裝您的應用程式。</li>
+  <li>執行您的應用程式並讓應用程式保持使用中。</li>
+  <li>執行下列命令,模擬應用程式進入待命模式:
+
+<pre>
+$ adb shell am broadcast -a android.os.action.DISCHARGING
+$ adb shell am set-idle &lt;packageName&gt; true
+</pre>
+
+  </li>
+  <li>使用下列命令,模擬喚醒應用程式:
+    <pre>$ adb shell am set-idle &lt;packageName&gt; 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-tw/preview/testing/performance.jd b/docs/html-intl/intl/zh-tw/preview/testing/performance.jd
new file mode 100644
index 0000000..5437e9d
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/preview/testing/performance.jd
@@ -0,0 +1,656 @@
+page.title=測試顯示效能
+page.image=images/cards/card-test-performance_2x.png
+page.keywords=效能, fps, 工具
+
+@jd:body
+
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>本文件內容</h2>
+      <ol>
+        <li><a href="#measure">測量 UI 效能</a>
+          <ul>
+            <li><a href="#aggregate">彙總畫面統計資料</a></li>
+            <li><a href="#timing-info">精確畫面計時資訊</a></li>
+            <li><a href="#timing-dump">簡易畫面計時傾印</a></li>
+            <li><a href="#collection-window">控制統計資料收集時間</a></li>
+            <li><a href="#diagnose">診斷效能回復</a></li>
+            <li><a href="#resources">其他資源</a></li>
+          </ul>
+        </li>
+        <li><a href="#automate">自動化 UI 效能測試</a>
+          <ul>
+            <li><a href="#ui-tests">設定 UI 測試</a></li>
+            <li><a href="#automated-tests">設定自動化 UI 測試</a></li>
+            <li><a href="#triage">分類和修正觀察到的問題</a></li>
+          </ul>
+        </li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  使用者介面效能測試可確保您的應用程式不只符合功能需求,與使用者與應用程式的互動也無比順暢,執行時每秒一致有 60 個畫面 (<a href="https://www.youtube.com/watch?v=CaMTIgxCSqU&amp;index=25&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">為什麼 60fps?</a>),任何畫面都不會遺漏或延遲,或稱為「閃避」<em></em>現象。
+
+
+本文件說明可用以測量 UI 效能的工具,以及呈現可將 UI 效能測量與測試做法整合的方法。
+
+
+</p>
+
+
+<h2 id="measure">測量 UI 效能</h2>
+
+<p>
+  為改善效能,首先您需要測量系統效能的能力,接著在管道的各部分發生問題時加以診斷和辨識。
+
+
+</p>
+
+<p>
+  <em><a href="https://source.android.com/devices/tech/debug/dumpsys.html">dumpsys</a></em> 是一種 Android 工具,可在裝置上執行和傾印有關系統服務狀態的有趣資訊。
+
+將 <em>gfxinfo</em> 命令傳送至 dumpsys,會將錄製階段所發生與動畫的畫面相關的效能資訊以 logcat 提供輸出。
+
+
+</p>
+
+<pre>
+&gt; adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt;
+</pre>
+
+<p>
+  此命令會產生多種不同的畫面計時資料。
+</p>
+
+<h3 id="aggregate">彙總畫面統計資料</h3>
+
+<p>
+  使用 M 預覽版,命令會在程序的生命週期全程收集畫面資料,並將彙總的分析列印到 logcat。
+例如:
+</p>
+
+<pre class="noprettyprint">
+Stats since: 752958278148ns
+Total frames rendered: 82189
+Janky frames: 35335 (42.99%)
+90th percentile: 34ms
+95th percentile: 42ms
+99th percentile: 69ms
+Number Missed Vsync: 4706
+Number High input latency: 142
+Number Slow UI thread: 17270
+Number Slow bitmap uploads: 1542
+Number Slow draw: 23342
+</pre>
+
+<p>
+  這些高階統計資料是以高階方式轉換應用程式的轉譯效能,還有其在許多畫面的穩定性。
+
+</p>
+
+
+<h3 id="timing-info">精確畫面計時資訊</h3>
+
+<p>
+  M 預覽版隨附新的命令 gfxinfo,而 <em>framestats</em> 可從最近的畫面提供相當詳細的畫面計時資訊,讓您可以追蹤並更準確進行除錯。
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats
+</pre>
+
+<p>
+  此命令會從應用程式所產生至少 120 個畫面當中,加上奈秒時間戳記印出畫面計時資訊。以下範例是 adb dumpsys gfxinfo &lt;PACKAGE_NAME&gt; framestats 的原始輸出:
+
+
+</p>
+
+<pre class="noprettyprint">
+0,49762224585003,49762241251670,9223372036854775807,0,49762257627204,49762257646058,49762257969704,49762258002100,49762265541631,49762273951162,49762300914808,49762303675954,
+0,49762445152142,49762445152142,9223372036854775807,0,49762446678818,49762446705589,49762447268818,49762447388037,49762453551527,49762457134131,49762474889027,49762476150120,
+0,49762462118845,49762462118845,9223372036854775807,0,49762462595381,49762462619287,49762462919964,49762462968454,49762476194547,49762476483454,49762480214964,49762480911527,
+0,49762479085548,49762479085548,9223372036854775807,0,49762480066370,49762480099339,49762481013089,49762481085850,49762482232152,49762482478350,49762485657620,49762486116683,
+</pre>
+
+<p>
+  這裡的每一行輸出都代表應用程式產生的一個畫面。每行都有固定的資料欄編號,描述畫面產生管道的各階段所花費的時間。
+下一節會詳細說明此格式,包括各資料欄代表的意義。
+
+</p>
+
+
+<h4 id="fs-data-format">Framestats 資料格式</h4>
+
+<p>
+  由於資料區塊是以 CSV 格式輸出,所以可以直接將它貼到選擇的試算表工具,或使用指令碼來收集和剖析。
+下表說明輸出資料欄的格式。
+所有時間戳記都以奈秒為單位。
+</p>
+
+<ul>
+  <li>FLAGS
+    <ul>
+      <li>FLAGS 資料欄的資料列均為 0,從 FRAME_COMPLETED 資料欄減去 INTENDED_VSYNC 資料欄可計算得出總畫面時間。
+
+      </li>
+
+      <li>如果這個值非零,應該略過該資料列,因為從正常效能來判斷,畫面已是極端值,版面配置與繪製預期都要花費 16ms 以上的時間。
+
+以下是發生這種情況的幾個原因:
+        <ul>
+          <li>視窗版面配置改變 (例如應用程式的第一個畫面或經過旋轉)
+
+          </li>
+
+          <li>也可能是略過畫面,在這種情況下,某些值會含有記憶體回收的時間戳記。
+例如,如果畫面速度超過 60fps,或如果螢幕上空無一物,最後卻有所改變,就可能會略過畫面,這不一定是應用程式發生問題的徵兆。
+
+
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+
+  <li>INTENDED_VSYNC
+    <ul>
+      <li>預期的畫面起始點。如果這個值和VSYNC 不同,表示 UI 執行緒中發生的工作使它無法即時回應 vsync 訊號。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>VSYNC
+    <ul>
+      <li>用於所有 vsync 接聽器和繪製畫面的時間值 (Choreographer 畫面回呼、動畫、View.getDrawingTime() 等等)
+
+      </li>
+
+      <li>如要深入瞭解有關 VSYNC 和它如何影響您的應用程式,請參閱<a href="https://www.youtube.com/watch?v=1iaHxmfZGGc&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=23">瞭解 VSYNC</a> 影片。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>OLDEST_INPUT_EVENT
+    <ul>
+      <li>輸入佇列中最舊輸入事件的時間戳記,或為 Long.MAX_VALUE,若沒有該畫面的輸入事件的話。
+
+      </li>
+
+      <li>這個值主要用於平台工作,對應用程式開發人員用處不大。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>NEWEST_INPUT_EVENT
+    <ul>
+      <li>輸入佇列中最新輸入事件的時間戳記,或為 0,若沒有該畫面的輸入事件的話。
+
+      </li>
+
+      <li>這個值主要用於平台工作,對應用程式開發人員用處不大。
+
+      </li>
+
+      <li>不過,透過查看 (FRAME_COMPLETED - NEWEST_INPUT_EVENT),可以大略知道應用程式還會延遲多少時間。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>HANDLE_INPUT_START
+    <ul>
+      <li>將輸入事件分配給應用程式時的時間戳記。
+      </li>
+
+      <li>查看這個值與 ANIMATION_START 之間的時間,即可測量出應用程式花費在處理輸入事件的時間。
+
+      </li>
+
+      <li>如果這個數字很高 (&gt;2ms),這表示應用程式花費在處理輸入事件(例如 View.onTouchEvent()) 的時間過長,指出需要將這項工作最佳化,或卸載交由其他執行緒處理。
+
+請注意,還有一些情況本就預期且可接受這個數字較大,例如會啟動新活動或類似工作的點擊事件。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ANIMATION_START
+    <ul>
+      <li>向 Choreographer 註冊的動畫執行時的時間戳記。
+      </li>
+
+      <li>查看這個值與 PERFORM_TRANVERSALS_START 之間的時間,即可判斷它花費多久的時間評估所有執行中的動畫器 (常見的有 ObjectAnimator、ViewPropertyAnimator 及 Transitions)。
+
+
+      </li>
+
+      <li>如果這個數字很高 (&gt;2ms),可查看您的應用程式是否撰寫任何自訂動畫器,或 ObjectAnimators 正進行動畫處理的資料欄,並確定它們都適用於動畫。
+
+
+      </li>
+
+      <li>如要深入瞭解 Choreographer,請參閱<a href="https://developers.google.com/events/io/sessions/325418001">順滑流暢與否</a>影片。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>PERFORM_TRAVERSALS_START
+    <ul>
+      <li>如果您從這個值中減去 DRAW_START,就可以得知版面配置和測量階段花費多久的時間完成。(請注意,在捲動或動畫期間,您會希望這個值趨近於零。)
+
+
+      </li>
+
+      <li>如要深入瞭解轉譯管道的測量與版面配置階段,請參閱<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">無效判定、版面配置及效能</a>影片。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>DRAW_START
+    <ul>
+      <li>performTraversals 的繪製階段開始的時間。這是判定無效的任何檢視顯示清單的記錄起始點。
+
+      </li>
+
+      <li>這個值與 SYNC_START 之間的時間,就是對樹狀結構中所有無效判定檢視呼叫 View.draw() 所花費的時間。
+
+      </li>
+
+      <li>如需繪製模型的詳細資訊,請參閱<a href="{@docRoot}guide/topics/graphics/hardware-accel.html#hardware-model">硬體加速</a>或<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&amp;index=27">無效判定、版面配置及效能</a>影片。
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SYNC_START
+    <ul>
+      <li>繪製的同步階段開始的時間。
+      </li>
+
+      <li>如果這個值與 ISSUE_DRAW_COMMANDS_START 之間的時間相當長 (約為 &gt;0.4ms ),通常代表已繪製許多必須上傳至 GPU 的新點陣圖。
+
+
+      </li>
+
+      <li>如要深入瞭解同步階段,請參閱<a href="https://www.youtube.com/watch?v=VzYkVL1n4M8&amp;index=24&amp;list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu">設定檔 GPU 轉譯</a>影片。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>ISSUE_DRAW_COMMANDS_START
+    <ul>
+      <li>硬體轉譯器開始對 GPU 發出繪製命令的時間。
+      </li>
+
+      <li>這個值與 FRAME_COMPLETED 之間的時間大約就是應用程式產生的 GPU 工作量。
+太過度繪製或無效轉譯效果之類的問題都會顯示於此。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>SWAP_BUFFERS
+    <ul>
+      <li>相對於無趣的平台工作以外,呼叫 eglSwapBuffers 的時間。
+
+      </li>
+    </ul>
+  </li>
+
+  <li>FRAME_COMPLETED
+    <ul>
+      <li>全部完成!花費在處理這個畫面的總時間,計算方法是 FRAME_COMPLETED - INTENDED_VSYNC。
+
+      </li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>
+  您能以不同的方式使用這項資料。顯示不同延遲貯體中畫面時間分布的長條圖就是一種簡單但實用的方式,請見下圖。
+
+本圖可一目瞭然地告訴我們,大部分畫面都低於 16ms 的上限 (紅色除外),但只有幾個畫面明顯超過上限。
+
+我們可以查看此長條圖一段時間的變化,觀察出現的大規模位移或產生新的極端值。
+您也能根據資料中的許多時間戳記將輸入延遲、花費在版面配置的時間或其他類似的有趣度量指標繪成圖表。
+
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-framestats.png">
+
+
+<h3 id="timing-dump">簡易畫面計時傾印</h3>
+
+<p>
+  如果 [開發人員選項] 中的 [設定檔 GPU 轉譯]<strong></strong> 設定為 [In adb shell dumpsys gfxinfo]<strong></strong>
+,<code>adb shell dumpsys gfxinfo</code> 命令會印出最近 120 個畫面的計時資訊,以定位鍵分隔值分成數個不同類別。
+
+這項資料非常適合用來指出可能是繪製管道的哪個部分太慢。
+
+</p>
+
+<p>
+  類似於上述的 <a href="#fs-data-format">framestats</a>,可以直接將它貼到選擇的試算表工具,或使用指令碼來收集和剖析。
+
+下圖顯示許多由應用程式產生的畫面花費時間的分類細項。
+
+</p>
+
+<img src="{@docRoot}preview/images/perf-test-frame-latency.png">
+
+<p>
+  執行 gfxinfo、複製輸出、將輸出貼入試算表應用程式,然後將資料繪製成堆疊長條圖的結果。
+
+</p>
+
+<p>
+  每個直條都代表動畫的一個畫面,其高度代表計算該畫面所花費的毫秒數。
+長條的每個色塊都代表轉譯管道的不同階段,好讓您看出應用程式的哪部分可能產生瓶頸。
+
+如需瞭解繪製管道以及如何最佳化的詳細資訊,請參閱硬體加速或<a href="https://www.youtube.com/watch?v=we6poP0kw6E&amp;index=27&amp;list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE">無效判定、版面配置及效能</a>影片。
+
+
+</p>
+
+
+<h3 id="collection-window">控制統計資料收集時間</h3>
+
+<p>
+  framestats 與簡單的畫面計時都會收集極短時間內的資料 – 轉譯約需兩秒。
+為了精確控制這段時間,例如只限特定動畫的資料,您可以重設所有計數器,然後彙總收集的統計資料。
+
+
+</p>
+
+<pre>
+&gt;adb shell dumpsys gfxinfo &lt;PACKAGE_NAME&gt; reset
+</pre>
+
+<p>
+  這也能和傾印命令本身結合使用,定期收集和重設,持續擷取兩秒時間內的畫面。
+
+
+</p>
+
+
+<h3 id="diagnose">診斷效能回復</h3>
+
+<p>
+  識別回復是追蹤問題和維護應用程式健康情況的第一步。
+不過,dumpsys 只能識別有問題存在與相關的嚴重性。
+您仍需要診斷造成效能問題的特定原因,以及找出適當的修正方式。
+因此,強烈建議您使用 <a href="{@docRoot}tools/help/systrace.html">systrace</a> 工具。
+
+</p>
+
+
+<h3 id="resources">其他資源</h3>
+
+<p>
+  如需 Android 的轉譯管道如何運作、常見問題以及如何修正的詳細資訊,下列的一些資訊可能會很實用:
+
+
+</p>
+
+<ul>
+  <li>轉譯效能 101
+  </li>
+  <li>為什麼 60fps?
+  </li>
+  <li>Android UI 和 GPU
+  </li>
+  <li>無效判定、版面配置及效能
+  </li>
+  <li>利用 Systrace 分析 UI 效能
+  </li>
+</ul>
+
+
+<h2 id="automate">自動化 UI 效能測試</h2>
+
+<p>
+  UI 效能測試的方法之一就是讓測試人員對目標應用程式執行一組使用者操作,並以肉眼查看,或花費很長一段時間使用工具導向的方法,尋找閃避現象。
+
+但這種靠人工的方式充滿危險,人類對畫面率變化的感知能力因人而異,而且這種方法也很費時、繁瑣且容易出錯。
+
+
+</p>
+
+<p>
+  較有效率的方法是從自動化的 UI 測試中記錄和分析重要效能度量指標。
+Android M 開發人員預覽版包含新的記錄功能,能夠輕鬆判斷應用程式動畫中閃避現象的數量與嚴重程度,還能用來建置嚴謹的程序,判斷目前的效能並追蹤未來的效能目標。
+
+
+
+</p>
+
+<p>
+  本文會逐步說明建議用來使用資料以自動化效能測試的方法。
+
+</p>
+
+<p>
+  這種方法大多分成兩個主要動作。首先,識別您要測試的項目,以及測試的方法。其次是設定和維護自動化測試環境。
+
+
+</p>
+
+
+<h3 id="ui-tests">設定 UI 測試</h3>
+
+<p>
+  在您開始進行自動化測試之前,務必要決定幾個高階決策,才能適當瞭解您的測試空間與可能會有的需求。
+
+</p>
+
+<h4>
+  識別要測試的主要動畫 / 流程
+</h4>
+
+<p>
+  請記住,流暢的動畫有所中斷時,就是使用者最容易看見效能低落的時候。
+因此,識別要測試哪種類型的 UI 動作時,最好著重在使用者最常看見或對他們的體驗最重要的主要動畫。
+
+例如,以下是一些可能有利於識別的常見情況:
+</p>
+
+<ul>
+  <li>捲動主要的 ListView 或 RecyclerView
+  </li>
+
+  <li>非同步等待週期內的動畫
+  </li>
+
+  <li>當中會載入 / 操縱點陣圖的任何動畫
+  </li>
+
+  <li>包含 Alpha 透明混色的動畫
+  </li>
+
+  <li>使用畫布繪製的自訂檢視
+  </li>
+</ul>
+
+<p>
+  和您團隊的工程人員、設計師及產品經理合作,優先考慮將這些主要產品動畫放入測試涵蓋範圍內。
+
+</p>
+
+<h4>
+  定義未來目標並予以追蹤
+</h4>
+
+<p>
+  從高階觀點來看,重要的是識別特定的效能目標,並著重在撰寫測試及收集相關資料。
+例如:
+</p>
+
+<ul>
+  <li>您是否只想初次開始追蹤 UI 效能以深入瞭解?
+  </li>
+
+  <li>您是否想要避免可能在未來導入的回復?
+  </li>
+
+  <li>今日有 90% 的順暢畫面並想要在本季達到 98%?
+  </li>
+
+  <li>今日有 98% 的順暢畫面且不想要回復?
+  </li>
+
+  <li>您的目標是改善低階裝置上的效能嗎?
+  </li>
+</ul>
+
+<p>
+  在上述的這些情況中,您會想要有歷史追蹤功能,來顯示不同應用程式版本間的效能。
+
+</p>
+
+<h4>
+  識別測試要用的裝置
+</h4>
+
+<p>
+  應用程式效能會因其執行所在裝置而異。有些裝置包含的記憶體較少、GPU 較不強大或 CPU 晶片速度較慢。
+這表示可在某組硬體上執行良好的動畫,在其他組合上不一定能執行良好,更糟的是可能會在管道的不同部分產生瓶頸。
+
+使用者所見可能會不同,為將這點列入考量,請挑選涵蓋當前高階裝置、低階裝置、平板電腦等的一系列裝置執行測試。
+
+尋找 CPU 效能、RAM、畫面密度、大小等方面的變化。
+高階裝置上通過的測試,在低階裝置上可能會失敗。
+
+</p>
+
+<h4>
+  UI 測試的基本架構
+</h4>
+
+<p>
+  工具套件 (例如 <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a> 和 <a href="{@docRoot}training/testing/ui-testing/espresso-testing.html">Espresso</a>) 是為協助將使用者在您的應用程式四處移動的動作自動化而建置。
+
+這些都是模擬使用者與裝置互動的簡單架構。
+如要使用這些架構,您要有效地建立會逐一執行一組使用者動作的獨特指令碼,然後在裝置上自行播放。
+
+
+</p>
+
+<p>
+  連同 <code>dumpsys gfxinfo</code>,再結合這些自動化測試,您可快速建立可重現系統,讓您執行測試並測量該特定情況下的效能資訊。
+
+
+</p>
+
+
+<h3 id="automated-tests">設定自動化 UI 測試</h3>
+
+<p>
+  在您能夠執行 UI 測試,還有可從單一測試收集資料的管道後,下一個重要步驟是利用可多次執行該項測試的架構,然後彙總產生的效能資料,以供您的開發團隊進一步分析。
+
+
+
+</p>
+
+<h4>
+  測試自動化的架構
+</h4>
+
+<p>
+  直接在目標裝置/模擬器上執行的 UI 測試架構 (例如 <a href="{@docRoot}training/testing/ui-testing/uiautomator-testing.html">UI Automator</a>) 毫無價值。
+因為效能收集資訊是由主控機器透過 ADB 傳送命令驅動 <em>dumpsys gfxinfo</em> 來完成。
+<a href="{@docRoot}tools/help/monkeyrunner_concepts.html">MonkeyRunner</a> 架構是為了協助橋接這些個別實體開發。在主控機器上執行的指令碼處理系統可對一組連接的裝置發出命令,也能接收來自這些裝置的資料。
+
+
+
+</p>
+
+<p>
+  建置一組指令碼以適當自動化 UI 效能測試,至少應能利用 monkeyRunner 來完成下列工作:
+
+</p>
+
+<ul>
+  <li>對目標裝置或模擬器載入和啟動所需的 APK。
+  </li>
+
+  <li>啟動並允許執行 UI Automator UI 測試
+  </li>
+
+  <li>透過 dumpsys gfxinfo 收集效能資訊。<em></em><em></em>
+  </li>
+
+  <li>彙總資訊並以對開發人員有用的方式顯示。
+  </li>
+</ul>
+
+
+<h3 id="triage">分類和修正觀察到的問題</h3>
+
+<p>
+  在辨識出問題模式與回復之後,下一個步驟是辨識和套用修正。
+如果您的自動化測試架構會為畫面保留精確的計時分類細項,可幫助您詳細審察目前可疑的程式碼/版面配置變化 (在回復的情況下),或在您切換為靠人工探究時縮小要分析的系統部分。
+
+
+如需靠人工探究時,<a href="{@docRoot}tools/help/systrace.html">systrace</a> 是開始進行的好地方,顯示轉譯管道各階段、系統中每個執行緒與核心,還有您所定義任何自訂事件標記的精確計時資訊。
+
+
+</p>
+
+<h4>
+  適當分析暫時的計時
+</h4>
+
+<p>
+  請務必注意,從轉譯效能中取得和測量計時的困難度。
+這些數字不具決定性且通常受系統狀態、可用記憶體數目、溫度調節,還有上次太陽閃焰何時衝擊您所在地區影響。
+
+重點是您執行相同的測試兩次,而每次得到的數字都有些微不同,數字很接近但不會完全相同。
+
+
+</p>
+
+<p>
+  以這種方式適當收集和分析資料,表示執行相同的測試多次,並累積結果取平均值或中間值。(為了簡單起見,我們稱之為「批次」) 這可讓您粗略計算測試的效能,而不需要精確的計時。
+
+
+
+</p>
+
+<p>
+  在變更的程式碼之間使用批次,可看出那些變更對效能的影響。
+如果前次變更批次的平均畫面率大於後來變更批次,您通常會有那項特定變更的整體 win wrt 效能。
+
+
+</p>
+
+<p>
+  這表示您執行的任何自動化 UI 測試都應將此概念列入考量,同時考量可能會在測試期間發生的任何異常情況。
+例如,您的應用程式效能若因為某些裝置問題而突然下降 (並非由您的應用程式引起),您可能會想要重新執行批次,以讓取得的計時較不混亂。
+
+
+
+</p>
+
+<p>
+  應該執行多少次測試才能獲得有意義的測量結果呢?最少應執行 10 次,若執行更多次 (像是 50 或 100 次) 可以產生更準確的結果 (當然您現在是以時間換取準確度)。
+
+
+</p>
diff --git a/docs/html/design/index.jd b/docs/html/design/index.jd
index 1ffb0a3..799a64f 100644
--- a/docs/html/design/index.jd
+++ b/docs/html/design/index.jd
@@ -17,7 +17,7 @@
         <h1 class="dac-hero-title">Up and running with material design</h1>
         <p class="dac-hero-description">
         Android uses a new design metaphor inspired by paper and ink that provides a reassuring
-        sense of tactility. Visit the <a href="http://www.google.com/design/spec/material-design/introduction">material design</a> site for more resources. 
+        sense of tactility. Visit the <a href="https://www.google.com/design/spec/material-design/introduction.html">material design</a> site for more resources. 
         </p>
         <a class="dac-hero-cta" href="https://www.google.com/design/spec/material-design/introduction.html">
           <span class="dac-sprite dac-auto-chevron"></span>
diff --git a/docs/html/google/play/billing/billing_overview.jd b/docs/html/google/play/billing/billing_overview.jd
index e984d51..732e328 100644
--- a/docs/html/google/play/billing/billing_overview.jd
+++ b/docs/html/google/play/billing/billing_overview.jd
@@ -40,7 +40,7 @@
 
 <p class="note"><b>Note</b>: Ensure that you comply with applicable laws in the countries where you
 distribute apps. For example, in EU countries, laws based on the
-<a href="http://ec.europa.eu/justice/consumer-marketing/unfair-trade/unfair-practices/">Unfair
+<a href="http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2005:149:0022:0039:EN:PDF">Unfair
 Commercial Practices Directive</a> prohibit direct exhortations to children to buy advertised
 products or to persuade their parents or other adults to buy advertised products for them.
 See the
diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/preview/behavior-changes.jd
index 8a8ea05..6ee0af0 100644
--- a/docs/html/preview/behavior-changes.jd
+++ b/docs/html/preview/behavior-changes.jd
@@ -386,28 +386,51 @@
 (for example, through calls to the
 {@link android.net.wifi.WifiManager#addNetwork(android.net.wifi.WifiConfiguration)
 addNetwork()} method) are now removed if that work profile is deleted.</li>
-<li><strong>WiFi configuration lockdown:</strong> Any WiFi configuration created by an active Device
-Owner can no longer be modified or deleted by the user. The user can still create and
-modify their own WiFi configurations, so long as the {@link android.os.UserManager} constant
-{@link android.os.UserManager#DISALLOW_CONFIG_WIFI} has not been set for that user.</li>
+
+<li><strong>WiFi configuration lockdown:</strong> Any WiFi configuration created by
+  an active Device Owner can no longer be modified or deleted by the user if
+  <code>Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN</code> is non-zero.
+  The user can still create and modify their own WiFi configurations. Active Device
+  Owners have the privilege of editing/removing any WiFi configurations, including
+  those not created by them.
+</li>
+
+</li>
 <li><strong>Download Work Policy Controller via Google account addition:</strong> When a Google
 account that requires management via a Work Policy Controller (WPC) app is added to a device
 outside of a managed context, the add account flow now prompts the user to install the
 appropriate WPC. This behavior also applies to accounts added via
-<strong>Settings > Accounts</strong> in the initial device setup wizard.</li>
+<strong>Settings > Accounts</strong> and in the initial device setup wizard.</li>
 <li><strong>Changes to specific DevicePolicyManager API behaviors:</strong>
-Calling the {@link android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName,boolean) setCameraDisabled()}
+  <ul>
+  <li>Calling the {@link android.app.admin.DevicePolicyManager#setCameraDisabled(android.content.ComponentName,boolean) setCameraDisabled()}
 method affects the camera for the calling user only; calling it from the managed profile doesn’t
-affect camera apps running on the primary user. In addition, the
+affect camera apps running on the primary user. </li>
+  <li>In addition, the
 {@link android.app.admin.DevicePolicyManager#setKeyguardDisabledFeatures(android.content.ComponentName,int) setKeyguardDisabledFeatures()}
-method is now available for Profile Owners, in addition to Device Owners. A Profile Owner can set
-these keyguard restrictions:
-<ul>
-<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} and
+    method is now available for Profile Owners, in addition to Device Owners. </li>
+  <li>A Profile Owner can set these keyguard restrictions:
+    <ul>
+    <li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS} and
     {@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT}, which affect the
     keyguard settings for the profile’s parent user.</li>
-<li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, which
+    <li>{@link android.app.admin.DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, which
     only affects notifications generated by applications in the managed profile.</li>
+    </ul>
+  </li>
+  <li>The {@link android.app.admin.DevicePolicyManager#createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle) createAndInitializeUser()} and {@link android.app.admin.DevicePolicyManager#createUser(android.content.ComponentName, java.lang.String) createUser()} methods have been deprecated.</li>
+  <li>The {@link android.app.admin.DevicePolicyManager#setScreenCaptureDisabled(android.content.ComponentName, boolean) setScreenCaptureDisabled()} method now also blocks the assist structure when an app of the given user is in the foreground. </li>
+  <li><code>EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM</code> now defaults to SHA-256. SHA-1 is still supported for backwards compatibility but will be removed in future. <code>EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM</code> now only accepts SHA-256.</li>
+  <li>Device initializer APIs which existed in the MNC preview are now removed. They will not appear in the final M release.</li>
+    <li>Android for Work APIs are optimized for M runtime permissions, including Work profiles, assist layer, and others. New DevicePolicyManager permission APIs don't affect pre-M apps.</li>
+    </ul>
+    <li><strong>Changes to global settings</strong> &mdash; the settings below can no longer be set via {@link android.app.admin.DevicePolicyManager#setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String) setGlobalSettings()}</code>:
+<ul>
+    <li><code>BLUETOOTH_ON</code></li>
+    <li><code>DEVELOPMENT_SETTINGS_ENABLED</code></li>
+    <li><code>MODE_RINGER</code></li>
+    <li><code>NETWORK_PREFERENCE</code></li>
+    <li><code>WIFI_ON</code></li> 
 </ul>
-</li>
+    </li>
 </ul>
diff --git a/docs/html/preview/download.jd b/docs/html/preview/download.jd
index 6c7c945..0dfabef 100644
--- a/docs/html/preview/download.jd
+++ b/docs/html/preview/download.jd
@@ -164,10 +164,15 @@
   <div id="qv">
     <h2>In this document</h2>
       <ol>
-        <li><a href="#sdk">Preview SDK</a></li>
+        <li><a href="#sdk">Developer Preview 2 SDK</a></li>
         <li><a href="#docs">Developer Documentation</a></li>
         <li><a href="#images">Hardware System 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>
 
@@ -179,7 +184,7 @@
 </p>
 
 
-<h2 id="sdk">Preview SDK</h2>
+<h2 id="sdk">Developer Preview 2 SDK</h2>
 
 <p>
   The Preview SDK is available for download through the <a href=
@@ -201,11 +206,11 @@
     <th scope="col">Download / Checksums</th>
   </tr>
   <tr id="docs-dl">
-    <td>Android M Preview<br>Developer Docs</td>
+    <td>Android M Preview 2<br>Developer Docs</td>
     <td><a href="#top" onclick="onDownload(this)"
-      >m-preview-1-developer-docs.zip</a><br>
-      MD5: b65201b0d35416f5a1b7a071b52854a7<br>
-      SHA-1: d47e856aa65e06897e6edd902ad8d2b1f05ac3ec
+      >m-preview-2-developer-docs.zip</a><br>
+      MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
+      SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
     </td>
   </tr>
 <table>
@@ -238,35 +243,37 @@
   <tr id="hammerhead">
     <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
     <td><a href="#top" onclick="onDownload(this)"
-      >hammerhead-MPZ44Q-preview-55d76d3a.tgz</a><br>
-      MD5: 9e2631b06c6525e401ceaae3677ff320<br>
-      SHA-1: 55d76d3a379b18f3363f28d8a462c236ab96fc36
+      >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-MPZ44Q-preview-c1d6506a.tgz</a><br>
-      MD5: 307cbf9dab0a38df4ab2639d02be12aa<br>
-      SHA-1: c1d6506a74094bdb2f4b8677c7fe4967334f9ea8
+      >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-MPZ44Q-preview-d15ad483.tgz</a><br>
-      MD5: fae40377fd999d2b09128665c915264d<br>
-      SHA-1: 7ab05f96093b2cb370b226f65931202714cbc2ca
+      >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-MPZ44Q-preview-2406ba05.tgz</a><br>
-      MD5: 815902141a85cc65e7725f005cad31d5<br>
-      SHA-1: 2406ba0598dea1e69110497ac0bc8e16789bc8fb
+      >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
+      MD5: e8d081137a20b66df595ee69523314b5<br>
+      SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
     </td>
   </tr>
+
 </table>
 
 <h3 id="install-image">Install an Image to a Device</h3>
@@ -284,9 +291,14 @@
   to flash the image onto your device.</li>
 </ol>
 
-<p class="note">
-  <strong>Note:</strong> Once you have flashed a development device the preview system image,
-  it is upgraded automatically with the next preview release through over-the-air (OTA) updates.
+<h3 id="update-image">Updating a Device with the Preview</h3>
+
+<p>
+  Once you have installed a preview system image on a development device, the device is upgraded
+  automatically with the next preview release through over-the-air (OTA) updates. When the update
+  is available, the device displays notification that an update is available and allows you to
+  install it. You can also manually install the next preview image by repeating the procedure in
+  the previous section.
 </p>
 
 <h3 id="revertDevice">Revert a Device to Factory Specifications</h3>
diff --git a/docs/html/preview/download_mp1.jd b/docs/html/preview/download_mp1.jd
new file mode 100644
index 0000000..cb4d300
--- /dev/null
+++ b/docs/html/preview/download_mp1.jd
@@ -0,0 +1,355 @@
+page.title=Developer Preview Archive
+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">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 "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 the License Agreement, Google grants you a royalty-free, non-assignable, non-exclusive, non-sublicensable, limited, revocable license to use the Preview, personally or internally within your company or organization, solely to develop applications to run on the Android platform.
+
+3.2 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.3 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.4 You agree that you will not take any actions that may cause or result in the fragmentation of Android, including but not limited to distributing, participating in the creation of, or promoting in any way a software development kit derived from 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="#sdk">Developer Preview 1 SDK</a></li>
+        <li><a href="#docs">Developer Documentation</a></li>
+        <li><a href="#images">Hardware System Images</a></li>
+      </ol>
+  </div>
+</div>
+
+
+<p>
+  The Android M Preview SDK includes development tools, Android system files, and library files to
+  help you test your app and the new APIs coming in the next release of the platform. This document
+  describes how to get the downloadable components of the preview for testing your app.
+</p>
+
+
+<h2 id="sdk">Developer Preview 1 SDK</h2>
+
+<p>
+  The Preview SDK is available for download through the <a href=
+  "{@docRoot}tools/help/sdk-manager.html">Android SDK Manager</a>. For more information on
+  downloading and configuring the Preview SDK, see <a href=
+  "{@docRoot}preview/setup-sdk.html#downloadSdk">Set Up the Preview SDK</a>.
+</p>
+
+
+<h2 id="docs">Developer Documentation</h2>
+
+<p>
+  The developer documentation download package provides detailed API reference information and an API difference report for the preview.
+</p>
+
+<table>
+  <tr>
+    <th scope="col">Description</th>
+    <th scope="col">Download / Checksums</th>
+  </tr>
+  <tr id="docs-dl">
+    <td>Android M Preview 1<br>Developer Docs</td>
+    <td><a href="#top" onclick="onDownload(this)"
+      >m-preview-1-developer-docs.zip</a><br>
+      MD5: b65201b0d35416f5a1b7a071b52854a7<br>
+      SHA-1: d47e856aa65e06897e6edd902ad8d2b1f05ac3ec
+    </td>
+  </tr>
+<table>
+
+
+<h2 id="images">Hardware System Images</h2>
+
+<p>
+  These system images allow you to install a preview version of the platform on a physical device for
+  testing. By configuring a device with one of these images, you can install and test your app to
+  see how it performs on the next version of the platform. The process of installing a system image
+  on a device <em>removes all data from the device</em>, so you should backup your data before
+  installing a system image.
+</p>
+
+<p class="warning">
+  <b>Warning:</b> The following Android system images are previews and are subject to change. Your
+  use of these system images is governed by the Android SDK Preview License Agreement. The Android
+  preview system images are not stable releases, and may contain errors and defects that can result
+  in damage to your computer systems, devices, and data. The preview Android system images are not
+  subject to the same testing as the factory OS and can cause your phone and installed services and
+  applications to stop working.
+</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-MPZ44Q-preview-55d76d3a.tgz</a><br>
+      MD5: 9e2631b06c6525e401ceaae3677ff320<br>
+      SHA-1: 55d76d3a379b18f3363f28d8a462c236ab96fc36
+    </td>
+  </tr>
+  <tr id="shamu">
+    <td>Nexus 6 <br>"shamu"</td>
+    <td><a href="#top" onclick="onDownload(this)"
+      >shamu-MPZ44Q-preview-c1d6506a.tgz</a><br>
+      MD5: 307cbf9dab0a38df4ab2639d02be12aa<br>
+      SHA-1: c1d6506a74094bdb2f4b8677c7fe4967334f9ea8
+    </td>
+  </tr>
+  <tr id="volantis">
+    <td>Nexus 9 <br>"volantis"</td>
+    <td><a href="#top" onclick="onDownload(this)"
+      >volantis-MPZ44Q-preview-d15ad483.tgz</a><br>
+      MD5: fae40377fd999d2b09128665c915264d<br>
+      SHA-1: 7ab05f96093b2cb370b226f65931202714cbc2ca
+    </td>
+  </tr>
+  <tr id="fugu">
+    <td>Nexus Player <br>"fugu"</td>
+    <td><a href="#top" onclick="onDownload(this)"
+      >fugu-MPZ44Q-preview-2406ba05.tgz</a><br>
+      MD5: 815902141a85cc65e7725f005cad31d5<br>
+      SHA-1: 2406ba0598dea1e69110497ac0bc8e16789bc8fb
+    </td>
+  </tr>
+</table>
+
+<h3 id="install-image">Install an Image to a Device</h3>
+
+<p>
+  In order to use a device image for testing, you must install it on a compatible device. Follow
+  the instructions below to install a system image:
+</p>
+
+<ol>
+  <li>Download and uncompress one of the system image packages listed here.</li>
+  <li>Backup any data you want to preserve from the device.</li>
+  <li>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.</li>
+</ol>
+
+<p class="note">
+  <strong>Note:</strong> Once you have flashed a development device the preview system image,
+  it is upgraded automatically with the next preview release through over-the-air (OTA) updates.
+</p>
+
+<h3 id="revertDevice">Revert a Device to Factory Specifications</h3>
+
+<p>
+  If you want to uninstall the preview and revert the device to factory specifications, go to
+  <a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> and
+  download the image you want to flash to for your device. Follow the instructions on that page to
+  flash the image to your device.
+</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/runtime-permissions.jd b/docs/html/preview/features/runtime-permissions.jd
index 95b4120..765a3d5 100644
--- a/docs/html/preview/features/runtime-permissions.jd
+++ b/docs/html/preview/features/runtime-permissions.jd
@@ -35,12 +35,23 @@
 <!--
   <h2>See also</h2>
   <ol>
-    <li></li>
+    <li>
+    </li>
   </ol>
 -->
+
   </div> <!-- qv -->
 </div> <!-- qv-wrapper -->
 
+<!-- video box -->
+<a class="notice-developers-video"
+    href="https://www.youtube.com/watch?v=f17qe9vZ8RM">
+<div>
+    <h3>Video</h3>
+    <p>Google I/O 2015—Android M Permissions: Best Practices for
+      Developers</p>
+</div>
+</a>
 
 <p>
   The M Developer Preview introduces a new app permissions model which
@@ -204,12 +215,7 @@
 
 <ul>
   <li>System components automatically receive all
-  the permissions listed in their manifests. However, the user can still revoke
-  permissions at any time by going to the system's <strong>Settings</strong>
-  app and choosing <strong>Apps &gt;</strong> <i>app_name</i> <strong>&gt;
-  Permissions</strong>. Because users can revoke these permissions at will,
-  the app should continue to check for permissions at run
-  time and request them if necessary.
+  the permissions listed in their manifests.
   </li>
 
   <li>If the app requests permissions in the manifest that fall under {@link
@@ -903,115 +909,41 @@
     android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}:</p>
 
 <ul>
-  <li>
-    <code>android.permission.WRITE_USER_DICTIONARY</code>
-  </li>
-
-  <li>
-    <code>com.android.alarm.permission.SET_ALARM</code>
-  </li>
-
-  <li>
-    <code>android.permission.ACCESS_LOCATION_EXTRA_COMMANDS</code>
-  </li>
-
-  <li>
-    <code>android.permission.ACCESS_NETWORK_STATE</code>
-  </li>
-
-  <li>
-    <code>android.permission.ACCESS_WIFI_STATE</code>
-  </li>
-
-  <li>
-    <code>android.permission.ACCESS_WIMAX_STATE</code>
-  </li>
-
-  <li>
-    <code>android.permission.GET_ACCOUNTS</code>
-  </li>
-
-  <li>
-    <code>android.permission.VIBRATE</code>
-  </li>
-
-  <li>
-    <code>android.permission.FLASHLIGHT</code>
-  </li>
-
-  <li>
-    <code>android.permission.WAKE_LOCK</code>
-  </li>
-
-  <li>
-    <code>android.permission.TRANSMIT_IR</code>
-  </li>
-
-  <li>
-    <code>android.permission.MODIFY_AUDIO_SETTINGS</code>
-  </li>
-
-  <li>
-    <code>android.permission.REORDER_TASKS</code>
-  </li>
-
-  <li>
-    <code>android.permission.KILL_BACKGROUND_PROCESSES</code>
-  </li>
-
-  <li>
-    <code>android.permission.SET_WALLPAPER</code>
-  </li>
-
-  <li>
-    <code>android.permission.SET_WALLPAPER_HINTS</code>
-  </li>
-
-  <li>
-    <code>android.permission.SET_TIME_ZONE</code>
-  </li>
-
-  <li>
-    <code>android.permission.EXPAND_STATUS_BAR</code>
-  </li>
-
-  <li>
-    <code>android.permission.READ_SYNC_SETTINGS</code>
-  </li>
-
-  <li>
-    <code>android.permission.WRITE_SYNC_SETTINGS</code>
-  </li>
-
-  <li>
-    <code>android.permission.READ_SYNC_STATS</code>
-  </li>
-
-  <li>
-    <code>android.permission.WRITE_SETTINGS</code>
-  </li>
-
-  <li>
-    <code>android.permission.PERSISTENT_ACTIVITY</code>
-  </li>
-
-  <li>
-    <code>android.permission.GET_PACKAGE_SIZE</code>
-  </li>
-
-  <li>
-    <code>android.permission.RECEIVE_BOOT_COMPLETED</code>
-  </li>
-
-  <li>
-    <code>android.permission.BROADCAST_STICKY</code>
-  </li>
-
-  <li>
-    <code>android.permission.SUBSCRIBED_FEEDS_READ</code>
-  </li>
-
-  <li>
-    <code>android.permission.CHANGE_NETWORK_STATE</code>
-  </li>
+  <li><code>android.permission.ACCESS_LOCATION_EXTRA_COMMANDS</code></li>
+  <li><code>android.permission.ACCESS_NETWORK_STATE</code></li>
+  <li><code>android.permission.ACCESS_WIFI_STATE</code></li>
+  <li><code>android.permission.ACCESS_WIMAX_STATE</code></li>
+  <li><code>android.permission.BLUETOOTH</code></li>
+  <li><code>android.permission.BLUETOOTH_ADMIN</code></li>
+  <li><code>android.permission.BROADCAST_STICKY</code></li>
+  <li><code>android.permission.CHANGE_NETWORK_STATE</code></li>
+  <li><code>android.permission.CHANGE_WIFI_MULTICAST_STATE</code></li>
+  <li><code>android.permission.CHANGE_WIFI_STATE</code></li>
+  <li><code>android.permission.DISABLE_KEYGUARD</code></li>
+  <li><code>android.permission.EXPAND_STATUS_BAR</code></li>
+  <li><code>android.permission.FLASHLIGHT</code></li>
+  <li><code>android.permission.GET_ACCOUNTS</code></li>
+  <li><code>android.permission.GET_PACKAGE_SIZE</code></li>
+  <li><code>android.permission.INTERNET</code></li>
+  <li><code>android.permission.KILL_BACKGROUND_PROCESSES</code></li>
+  <li><code>android.permission.MODIFY_AUDIO_SETTINGS</code></li>
+  <li><code>android.permission.NFC</code></li>
+  <li><code>android.permission.PERSISTENT_ACTIVITY</code></li>
+  <li><code>android.permission.READ_SYNC_SETTINGS</code></li>
+  <li><code>android.permission.READ_SYNC_STATS</code></li>
+  <li><code>android.permission.READ_USER_DICTIONARY</code></li>
+  <li><code>android.permission.RECEIVE_BOOT_COMPLETED</code></li>
+  <li><code>android.permission.REORDER_TASKS</code></li>
+  <li><code>android.permission.SET_TIME_ZONE</code></li>
+  <li><code>android.permission.SET_WALLPAPER</code></li>
+  <li><code>android.permission.SET_WALLPAPER_HINTS</code></li>
+  <li><code>android.permission.SUBSCRIBED_FEEDS_READ</code></li>
+  <li><code>android.permission.TRANSMIT_IR</code></li>
+  <li><code>android.permission.VIBRATE</code></li>
+  <li><code>android.permission.WAKE_LOCK</code></li>
+  <li><code>android.permission.WRITE_SETTINGS</code></li>
+  <li><code>android.permission.WRITE_SYNC_SETTINGS</code></li>
+  <li><code>android.permission.WRITE_USER_DICTIONARY</code></li>
+  <li><code>com.android.alarm.permission.SET_ALARM</code></li>
+  <li><code>com.android.launcher.permission.INSTALL_SHORTCUT</code></li>
 </ul>
diff --git a/docs/html/preview/index.jd b/docs/html/preview/index.jd
index 68186bd..022838b 100644
--- a/docs/html/preview/index.jd
+++ b/docs/html/preview/index.jd
@@ -28,6 +28,10 @@
           <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 Developer Preview 2
+        </a><br>
       </div>
     </div>
     <div class="dac-section dac-small">
diff --git a/docs/html/preview/preview_toc.cs b/docs/html/preview/preview_toc.cs
index 6ef75a5..5cc2159 100644
--- a/docs/html/preview/preview_toc.cs
+++ b/docs/html/preview/preview_toc.cs
@@ -8,27 +8,55 @@
    pt-br-lang="Visão geral do programa"
    ru-lang="Обзор программы"
    zh-cn-lang="计划概览"
-   zh-tw-lang="程式總覽">Program Overview
-      </a></div>
+   zh-tw-lang="程式總覽">
+   Program Overview</a></div>
   </li>
 
 
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html"
+      es-lang="Descargas"
+      ja-lang="ダウンロード"
+      ko-lang="다운로드"
+      pt-br-lang="Downloads"
+      ru-lang="Загрузки"
+      zh-cn-lang="下载"
+      zh-tw-lang="下載">
       Downloads</a></div>
   </li>
 
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html">
+    <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"
+      ja-lang="Preview SDK のセットアップ"
+      ko-lang="미리 보기 SDK 설정하기"
+      pt-br-lang="Configuração do Preview SDK"
+      ru-lang="Настройка пакета SDK Preview"
+      zh-cn-lang="设置预览版 SDK"
+      zh-tw-lang="設定預覽版 SDK">
       Set up the SDK</a></div>
   </li>
 
   <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/testing/guide.html">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/testing/guide.html"
+      es-lang="Guía de prueba"
+      ja-lang="テストガイド"
+      ko-lang="테스트 가이드"
+      pt-br-lang="Guia de teste"
+      ru-lang="Руководство по тестированию"
+      zh-cn-lang="测试指南"
+      zh-tw-lang="測試指南">
       Testing Guide</a></div>
       <ul>
-        <li><a href="<?cs var:toroot ?>preview/testing/performance.html">
-          Performance Testing</a></li>
+        <li><a href="<?cs var:toroot ?>preview/testing/performance.html"
+      es-lang="Prueba de rendimiento de video"
+      ja-lang="表示パフォーマンスのテスト"
+      ko-lang="표시 성능 테스트"
+      pt-br-lang="Teste de desempenho de exibição"
+      ru-lang="Тестирование скорости отображения"
+      zh-cn-lang="测试显示性能"
+      zh-tw-lang="測試顯示效能">
+      Performance Testing</a></li>
       </ul>
   </li>
 
@@ -52,9 +80,23 @@
       zh-cn-lang="权限"
       zh-tw-lang="權限">Permissions
           </a></li>
-        <li><a href="<?cs var:toroot ?>preview/features/app-linking.html">
-          App Links</a></li>
-        <li><a href="<?cs var:toroot ?>preview/backup/index.html">
+        <li><a href="<?cs var:toroot ?>preview/features/app-linking.html"
+      es-lang="Vínculos de la aplicación"
+      ja-lang="App Links"
+      ko-lang="앱 링크"
+      pt-br-lang="Links de aplicativos"
+      ru-lang="Связи приложений"
+      zh-cn-lang="应用链接"
+      zh-tw-lang="應用程式連結">
+      App Links</a></li>
+        <li><a href="<?cs var:toroot ?>preview/backup/index.html"
+      es-lang="Copia de seguridad automática para aplicaciones"
+      ja-lang="アプリの自動バックアップ"
+      ko-lang="앱용 자동 백업"
+      pt-br-lang="Backup automático para aplicativos"
+      ru-lang="Автоматическое резервное копирование для приложений"
+      zh-cn-lang="自动备份应用"
+      zh-tw-lang="針對應用程式進行自動備份">
           Auto Backup for Apps</a></li>
       </ul>
   </li>
@@ -71,7 +113,14 @@
        </a></div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html"
+      es-lang="Ejemplos"
+      ja-lang="サンプル"
+      ko-lang="샘플"
+      pt-br-lang="Exemplos"
+      ru-lang="Примеры"
+      zh-cn-lang="示例"
+      zh-tw-lang="範例">
       Samples</a></div>
   </li>
 
@@ -81,7 +130,14 @@
   </li>
 
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html">
+    <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>
 
diff --git a/docs/html/preview/support.jd b/docs/html/preview/support.jd
index f05fa98..9922eda 100644
--- a/docs/html/preview/support.jd
+++ b/docs/html/preview/support.jd
@@ -1,72 +1,337 @@
 page.title=Support
+page.tags="preview", "developer preview"
 page.image=images/cards/card-support_16-9_2x.png
 
 @jd:body
 
+<div class="cols" style=
+"background-color:#ffebc3; padding: 5px 0;margin-bottom:1em; text-align:center;">
+<h3>
+    Developer Preview 2 is now available
+  </h3>
+
+ <ul class="dac-section-links">
+    <li class="dac-section-link">
+      <a href="#preview2-notes">
+      <span class="dac-sprite dac-auto-chevron"></span>
+      Release notes</a>
+    </li>
+
+    <li class="dac-section-link">
+      <a href="#preview2-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>
+
 <p>
-  If you've encountered bugs or have feedback about the M Developer Preview,
-  <a href="https://code.google.com/p/android-developer-preview/">create an issue</a>
-  on our issue tracker.
+  Two primary support channels are available to you when developing and testing
+  with the Android M Developer Preview. If you've encountered bugs or have
+  feedback about the M Developer Preview, you can <a href=
+  "https://code.google.com/p/android-developer-preview/">create an issue</a> on
+  our issue tracker. We'll triage the issue for further review and provide
+  updates as needed.
 </p>
 
 <p>
-  For more support, join the
-  <a href="http://g.co/dev/AndroidMDevPreview">M Developer
-  Preview Google+ community</a> to discuss your development experiences.
+  To discuss issues or ideas with other developers working with Android M, join
+  the <a href="http://g.co/dev/AndroidMDevPreview">M Developer Preview Google+
+  community</a>.
 </p>
 
-<h2 id="release-notes">Release Notes</h2>
+<h2 id="preview2-notes">
+  Developer Preview 2
+</h2>
 
-<div class="toggle-content opened">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
-      alt=""/>M Developer Preview 2</a> <em>(July 2015)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-
-    <dl>
-
-    <dt>API Name Changes:</dt>
-    <dd>
-      <ul>
-        <li>Moved the {@code android.app.AssistContent} class into the new package,
-          {@code android.app.assist} in the Assist API. The full class
-          name is now {@code android.app.assist.AssistContent}.</li>
-        <li>Moved the {@code android.app.AssistStructure} class to the new package,
-          {@code android.app.assist} in the Assist API. The full class name
-          is now {@code android.app.assist.AssistStructure}.</li>
-        <li>Replaced the {@code ScanResult.PasspointNetwork} property with the
-          {@code ScanResult.isPasspointNetwork()} method for HotSpot 2.0 support.</li>
-        <li>Replaced the {@code InputDevice.hasMic()} method with {@code InputDevice.hasMicrophone()}
-          for the Audio API.</li>
-        <li>Renamed the {@code View.OnStylusButtonPressListener} class to
-          {@code View.OnContextClickListener} for Bluetooth Stylus support.</li>
-        <li>Renamed the {@code GestureDetector.OnStylusButtonPressListener} class to
-          {@code GestureDetector.OnContextClickListener} for Bluetooth Stylus support.</li>
-        <li>Renamed the {@code android.app.usage.NetworkUsageStats} class to
-          {@code android.app.usage.NetworkStats}.</li>
-        <li>Renamed the {@code android.app.usage.NetworkUsageStats.Bucket} class to
-          {@code android.app.usage.NetworkStats.Bucket}.</li>
-      </ul>
-    </dd>
-
-    </dl>
+<div class="wrap">
+  <div class="cols">
+    <div class="col-9of16">
+      <p>
+        <em>Date: July 2015<br>
+        Builds: MPZ79M (Nexus 5, 6, 9), MPZ79N (Nexus Player)<br>
+        Hardware support: Nexus 5, 6, 9, Player<br>
+        Emulator support: x86 &amp; ARM 32/64-bit<br>
+        Google Play services: 7.6</em>
+      </p>
+    </div>
   </div>
 </div>
 
-<div class="toggle-content closed">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
-      alt=""/>M Developer Preview 1</a> <em>(May 2015)</em>
-  </p>
+<p>
+  Android M Developer Preview 2 is an <strong>incremental update</strong> to
+  the Android M preview platform that was originally released in May 2015. The
+  update includes a variety of enhancements and bug fixes made across the
+  system, including those related to issues reported by developers through the
+  external issue tracker.
+</p>
 
-  <div class="toggle-content-toggleme">
+<p>
+  If you are currently developing or testing on Android M, you should
+  <strong>update your environment</strong> to Developer Preview 2 as soon as
+  possible. This ensures that you are building with the latest platform APIs
+  and testing against the latest behaviors. If you are just getting started
+  with the Android M Developer Preview SDK, follow the instructions in <a href=
+  "/preview/setup-sdk.html">Set up the Preview SDK</a>, then update your
+  environment for Developer Preview 2.
+</p>
 
-    <dl>
-    <dt>Initial release.</dt>
-    </dl>
+<h3>
+  What's included
+</h3>
+
+<p>
+  Developer Preview 2 includes an updated SDK with system images,
+  documentation, and samples for developing against the latest Android M
+  platform.
+</p>
+
+<ul>
+  <li>
+    <strong>SDK platform</strong> and <strong>system images</strong> (Nexus and
+    emulator) for building and testing. You can download the updated tools from
+    the SDK Manager, and the system images are available by over-the-air (OTA)
+    update or download (see below).
+  </li>
+
+  <li>
+    <strong>Updated documentation</strong>. The <a href=
+    "/preview/behavior-changes.html">Behavior Changes</a>, <a href=
+    "/preview/api-overview.html">API Overview</a>, and <a href=
+    "/preview/features/runtime-permissions.html">Permissions</a> documents have
+    been updated to reflect the latest changes in the platform. An updated
+    <a href="/preview/download.html">Developer Documentation download
+    package</a> is available, including full reference docs and API diff
+    reports.
+  </li>
+
+  <li>
+    <strong>Translations</strong> of the documentation are now available. Use
+    the language selector at the bottom right corner of any page to switch
+    languages. Note that some of the translated docs are not yet updated for
+    Developer Preview 2 (coming soon).
+  </li>
+
+  <li>The <a href="/preview/samples.html">Android M code samples</a> are also
+  updated to account for API and behavior changes:
+    <ul>
+      <li>
+        <a href=
+        "https://github.com/googlesamples/android-RuntimePermissions">RuntimePermissions</a>
+        / <a href=
+        "https://github.com/googlesamples/android-RuntimePermissionsBasic">RuntimePermissionsBasic</a>
+        are updated to reflect latest permissions API changes, including
+        <code>shouldShowRequestPermissionRationale()</code>.
+      </li>
+      <li>
+        <a href=
+        "https://github.com/googlesamples/android-FingerprintDialog">FingerprintDialog</a>
+        adds a flow to ask for passwords when new fingerprints are added as
+        well as a preference if the app will use fingerprints as a method of
+        authentication.
+      </li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="changes">
+  Key changes
+</h3>
+
+<ul>
+  <li>Permissions changes
+    <ul>
+      <li>The <code>android.permission.USE_FINGERPRINT</code> permission now
+      has "normal" protection level, so it is no longer necessary to request
+      this permission directly from the user. The <code>USE_FINGERPRINT</code>
+      permission enables fingerprints to be enabled for authentication, but
+      does not give the requesting app access to the enrollment/fingerprint
+      administration flow.
+      </li>
+
+      <li>The <code>android.permission.WRITE_EXTERNAL_STORAGE</code> permission
+      has protection level "dangerous", meaning that apps wanting to write to
+      external storage will need to request permission from the user at
+      runtime. Both <code>WRITE_EXTERNAL_STORAGE</code> and
+      <code>WRITE_EXTERNAL_STORAGE</code> are members of the
+      <code>STORAGE</code> permission group.
+      </li>
+
+      <li>Remote Bluetooth/Wi-Fi MAC's now require either the
+      <code>android.permission.LOCATION_FINE</code> or
+      <code>android.permission.LOCATION_COURSE</code> permission.
+      </li>
+
+      <li>Some accounts and identity permissions are moved to
+      <code>CONTACTS</code> permissions group and others are removed or granted
+      based on account type. In particular,
+      <code>android.permission.USE_CREDENTIALS</code>,
+      <code>android.permission.MANAGE_ACCOUNTS</code>, and
+      <code>android.permission.AUTHENTICATE_ACCOUNTS</code> are ungrouped
+      pending further changes in a later release.
+      </li>
+
+      <li>The Wi-Fi permissions
+      <code>android.permission.CHANGE_WIFI_STATE</code>,
+      <code>android.permission.CHANGE_WIMAX_STATE</code>, and
+      <code>android.permission.CHANGE_WIFI_MULTICAST_STATE</code> now have
+      protection level "normal".
+      </li>
+
+      <li>The Bluetooth permissions <code>android.permission.BLUETOOTH</code>
+      and <code>android.permission.BLUETOOTH_ADMIN</code> now have protection
+      level "normal".
+      </li>
+
+      <li>Bookmarks and subscribed feeds permissions are removed.
+      </li>
+
+      <li>Apps included in the system image are no longer granted dangerous
+      permissions automatically. All apps should check for and request
+      permissions at runtime.
+      </li>
+
+      <li>Introduces the utility method
+      <code>Activity.shouldShowRequestPermissionRationale(String)</code>, which
+      lets your app see whether users have previously rejected a permission
+      request. This lets you know that your app should explain the the user why
+      it needs that permission. For more information see the <a href=
+      "/preview/features/runtime-permissions.html#explain-need">Permissions</a>
+      developer guide.
+      </li>
+    </ul>
+  </li>
+
+  <li>Other changes
+    <ul>
+      <li>The <code>android.app.AssistContent</code> and
+      <code>android.app.AssistStructure</code> classes are moved into a new
+      package, <code>android.app.assist</code>.
+      </li>
+
+      <li>Bluetooth Stylus APIs are updated and include new callback events.
+      The <code>View.OnStylusButtonPressListener</code> class is renamed to
+      <code>View.OnContextClickListener</code> and
+      <code>GestureDetector.OnStylusButtonPressListener</code> class to <code>
+        GestureDetector.OnContextClickListener</code>.
+      </li>
+    </ul>
+  </li>
+</ul>
+
+<p>
+  For a complete list of changes, including renamed and removed APIs, please
+  refer to the API Diff Reports included in the <a href=
+  "/preview/download.html#docs">Developer Documentation download package</a>.
+</p>
+
+<h3 id="ki">
+  Known issues
+</h3>
+
+<ul>
+  <li>General issues:
+    <ul>
+      <li>The system Messenger app crashes on the 64-bit emulator.</li>
+      <li>After updating to Developer Preview 2, Contacts sync experiences
+      intermittent issues. The workaround is to clear and re-sync Contact Storage
+      data after update. To clear data, go to <strong>Settings &gt; Apps &gt; Show
+      system &gt; Contacts Storage</strong>. Select "Storage" and then
+      <strong>Clear data</strong>.</li>
+      <li>In YouTube app, it's not possible to share a video. The share window is
+      blank.</li>
+      <li>Android For Work Profile setup is not working properly, so you won't be
+      able to create a new Work Profile after you update. As a workaround, make
+      sure to create the Work Profiles you need in Developer Preview 1 before
+      updating to Developer Preview 2.
+      </li>
+    </ul>
+  </li>
+  <li>Issues specific to MPZ79N on Nexus Player:
+    <ul>
+      <li>Bluetooth share crashes after clearing data. Please <strong>do not
+      clear Bluetooth share data</strong>, otherwise you will need to Factory
+      Reset your device</li>
+      <li>There are issues with remote control connectivity. Remote can drop
+      from Bluetooth pairing when left idle. </li>
+      <li>Movies show black screen with some ANRs on exiting the video.</li>
+      <li>In YouTube app, lower-resolution videos have a green bar at the top
+      and some color-ghosting</li>
+      </li>
+    </ul>
+  </li>
+</ul>
+
+<p>
+  For a complete list of reported issues, please refer to the <a href=
+  "https://code.google.com/p/android/issues/list">open issues list</a> on the
+  Developer Preview <a href=
+  "https://code.google.com/p/android-developer-preview/">issue tracker</a>.
+</p>
+
+<h3 id="preview2-get">
+  Get Developer Preview 2
+</h3>
+
+<p>
+  You can download the Developer Preview 2 platform and emulator images from
+  the SDK Manager.
+</p>
+
+<p>
+  Developer Preview 2 system images for supported Nexus devices are available
+  by download and by over-the-air (OTA) update. The OTA update is available
+  only to supported devices that are currently running Developer Preview 1. If
+  your devices is running Developer Preview 1, you should automatically receive
+  the OTA update within a few days of availability.
+</p>
+
+<p>
+  If you are just getting started with Android M Developer Preview, and want
+  to receive Developer Preview 2 via OTA, download the appropriate
+  Developer Preview 1 <a href="{@docRoot}preview/download_mp1.html#images">
+  system image</a>, and flash it to your device. Then,
+  leave the device powered on for several hours. It registers with the
+  OTA service, and receives Developer Preview 2 by OTA.
+</p>
+
+<p>
+  For instructions on how to download and flash your device to the Developer
+  Preview, see the links and instructions on the <a href=
+  "/preview/download.html">Downloads</a> page.
+</p>
+
+<p>
+  For instructions on how to start developing and testing with Android M, read
+  <a href="/preview/setup-sdk.html">Setting up the SDK</a>.
+</p>
+
+<h2 id="preview1-notes">
+  Developer Preview 1
+</h2>
+
+<div class="wrap">
+  <div class="cols">
+    <div class="col-6of12">
+      <p>
+        <em>Date: May 2015<br>
+        Build: MPZ44Q<br>
+        Hardware support: Nexus 5, 6, 9, Player<br>
+        Emulator support: x86 &amp; ARM (32/64-bit)<br>
+        Google Play services: 7.5</em>
+      </p>
+    </div>
   </div>
 </div>
 
+<p>
+  Initial release.
+</p>
+
 
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi.java
index 6411066..5459bea 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreAuthenticatedAESCipherSpi.java
@@ -129,6 +129,12 @@
                 return;
             }
 
+            if (!"GCM".equalsIgnoreCase(params.getAlgorithm())) {
+                throw new InvalidAlgorithmParameterException(
+                        "Unsupported AlgorithmParameters algorithm: " + params.getAlgorithm()
+                        + ". Supported: GCM");
+            }
+
             GCMParameterSpec spec;
             try {
                 spec = params.getParameterSpec(GCMParameterSpec.class);
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi.java
index 486519c..1f1d36f 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreUnauthenticatedAESCipherSpi.java
@@ -197,6 +197,12 @@
             return;
         }
 
+        if (!"AES".equalsIgnoreCase(params.getAlgorithm())) {
+            throw new InvalidAlgorithmParameterException(
+                    "Unsupported AlgorithmParameters algorithm: " + params.getAlgorithm()
+                    + ". Supported: AES");
+        }
+
         IvParameterSpec ivSpec;
         try {
             ivSpec = params.getParameterSpec(IvParameterSpec.class);
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 9664f58..35051b7 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -521,10 +521,10 @@
     appendMeshQuadNoClip(x1, y1, u1, v1, x2, y2, u2, v2, x3, y3, u3, v3, x4, y4, u4, v4, texture);
 
     if (mBounds) {
-        mBounds->left = fmin(mBounds->left, x1);
-        mBounds->top = fmin(mBounds->top, y3);
-        mBounds->right = fmax(mBounds->right, x3);
-        mBounds->bottom = fmax(mBounds->bottom, y1);
+        mBounds->left = std::min(mBounds->left, x1);
+        mBounds->top = std::min(mBounds->top, y3);
+        mBounds->right = std::max(mBounds->right, x3);
+        mBounds->bottom = std::max(mBounds->bottom, y1);
     }
 
     if (mCurrentCacheTexture->endOfMesh()) {
@@ -539,10 +539,10 @@
     appendMeshQuadNoClip(x1, y1, u1, v1, x2, y2, u2, v2, x3, y3, u3, v3, x4, y4, u4, v4, texture);
 
     if (mBounds) {
-        mBounds->left = fmin(mBounds->left, fmin(x1, fmin(x2, fmin(x3, x4))));
-        mBounds->top = fmin(mBounds->top, fmin(y1, fmin(y2, fmin(y3, y4))));
-        mBounds->right = fmax(mBounds->right, fmax(x1, fmax(x2, fmax(x3, x4))));
-        mBounds->bottom = fmax(mBounds->bottom, fmax(y1, fmax(y2, fmax(y3, y4))));
+        mBounds->left = std::min(mBounds->left, std::min(x1, std::min(x2, std::min(x3, x4))));
+        mBounds->top = std::min(mBounds->top, std::min(y1, std::min(y2, std::min(y3, y4))));
+        mBounds->right = std::max(mBounds->right, std::max(x1, std::max(x2, std::max(x3, x4))));
+        mBounds->bottom = std::max(mBounds->bottom, std::max(y1, std::max(y2, std::max(y3, y4))));
     }
 
     if (mCurrentCacheTexture->endOfMesh()) {
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 87ed84f..ed2a4db 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1670,10 +1670,10 @@
     if (!texture) return;
     const AutoTexture autoCleanup(texture);
 
-    Rect uv(fmax(0.0f, src.left / texture->width),
-            fmax(0.0f, src.top / texture->height),
-            fmin(1.0f, src.right / texture->width),
-            fmin(1.0f, src.bottom / texture->height));
+    Rect uv(std::max(0.0f, src.left / texture->width),
+            std::max(0.0f, src.top / texture->height),
+            std::min(1.0f, src.right / texture->width),
+            std::min(1.0f, src.bottom / texture->height));
 
     const int textureFillFlags = (bitmap->colorType() == kAlpha_8_SkColorType)
             ? TextureFillFlags::IsAlphaMaskTexture : TextureFillFlags::None;
@@ -2450,7 +2450,7 @@
 
         if (CC_LIKELY(underlineWidth > 0.0f)) {
             const float textSize = paintCopy.getTextSize();
-            const float strokeWidth = fmax(textSize * kStdUnderline_Thickness, 1.0f);
+            const float strokeWidth = std::max(textSize * kStdUnderline_Thickness, 1.0f);
 
             const float left = x;
             float top = 0.0f;
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index f4dd943..6a7dfb3 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -119,7 +119,7 @@
         }
 
         float vOffset = y1 == y2 ? 0.0f : 0.5 - (0.5 * segment / (y2 - y1));
-        float v2 = fmax(0.0f, stepY - vOffset) / bitmapHeight;
+        float v2 = std::max(0.0f, stepY - vOffset) / bitmapHeight;
         v1 += vOffset / bitmapHeight;
 
         if (stepY > 0.0f) {
@@ -167,7 +167,7 @@
         }
 
         float uOffset = x1 == x2 ? 0.0f : 0.5 - (0.5 * segment / (x2 - x1));
-        float u2 = fmax(0.0f, stepX - uOffset) / bitmapWidth;
+        float u2 = std::max(0.0f, stepX - uOffset) / bitmapWidth;
         u1 += uOffset / bitmapWidth;
 
         if (stepX > 0.0f) {
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index e466604..3af640f 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -91,13 +91,13 @@
 
 void PathCache::computeBounds(const SkRect& bounds, const SkPaint* paint,
         float& left, float& top, float& offset, uint32_t& width, uint32_t& height) {
-    const float pathWidth = fmax(bounds.width(), 1.0f);
-    const float pathHeight = fmax(bounds.height(), 1.0f);
+    const float pathWidth = std::max(bounds.width(), 1.0f);
+    const float pathHeight = std::max(bounds.height(), 1.0f);
 
     left = bounds.fLeft;
     top = bounds.fTop;
 
-    offset = (int) floorf(fmax(paint->getStrokeWidth(), 1.0f) * 1.5f + 0.5f);
+    offset = (int) floorf(std::max(paint->getStrokeWidth(), 1.0f) * 1.5f + 0.5f);
 
     width = uint32_t(pathWidth + offset * 2.0 + 0.5);
     height = uint32_t(pathHeight + offset * 2.0 + 0.5);
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
index 7dbe3b7..2e63793 100644
--- a/libs/hwui/Properties.cpp
+++ b/libs/hwui/Properties.cpp
@@ -17,7 +17,7 @@
 
 #include "Debug.h"
 
-#include <cmath>
+#include <algorithm>
 #include <cutils/log.h>
 
 namespace android {
@@ -117,19 +117,19 @@
         ALOGD("profile bars %s", sDisableProfileBars ? "disabled" : "enabled");
         return;
     } else if (!strcmp(name, "ambientRatio")) {
-        overrideAmbientRatio = fmin(fmax(atof(value), 0.0), 10.0);
+        overrideAmbientRatio = std::min(std::max(atof(value), 0.0), 10.0);
         ALOGD("ambientRatio = %.2f", overrideAmbientRatio);
         return;
     } else if (!strcmp(name, "lightRadius")) {
-        overrideLightRadius = fmin(fmax(atof(value), 0.0), 3000.0);
+        overrideLightRadius = std::min(std::max(atof(value), 0.0), 3000.0);
         ALOGD("lightRadius = %.2f", overrideLightRadius);
         return;
     } else if (!strcmp(name, "lightPosY")) {
-        overrideLightPosY = fmin(fmax(atof(value), 0.0), 3000.0);
+        overrideLightPosY = std::min(std::max(atof(value), 0.0), 3000.0);
         ALOGD("lightPos Y = %.2f", overrideLightPosY);
         return;
     } else if (!strcmp(name, "lightPosZ")) {
-        overrideLightPosZ = fmin(fmax(atof(value), 0.0), 3000.0);
+        overrideLightPosZ = std::min(std::max(atof(value), 0.0), 3000.0);
         ALOGD("lightPos Z = %.2f", overrideLightPosZ);
         return;
     } else if (!strcmp(name, "ambientShadowStrength")) {
diff --git a/libs/hwui/TessellationCache.cpp b/libs/hwui/TessellationCache.cpp
index 9df1f0d..17cb3a7 100644
--- a/libs/hwui/TessellationCache.cpp
+++ b/libs/hwui/TessellationCache.cpp
@@ -244,8 +244,8 @@
         const Vertex& point2d = casterVertices2d[i];
         casterPolygon[i] = (Vector3){point2d.x, point2d.y, 0};
         mapPointFakeZ(casterPolygon[i], casterTransformXY, casterTransformZ);
-        minZ = fmin(minZ, casterPolygon[i].z);
-        maxZ = fmax(maxZ, casterPolygon[i].z);
+        minZ = std::min(minZ, casterPolygon[i].z);
+        maxZ = std::max(maxZ, casterPolygon[i].z);
     }
 
     // map the centroid of the caster into 3d
diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp
index 845cf30..d2685da 100644
--- a/libs/hwui/font/CacheTexture.cpp
+++ b/libs/hwui/font/CacheTexture.cpp
@@ -314,7 +314,7 @@
 #endif
             }
 
-            if (cacheBlock->mHeight < fmin(glyphH, glyphW)) {
+            if (cacheBlock->mHeight < std::min(glyphH, glyphW)) {
                 // If remaining space in this block is too small to be useful, remove it
                 mCacheBlocks = CacheBlock::removeBlock(mCacheBlocks, cacheBlock);
             }
diff --git a/media/java/android/media/AudioDeviceInfo.java b/media/java/android/media/AudioDeviceInfo.java
index 173d349..bdb1f58e 100644
--- a/media/java/android/media/AudioDeviceInfo.java
+++ b/media/java/android/media/AudioDeviceInfo.java
@@ -105,6 +105,10 @@
      * A device type describing the auxiliary line-level connectors.
      */
     public static final int TYPE_AUX_LINE         = 19;
+    /**
+     * A device type connected over IP.
+     */
+    public static final int TYPE_IP               = 20;
 
     private final AudioDevicePort mPort;
 
@@ -250,6 +254,7 @@
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_SPDIF, TYPE_LINE_DIGITAL);
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_FM, TYPE_FM);
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_AUX_LINE, TYPE_AUX_LINE);
+        INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_IP, TYPE_IP);
 
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BUILTIN_MIC, TYPE_BUILTIN_MIC);
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BLUETOOTH_SCO_HEADSET, TYPE_BLUETOOTH_SCO);
@@ -266,6 +271,7 @@
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_LINE, TYPE_LINE_ANALOG);
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_SPDIF, TYPE_LINE_DIGITAL);
         INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BLUETOOTH_A2DP, TYPE_BLUETOOTH_A2DP);
+        INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_IP, TYPE_IP);
 
         // not covered here, legacy
         //AudioSystem.DEVICE_OUT_REMOTE_SUBMIX
@@ -292,6 +298,7 @@
         EXT_TO_INT_DEVICE_MAPPING.put(TYPE_TV_TUNER, AudioSystem.DEVICE_IN_TV_TUNER);
         EXT_TO_INT_DEVICE_MAPPING.put(TYPE_TELEPHONY, AudioSystem.DEVICE_OUT_TELEPHONY_TX);
         EXT_TO_INT_DEVICE_MAPPING.put(TYPE_AUX_LINE, AudioSystem.DEVICE_OUT_AUX_LINE);
+        EXT_TO_INT_DEVICE_MAPPING.put(TYPE_IP, AudioSystem.DEVICE_OUT_IP);
     }
 }
 
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 2c28d8e..3bf8129 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -40,6 +40,7 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.ServiceManager;
+import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.ArrayMap;
 import android.util.Log;
@@ -872,7 +873,8 @@
     public void setMasterMute(boolean mute, int flags) {
         IAudioService service = getService();
         try {
-            service.setMasterMute(mute, flags, getContext().getOpPackageName());
+            service.setMasterMute(mute, flags, getContext().getOpPackageName(),
+                    UserHandle.getCallingUserId());
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in setMasterMute", e);
         }
@@ -1551,10 +1553,11 @@
      * @param on set <var>true</var> to mute the microphone;
      *           <var>false</var> to turn mute off
      */
-    public void setMicrophoneMute(boolean on){
+    public void setMicrophoneMute(boolean on) {
         IAudioService service = getService();
         try {
-            service.setMicrophoneMute(on, getContext().getOpPackageName());
+            service.setMicrophoneMute(on, getContext().getOpPackageName(),
+                    UserHandle.getCallingUserId());
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in setMicrophoneMute", e);
         }
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 373f3fd..acdadd7 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -317,6 +317,7 @@
     public static final int DEVICE_OUT_FM = 0x100000;
     public static final int DEVICE_OUT_AUX_LINE = 0x200000;
     public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000;
+    public static final int DEVICE_OUT_IP = 0x800000;
 
     public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT;
 
@@ -343,6 +344,7 @@
                                               DEVICE_OUT_FM |
                                               DEVICE_OUT_AUX_LINE |
                                               DEVICE_OUT_SPEAKER_SAFE |
+                                              DEVICE_OUT_IP |
                                               DEVICE_OUT_DEFAULT);
     public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP |
                                                    DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
@@ -381,6 +383,7 @@
     public static final int DEVICE_IN_SPDIF = DEVICE_BIT_IN | 0x10000;
     public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000;
     public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000;
+    public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000;
     public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT;
 
     public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION |
@@ -402,6 +405,7 @@
                                              DEVICE_IN_SPDIF |
                                              DEVICE_IN_BLUETOOTH_A2DP |
                                              DEVICE_IN_LOOPBACK |
+                                             DEVICE_IN_IP |
                                              DEVICE_IN_DEFAULT);
     public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET;
     public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY |
@@ -436,6 +440,7 @@
     public static final String DEVICE_OUT_FM_NAME = "fm_transmitter";
     public static final String DEVICE_OUT_AUX_LINE_NAME = "aux_line";
     public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe";
+    public static final String DEVICE_OUT_IP_NAME = "ip";
 
     public static final String DEVICE_IN_COMMUNICATION_NAME = "communication";
     public static final String DEVICE_IN_AMBIENT_NAME = "ambient";
@@ -456,6 +461,7 @@
     public static final String DEVICE_IN_SPDIF_NAME = "spdif";
     public static final String DEVICE_IN_BLUETOOTH_A2DP_NAME = "bt_a2dp";
     public static final String DEVICE_IN_LOOPBACK_NAME = "loopback";
+    public static final String DEVICE_IN_IP_NAME = "ip";
 
     public static String getOutputDeviceName(int device)
     {
@@ -506,6 +512,8 @@
             return DEVICE_OUT_AUX_LINE_NAME;
         case DEVICE_OUT_SPEAKER_SAFE:
             return DEVICE_OUT_SPEAKER_SAFE_NAME;
+        case DEVICE_OUT_IP:
+            return DEVICE_OUT_IP_NAME;
         case DEVICE_OUT_DEFAULT:
         default:
             return Integer.toString(device);
@@ -553,6 +561,8 @@
             return DEVICE_IN_BLUETOOTH_A2DP_NAME;
         case DEVICE_IN_LOOPBACK:
             return DEVICE_IN_LOOPBACK_NAME;
+        case DEVICE_IN_IP:
+            return DEVICE_IN_IP_NAME;
         case DEVICE_IN_DEFAULT:
         default:
             return Integer.toString(device);
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index c75c7e5..8aebe11 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -55,7 +55,7 @@
 
     boolean isMasterMute();
 
-    void setMasterMute(boolean mute, int flags, String callingPackage);
+    void setMasterMute(boolean mute, int flags, String callingPackage, int userId);
 
     int getStreamVolume(int streamType);
 
@@ -65,7 +65,7 @@
 
     int getLastAudibleStreamVolume(int streamType);
 
-    void setMicrophoneMute(boolean on, String callingPackage);
+    void setMicrophoneMute(boolean on, String callingPackage, int userId);
 
     void setRingerModeExternal(int ringerMode, String caller);
 
diff --git a/media/java/android/media/ImageWriter.java b/media/java/android/media/ImageWriter.java
index 2ef2519..9fb3286 100644
--- a/media/java/android/media/ImageWriter.java
+++ b/media/java/android/media/ImageWriter.java
@@ -40,8 +40,8 @@
  * Several Android API classes can provide input {@link android.view.Surface
  * Surface} objects for ImageWriter to produce data into, including
  * {@link MediaCodec MediaCodec} (encoder),
- * {@link android.hardware.camera2.CameraDevice CameraDevice} (reprocessing
- * input), {@link ImageReader}, etc.
+ * {@link android.hardware.camera2.CameraCaptureSession CameraCaptureSession}
+ * (reprocessing input), {@link ImageReader}, etc.
  * </p>
  * <p>
  * The input Image data is encapsulated in {@link Image} objects. To produce
@@ -64,7 +64,14 @@
  * {@link android.hardware.camera2.CameraDevice}) to consume the Images. If the
  * downstream components cannot consume the Images at least as fast as the
  * ImageWriter production rate, the {@link #dequeueInputImage} call will
- * eventually block and the application will have to drop input frames. </p>
+ * eventually block and the application will have to drop input frames.
+ * </p>
+ * <p>
+ * If the consumer component that provided the input {@link android.view.Surface Surface}
+ * abandons the {@link android.view.Surface Surface}, {@link #queueInputImage queueing}
+ * or {@link #dequeueInputImage dequeueing} an {@link Image} will throw an
+ * {@link IllegalStateException}.
+ * </p>
  */
 public class ImageWriter implements AutoCloseable {
     private final Object mListenerLock = new Object();
@@ -188,7 +195,9 @@
      * @return The next available input Image from this ImageWriter.
      * @throws IllegalStateException if {@code maxImages} Images are currently
      *             dequeued, or the ImageWriter format is
-     *             {@link ImageFormat#PRIVATE PRIVATE}.
+     *             {@link ImageFormat#PRIVATE PRIVATE}, or the input
+     *             {@link android.view.Surface Surface} has been abandoned by the
+     *             consumer component that provided the {@link android.view.Surface Surface}.
      * @see #queueInputImage
      * @see Image#close
      */
@@ -254,6 +263,11 @@
      *
      * @param image The Image to be queued back to ImageWriter for future
      *            consumption.
+     * @throws IllegalStateException if the image was already queued previously,
+     *            or the image was aborted previously, or the input
+     *            {@link android.view.Surface Surface} has been abandoned by the
+     *            consumer component that provided the
+     *            {@link android.view.Surface Surface}.
      * @see #dequeueInputImage()
      */
     public void queueInputImage(Image image) {
@@ -699,7 +713,7 @@
         }
 
         private void clearSurfacePlanes() {
-            if (mIsImageValid) {
+            if (mIsImageValid && mPlanes != null) {
                 for (int i = 0; i < mPlanes.length; i++) {
                     if (mPlanes[i] != null) {
                         mPlanes[i].clearBuffer();
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index 6ac0efb..2364a13 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -202,7 +202,8 @@
                 Log.w(TAG, "Attempted to add session listener twice, ignoring.");
                 return;
             }
-            SessionsChangedWrapper wrapper = new SessionsChangedWrapper(sessionListener, handler);
+            SessionsChangedWrapper wrapper = new SessionsChangedWrapper(mContext, sessionListener,
+                    handler);
             try {
                 mService.addSessionsListener(wrapper.mStub, notificationListener, userId);
                 mListeners.put(sessionListener, wrapper);
@@ -229,6 +230,8 @@
                     mService.removeSessionsListener(wrapper.mStub);
                 } catch (RemoteException e) {
                     Log.e(TAG, "Error in removeOnActiveSessionsChangedListener.", e);
+                } finally {
+                    wrapper.release();
                 }
             }
         }
@@ -317,11 +320,14 @@
         public void onActiveSessionsChanged(@Nullable List<MediaController> controllers);
     }
 
-    private final class SessionsChangedWrapper {
-        private final OnActiveSessionsChangedListener mListener;
-        private final Handler mHandler;
+    private static final class SessionsChangedWrapper {
+        private Context mContext;
+        private OnActiveSessionsChangedListener mListener;
+        private Handler mHandler;
 
-        public SessionsChangedWrapper(OnActiveSessionsChangedListener listener, Handler handler) {
+        public SessionsChangedWrapper(Context context, OnActiveSessionsChangedListener listener,
+                Handler handler) {
+            mContext = context;
             mListener = listener;
             mHandler = handler;
         }
@@ -333,17 +339,25 @@
                     mHandler.post(new Runnable() {
                         @Override
                         public void run() {
-                            ArrayList<MediaController> controllers
-                                    = new ArrayList<MediaController>();
-                            int size = tokens.size();
-                            for (int i = 0; i < size; i++) {
-                                controllers.add(new MediaController(mContext, tokens.get(i)));
+                            if (mListener != null) {
+                                ArrayList<MediaController> controllers
+                                        = new ArrayList<MediaController>();
+                                int size = tokens.size();
+                                for (int i = 0; i < size; i++) {
+                                    controllers.add(new MediaController(mContext, tokens.get(i)));
+                                }
+                                mListener.onActiveSessionsChanged(controllers);
                             }
-                            mListener.onActiveSessionsChanged(controllers);
                         }
                     });
                 }
             }
         };
+
+        private void release() {
+            mContext = null;
+            mListener = null;
+            mHandler = null;
+        }
     }
 }
diff --git a/media/java/android/mtp/MtpStorage.java b/media/java/android/mtp/MtpStorage.java
index 3641ff5..6ca442c 100644
--- a/media/java/android/mtp/MtpStorage.java
+++ b/media/java/android/mtp/MtpStorage.java
@@ -53,18 +53,6 @@
         return mStorageId;
     }
 
-    /**
-     * Generates a storage ID for storage of given index.
-     * Index 0 is for primary external storage
-     *
-     * @return the storage ID
-     */
-    public static int getStorageIdForIndex(int index) {
-        // storage ID is 0x00010001 for primary storage,
-        // then 0x00020001, 0x00030001, etc. for secondary storages
-        return ((index + 1) << 16) + 1;
-    }
-
    /**
      * Returns the file path for the storage unit's storage in the file system
      *
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp
index ba7634c..f92a8ef 100644
--- a/media/jni/android_media_ImageWriter.cpp
+++ b/media/jni/android_media_ImageWriter.cpp
@@ -338,9 +338,16 @@
     int fenceFd = -1;
     status_t res = anw->dequeueBuffer(anw.get(), &anb, &fenceFd);
     if (res != OK) {
-        // TODO: handle different error cases here.
         ALOGE("%s: Dequeue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res);
-        jniThrowRuntimeException(env, "dequeue buffer failed");
+        switch (res) {
+            case NO_INIT:
+                jniThrowException(env, "java/lang/IllegalStateException",
+                    "Surface has been abandoned");
+                break;
+            default:
+                // TODO: handle other error cases here.
+                jniThrowRuntimeException(env, "dequeue buffer failed");
+        }
         return;
     }
     // New GraphicBuffer object doesn't own the handle, thus the native buffer
@@ -468,7 +475,16 @@
     // Finally, queue input buffer
     res = anw->queueBuffer(anw.get(), buffer, fenceFd);
     if (res != OK) {
-        jniThrowRuntimeException(env, "Queue input buffer failed");
+        ALOGE("%s: Queue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res);
+        switch (res) {
+            case NO_INIT:
+                jniThrowException(env, "java/lang/IllegalStateException",
+                    "Surface has been abandoned");
+                break;
+            default:
+                // TODO: handle other error cases here.
+                jniThrowRuntimeException(env, "Queue input buffer failed");
+        }
         return;
     }
 
@@ -514,9 +530,16 @@
     // Step 1. Attach Image
     res = surface->attachBuffer(opaqueBuffer->mGraphicBuffer.get());
     if (res != OK) {
-        // TODO: handle different error case separately.
         ALOGE("Attach image failed: %s (%d)", strerror(-res), res);
-        jniThrowRuntimeException(env, "nativeAttachImage failed!!!");
+        switch (res) {
+            case NO_INIT:
+                jniThrowException(env, "java/lang/IllegalStateException",
+                    "Surface has been abandoned");
+                break;
+            default:
+                // TODO: handle other error cases here.
+                jniThrowRuntimeException(env, "nativeAttachImage failed!!!");
+        }
         return res;
     }
     sp < ANativeWindow > anw = surface;
@@ -545,7 +568,16 @@
     res = anw->queueBuffer(anw.get(), opaqueBuffer->mGraphicBuffer.get(), /*fenceFd*/
             -1);
     if (res != OK) {
-        jniThrowRuntimeException(env, "Queue input buffer failed");
+        ALOGE("%s: Queue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res);
+        switch (res) {
+            case NO_INIT:
+                jniThrowException(env, "java/lang/IllegalStateException",
+                    "Surface has been abandoned");
+                break;
+            default:
+                // TODO: handle other error cases here.
+                jniThrowRuntimeException(env, "Queue input buffer failed");
+        }
         return res;
     }
 
diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml
index a3ff7a4..5a42c7c 100644
--- a/packages/DocumentsUI/res/values-hi/strings.xml
+++ b/packages/DocumentsUI/res/values-hi/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="2783841764617238354">"दस्तावेज़"</string>
     <string name="title_open" msgid="4353228937663917801">"यहां से खोलें"</string>
-    <string name="title_save" msgid="2433679664882857999">"यहां जोड़ें"</string>
+    <string name="title_save" msgid="2433679664882857999">"यहां सहेजें"</string>
     <string name="menu_create_dir" msgid="5947289605844398389">"फ़ोल्डर बनाएं"</string>
     <string name="menu_grid" msgid="6878021334497835259">"ग्रिड दृश्य"</string>
     <string name="menu_list" msgid="7279285939892417279">"सूची दृश्य"</string>
diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml
index 50b4c4b..60e8bf3 100644
--- a/packages/DocumentsUI/res/values-hr/strings.xml
+++ b/packages/DocumentsUI/res/values-hr/strings.xml
@@ -39,7 +39,7 @@
     <string name="menu_file_size_hide" msgid="8881975928502581042">"Sakrij veličinu datoteke"</string>
     <string name="button_select" msgid="527196987259139214">"Odaberi"</string>
     <string name="button_copy" msgid="8706475544635021302">"Kopiraj"</string>
-    <string name="sort_name" msgid="9183560467917256779">"Po korisniku"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Po nazivu"</string>
     <string name="sort_date" msgid="586080032956151448">"Po datumu izmjene"</string>
     <string name="sort_size" msgid="3350681319735474741">"Po veličini"</string>
     <string name="drawer_open" msgid="4545466532430226949">"Prikaži korijene"</string>
diff --git a/packages/DocumentsUI/res/values-ta-rIN/strings.xml b/packages/DocumentsUI/res/values-ta-rIN/strings.xml
index bc822fb..e67df98 100644
--- a/packages/DocumentsUI/res/values-ta-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-ta-rIN/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="2783841764617238354">"ஆவணங்கள்"</string>
-    <string name="title_open" msgid="4353228937663917801">"இதிலிருந்து திற"</string>
+    <string name="title_open" msgid="4353228937663917801">"இதில் திற"</string>
     <string name="title_save" msgid="2433679664882857999">"இதில் சேமி"</string>
     <string name="menu_create_dir" msgid="5947289605844398389">"கோப்புறையை உருவாக்கு"</string>
     <string name="menu_grid" msgid="6878021334497835259">"கட்டக் காட்சி"</string>
diff --git a/packages/DocumentsUI/res/values-te-rIN/strings.xml b/packages/DocumentsUI/res/values-te-rIN/strings.xml
index f24176f..a8f587a40 100644
--- a/packages/DocumentsUI/res/values-te-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-te-rIN/strings.xml
@@ -48,7 +48,7 @@
     <string name="create_error" msgid="3735649141335444215">"ఫోల్డర్‌ను సృష్టించడంలో విఫలమైంది"</string>
     <string name="query_error" msgid="1222448261663503501">"పత్రాల కోసం ప్రశ్నించడంలో విఫలమైంది"</string>
     <string name="root_recent" msgid="4470053704320518133">"ఇటీవల"</string>
-    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ఉచితం"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ఖాళీ"</string>
     <string name="root_type_service" msgid="2178854894416775409">"నిల్వ పరికరాలు"</string>
     <string name="root_type_shortcut" msgid="3318760609471618093">"సత్వరమార్గాలు"</string>
     <string name="root_type_device" msgid="7121342474653483538">"పరికరాలు"</string>
diff --git a/packages/Keyguard/res/values-bn-rBD/strings.xml b/packages/Keyguard/res/values-bn-rBD/strings.xml
index 42405dd..92bdad9 100644
--- a/packages/Keyguard/res/values-bn-rBD/strings.xml
+++ b/packages/Keyguard/res/values-bn-rBD/strings.xml
@@ -21,14 +21,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="719438068451601849">"কীগার্ড"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN কোড লিখুন"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"সিম PUK এবং নতুন PIN কোড লিখুন"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"পিন কোড লিখুন"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"সিম PUK এবং নতুন পিন কোড লিখুন"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"সিম PUK কোড"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"নতুন সিম PIN কোড"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"নতুন সিম পিন কোড"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"পাসওয়ার্ড লিখতে স্পর্শ করুন"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"আনলক করতে পাসওয়ার্ড লিখুন"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"আনলক করতে PIN লিখুন"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ভুল PIN কোড৷"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"আনলক করতে পিন লিখুন"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ভুল পিন কোড৷"</string>
     <string name="keyguard_charged" msgid="3272223906073492454">"চার্জ হয়েছে"</string>
     <string name="keyguard_plugged_in" msgid="9087497435553252863">"চার্জ হচ্ছে"</string>
     <string name="keyguard_low_battery" msgid="8143808018719173859">"আপনার চার্জার সংযুক্ত করুন৷"</string>
@@ -49,8 +49,8 @@
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"পাসওয়ার্ড দিয়ে আনলক৷"</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"প্যাটার্ন এলাকা৷"</string>
     <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"স্লাইড করার এলাকা৷"</string>
-    <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN অঞ্চল"</string>
-    <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN অঞ্চল"</string>
+    <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"পিন অঞ্চল"</string>
+    <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM পিন অঞ্চল"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK অঞ্চল"</string>
     <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"<xliff:g id="ALARM">%1$s</xliff:g> এ পরবর্তী অ্যালার্ম সেট করা হয়েছে"</string>
     <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"মুছুন"</string>
@@ -58,22 +58,22 @@
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"প্যাটার্ন ভুলে গেছেন"</string>
     <string name="kg_wrong_pattern" msgid="1850806070801358830">"ভুল প্যাটার্ন"</string>
     <string name="kg_wrong_password" msgid="2333281762128113157">"ভুল পাসওয়ার্ড"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"ভুল PIN"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"ভুল পিন"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"আপনার প্যাটার্ন আঁকুন"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"সিম PIN লিখুন"</string>
-    <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" এর জন্য SIM PIN লিখুন"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN লিখুন"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"সিম পিন লিখুন"</string>
+    <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" এর জন্য SIM পিন লিখুন"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"পিন লিখুন"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"পাসওয়ার্ড লিখুন"</string>
     <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"সিম এখন অক্ষম করা হয়েছে৷ অবিরত থাকতে PUK কোডটি লিখুন৷ বিশদ বিবরণের জন্য ক্যারিয়ারের সাথে যোগাযোগ করুন৷"</string>
     <string name="kg_puk_enter_puk_hint_multi" msgid="363822494559783025">"SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\" এখন অক্ষম করা হয়েছে৷ চালিয়ে যেতে PUK কোড লিখুন৷ বিস্তারিত জানার জন্য ক্যারিয়ারের সাথে যোগাযোগ করুন৷"</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"কাঙ্ক্ষিত PIN কোড লিখুন"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"কাঙ্ক্ষিত PIN কোড নিশ্চিত করুন"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"কাঙ্ক্ষিত পিন কোড লিখুন"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"কাঙ্ক্ষিত পিন কোড নিশ্চিত করুন"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"সিম কার্ড আনলক করা হচ্ছে…"</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"৪ থেকে ৮টি সংখ্যার একটি PIN লিখুন৷"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"৪ থেকে ৮টি সংখ্যার একটি পিন লিখুন৷"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK কোডটিকে ৮টি বা তার বেশি সংখ্য বিশিষ্ট হতে হবে৷"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"সঠিক PUK কোড পুনরায় লিখুন৷ বার বার প্রচেষ্টা করা হলে তা স্থায়ীভাবে সিমটিকে অক্ষম করে দেবে৷"</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN কোডগুলি মিলছে না"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"পিন কোডগুলি মিলছে না"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"বিভিন্ন প্যাটার্নের সাহায্যে খুব বেশি বার প্রচেষ্টা করা হয়ে গেছে"</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"আপনি আপনার পাসওয়ার্ড <xliff:g id="NUMBER_0">%d</xliff:g> বার ভুল টাইপ করেছেন৷ \n\n<xliff:g id="NUMBER_1">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"আপনি আপনার পাসওয়ার্ড <xliff:g id="NUMBER_0">%d</xliff:g> বার ভুল টাইপ করেছেন৷ \n\n<xliff:g id="NUMBER_1">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string>
@@ -92,35 +92,35 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4951507352869831265">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুল করে ফোনটি আনলক করার চেষ্টা করেছেন৷ কাজের প্রোফাইল সরানো হবে যা সমস্ত প্রোফাইল ডেটা মুছে ফেলবে৷"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"আপনি আপনার আনলকের প্যাটার্ন আঁকার ক্ষেত্রে <xliff:g id="NUMBER_0">%d</xliff:g> বার ভুল করেছেন৷ আর <xliff:g id="NUMBER_1">%d</xliff:g> বার অসফল প্রচেষ্টা করা হলে আপনাকে একটি ইমেল অ্যাকাউন্ট মারফত আপনার ট্যাবলেট আনলক করতে বলা হবে৷\n\n <xliff:g id="NUMBER_2">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"আপনি আপনার আনলকের প্যাটার্ন আঁকার ক্ষেত্রে <xliff:g id="NUMBER_0">%d</xliff:g> বার ভুল করেছেন৷ আর <xliff:g id="NUMBER_1">%d</xliff:g> বার অসফল প্রচেষ্টা করা হলে আপনাকে একটি ইমেল অ্যাকাউন্ট মারফত আপনার ফোন আনলক করতে বলা হবে৷\n\n <xliff:g id="NUMBER_2">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string>
-    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ভুল সিম PIN কোড, আপনার ডিভাইসটি আনলক করতে এখন আপনাকে অবশ্যই আপনার ক্যারিয়ারের সাথে যোগাযোগ করতে হবে৷"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ভুল সিম পিন কোড, আপনার ডিভাইসটি আনলক করতে এখন আপনাকে অবশ্যই আপনার ক্যারিয়ারের সাথে যোগাযোগ করতে হবে৷"</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249">
-      <item quantity="one">ভুল SIM PIN কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে৷</item>
-      <item quantity="other">ভুল SIM PIN কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে৷</item>
+      <item quantity="one">ভুল SIM পিন কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে৷</item>
+      <item quantity="other">ভুল SIM পিন কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে৷</item>
     </plurals>
     <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIMটি ব্যবহারের অযোগ্য৷ আপনার ক্যারিয়ারের সাথে যোগাযোগ করুন৷"</string>
     <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780">
       <item quantity="one">ভুল SIM PUK কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে এটির পরেই আপনার SIM স্থায়ীভাবে অব্যবহারযোগ্য হবে৷</item>
       <item quantity="other">ভুল SIM PUK কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে এটির পরেই আপনার SIM স্থায়ীভাবে অব্যবহারযোগ্য হবে৷</item>
     </plurals>
-    <string name="kg_password_pin_failed" msgid="6268288093558031564">"সিম PIN ক্রিয়াকলাপটি ব্যর্থ হয়েছে!"</string>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"সিম পিন ক্রিয়াকলাপটি ব্যর্থ হয়েছে!"</string>
     <string name="kg_password_puk_failed" msgid="2838824369502455984">"সিম PUK ক্রিয়াকলাপটি ব্যর্থ হয়েছে!"</string>
     <string name="kg_pin_accepted" msgid="1448241673570020097">"কোড স্বীকৃত হয়েছে!"</string>
     <string name="keyguard_carrier_default" msgid="8700650403054042153">"কোনো পরিষেবা নেই৷"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ইনপুট পদ্ধতির বোতাম পরিবর্তন করুন৷"</string>
     <string name="airplane_mode" msgid="3122107900897202805">"বিমান মোড"</string>
     <string name="kg_prompt_reason_restart_pattern" msgid="489430505491862444">"যখন আপনি ডিভাইস পুনর্সূচনা করবেন তখন প্যাটার্নের প্রয়োজন হবে৷"</string>
-    <string name="kg_prompt_reason_restart_pin" msgid="994878216570694974">"যখন আপনি ডিভাইস পুনর্সূচনা করবেন তখন PIN এর প্রয়োজন হবে৷"</string>
+    <string name="kg_prompt_reason_restart_pin" msgid="994878216570694974">"যখন আপনি ডিভাইস পুনর্সূচনা করবেন তখন পিন এর প্রয়োজন হবে৷"</string>
     <string name="kg_prompt_reason_restart_password" msgid="2375742919528461664">"যখন আপনি ডিভাইস পুনর্সূচনা করবেন তখন পাসওয়ার্ডের প্রয়োজন হবে৷"</string>
     <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3802056699323773969">"যখন আপনি প্রোফাইলগুলি পাল্টাবেন তখন প্যাটার্নের প্রয়োজন হবে৷"</string>
-    <string name="kg_prompt_reason_switch_profiles_pin" msgid="8108020184731052246">"যখন আপনি প্রোফাইলগুলি পাল্টাবেন তখন PIN এর প্রয়োজন হবে৷"</string>
+    <string name="kg_prompt_reason_switch_profiles_pin" msgid="8108020184731052246">"যখন আপনি প্রোফাইলগুলি পাল্টাবেন তখন পিন এর প্রয়োজন হবে৷"</string>
     <string name="kg_prompt_reason_switch_profiles_password" msgid="6755997057852042672">"যখন আপনি প্রোফাইলগুলি পাল্টাবেন তখন পাসওয়ার্ডের প্রয়োজন হবে৷"</string>
     <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="2697444392228541853">
       <item quantity="one">ডিভাইস <xliff:g id="NUMBER_1">%d</xliff:g> ঘন্টার জন্য আনলক করা হয়নি। প্যাটার্ন নিশ্চিত করুন।</item>
       <item quantity="other">ডিভাইস <xliff:g id="NUMBER_1">%d</xliff:g> ঘন্টার জন্য আনলক করা হয়নি। প্যাটার্ন নিশ্চিত করুন।</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_pin" formatted="false" msgid="2118758475374354849">
-      <item quantity="one">ডিভাইস <xliff:g id="NUMBER_1">%d</xliff:g> ঘন্টার জন্য আনলক করা হয়নি। PIN নিশ্চিত করুন৷</item>
-      <item quantity="other">ডিভাইস <xliff:g id="NUMBER_1">%d</xliff:g> ঘন্টার জন্য আনলক করা হয়নি। PIN নিশ্চিত করুন৷</item>
+      <item quantity="one">ডিভাইস <xliff:g id="NUMBER_1">%d</xliff:g> ঘন্টার জন্য আনলক করা হয়নি। পিন নিশ্চিত করুন৷</item>
+      <item quantity="other">ডিভাইস <xliff:g id="NUMBER_1">%d</xliff:g> ঘন্টার জন্য আনলক করা হয়নি। পিন নিশ্চিত করুন৷</item>
     </plurals>
     <plurals name="kg_prompt_reason_time_password" formatted="false" msgid="5132693663364913675">
       <item quantity="one">ডিভাইস <xliff:g id="NUMBER_1">%d</xliff:g> ঘন্টার জন্য আনলক করা হয়নি। পাসওয়ার্ড নিশ্চিত করুন৷</item>
diff --git a/packages/Keyguard/res/values-kn-rIN/strings.xml b/packages/Keyguard/res/values-kn-rIN/strings.xml
index 6bcf435..6f1f7ff 100644
--- a/packages/Keyguard/res/values-kn-rIN/strings.xml
+++ b/packages/Keyguard/res/values-kn-rIN/strings.xml
@@ -108,10 +108,10 @@
     <string name="keyguard_carrier_default" msgid="8700650403054042153">"ಯಾವುದೇ ಸೇವೆಯಿಲ್ಲ."</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ಇನ್‌ಪುಟ್ ವಿಧಾನ ಬದಲಿಸು ಬಟನ್."</string>
     <string name="airplane_mode" msgid="3122107900897202805">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್"</string>
-    <string name="kg_prompt_reason_restart_pattern" msgid="489430505491862444">"ನೀವು ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ ನಮೂನೆ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
+    <string name="kg_prompt_reason_restart_pattern" msgid="489430505491862444">"ನೀವು ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ ಪ್ಯಾಟರ್ನ್ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
     <string name="kg_prompt_reason_restart_pin" msgid="994878216570694974">"ನೀವು ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ ಪಿನ್ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
     <string name="kg_prompt_reason_restart_password" msgid="2375742919528461664">"ನೀವು ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ ಪಾಸ್‌ವರ್ಡ್ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
-    <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3802056699323773969">"ನೀವು ಪ್ರೊಫೈಲ್ ಬದಲಾಯಿಸಿದಾಗ ನಮೂನೆ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
+    <string name="kg_prompt_reason_switch_profiles_pattern" msgid="3802056699323773969">"ನೀವು ಪ್ರೊಫೈಲ್ ಬದಲಾಯಿಸಿದಾಗ ಪ್ಯಾಟರ್ನ್ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
     <string name="kg_prompt_reason_switch_profiles_pin" msgid="8108020184731052246">"ನೀವು ಪ್ರೊಫೈಲ್ ಬದಲಾಯಿಸಿದಾಗ ಪಿನ್ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
     <string name="kg_prompt_reason_switch_profiles_password" msgid="6755997057852042672">"ನೀವು ಪ್ರೊಫೈಲ್ ಬದಲಾಯಿಸಿದಾಗ ಪಾಸ್‌ವರ್ಡ್‌ ಅಗತ್ಯವಿರುತ್ತದೆ."</string>
     <plurals name="kg_prompt_reason_time_pattern" formatted="false" msgid="2697444392228541853">
diff --git a/packages/Keyguard/res/values/styles.xml b/packages/Keyguard/res/values/styles.xml
index 943c3ea..dede537 100644
--- a/packages/Keyguard/res/values/styles.xml
+++ b/packages/Keyguard/res/values/styles.xml
@@ -52,4 +52,8 @@
         <item name="android:colorControlNormal">#80ffffff</item>
         <item name="android:colorControlActivated">#80ffffff</item>
     </style>
+
+    <style name="keyguard_presentation_theme" parent="@android:style/Theme.Material.NoActionBar.Fullscreen">
+    </style>
+
 </resources>
diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java
index e083c9c..e89caf7 100644
--- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java
+++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java
@@ -23,8 +23,11 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
+import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
 import android.text.TextUtils;
 import android.text.method.SingleLineTransformationMethod;
@@ -48,6 +51,8 @@
 
     private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
 
+    private WifiManager mWifiManager;
+
     private KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() {
         @Override
         public void onRefreshCarrierInfo() {
@@ -93,24 +98,46 @@
             a.recycle();
         }
         setTransformationMethod(new CarrierTextTransformationMethod(mContext, useAllCaps));
+
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
     }
 
     protected void updateCarrierText() {
         boolean allSimsMissing = true;
+        boolean anySimReadyAndInService = false;
         CharSequence displayText = null;
 
         List<SubscriptionInfo> subs = mKeyguardUpdateMonitor.getSubscriptionInfo(false);
         final int N = subs.size();
         if (DEBUG) Log.d(TAG, "updateCarrierText(): " + N);
         for (int i = 0; i < N; i++) {
-            State simState = mKeyguardUpdateMonitor.getSimState(subs.get(i).getSubscriptionId());
+            int subId = subs.get(i).getSubscriptionId();
+            State simState = mKeyguardUpdateMonitor.getSimState(subId);
             CharSequence carrierName = subs.get(i).getCarrierName();
             CharSequence carrierTextForSimState = getCarrierTextForSimState(simState, carrierName);
-            if (DEBUG) Log.d(TAG, "Handling " + simState + " " + carrierName);
+            if (DEBUG) {
+                Log.d(TAG, "Handling (subId=" + subId + "): " + simState + " " + carrierName);
+            }
             if (carrierTextForSimState != null) {
                 allSimsMissing = false;
                 displayText = concatenate(displayText, carrierTextForSimState);
             }
+            if (simState == IccCardConstants.State.READY) {
+                ServiceState ss = mKeyguardUpdateMonitor.mServiceStates.get(subId);
+                if (ss != null && ss.getDataRegState() == ServiceState.STATE_IN_SERVICE) {
+                    // hack for WFC (IWLAN) not turning off immediately once
+                    // Wi-Fi is disassociated or disabled
+                    if (ss.getRilDataRadioTechnology() != ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN
+                            || (mWifiManager.isWifiEnabled()
+                                    && mWifiManager.getConnectionInfo() != null
+                                    && mWifiManager.getConnectionInfo().getBSSID() != null)) {
+                        if (DEBUG) {
+                            Log.d(TAG, "SIM ready and in service: subId=" + subId + ", ss=" + ss);
+                        }
+                        anySimReadyAndInService = true;
+                    }
+                }
+            }
         }
         if (allSimsMissing) {
             if (N != 0) {
@@ -152,7 +179,10 @@
                         getContext().getText(R.string.keyguard_missing_sim_message_short), text);
             }
         }
-        if (WirelessUtils.isAirplaneModeOn(mContext)) {
+
+        // APM (airplane mode) != no carrier state. There are carrier services
+        // (e.g. WFC = Wi-Fi calling) which may operate in APM.
+        if (!anySimReadyAndInService && WirelessUtils.isAirplaneModeOn(mContext)) {
             displayText = getContext().getString(R.string.airplane_mode);
         }
         setText(displayText);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java
index 55f965c..8de1d31 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java
@@ -105,7 +105,8 @@
 
             if (mPresentation == null && presentationDisplay != null) {
                 if (DEBUG) Slog.i(TAG, "Keyguard enabled on display: " + presentationDisplay);
-                mPresentation = new KeyguardPresentation(mContext, presentationDisplay);
+                mPresentation = new KeyguardPresentation(mContext, presentationDisplay,
+                        R.style.keyguard_presentation_theme);
                 mPresentation.setOnDismissListener(mOnDismissListener);
                 try {
                     mPresentation.show();
@@ -141,11 +142,12 @@
             }
         };
 
-        public KeyguardPresentation(Context context, Display display) {
-            super(context, display);
+        public KeyguardPresentation(Context context, Display display, int theme) {
+            super(context, display, theme);
             getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
         }
 
+        @Override
         public void onDetachedFromWindow() {
             mClock.removeCallbacks(mMoveTextRunnable);
         }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 022338d..581c15b 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -56,6 +56,7 @@
 import android.hardware.fingerprint.FingerprintManager;
 import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
 import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
+import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
@@ -118,11 +119,13 @@
     private static final int MSG_FACE_UNLOCK_STATE_CHANGED = 327;
     private static final int MSG_SIM_SUBSCRIPTION_INFO_CHANGED = 328;
     private static final int MSG_AIRPLANE_MODE_CHANGED = 329;
+    private static final int MSG_SERVICE_STATE_CHANGE = 330;
 
     private static KeyguardUpdateMonitor sInstance;
 
     private final Context mContext;
     HashMap<Integer, SimData> mSimDatas = new HashMap<Integer, SimData>();
+    HashMap<Integer, ServiceState> mServiceStates = new HashMap<Integer, ServiceState>();
 
     private int mRingMode;
     private int mPhoneState;
@@ -226,6 +229,9 @@
                 case MSG_AIRPLANE_MODE_CHANGED:
                     handleAirplaneModeChanged();
                     break;
+                case MSG_SERVICE_STATE_CHANGE:
+                    handleServiceStateChange(msg.arg1, (ServiceState) msg.obj);
+                    break;
             }
         }
     };
@@ -356,9 +362,9 @@
     }
 
     private void handleFingerprintAuthFailed() {
-        // FingerprintManager will allow us to retry a few times before finally giving up.
-        // TODO: Figure out the proper logic to stop this call when max tries is reached.
+        stopListeningForFingerprint();
         handleFingerprintHelp(-1, mContext.getString(R.string.fingerprint_not_recognized));
+        updateFingerprintListeningState();
     }
 
     private void handleFingerprintAuthenticated() {
@@ -503,6 +509,16 @@
                 mHandler.sendEmptyMessage(MSG_AIRPLANE_MODE_CHANGED);
             } else if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
                 dispatchBootCompleted();
+            } else if (TelephonyIntents.ACTION_SERVICE_STATE_CHANGED.equals(action)) {
+                ServiceState serviceState = ServiceState.newFromBundle(intent.getExtras());
+                int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY,
+                        SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+                if (DEBUG) {
+                    Log.v(TAG, "action " + action + " serviceState=" + serviceState + " subId="
+                            + subId);
+                }
+                mHandler.sendMessage(
+                        mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGE, subId, 0, serviceState));
             }
         }
     };
@@ -738,6 +754,7 @@
         filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
         filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
+        filter.addAction(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED);
         filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
         filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
         context.registerReceiver(mBroadcastReceiver, filter);
@@ -1058,6 +1075,30 @@
     }
 
     /**
+     * Handle {@link #MSG_SERVICE_STATE_CHANGE}
+     */
+    private void handleServiceStateChange(int subId, ServiceState serviceState) {
+        if (DEBUG) {
+            Log.d(TAG,
+                    "handleServiceStateChange(subId=" + subId + ", serviceState=" + serviceState);
+        }
+
+        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+            Log.w(TAG, "invalid subId in handleServiceStateChange()");
+            return;
+        }
+
+        mServiceStates.put(subId, serviceState);
+
+        for (int j = 0; j < mCallbacks.size(); j++) {
+            KeyguardUpdateMonitorCallback cb = mCallbacks.get(j).get();
+            if (cb != null) {
+                cb.onRefreshCarrierInfo();
+            }
+        }
+    }
+
+    /**
      * Handle {@link #MSG_KEYGUARD_VISIBILITY_CHANGED}
      */
     private void handleKeyguardVisibilityChanged(int showing) {
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 87dd4b9..58d4bca 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Stawingsprobleem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Nie binne ontvangs nie"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Geen internettoegang bespeur nie, sal nie outomaties herkoppel nie."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Gestoor deur <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Gekoppel via Wi-Fi-assistent"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Gekoppel via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Beskikbaar via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Gekoppel, geen internet nie"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ontkoppel"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ontkoppel tans…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Verbind tans…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Gebruik vir kontakdeling"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deling van internetverbinding"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Boodskaptoegang"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-toegang"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Gekoppel aan media-oudio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Gekoppel aan foonoudio"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Gekoppel aan lêeroordragbediener"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Gekoppel aan kaart"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Aan SAP gekoppel"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Nie gekoppel aan lêeroordragbediener nie"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Gekoppel aan invoertoestel"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Aan toestel gekoppel vir internettoegang"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Deel plaaslike internetverbinding met toestel"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Gebruik vir internettoegang"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Gebruik vir kaart"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Gebruik vir SIM-toegang"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Gebruik vir media-oudio"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Gebruik vir foonoudio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Gebruik vir lêeroordrag"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 086c129..6b4d204 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"የማረጋገጫ ችግር"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"በክልል ውስጥ የለም"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"ምንም የበይነ መረብ መዳረሻ ተፈልጎ አልተገኘም፣ በራስ-ሰር እንደገና እንዲገናኝ አይደረግም።"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"የተቀመጠው በ<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"በWi‑Fi ረዳት አማካኝነት ተገናኝቷል"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"በ%1$s በኩል መገናኘት"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"በ%1$s በኩል የሚገኝ"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ተገናኝቷል፣ ምንም በይነመረብ የለም"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ተለያይቷል"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"በመለያየት ላይ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"በማገናኘት ላይ…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"እውቂያን ለማጋራት ተጠቀም"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"የበይነ መረብ ተያያዥ ማጋሪያ"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"የመልዕክት መዳረሻ"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"የሲም መዳረሻ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ወደ ማህደረ  መረጃ  አውዲዮ ተያይዟል"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ወደ ስልክ አውዲዮ ተያይዟል"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ወደ ፋይል ዝውውር አገልጋይ ተያይዟል"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"ከካርታ ጋር ተገናኝቷል"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"ከSAP ጋር ተገናኝቷል"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ከፋይል ዝውውር አገልጋይ ጋር አልተያያዘም"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ወደ ግቤት መሣሪያ ተያይዟል"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ለበይነመረብ ድረስ ወደ መሣሪያ ተያይዟል"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"የአካባቢያዊ በይነመረብ ተያያዥ ከመሣሪያ ጋር በማጋራት ላይ"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ለበይነ መረብ ድረስ ተጠቀም"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"ለካርታ ይጠቀሙ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"ለሲም መዳረሻ መጠቀም"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ለማህደረመረጃ ድምፅተጠቀም"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ለስልክ ድምፅ ተጠቀም"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ለፋይል ዝውውር ተጠቀም"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 9df2815..a1816f6 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"حدثت مشكلة في المصادقة"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"ليست في النطاق"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"لم يتم اكتشاف اتصال بالإنترنت."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"تم الحفظ بواسطة <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"‏تم التوصيل عبر مساعد Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"‏تم الاتصال عبر %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"‏متوفرة عبر %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"متصلة، ولا يتوفر إنترنت"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"غير متصل"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"جارٍ قطع الاتصال..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"جارٍ الاتصال…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"استخدام مع مشاركة جهة الاتصال"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"مشاركة اتصال الإنترنت"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"الدخول إلى الرسائل"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"‏الوصول إلى شريحة SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"متصل بالإعدادات الصوتية للوسائط"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"متصل بالإعدادات الصوتية للهاتف"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"متصل بخادم نقل الملف"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"تم الاتصال بملف تعريف الدخول إلى الرسائل"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"‏تم الاتصال بـ SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"غير متصل بخادم نقل الملفات"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"متصل بجهاز الإدخال"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"متصل بالجهاز لدخول الإنترنت"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"مشاركة الاتصال المحلي بالإنترنت مع الجهاز"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"الاستخدام للدخول على الإنترنت"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"استخدام لملف تعريف الدخول إلى الرسائل"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"‏الاستخدام للوصول إلى شريحة SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"الاستخدام للإعدادات الصوتية للوسائط"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"الاستخدام لإعدادات الهاتف الصوتية"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"استخدامه لنقل الملفات"</string>
diff --git a/packages/SettingsLib/res/values-az-rAZ/strings.xml b/packages/SettingsLib/res/values-az-rAZ/strings.xml
index aa4583a..624db73 100644
--- a/packages/SettingsLib/res/values-az-rAZ/strings.xml
+++ b/packages/SettingsLib/res/values-az-rAZ/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikasiya problemi"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Diapazonda deyil"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"İnternet bağlantısı tapılmadı, avtomatik olaraq yenidən qoşulmayacaq."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tərəfindən saxlandı"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi köməkçisi vasitəsilə qoşulub"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s vasitəsilə qoşuludur"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s vasitəsilə əlçatandır"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Qoşuludur, internet yoxdur"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ayrıldı"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ayrılır..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Qoşulur..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Kontakt paylaşımı üçün istifadə edin"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"internet bağlantı paylaşımı"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Mesaj Girişi"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Girişi"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Media audioya birləşdirilib"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefon audiosuna qoşulu"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Fayl transfer serverinə qoşulu"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Xəritəyə qoşulu"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP(es-ey-pi)\'yə qoşuludur"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Fayl transfer serverinə qoşulmayıb"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Daxiletmə cihazına qoşuldu"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"İnternet girişi üçün cihaza birləşdi"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Lokal internet bağlantısı cihazla paylaşılır"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"İnternet girişi üçün istifadə edin"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Xəritə üçün istifadə et"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM girişi üçün istifadə edin"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Media audio istifadə edin"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Telefon audiosu istifadə edin"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Fayl transferi üçün istifadə edin"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 45f292f..b2c0119 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем при удостоверяването"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Извън обхват"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Не е открит достъп до интернет. Няма да се свърже отново автоматично."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Запазено от <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Установена е връзка чрез помощника за Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Установена е връзка през „%1$s“"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Мрежата е достъпна през „%1$s“"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Установена е връзка – няма достъп до интернет"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Изкл."</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Изключва се..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Установява се връзка…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Използване за споделяне на контакти"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Споделяне на връзката с интернет"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Достъп до съобщенията"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Достъп до SIM картата"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Установена е връзка с медийно аудио"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Връзка със звука на телефона"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Установена е връзка със сървър за трансфер на файлове"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Има връзка с MAP"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Установена е връзка със SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Няма връзка със сървър за трансфер на файлове"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Има връзка с устройството за въвеждане"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Има връзка с у-во за достъп до интернет"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Лок. връзка с интернет се споделя с у-вото"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Използване за достъп до интернет"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Да се използва за MAP"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Използване за достъп до SIM картата"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Употреба за медийно аудио"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Използване на телефон за аудио"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Използване на за пренос на файлове"</string>
diff --git a/packages/SettingsLib/res/values-bn-rBD/strings.xml b/packages/SettingsLib/res/values-bn-rBD/strings.xml
index ba5969e6..4a094a7 100644
--- a/packages/SettingsLib/res/values-bn-rBD/strings.xml
+++ b/packages/SettingsLib/res/values-bn-rBD/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"প্রমাণীকরণ সমস্যা"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"পরিসরের মধ্যে নয়"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"কোনো ইন্টারনেট অ্যাক্সেস শনাক্ত হয়নি, স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ স্থাপন করবে না৷"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> দ্বারা সংরক্ষিত"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi সহায়ক-এর মাধ্যমে সংযুক্ত হয়েছে"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s মাধ্যমে সংযুক্ত হয়েছে"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s এর মাধ্যমে উপলব্ধ"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"সংযুক্ত, ইন্টারনেট নেই"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"সংযোগ বিচ্ছিন্ন করা হয়েছে"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"সংযোগ বিচ্ছিন্ন হচ্ছে..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"সংযুক্ত হচ্ছে..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"পরিচিতি ভাগ করার কাজে ব্যবহার করুন"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ইন্টারনেট সংযোগ ভাগ করা হচ্ছে"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"বার্তা অ্যাক্সেস"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM -এর অ্যাক্সেস"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"মিডিয়া অডিওতে সংযুক্ত রয়েছে"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ফোন অডিওতে সংযুক্ত"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ফাইল স্থানান্তর সার্ভারের সঙ্গে সংযুক্ত"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"মানচিত্রে সংযুক্ত"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP -তে সংযুক্ত হয়েছে"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ফাইল স্থানান্তর সার্ভারের সঙ্গে সংযুক্ত নয়"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ইনপুট ডিভাইসে সংযুক্ত"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ইন্টারনেট অ্যাক্সেসের জন্য ডিভাইসে সংযুক্ত"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ডিভাইসের সাথে স্থানীয় ইন্টারনেট সংযোগ ভাগ করছে"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ইন্টারনেট অ্যাক্সেসের জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"মানচিত্রের জন্য ব্যবহার করুন"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM -এর অ্যাক্সেসের জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"মিডিয়া অডিওয়ের জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ফোন অডিওয়ের জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ফাইল স্থানান্তরের জন্য ব্যবহার করুন"</string>
@@ -81,7 +74,7 @@
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"বাতিল করুন"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"যুক্ত করা থাকলে তা সংযুক্ত থাকাকালীন অবস্থায় আপনার পরিচিতিগুলি এবং কলের ইতিহাসকে অ্যাক্সেস করতে অনুমোদিত করে৷"</string>
     <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সাথে যুক্ত করা যায়নি।"</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ভুল PIN বা পাস কী দেওয়ার কারণে <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে যুক্ত করা যায়নি।"</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"ভুল পিন বা পাস কী দেওয়ার কারণে <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে যুক্ত করা যায়নি।"</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে যোগাযোগ করতে পারবেন না।"</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"যুক্ত করা <xliff:g id="DEVICE_NAME">%1$s</xliff:g> প্রত্যাখ্যান করেছে।"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 31b5d36..36cf564 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -23,21 +23,17 @@
     <string name="wifi_fail_to_scan" msgid="1265540342578081461">"No es poden cercar xarxes"</string>
     <string name="wifi_security_none" msgid="7985461072596594400">"Cap"</string>
     <string name="wifi_remembered" msgid="4955746899347821096">"Desat"</string>
-    <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desactivada"</string>
+    <string name="wifi_disabled_generic" msgid="4259794910584943386">"Desactivat"</string>
     <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"Error de configuració d\'IP"</string>
     <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"Error de connexió Wi-Fi"</string>
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema d\'autenticació"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora de l\'abast"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"No s\'ha detectat accés a Internet, no s\'hi tornarà a connectar automàticament."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Desat per <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Connectat mitjançant l\'assistent de Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible mitjançant %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connectada, sense Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconnectat"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"S\'està desconnectant..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"S\'està connectant…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"S\'utilitza per compartir contactes."</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Connexió compartida a Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Accés al missatge"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accés a la SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connectat a l\'àudio del mitjà"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connectat a àudio del telèfon"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connectat al servidor de transferència de fitxers"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connectat a un mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connectat a SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"No està connectat al servidor de transferència de fitxers"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connectat a dispositiu d\'entrada"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connectat al dispositiu per a accés a Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"S\'està compartint la connexió a Internet amb el dispositiu"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Utilitza\'l per a l\'accés a Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Utilitza per al mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Utilitza per a l\'accés a la SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utilitza per a l\'àudio del mitjà"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utilitza-ho per a l\'àudio del telèfon"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utilitza per a la transferència de fitxers"</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 40430a7..ae1241e 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problém s ověřením"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Mimo dosah"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nebyl zjištěn žádný přístup k internetu, připojení nebude automaticky obnoveno."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Uloženo uživatelem <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Připojeno pomocí asistenta připojení Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Připojeno prostřednictvím %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupné prostřednictvím %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Připojeno, není k dispozici internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Odpojeno"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Odpojování..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Připojování..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Použít ke sdílení kontaktů"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Sdílení internetového připojení"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Přístup ke zprávám"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Přístup k SIM kartě"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Připojeno ke zvukovému médiu"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Připojeno k náhlavní soupravě"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Připojeno k serveru pro přenos dat"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Připojeno k mapě"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Připojeno k SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Nepřipojeno k serveru pro přenos souborů"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Připojeno ke vstupnímu zařízení"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Připojeno k zařízení za účelem přístupu k internetu"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Místní internetové připojení je sdíleno se zařízením"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Použít pro přístup k internetu"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Použít pro mapu"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Používat pro přístup k SIM kartě"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Umožňuje připojení zvukového média"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Umožňuje připojení náhlavní soupravy"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Použít pro přenos souborů"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 5ed2354..475c1e6 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem med godkendelse"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ikke inden for rækkevidde"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Der blev ikke fundet nogen internetadgang. Forbindelsen bliver ikke automatisk genoprettet."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Gemt af <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Forbindelse via Wi-Fi-assistent"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilsluttet via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgængelig via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tilsluttet – intet internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Afbrudt"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Afbryder ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Opretter forbindelse..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Brug til deling af kontaktpersoner"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deling af internetforbindelse"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Adgang til meddelelse"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-adgang"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Forbundet til medielyd"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Forbundet til telefonlyd"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Forbundet til filoverførselsserver"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Forbundet til kort"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Sluttet til SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Ikke forbundet til filoverførselsserver"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Forbundet til inputenhed"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Tilsluttet enhed/internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Deler lokal internetforbindelse med enhed"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Brug til internetadgang"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Brug til kort"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Brug til SIM-adgang"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Brug til medielyd"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Brug til telefonlyd"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Brug til filoverførsel"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 5981637..2b1586f 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentifizierungsproblem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Nicht in Reichweite"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Keine Internetverbindung erkannt, es kann nicht automatisch eine Verbindung hergestellt werden."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Gespeichert von <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Über WLAN-Assistenten verbunden"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Über %1$s verbunden"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Verfügbar über %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Verbunden, kein Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Nicht verbunden"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Verbindung wird getrennt..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Verbindung wird hergestellt..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Für Kontaktfreigabe nutzen"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Freigabe der Internetverbindung"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Nachrichtenzugriff"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Zugriff auf SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Verbunden mit  Audiosystem von Medien"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Verbunden mit Audiosystem des Telefons"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Mit Dateiübertragungsserver verbunden"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Mit Karte verbunden"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Mit SAP verbunden"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Nicht mit Dateiübertragungsserver verbunden"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Mit einem Eingabegerät verbunden"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Für Internetzugriff an Gerät angeschlossen"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Lokale Internetverbindung für Gerät freigeben"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Für Internetzugriff verwenden"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Für Karte verwenden"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Für SIM-Zugriff verwenden"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Für Audiosystem von Medien verwenden"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Für Audiosystem des Telefons verwenden"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Für Dateiübertragung verwenden"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 6a687cd..a060ba5 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Πρόβλημα ελέγχου ταυτότητας"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Εκτός εμβέλειας"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Δεν εντοπίστηκε καμία πρόσβαση στο διαδίκτυο, δεν θα γίνει αυτόματη επανασύνδεση."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Αποθηκεύτηκε από <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Σύνδεση μέσω βοηθού Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Συνδέθηκε μέσω %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Διαθέσιμο μέσω %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Συνδέθηκε, χωρίς διαδίκτυο"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Αποσυνδέθηκε"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Αποσύνδεση..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Σύνδεση..."</string>
@@ -56,27 +52,24 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Για κοινή χρήση επαφών"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Κοινή χρήση σύνδεσης στο Διαδίκτυο"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Πρόσβαση στο μήνυμα"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Πρόσβαση SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Συνδέθηκε σε ήχο πολυμέσων"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Συνδεδεμένο στον ήχο τηλεφώνου"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Συνδεδεμένο σε διακομιστή μεταφοράς αρχείων"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Συνδεδεμένο στο χάρτη"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Συνδέθηκε σε SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Δεν έχει συνδεθεί σε διακομιστή μεταφοράς αρχείων"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Συνδέθηκε σε συσκευή εισόδου"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Συνδέθηκε με συσκευή με πρόσβ. στο Διαδ."</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Κοιν. χρ. σύνδ. στο Διαδ. με συσκευή"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Χρήση για την πρόσβαση στο Διαδίκτυο"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Χρήση για χάρτη"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Χρήση για πρόσβαση στη SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Χρήση για ήχο πολυμέσων"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Χρήση για ήχο τηλεφώνου"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Χρήση για τη μεταφορά αρχείων"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Χρήση για είσοδο"</string>
-    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Ζεύγος"</string>
+    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Σύζευξη"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ΣΥΖΕΥΞΗ"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Ακύρωση"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Η σύζευξη παρέχει πρόσβαση στις επαφές σας και το ιστορικό κλήσεων όταν συνδεθείτε."</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 5f6fb7a..343e390 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Use for contact sharing"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Message Access"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file-transfer server"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connected to map"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connected to SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Not connected to file-transfer server"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connected to input device"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connected to device for Internet access"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Sharing local Internet connection with device"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Use for Internet access"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Use for map"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use for SIM access"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Use for media audio"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Use for phone audio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Use for file transfer"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 5f6fb7a..343e390 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Use for contact sharing"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Message Access"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file-transfer server"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connected to map"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connected to SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Not connected to file-transfer server"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connected to input device"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connected to device for Internet access"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Sharing local Internet connection with device"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Use for Internet access"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Use for map"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use for SIM access"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Use for media audio"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Use for phone audio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Use for file transfer"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 5f6fb7a..343e390 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"No Internet Access Detected, won\'t automatically reconnect."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Connected via Wi‑Fi assistant"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connected, no Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Use for contact sharing"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Message Access"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file-transfer server"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connected to map"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connected to SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Not connected to file-transfer server"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connected to input device"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connected to device for Internet access"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Sharing local Internet connection with device"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Use for Internet access"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Use for map"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use for SIM access"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Use for media audio"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Use for phone audio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Use for file transfer"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 89c40b0..3e131a08 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticación"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Fuera de alcance"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"No se detectó el acceso a Internet. No se volverá a conectar de forma automática."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Guardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Conexión por asistente de Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Conexión a través de %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectado a Wi-Fi, sin conexión a Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Conectando…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Utilizar para compartir contactos"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Compartir conexión a Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Acceso a mensajes"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acceso SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado al audio multimedia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado al audio del dispositivo"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado al servidor de transferencia de archivo"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Conectado al mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Conexión a SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"No conectado al servidor de transferencia de archivo"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Conectado a dispositivo de entrada"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Conectado a un dispositivo para acceder a Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Conexión a Internet local compartida con dispositivo"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Utilizar para acceso a Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Usar para mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Usar para acceder a la SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utilizar para el audio multimedia"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utilizar para el audio del dispositivo"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utilizar para la transferencia de archivos"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 99fdff4..69daa58 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Error de autenticación"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Fuera de rango"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"No se ha detectado acceso a Internet, no se volverá a conectar automáticamente."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Guardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Conectado a través de asistente Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conexión sin Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectada"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Estableciendo conexión…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Usar para compartir contactos"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Compartir conexión a Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Acceso a mensajes"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acceso a tarjeta SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado al audio del medio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado al audio del teléfono"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado con el servidor de transferencia de archivos"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Conectado a mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Conectado a SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Sin conexión con el servidor de transferencia de archivos"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Conectado a dispositivo de entrada"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Conectado para acceso a Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Compartiendo conexión a Internet con el dispositivo"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Usar para acceder a Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Usar para mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Utilizar para acceso a tarjeta SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utilizar para audio de medio"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utilizar para audio del teléfono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Uso de la transferencia de archivos"</string>
diff --git a/packages/SettingsLib/res/values-et-rEE/strings.xml b/packages/SettingsLib/res/values-et-rEE/strings.xml
index 1963aac..19152ee 100644
--- a/packages/SettingsLib/res/values-et-rEE/strings.xml
+++ b/packages/SettingsLib/res/values-et-rEE/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentimise probleem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Pole vahemikus"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Interneti-ühendust ei tuvastatud, seadet ei ühendata automaatselt."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Salvestas: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Ühendatud WiFi-abi kaudu"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Ühendatud üksuse %1$s kaudu"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Saadaval üksuse %1$s kaudu"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ühendatud, Interneti-ühendus puudub"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ühendus katkestatud"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ühenduse katkestamine ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Ühendamine ..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Kasutamine kontaktide jagamiseks"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneti-ühenduse jagamine"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Juurdepääs sõnumile"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-kaardi juurdepääs"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ühendatud meediumiheliga"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ühendatud telefoniheliga"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ühendatud failiedastuse serveriga"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Ühendatud kaardiga"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Ühendatud SAP-iga"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Ei ole failiedastuse serveriga ühendatud"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Ühendatud sisendseade"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Ühendatud seadmega Internetti juurdepääsuks"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Kohaliku Interneti-ühenduse jagamine seadmega"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Interneti-juurdepääsuks kasutamine"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Kasuta kaardi jaoks"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM-kaardi juurdepääsuks kasutamine"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Kasuta meediumiheli jaoks"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Kasuta telefoniheli jaoks"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Kasutage failide edastamiseks"</string>
diff --git a/packages/SettingsLib/res/values-eu-rES/strings.xml b/packages/SettingsLib/res/values-eu-rES/strings.xml
index eb46a71..cec7610 100644
--- a/packages/SettingsLib/res/values-eu-rES/strings.xml
+++ b/packages/SettingsLib/res/values-eu-rES/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikazio-arazoa"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Urrunegi"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Ez da hauteman Interneterako sarbiderik. Ez da automatikoki berriro konektatuko."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> aplikazioak gorde du"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi laguntzailearen bidez konektatuta"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s bidez konektatuta"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s bidez erabilgarri"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Konektatuta, ez dago Interneteko konexiorik"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Deskonektatuta"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Deskonektatzen…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Konektatzen…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Erabili kontaktuak partekatzeko"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneteko konexioa partekatzea"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Mezuetarako sarbidea"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM txartelerako sarbidea"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Euskarriaren audiora konektatuta"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefonoaren audiora konektatuta"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Fitxategi-transferentziako zerbitzarira konektatuta"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Mapara konektatuta"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP sarbide-puntura konektatuta"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Fitxategi-transferentziako zerbitzarira konektatu gabe"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Sarrerako gailura konektatuta"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Gailura konektatuta Interneteko sarbiderako"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Tokiko Interneteko konexioa gailu batekin partekatzea"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Erabili Interneteko sarbiderako"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Erabili maparako"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Erabili SIM txartelerako sarbiderako"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Erabili euskarriaren audiorako"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Erabili telefonoaren audiorako"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Erabili fitxategi-transferentziarako"</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 56cfcbc..f99b9e5 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"مشکل تأیید اعتبار"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"در محدوده نیست"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"دسترسی به اینترنت شناسایی نشد، به صورت خودکار وصل نمی‌شود."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"ذخیره‌شده توسط <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"‏متصل شده از طریق دستیار Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"‏متصل از طریق %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"‏دردسترس از طریق %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"متصل، بدون اینترنت"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"اتصال قطع شد"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"در حال قطع اتصال..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"در حال اتصال…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"استفاده برای اشتراک‌گذاری مخاطب"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"اشتراک‌گذاری اتصال اینترنت"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"دسترسی به پیام"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"دسترسی سیم‌کارت"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"به رسانه صوتی متصل شد"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"به تلفن صوتی متصل شد"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"به سرور انتقال فایل متصل شد"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"به نقشه متصل شد"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"‏متصل به SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"به سرور انتقال فایل متصل نیست"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"به دستگاه ورودی متصل شد"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"برای دسترسی به اینترنت، به دستگاه متصل شد"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"اشتراک‌گذاری اتصال اینترنت محلی با دستگاه"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"استفاده برای دسترسی به اینترنت"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"استفاده برای نقشه"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"استفاده برای دسترسی سیم‌کارت"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"استفاده برای رسانه صوتی"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"استفاده برای تلفن صوتی"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"استفاده برای انتقال فایل"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 231c590..c9bab5b 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Todennusvirhe"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ei kantoalueella"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Internetyhteyttä ei havaittu, yhteyttä ei muodosteta automaattisesti uudelleen."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Tallentaja: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Yhteys muodostettu Wi‑Fi-apurin kautta"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Yhdistetty seuraavan kautta: %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Käytettävissä seuraavan kautta: %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Yhdistetty, ei internetyhteyttä."</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Yhteys katkaistu"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Katkaistaan yhteyttä..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Yhdistetään…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Käytä yhteystietojen jakamiseen"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internetyhteyden jakaminen"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"MAP"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-kortin käyttö"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Yhdistetty median ääneen"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Yhdistetty puhelimen ääneen"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Yhdistetty tiedostonsiirtopalvelimeen"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"MAP-yhteys"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP-yhteys on muodostettu."</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Ei yhdistetty tiedostonsiirtopalvelimeen"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Yhdistetty syöttölaitteeseen"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Yhdistetty laitteen internetyhteyteen"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Paikallinen internetyhteys jaetaan laitteen kanssa"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Käytä internetyhteyteen"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Käytä MAP-profiilille"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Käytetään SIM-kortin käyttöoikeuden määrittämiseen."</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Käytä median äänille"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Käytä puhelimen äänille"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Käytä tiedostojen siirtoon"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 02c725f..ad4b2af 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problème d\'authentification"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Hors de portée"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Aucun accès à Internet détecté, reconnexion automatique impossible"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Enregistrés par <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Connecté à l\'aide de l\'assistant Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté par %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Accessible par %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connecté, aucun accès à Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Déconnecté"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Déconnexion…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connexion en cours…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Utiliser pour le partage de contacts"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Partage de connexion Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Accès aux messages"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accès à la carte SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connecté aux paramètres audio du média"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connecté à l\'audio du téléphone"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connexion au serveur de transfert de fichiers"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connecté à la carte"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connecté au point d\'accès au service"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Connexion au serveur de transfert de fichiers non établie"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connecté au périphérique d\'entrée"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connecté à l\'appareil pour accès Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Connexion Internet locale partagée"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Utiliser pour l\'accès à Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Utiliser pour la carte"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Utiliser pour l\'accès à la carte SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utiliser pour les paramètres audio du support"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utiliser pour les paramètres audio du téléphone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utiliser pour le transfert de fichiers"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index cee3802..5844eb0 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problème d\'authentification."</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Hors de portée"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Aucun accès à Internet détecté, reconnexion automatique impossible"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Enregistré par <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Connecté via l\'assistant Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connecté, aucun accès à Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Déconnecté"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Déconnexion…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connexion…"</string>
@@ -56,27 +52,24 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Utiliser pour le partage de contacts"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Partage de connexion Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Accès aux messages"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accès à la carte SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connecté aux paramètres audio du média"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connecté aux paramètres audio du téléphone"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connexion au serveur de transfert de fichiers"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connecté à la carte"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connecté au point d\'accès au service"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Connexion au serveur de transfert de fichiers non établie"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connecté au périphérique d\'entrée"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connecté à l\'appareil pour accès Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Connexion Internet locale partagée"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Utiliser pour l\'accès à Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Utiliser pour la carte"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Utiliser pour l\'accès à la carte SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utiliser pour les paramètres audio du média"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utiliser pour les paramètres audio du téléphone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utiliser pour le transfert de fichiers"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Utiliser comme entrée"</string>
-    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Se connecter"</string>
+    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Associer"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ASSOCIER"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Annuler"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"L\'association vous permet d\'accéder à vos contacts et à l\'historique des appels lorsque vous êtes connecté."</string>
diff --git a/packages/SettingsLib/res/values-gl-rES/strings.xml b/packages/SettingsLib/res/values-gl-rES/strings.xml
index acb8f63..bff1e44 100644
--- a/packages/SettingsLib/res/values-gl-rES/strings.xml
+++ b/packages/SettingsLib/res/values-gl-rES/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticación"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Non está dentro da zona de cobertura"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Non se detectou acceso a Internet e non se volverá conectar automaticamente."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Redes gardadas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Conectado ao asistente de wifi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Dispoñible a través de %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectado, pero sen Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Conectando..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Utilizar para compartir contactos"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Uso compartido da conexión a Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Acceso ás mensaxes"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acceso á SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado ao audio multimedia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado ao audio do teléfono"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado ao servidor de transferencia de ficheiros"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Conectado ao mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Conectado a SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Non conectado co servidor de transferencia de ficheiros"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Conectado ao dispositivo de entrada"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Conectado ao dispositivo para acceder a Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Compartindo conexión a Internet co dispositivo"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Utilízase para o acceso a Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Usar para o mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Usar para acceso á SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utilízase para audio multimedia"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utilízase para o audio do teléfono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utilízase para a transferencia de ficheiros"</string>
diff --git a/packages/SettingsLib/res/values-gu-rIN/strings.xml b/packages/SettingsLib/res/values-gu-rIN/strings.xml
index 817bd3c..9aa6b68 100644
--- a/packages/SettingsLib/res/values-gu-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-gu-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"પ્રમાણીકરણ સમસ્યા"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"રેન્જમાં નથી"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"કોઈ ઇન્ટરનેટ અ‍ૅક્સેસ શોધાયું નથી, આપમેળે ફરીથી કનેક્ટ કરશે નહીં."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા સચવાયું"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi સહાયક દ્વારા કનેક્ટ થયું"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s દ્વારા ઉપલબ્ધ"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"કનેક્ટ કર્યું, કોઈ ઇન્ટરનેટ નથી"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ડિસ્કનેક્ટ કર્યું"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ડિસ્કનેક્ટ થઈ રહ્યું છે..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"કનેક્ટ થઈ રહ્યું છે…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"સંપર્ક શેરિંગ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ઇન્ટરનેટ કનેક્શન શેરિંગ"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"સંદેશ ઍક્સેસ"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ઍક્સેસ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"મીડિયા ઑડિઓ સાથે કનેક્ટ કર્યુ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ફોન ઑડિઓ સાથે કનેક્ટ થયાં"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ફાઇલ સ્થાનાંતરણ સેવાથી કનેક્ટ થયાં"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"નકશા સાથે કનેક્ટ થયું"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP થી કનેક્ટ કરેલ"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ફાઇલ સ્થાનાંતરણ સેવાથી કનેક્ટ થયેલ નથી"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ઇનપુટ ઉપકરણ સાથે કનેક્ટ થયાં"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ઇન્ટરનેટ ઍક્સેસ માટે ઉપકરણથી કનેક્ટેડ છે"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ઉપકરણ સાથે સ્થાનિક ઇન્ટરનેટ કનેક્શન શેર કરે છે"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ઇન્ટરનેટ ઍક્સેસ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"નકશા માટે વાપરો"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ઍક્સેસ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"મીડિયા ઑડિઓ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ફોન ઑડિઓ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ફાઇલ સ્થાનાંતર માટે ઉપયોગ કરો"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index c9d4e12..2afedea 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"रेंज में नहीं"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"किसी इंटरनेट कनेक्‍शन का पता नहीं चला, अपने आप पुन: कनेक्‍ट नहीं हो सकता."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> के द्वारा सहेजा गया"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"वाई-फ़ाई सहायक के द्वारा कनेक्‍ट है"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s के द्वारा उपलब्ध"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"कनेक्ट किया गया, इंटरनेट नहीं"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"डिस्कनेक्‍ट किया गया"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"डिस्‍कनेक्‍ट हो रहा है..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"कनेक्ट हो रहा है..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"संपर्क साझाकरण के लिए उपयोग करें"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इंटरनेट कनेक्शन साझाकरण"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"संदेश एक्सेस"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"सिम ऐक्सेस"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"मीडिया ऑडियो से कनेक्‍ट किया गया"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"फ़ोन ऑडियो से कनेक्‍ट किया गया"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"फ़ाइल स्‍थानांतरण सर्वर से कनेक्‍ट किया गया"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"मानचित्र से कनेक्ट किया गया"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP से कनेक्ट किया गया"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"फ़ाइल स्‍थानांतरण सर्वर से कनेक्‍ट नहीं किया गया"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"इनपुट डिवाइस से कनेक्‍ट किया गया"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"इंटरनेट पहुंच के लिए डिवाइस से कनेक्‍ट"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"डिवाइस से स्‍थानीय इंटरनेट कनेक्‍शन शेयर किया जा रहा है"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"इंटरनेट पहुंच के लिए उपयोग करें"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"मानचित्र के लिए उपयोग करें"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"सिम ऐक्सेस के लिए उपयोग करें"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"मीडिया ऑडियो के लिए उपयोग करें"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"फ़ोन ऑडियो के लिए उपयोग करें"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"फ़ाइल स्‍थानांतरण के लिए उपयोग करें"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 1004e75..1aa12b6f 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem u autentifikaciji"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Nije u rasponu"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Pristup internetu nije otkriven. Nema automatskog ponovnog povezivanja."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Spremljeno: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Povezani putem pomoćnika za Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezano putem %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupno putem %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Povezano, bez interneta"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Niste povezani"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Isključivanje…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Povezivanje…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Upotrijebi za dijeljenje kontakata"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Dijeljenje internetske veze"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Pristup porukama"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Pristup SIM-u"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Povezano s medijskim zvukom"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Povezano sa telefonskim zvukom"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Povezano s poslužiteljem za prijenos datoteka"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Povezano s kartom"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Povezano sa SAP-om"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Niste povezani s poslužiteljem za prijenos datoteka"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Povezano s ulaznim uređajem"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Povezano s uređajem za pristup internetu"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Dijeljenje lokalne internetske veze s uređajem"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Upotrijebi za pristup internetu"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Upotreba za kartu"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Upotrijebi za pristup SIM-u"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Koristi za medijski zvuk"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Koristi za telefonski zvuk"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Koristi za prijenos datoteke"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 7a3c093..28ae6dc 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Azonosítási probléma"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Hatókörön kívül"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nincs érzékelhető internet-hozzáférés, ezért nem kapcsolódik újra automatikusan."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Mentette: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Csatlakozva Wi‑Fi-segéddel"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Csatlakozva a következőn keresztül: %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Elérhető a következőn keresztül: %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Csatlakozva, nincs internetelérés"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Szétkapcsolva"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Szétkapcsolás..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Csatlakozás…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Használja a névjegyek megosztására"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internetkapcsolat megosztása"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Üzenet-hozzáférés"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-elérés"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Csatlakoztatva az eszköz hangjához"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Csatlakoztatva a telefon hangjához"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Csatlakozva a fájlküldő szerverhez"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Csatlakoztatva a térképhez"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Csatlakozva az SAP-hoz"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Nincs csatlakozva a fájlküldő szerverhez"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Beviteli eszköz csatlakoztatva"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Eszközhöz csatlakozik az interneteléréshez"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Helyi internetkapcsolat megosztva az eszközzel"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Használat internetelérésre"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Használat a térképhez"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Használat SIM-elérésre"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Felhasználás az eszköz hangjához"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Felhasználás a telefon hangjához"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Felhasználás fájlátvitelre"</string>
diff --git a/packages/SettingsLib/res/values-hy-rAM/strings.xml b/packages/SettingsLib/res/values-hy-rAM/strings.xml
index 7b7ad6f..cda2db8 100644
--- a/packages/SettingsLib/res/values-hy-rAM/strings.xml
+++ b/packages/SettingsLib/res/values-hy-rAM/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Նույնականացման խնդիր"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ընդգրկույթից դուրս է"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Ինտերնետի հասանելիություն չկա. ավտոմատ կերպով կրկին չի միանա:"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Պահել է հետևյալ օգտվողը՝ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Կապակցված է Wi‑Fi Օգնականի միջոցով"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Կապակցված է %1$s-ի միջոցով"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Հասանելի է %1$s-ի միջոցով"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Կապակցված է առանց համացանցի"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Անջատված է"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Անջատվում է..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Միանում է..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Օգտագործել կոնտակտի համօգտագործման համար"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Ինտերնետ կապի տարածում"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Մուտք հաղորդագրություն"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM քարտի հասանելիություն"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Միացված է մեդիա աուդիոյին"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Միացված է հեռախոսի ձայնային տվյալներին"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Միացված է ֆայլերի փոխանցման սերվերին"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Միացված է քարտեզին"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Կապակցված է SAP-ին"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Ֆայլերը փոխանցող սերվերի հետ կապ չկա"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Միացված է մուտքային սարքին"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Կապակցված է սարքին` ինտերնետ մուտք գործելու համար"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Տեղային ինտերնետ կապի տարածում սարքի հետ"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Օգտագործել ինտերնետ մուտք գործելու համար"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Օգտագործել քարտեզի համար"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM քարտի օգտագործում"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Օգտագործել մեդիա աուդիոյի համար"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Օգտագործել հեռախոսի աուդիոյի համար"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Օգտագործել ֆայլի փոխանցման համար"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 9e79e09..ddfb56a 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Masalah autentikasi"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Tidak dalam jangkauan"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Akses Internet Tidak Terdeteksi, tidak akan menyambung ulang secara otomatis."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Disimpan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Terhubung melalui Asisten Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Terhubung melalui %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tersambung, tidak ada internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Sambungan terputus"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Memutus sambungan..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Menyambung…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Gunakan untuk berbagi kontak"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Berbagi sambungan internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Akses Pesan"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Akses SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Tersambung ke media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Tersambung ke audio ponsel"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Sambungkan ke server transfer file"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Tersambung ke peta"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Terhubung ke SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Tidak tersambung kepada server transfer file"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Terhubung ke perangkat masukan"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Tersambung ke perangkat untuk akses Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Berbagi sambungan Internet lokal dengan perangkat"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Digunakan untuk akses internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Gunakan untuk peta"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Gunakan untuk akses SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Gunakan untuk audio media"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Gunakan untuk audio ponsel"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Gunakan untuk transfer file"</string>
diff --git a/packages/SettingsLib/res/values-is-rIS/strings.xml b/packages/SettingsLib/res/values-is-rIS/strings.xml
index 90082b1..5b7a5fe 100644
--- a/packages/SettingsLib/res/values-is-rIS/strings.xml
+++ b/packages/SettingsLib/res/values-is-rIS/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Vandamál við auðkenningu"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ekkert samband"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Enginn netaðgangur fannst; endurtengist ekki sjálfkrafa."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> vistaði"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Tengt í gegnum Wi-Fi aðstoð"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Tengt í gegnum %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Í boði í gegnum %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tengt, enginn internetaðgangur"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Aftengt"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Aftengist…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Tengist…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Nota til að deila tengiliðum"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deiling nettengingar"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Skilaboðaaðgangur"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Aðgangur að SIM-korti"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Tengt við hljóðspilun efnis"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Tengt við hljóð símans"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Tengt við skráaflutningsþjón"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Tengt við kort"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Tengt við SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Ekki tengt við skráaflutningsþjón."</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Tengt við inntakstæki"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Tengt við tæki til að fá netaðgang"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Internettengingu deilt með tæki"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Nota fyrir netaðgang"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Nota fyrir kort"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Nota fyrir aðgang að SIM-korti"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Nota fyrir hljóð efnisspilunar"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Nota fyrir hljóð símans"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Nota við skráaflutning"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 055db08..ebe1384 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema di autenticazione"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Fuori portata"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nessun accesso a Internet rilevato, non verrà eseguita la riconnessione automatica."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Salvata da <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Connesso tramite assistente Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Collegato tramite %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibile tramite %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Connesso senza Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnesso"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnessione..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Connessione..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Usa per condivisione contatti"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Condivisione connessione Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Accesso ai messaggi"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Accesso alla SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Collegato ad audio media"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Collegato ad audio telefono"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Collegato al server di trasferimento file"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connesso alla mappa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Collegato al SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Non collegato al server di trasferimento file"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connesso a dispositivo di input"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connesso a dispositivo per accesso Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Connessione Internet locale condivisa con dispositivo"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Usa per accesso Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Utilizza per la mappa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Utilizza per accesso SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Usa per audio media"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Usa per audio telefono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Usa per trasferimento file"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 8a83298..c1a48f9 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"בעיית אימות"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"מחוץ לטווח"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"אין גישה לאינטרנט. לא יתבצע חיבור מחדש באופן אוטומטי."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"נשמר על ידי <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"‏מחובר באמצעות אסיסטנט ה-Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"‏מחובר דרך %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"‏זמינה דרך %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"מחובר. אין אינטרנט"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"מנותק"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"מתנתק..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"מתחבר ..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"השתמש עבור שיתוף אנשי קשר"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"שיתוף חיבור לאינטרנט"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"גישה להודעות"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"‏גישה ל-SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"מחובר לאודיו של מדיה"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"מחובר לאודיו של הטלפון"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"מחובר לשרת העברת קבצים"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"מחובר למפה"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"‏מחובר ל-SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"לא מחובר לשרת העברת קבצים"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"מחובר למכשיר קלט"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"מחובר למכשיר לצורך גישה לאינטרנט"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"משתף חיבור אינטרנט מקומי עם מכשיר"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"השתמש עבור גישה לאינטרנט"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"שימוש עבור מפה"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"‏השתמש לגישה של SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"השתמש עבור אודיו של מדיה"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"השתמש עבור האודיו של הטלפון"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"השתמש להעברת קבצים"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 83a1bb4..d6bf3760 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"認証に問題"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"圏外"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"インターネットアクセスを検出できないため、自動的に再接続されません。"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g>で保存"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fiアシスタント経由で接続"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s経由で接続"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s経由で使用可能"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"接続先はインターネットに接続されていない"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"切断"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"切断中..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"接続中..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"連絡先の共有に使用"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"インターネット接続の共有"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"メッセージへのアクセス"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIMアクセス"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"メディアの音声に接続"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"携帯電話の音声に接続"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ファイル転送サーバーに接続"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"地図に接続済み"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAPに接続"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ファイル転送サーバーに接続しない"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"入力デバイスに接続されています"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"インターネットアクセス用に接続"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ローカルインターネット接続をデバイスと共有"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"インターネットアクセスに使用する"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"地図に使用"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIMアクセスに使用"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"メディアの音声に使用"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"携帯電話の音声に使用"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ファイル転送に使用"</string>
diff --git a/packages/SettingsLib/res/values-ka-rGE/strings.xml b/packages/SettingsLib/res/values-ka-rGE/strings.xml
index 29b1419..4dfcc8b 100644
--- a/packages/SettingsLib/res/values-ka-rGE/strings.xml
+++ b/packages/SettingsLib/res/values-ka-rGE/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ავთენტიკაციის პრობლემა"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"არ არის დიაპაზონში"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"ინტერნეტთან წვდომის ამოცნობა ვერ მოხერხდა. ავტომატურად ხელახლა დაკავშირება არ განხორციელდება."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"შენახული <xliff:g id="NAME">%1$s</xliff:g>-ის მიერ"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"დაკავშირებულია Wi-Fi თანაშემწით"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ით დაკავშირებული"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"ხელმისაწვდომია %1$s-ით"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"დაკავშირებულია, ინტერნეტის გარეშე"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"კავშირი გაწყვეტილია"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"მიმდინარეობს გათიშვა…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"მიმდინარეობს დაკავშირება…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"კონტაქტის გაზიარებისთვის გამოყენება"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ინტერნეტ კავშირის გაზიარება"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"შეტყობინებებზე წვდომა"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM წვდომა"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"დაკავშირებულია აუდიო მულტიმედიურ სისტემასთან"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"დაკავშირებულია ტელეფონის აუდიო მოწყობილობასთან"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"დაკავშირებულია ფაილების გადაცემის სერვერთან"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"რუკასთან დაკავშირებული"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP-თან დაკავშირებული"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"არ არის დაკავშირებული ფაილების ტრანსფერის სერვერთან"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"დაკავშირებულია შეყვანის მოწყობილობასთან"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"დაკავშირებულია მოწყობილობასთან ინტერნეტთან წვდომისთვის"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ლოკალური კავშირის გაზიარება მოწყობილობასთან"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"გამოიყენე ინტერნეტთან წვდომისთვის"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"რუკაზე გამოყენება"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"გამოყენება SIM წვდომისთვის"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"მედია აუდიოსთვის გამოყენება"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"გამოიყენეთ ტელეფონის აუდიომოწყობილობაში"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ფაილების ტრანსფერისათვის გამოყენება"</string>
diff --git a/packages/SettingsLib/res/values-kk-rKZ/strings.xml b/packages/SettingsLib/res/values-kk-rKZ/strings.xml
index b8494aa..db7ef41 100644
--- a/packages/SettingsLib/res/values-kk-rKZ/strings.xml
+++ b/packages/SettingsLib/res/values-kk-rKZ/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Растау мәселесі"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Аумақта жоқ"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Интернетке қатынас анықталмады, автоматты түрде қайта қосылу орындалмайды."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> сақтаған"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi көмекшісі арқылы қосылу орындалды"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s арқылы қосылған"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s арқылы қолжетімді"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Қосылған, интернет жоқ"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ажыратылған"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Ажыратылуда…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Жалғауда..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Контактіні бөлісу үшін пайдалану"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Интернет байланысын ортақ қолдану"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Хабарға кіру"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM картасына кіру"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Медиа аудиосына жалғанған"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Телефон аудиосына қосылған"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Файл жіберу серверіне жалғанған"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Картаға жалғанған"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP жүйесіне қосылған"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Файл жіберу серверіне жалғанбаған"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Кіріс құрылғысына косылған"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Құрылғыға интернетке кіру үшін жалғанған"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Жергілікті интернет байланысын құрылғымен ортақ пайдалану"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Интернетке кіру үшін қолдану"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Карта үшін қолдану"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM картасына кіру үшін пайдалану"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Медиа аудиосы үшін қолдану"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Телефон аудиосы үшін қолдану"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Файлды жіберу үшін қолдану"</string>
diff --git a/packages/SettingsLib/res/values-km-rKH/strings.xml b/packages/SettingsLib/res/values-km-rKH/strings.xml
index 465c31d0..5ce1a27 100644
--- a/packages/SettingsLib/res/values-km-rKH/strings.xml
+++ b/packages/SettingsLib/res/values-km-rKH/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"បញ្ហា​ក្នុង​ការ​ផ្ទៀងផ្ទាត់"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"នៅ​ក្រៅ​តំបន់"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"រក​មិន​ឃើញ​ការ​ចូល​ដំណើរការ​អ៊ីនធឺណិត, នឹង​មិន​ភ្ជាប់​ឡើង​វិញ​ដោយ​ស្វ័យ​ប្រវត្តិ​ទេ។"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"បានរក្សាទុកដោយ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"បានភ្ជាប់តាមរយៈជំនួយការ Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"បានភ្ជាប់តាមរយៈ %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"មានតាមរយៈ %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"បានភ្ជាប់ ប៉ុន្តែគ្មានអ៊ីនធឺណិតទេ"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"បាន​ផ្ដាច់"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"កំពុង​ផ្ដាច់…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"កំពុង​ត​ភ្ជាប់​…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"ប្រើ​សម្រាប់​ការ​ចែករំលែក​ទំនាក់ទំនង"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ចែករំលែក​ការ​តភ្ជាប់​អ៊ីនធឺណិត"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"​​ចូល​ដំណើរការ​សារ"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"ការចូលដំណើរការស៊ីម"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"បា​ន​ភ្ជាប់​ទៅ​អូឌីយ៉ូ​មេឌៀ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"តភ្ជាប់​ទៅ​អូឌីយ៉ូ​ទូរស័ព្ទ"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"បាន​តភ្ជាប់​ទៅ​ម៉ាស៊ីន​មេ​ផ្ទេរ​ឯកសារ"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"បាន​ភ្ជាប់​ទៅ​​​ផែនទី"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"បានភ្ជាប់ទៅ SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"មិន​បាន​តភ្ជាប់​ទៅ​ម៉ាស៊ីន​មេ​ផ្ទេរ​ឯកសារ"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"បាន​តភ្ជាប់​ទៅ​ឧបករណ៍​បញ្ចូល"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"បាន​តភ្ជាប់​​ឧបករណ៍​សម្រាប់​ចូល​អ៊ីនធឺណិត"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ចែករំលែក​ការ​តភ្ជាប់​អ៊ីនធឺណិត​មូលដ្ឋាន​ជា​មួយ​ឧបករណ៍"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ប្រើ​សម្រាប់​ចូល​អ៊ីនធឺណិត"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"ប្រើ​សម្រាប់​ផែនទី"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"ប្រើសម្រាប់ចូលដំណើរការស៊ីម"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ប្រើ​សម្រាប់​សំឡេង​មេឌៀ"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ប្រើ​សម្រាប់​​អូឌីយ៉ូ​ទូរស័ព្ទ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ប្រើ​សម្រាប់​ផ្ទេរ​ឯកសារ"</string>
diff --git a/packages/SettingsLib/res/values-kn-rIN/strings.xml b/packages/SettingsLib/res/values-kn-rIN/strings.xml
index 15512f0..e4acbfb 100644
--- a/packages/SettingsLib/res/values-kn-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-kn-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ಪ್ರಮಾಣೀಕರಣ ಸಮಸ್ಯೆ"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"ವ್ಯಾಪ್ತಿಯಲ್ಲಿಲ್ಲ"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"ಯಾವುದೇ ಇಂಟರ್ನೆಟ್‌ ಪ್ರವೇಶ ಪತ್ತೆಯಾಗಿಲ್ಲ, ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಮರುಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ರಿಂದ ಉಳಿಸಲಾಗಿದೆ"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi ಸಹಾಯಕದ ಮೂಲಕ ಸಂಪರ್ಕಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ, ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ಸಂಪರ್ಕಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"ಸಂಪರ್ಕ ಹಂಚಿಕೆಗಾಗಿ ಬಳಸಿ"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"ಸಂದೇಶ ಪ್ರವೇಶಿಸುವಿಕೆ"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"ಸಿಮ್ ಪ್ರವೇಶ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ಮಾಧ್ಯಮ ಆಡಿಯೋಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ಫೋನ್ ಆಡಿಯೋಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ಫೈಲ್ ವರ್ಗಾವಣೆ ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"ನಕ್ಷೆಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ಫೈಲ್ ವರ್ಗಾವಣೆ ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಗೊಳ್ಳಲಿಲ್ಲ"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ಇನ್‌ಪುಟ್‌ ಸಾಧನಕ್ಕೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶಕ್ಕಾಗಿ ಸಾಧನಕ್ಕೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ಸಾಧನದ ಜೊತೆಗೆ ಸ್ಥಳೀಯ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶಕ್ಕಾಗಿ ಬಳಸಿ"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"ನಕ್ಷೆಗಾಗಿ ಬಳಸಿ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"ಸಿಮ್ ಪ್ರವೇಶಕ್ಕೆ ಬಳಸಿ"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ಮಾಧ್ಯಮ ಆಡಿಯೋ ಬಳಸು"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ಫೋನ್‌ ಆಡಿಯೋಗಾಗಿ ಬಳಕೆ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ಫೈಲ್‌ ವರ್ಗಾವಣೆಗಾಗಿ ಬಳಸು"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 51fc326..83a10fa 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"인증 문제"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"범위 내에 없음"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"감지된 인터넷 액세스가 없으며 자동으로 다시 연결되지 않습니다."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g>(으)로 저장됨"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi 도우미를 통해 연결됨"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s을(를) 통해 연결됨"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s을(를) 통해 사용 가능"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"인터넷을 사용하지 않고 연결됨"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"연결 끊김"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"연결을 끊는 중…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"연결 중…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"연락처 공유용"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"인터넷 연결 공유"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"메시지 액세스"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 액세스"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"미디어 오디오에 연결됨"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"휴대전화 오디오에 연결됨"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"파일 전송 서버에 연결됨"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"지도에 연결됨"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP에 연결됨"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"파일 전송 서버에 연결되지 않았습니다."</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"입력 장치에 연결됨"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"인터넷 액세스를 위해 기기에 연결됨"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"로컬 인터넷 연결을 기기와 공유 중"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"인터넷 액세스에 사용"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"지도에 사용"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM 액세스에 사용"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"미디어 오디오에 사용"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"휴대전화 오디오에 사용"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"파일 전송에 사용"</string>
diff --git a/packages/SettingsLib/res/values-ky-rKG/strings.xml b/packages/SettingsLib/res/values-ky-rKG/strings.xml
index b9fa394..3297c80 100644
--- a/packages/SettingsLib/res/values-ky-rKG/strings.xml
+++ b/packages/SettingsLib/res/values-ky-rKG/strings.xml
@@ -30,15 +30,11 @@
     <!-- no translation found for wifi_not_in_range (1136191511238508967) -->
     <skip />
     <string name="wifi_no_internet" msgid="9151470775868728896">"Интернетке кирүү мүмкүнчүлүгү табылган жок, андыктан автоматтык түрдө кайра туташпайт."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> тарабынан сакталды"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi жардамчысы аркылуу туташып турат"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s аркылуу жеткиликтүү"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Туташып турат, Интернет жок"</string>
     <!-- no translation found for bluetooth_disconnected (6557104142667339895) -->
     <skip />
     <!-- no translation found for bluetooth_disconnecting (8913264760027764974) -->
@@ -63,8 +59,7 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Байланышты бөлүшүү үчүн колдонуу"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Интернет байланышын бөлүшүү"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Билдирүү алмашуу"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM картаны пайдалануу мүмкүнчүлүгү"</string>
     <!-- no translation found for bluetooth_a2dp_profile_summary_connected (963376081347721598) -->
     <skip />
     <!-- no translation found for bluetooth_headset_profile_summary_connected (7661070206715520671) -->
@@ -72,8 +67,7 @@
     <!-- no translation found for bluetooth_opp_profile_summary_connected (2611913495968309066) -->
     <skip />
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"MAP\'ка байланышты"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP\'ка туташып турат"</string>
     <!-- no translation found for bluetooth_opp_profile_summary_not_connected (1267091356089086285) -->
     <skip />
     <!-- no translation found for bluetooth_hid_profile_summary_connected (3381760054215168689) -->
@@ -85,8 +79,7 @@
     <!-- no translation found for bluetooth_pan_profile_summary_use_for (5664884523822068653) -->
     <skip />
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"MAP үчүн колдонуу"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM картаны пайдалануу үчүн колдонуу"</string>
     <!-- no translation found for bluetooth_a2dp_profile_summary_use_for (4630849022250168427) -->
     <skip />
     <!-- no translation found for bluetooth_headset_profile_summary_use_for (8705753622443862627) -->
diff --git a/packages/SettingsLib/res/values-lo-rLA/strings.xml b/packages/SettingsLib/res/values-lo-rLA/strings.xml
index ca92eb1..ad22313 100644
--- a/packages/SettingsLib/res/values-lo-rLA/strings.xml
+++ b/packages/SettingsLib/res/values-lo-rLA/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ບັນຫາການພິສູດຢືນຢັນ"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"ບໍ່ຢູ່ໃນໄລຍະທີ່ເຊື່ອມຕໍ່ໄດ້"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"​ບໍ່​ພົບ​ການ​ເຊື່ອມ​ຕໍ່​ອິນ​ເຕີ​ເນັດ​, ຈະ​ບໍ່​ຖືກ​ເຊື່ອມ​ຕໍ່​ໃໝ່​ໂດຍ​ອັດ​ຕະ​ໂນ​ມັດ."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"ບັນທຶກ​​​ໂດຍ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"ເຊື່ອມ​ຕໍ່​ຜ່ານ Wi‑Fi ຕົວ​ຊ່ວຍ​ແລ້ວ"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"​ເຊື່ອມຕໍ່​ຜ່ານ %1$s ​ແລ້ວ"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"ມີ​ໃຫ້​ຜ່ານ %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"​ເຊື່ອມ​ຕໍ່​ແລ້ວ,​ ບໍ່​ມີ​ອິນ​ເຕີ​ເນັດ"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ຕັດການເຊື່ອມຕໍ່ແລ້ວ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ກຳລັງຢຸດການເຊື່ອມຕໍ່..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ກຳລັງເຊື່ອມຕໍ່..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"​ໃຊ້​ສຳ​ລັບການ​ແບ່ງ​ປັນ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ການແບ່ງປັນການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"ການ​ເຂົ້າ​ເຖິງ​ຂໍ້​ຄວາມ"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"ການ​ເຂົ້າ​ເຖິງ SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ເຊື່ອມຕໍ່ກັບສື່ດ້ານສຽງແລ້ວ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ເຊື່ອມຕໍ່ກັບສຽງໂທລະສັບແລ້ວ"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ເຊື່ອມຕໍ່ກັບເຊີບເວີໂອນຍ້າຍໄຟລ໌ແລ້ວ"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"ເຊື່ອມ​ຕໍ່​ກັບ​ແຜນ​ທີ່ແລ້ວ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"ເຊື່ອມ​ຕໍ່​ກັບ SAP ​ແລ້ວ"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ບໍ່ໄດ້ເຊື່ອມຕໍ່ຫາເຊີບເວີໂອນຍ້າຍໄຟລ໌"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ເຊື່ອມຕໍ່ກັບອຸປະກອນປ້ອນຂໍ້ມູນແລ້ວ"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ເຊື່ອມຕໍ່ກັບອຸປະກອນເພື່ອເຂົ້າເຖິງອິນເຕີເນັດແລ້ວ"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ກຳລັງແບ່ງປັນການເຊື່ອມຕໍ່ອິນເຕີເນັດກັບອຸປະກອນ"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ໃຊ້ເພື່ອເຂົ້າອິນເຕີເນັດ"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"ໃຊ້ສຳລັບແຜນທີ່"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"ການ​ໃຊ້​ສໍາ​ລັບ​ການ​ເຂົ້າ​ເຖິງ SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ໃຊ້ສຳລັບສື່ດ້ານສຽງ"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ໃຊ້ສຳລັບລະບົບສຽງຂອງໂທລະສັບ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ໃຊ້ເພື່ອໂອນຍ້າຍໄຟລ໌"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 899d863..84c6625 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentifikavimo problema"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ne diapazone"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Neaptikta jokia prieiga prie interneto, nebus automatiškai iš naujo prisijungta."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Išsaugojo <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Prisijungta naudojant „Wi‑Fi“ pagelbiklį"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Prisijungta naudojant „%1$s“"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Pasiekiama naudojant „%1$s“"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Prisijungta, nėra interneto"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Atsijungęs (-usi)"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Atjungiama..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Prisijungiama..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Naudoti kontaktams bendrinti"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneto ryšio bendrinimas"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Prieiga prie pranešimų"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM prieiga"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Prijungta prie medijos garso įrašo"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Prijungta prie telefono garso"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Prijungta prie failų perkėlimo serverio"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Prisijungta prie žemėlapio"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Prisijungta prie SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Neprijungta prie failų perkėlimo serverio"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Prisijungta prie įvesties įrenginio."</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Pr. prie įr., kad gaut. pr. prie int."</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Bendr. vt. int. ryš. su įr."</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Naudoti interneto prieigai"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Naudoti žemėlapyje"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Naudoti SIM prieigai"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Naudoti medijos garsui"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Naudoti telefono garso įrašui"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Naudoti failų perkėlimui"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 0f42fa8..7e0807a 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentificēšanas problēma"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Nav diapazona ietvaros"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nevar noteikt interneta savienojumu. Savienojums netiks izveidots vēlreiz automātiski."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Saglabāja: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Izveidots savienojums ar Wi‑Fi palīgu"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Savienots, izmantojot %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Pieejams, izmantojot %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Savienots, nav piekļuves internetam"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Atvienots"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Notiek atvienošana..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Notiek savienojuma izveide…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Izmantot kontaktpersonas informācijas kopīgošanai"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Interneta savienojuma koplietošana"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Piekļuve ziņojumam"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Piekļuve SIM kartei"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Savienots ar multivides audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Savienots ar tālruņa audio"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Savienots ar failu pārsūtīšanas serveri"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Izveidots savienojums ar karti"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Savienots ar SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Nav savienots ar failu pārsūtīšanas serveri"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Izveidots savienojums ar ievades ierīci"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Savien. ar ier., lai nodr. int. piekļ."</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Tiek kopliet. lok. intern. savien. ar ierīci"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Izmantot, lai piekļūtu internetam"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Lietot kartei"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Izmantot, lai piekļūtu SIM kartei"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Izmantot multivides skaņai"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Izmantot tālruņa skaņai"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Izmantot faila pārsūtīšanai"</string>
diff --git a/packages/SettingsLib/res/values-mk-rMK/strings.xml b/packages/SettingsLib/res/values-mk-rMK/strings.xml
index 37be0f0..b5aae60 100644
--- a/packages/SettingsLib/res/values-mk-rMK/strings.xml
+++ b/packages/SettingsLib/res/values-mk-rMK/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем со автентикација"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Надвор од опсег"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Не е откриен пристап до интернет, нема автоматски повторно да се поврзете."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Зачувано од <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Поврзано преку помошник за Wi-Fismile"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Поврзано преку %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Достапно преку %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Поврзана, нема интернет"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Исклучено"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Се исклучува..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Се поврзува..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Користи за споделување контакти"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Споделување конекција на интернет"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Порака за пристап"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Пристап до СИМ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Поврзан со аудио на медиуми"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Поврзан со аудио на телефон"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Поврзан со сервер за пренос на датотеки"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Поврзано со карта"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Поврзано со SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Не е поврзан со сервер за пренос на датотеки"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Поврзан со влезен уред"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Поврзан со уред за пристап на интернет"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Споделување локална конекција на интернет со уред"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Користи за пристап на интернет"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Користи за карта"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Користете се пристап до СИМ"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Користи за аудио на медиуми"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Користи за аудио на телефон"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Користи за пренос на датотеки"</string>
diff --git a/packages/SettingsLib/res/values-ml-rIN/strings.xml b/packages/SettingsLib/res/values-ml-rIN/strings.xml
index 3e74882..22a6da4 100644
--- a/packages/SettingsLib/res/values-ml-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ml-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ആധികാരികമാക്കുന്നതിലെ പ്രശ്‌നം"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"പരിധിയിലില്ല"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"ഇന്റർനെറ്റ് ആക്സസ്സൊന്നും കണ്ടെത്താത്തതിനാൽ സ്വയം വീണ്ടും കണക്‌റ്റുചെയ്യില്ല."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> സംരക്ഷിച്ചത്"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi അസിസ്റ്റന്റ് മുഖേന കണക്‌റ്റുചെയ്തു"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s വഴി ലഭ്യം"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"കണക്റ്റുചെയ്തിരിക്കുന്നു, ഇന്റർനെറ്റില്ല"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"വിച്ഛേദിച്ചു"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"വിച്‌ഛേദിക്കുന്നു..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"കണക്‌റ്റുചെയ്യുന്നു..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"കോൺടാക്‌റ്റ് പങ്കിടലിനായി ഉപയോഗിക്കുക"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ഇന്റർനെറ്റ് കണക്ഷൻ പങ്കിടൽ"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"ആക്‌സസ്സ് നിയന്ത്രിക്കുക"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ആക്സസ്"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"മീഡിയ ഓഡിയോയിലേക്ക് കണ‌ക്റ്റുചെയ്‌തു"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ഫോൺ ഓഡിയോയിൽ കണ‌ക്റ്റുചെ‌യ്‌തു"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ഫയൽ കൈമാറ്റ സെർവറിലേക്ക് കണ‌ക്റ്റുചെ‌യ്‌തു"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"മാപ്പിലേക്ക് കണക്റ്റുചെയ്‌തു"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP-യിലേക്ക് ബന്ധിപ്പിച്ചു"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ഫയൽ കൈമാറ്റ സെർവറിൽ കണ‌ക്റ്റുചെയ്‌തിട്ടില്ല"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ഇൻപുട്ട് ഉപകരണത്തിൽ കണക്റ്റുചെയ്‌തു"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ഇന്റ‌ർനെറ്റ് ആക്‌‌സസ്സിനായി ഉപകരണത്തിൽ കണ‌ക്‌റ്റുചെയ്‌തു"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ഉപകരണവുമായി പ്രദേശിക ഇന്റ‌ർനെറ്റ്‌ കണക്ഷൻ പങ്കിടുന്നു"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ഇന്റ‌ർനെറ്റ് ആക്‌‌സസ്സിനായി ഉപയോഗിക്കുന്നു"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"മാപ്പിനായി ഉപയോഗിക്കുക"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ആക്സസിന് ഉപയോഗിക്കുക"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"മീഡിയ ഓഡിയോയ്ക്കായി ഉപയോഗിക്കുക"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ഫോൺ ഓഡിയോയ്ക്കായി ഉപയോഗിക്കുക"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ഫയൽ കൈമാറ്റത്തിനായി ഉപയോഗിക്കുന്നു"</string>
diff --git a/packages/SettingsLib/res/values-mn-rMN/strings.xml b/packages/SettingsLib/res/values-mn-rMN/strings.xml
index 0031e5d..b203644 100644
--- a/packages/SettingsLib/res/values-mn-rMN/strings.xml
+++ b/packages/SettingsLib/res/values-mn-rMN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Гэрчлэлийн асуудал"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Хүрээнд байхгүй"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Интернэт холболт илэрсэнгүй, автоматаар дахин холболт хийгдэхгүй"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> хадгалсан"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi туслагчаар дамжуулан холбогдлоо"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-р холбогдсон"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s-р боломжтой"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Холбогдсон, интернэт байхгүй байна"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Салгагдсан"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Салгаж байна…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Холбогдож байна..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Харилцагч хуваалцахад ашиглах"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Интернэт холболтыг хуваалцах"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Зурвас хандалт"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Хандалт"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Медиа аудиод холбогдсон"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Утасны аудид холбогдсон"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Файл дамжуулах серверт холбогдсон"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Газрын зурагтай холбогдсон"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP-д холбогдсон"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Файл дамжуулах серверт холбогдоогүй"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Оруулах төхөөрөмжтэй холбогдсон"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Интернетэд хандахын тулд төхөөрөмжтэй холбогдсон"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Төхөөрөмжтэй локал Интернет холболтыг хуваалцаж байна"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Интернет хандалтанд ашиглах"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Газрын зурагт ашиглах"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM хандалтад ашиглах"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Медиа аудиод ашиглах"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Утасны аудиод ашиглах"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Файл дамжуулахад ашиглах"</string>
diff --git a/packages/SettingsLib/res/values-mr-rIN/strings.xml b/packages/SettingsLib/res/values-mr-rIN/strings.xml
index c54b22d..cf5c29d 100644
--- a/packages/SettingsLib/res/values-mr-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-mr-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"परिक्षेत्रामध्ये नाही"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"कोणताही इंटरनेट प्रवेश आढळला नाही, स्वयंचलितपणे रीकनेक्ट करणार नाही."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे जतन केले"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi सहाय्यक द्वारे कनेक्ट केले"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s द्वारे कनेक्‍ट केले"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s द्वारे उपलब्‍ध"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"कनेक्‍ट केले, इंटरनेट नाही"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"डिस्कनेक्ट केले"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"डिस्कनेक्ट करत आहे..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"कनेक्ट करीत आहे..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"संपर्क सामायिकरणासाठी वापरा"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इंटरनेट कनेक्शन सामायिकरण"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"संदेशात प्रवेश"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"सिम प्रवेश"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"मीडिया ऑडिओवर कनेक्ट केले"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"फोन ऑडिओ वर कनेक्ट केले"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"फाईल स्थानांतर सर्व्हरवर कनेक्ट केले"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"नकाशाशी कनेक्ट केले"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP शी कनेक्‍ट केले"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"फाइल स्थानांतर सर्व्हरशी कनेक्ट केले नाही"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"इनपुट डिव्हाइसवर कनेक्ट केले"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"इंटरनेट प्रवेशासाठी डिव्हाइसवर कनेक्ट केले"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"डिव्हाइससह स्थानिक इंटरनेट कनेक्शन सामायिक करत आहे"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"इंटरनेट प्रवेशासाठी वापरा"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"नकाशासाठी वापरा"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM प्रवेशासाठी वापरा"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"मीडिया ऑडिओसाठी वापरा"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"फोन ऑडिओसाठी वापरा"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"फाईल स्थानांतरणासाठी वापरा"</string>
diff --git a/packages/SettingsLib/res/values-ms-rMY/strings.xml b/packages/SettingsLib/res/values-ms-rMY/strings.xml
index 6e1ecaa..cf5ed64 100644
--- a/packages/SettingsLib/res/values-ms-rMY/strings.xml
+++ b/packages/SettingsLib/res/values-ms-rMY/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Masalah pengesahan"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Tidak dalam liputan"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Tiada Akses Internet Dikesan, tidak akan menyambung secara automatik."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Diselamatkan oleh <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Disambungkan melalui Pembantu Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Disambungkan melalui %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Disambungkan, tiada Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Diputuskan sambungan"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Memutuskan sambungan..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Menyambung..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Gunakan untuk perkongsian kenalan"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Perkongsian sambungan Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Akses Mesej"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Akses SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Disambungkan ke audio media"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Disambungkan ke audio telefon"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Bersambung ke pelayan pemindahan fail"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Disambungkan ke peta"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Disambungkan ke SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Tidak bersambung kepada pelayan pemindahan fail"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Disambungkan ke peranti input"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Sbg ke pranti utk aks Int"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Kgsi sbgn Int dgn peranti"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Gunakan untuk akses Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Gunakan untuk peta"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Gunakan untuk akses SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Gunakan untuk audio media"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Gunakan untuk audio telefon"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Gunakan untuk pemindahan fail"</string>
diff --git a/packages/SettingsLib/res/values-my-rMM/strings.xml b/packages/SettingsLib/res/values-my-rMM/strings.xml
index 6148294..bac35a6 100644
--- a/packages/SettingsLib/res/values-my-rMM/strings.xml
+++ b/packages/SettingsLib/res/values-my-rMM/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"စစ်မှန်ကြောင်းအတည်ပြုရန်၌ ပြသနာရှိခြင်း"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"စက်ကွင်းထဲတွင် မဟုတ်ပါ"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"မည်သည့် အင်တာနက်မျှမရှိပါ၊ အလိုအလျောက် ပြန်လည်မချိတ်ဆက်ပါ။"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> မှသိမ်းဆည်းခဲ့သည်"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"ကြိုးမဲ့ကူညီသူမှတဆင့် ချိတ်ဆက်၏"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s မှတစ်ဆင့်ရနိုင်သည်"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ချိတ်ဆက်ထားသည်၊ အင်တာနက်မရှိ"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ချိတ်ဆက်မှုပြတ်တောက်သည်"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"အဆက်အသွယ်ဖြတ်တောက်သည်"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ချိတ်ဆက်နေသည်"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"အဆက်အသွယ်ကို မျှဝေရန် အတွက် သုံးရန်"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"အင်တာနက်ဆက်သွယ်မှု မျှဝေခြင်း"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"သတင်းရယူမှု"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM အသုံးပြုခြင်း"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"မီဒီယာအသံအား ချိတ်ဆက်ရန်"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ဖုန်းအသံအား ချိတ်ဆက်ရန်"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ဖိုင်လွှဲပြောင်းမည့်ဆာဗာနှင့် ချိတ်ဆက်ထားပြီး"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"မြေပုံနှင့် ချိတ်ဆက်ရန်"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP သို့ချိတ်ဆက်ထားသည်"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ဖိုင်လွှဲပြောင်းမည့်ဆာဗာနှင့် ချိတ်ဆက်မထားပါ"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ထည့်သွင်းထားသောစက်ကို ချိတ်ဆက်မည်"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"အင်တာနက်ဆက်သွယ်မှုရရန် စက်နှင်ချိတ်ဆက်မည်"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"စက်နှင့် ပုံမှန်အင်တာနက်ဆက်သွယ်မှုအား မျှဝေစေရန်"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"အင်တာနက်ချိတ်ဆက်ရန်အသုံးပြုသည်"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"မြေပုံအတွက်သုံးရန်"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM အသုံးပြုမှုအတွက် အသုံးပြုမည်"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"မီဒီယာအသံအတွက်အသုံးပြုရန်"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ဖုန်းအသံအားအသုံးပြုရန်"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ဖိုင်လွဲပြောင်းရန်အတွက်အသုံးပြုရန်"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 0171fde..87bef26 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -29,20 +29,16 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentiseringsproblem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Utenfor område"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Ingen Internett-tilgang ble funnet. Kan ikke koble til på nytt automatisk."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Lagret av <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Koblet til via en Wi-Fi-assistent"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilkoblet via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgjengelig via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Tilkoblet – ingen Internett-forbindelse"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Frakoblet"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Kobler fra…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Kobler til…"</string>
     <string name="bluetooth_connected" msgid="6038755206916626419">"Tilkoblet"</string>
-    <string name="bluetooth_pairing" msgid="1426882272690346242">"Parer…"</string>
+    <string name="bluetooth_pairing" msgid="1426882272690346242">"Sammenkobles …"</string>
     <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Tilkobling (ingen telefon)"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Tilkoblet (ingen medier)"</string>
     <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Tilkoblet (ingen meldingstilgang)"</string>
@@ -56,27 +52,24 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Bruk til kontaktdeling"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Deling av Internett-tilkobling"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Meldingstilgang"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Tilgang til SIM-kortet"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Koblet til medielyd"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Koblet til telefonlyd"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Koblet til tjener for filoverføring"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Koblet til kart"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Koblet til SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Ikke koblet til tjener for filoverføring"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Koblet til inndataenhet"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Koblet til enhet for Internett-tilgang"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Deler lokal Internett-tilkobling med enhet"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Bruk for Internett-tilgang"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Bruk for kart"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Bruk for tilgang til SIM-kortet"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Bruk for medielyd"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Bruk for telefonlyd"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Bruk til filoverføring"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Bruk for inndata"</string>
-    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Paring"</string>
+    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Sammenkoble"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"KOBLE"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Avbryt"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Med sammenkobling får den andre enheten tilgang til kontaktene og anropsloggen din når den er tilkoblet."</string>
diff --git a/packages/SettingsLib/res/values-ne-rNP/strings.xml b/packages/SettingsLib/res/values-ne-rNP/strings.xml
index 9808eb2..4481eecf 100644
--- a/packages/SettingsLib/res/values-ne-rNP/strings.xml
+++ b/packages/SettingsLib/res/values-ne-rNP/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"प्रमाणीकरण समस्या"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"दायराभित्र छैन"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"कुनै इन्टरनेट पहुँच पाईएन, स्वचालित रूपमा पुन: जडान छैन।"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> द्वारा सुरक्षित गरियो"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi-Fi सहायक द्वारा जोडिएको"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s मार्फत जडित"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s मार्फत उपलब्ध"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"जडित, इन्टरनेट चलेको छैन"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"विच्छेदन गरियो"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"जडान हटाइँदै ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"जडान हुँदै..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"सम्पर्क साझेदारीका लागि प्रयोग"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"इन्टरनेट जडान साझेदारी गर्दै"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"सन्देश पहुँच"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM पहुँच"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"मिडिया अडियोसँग जडित"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"फोन अडियोमा जडान गरियो"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"फाइल ट्रान्सफर सर्भरमा जडान गरियो"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"नक्सासँग जडित"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP मा जडित"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"फाइल ट्रान्सफर सर्भरसँग जडान गरिएको छैन"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"इनपुट उपकरणसँग जोडिएको छ"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"इन्टरनेट पहुँचका लागि उपकरणसँग जडित"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"उपकरणसँग स्थानीय इन्टरनेट जडान साझेदारी गर्दै"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"इन्टर्नेट पहुँचका लागि प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"नक्साको लागि प्रयोग गर्नुहोस्"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM मा पहुँचका लागि प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"मिडिया अडियोका लागि प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"फोन अडियोको लागि प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"फाइल ट्रान्सफरका लागि प्रयोग गर्नुहोस्"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index b1b2272..ec7f8ac 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authenticatieprobleem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Niet binnen bereik"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Geen internettoegang gevonden. Er wordt niet automatisch opnieuw verbinding gemaakt."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Opgeslagen door <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Verbonden via wifi-assistent"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Beschikbaar via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Verbonden, geen internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Verbinding verbroken"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Verbinding verbreken..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Verbinding maken..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Gebruiken voor contacten delen"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internetverbinding delen"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Toegang tot berichten"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Sim-toegang"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Verbonden met audio van medium"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Verbonden met audio van telefoon"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Verbonden met server voor bestandsoverdracht"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Verbonden met kaart"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Verbonden via SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Niet verbonden met server voor bestandsoverdracht"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Verbonden met invoerapparaat"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Verbonden met apparaat voor internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Lokale internetverbinding delen met apparaat"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Gebruik voor internettoegang"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Gebruiken voor kaart"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Gebruiken voor sim-toegang"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Gebruiken voor audio van medium"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Gebruiken voor audio van telefoon"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Gebruiken voor bestandsoverdracht"</string>
diff --git a/packages/SettingsLib/res/values-pa-rIN/strings.xml b/packages/SettingsLib/res/values-pa-rIN/strings.xml
index 1d489c9..7ea7048 100644
--- a/packages/SettingsLib/res/values-pa-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-pa-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ਪ੍ਰਮਾਣੀਕਰਨ ਸਮੱਸਿਆ"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"ਰੇਂਜ ਵਿੱਚ ਨਹੀਂ ਹੈ"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"ਕੋਈ ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਨਹੀਂ ਮਿਲੀ, ਆਟੋਮੈਟਿਕਲੀ ਰੀਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾਏਗਾ।"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi ਸਹਾਇਕ ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"ਕਨੈਕਟ ਕੀਤਾ, ਕੋਈ ਇੰਟਰਨੈਟ ਨਹੀਂ"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ਡਿਸਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"ਡਿਸਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"ਸੰਪਰਕ ਸ਼ੇਅਰਿੰਗ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਸ਼ੇਅਰਿੰਗ"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"ਸੁਨੇਹਾ ਪਹੁੰਚ"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ਪਹੁੰਚ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"ਮੀਡੀਆ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ਫੋਨ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"ਨਕਸ਼ੇ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ਇਨਪੁਟ ਡਿਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਲਈ ਡਿਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ਡਿਵਾਈਸ ਨਾਲ ਸਥਾਨਕ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਸ਼ੇਅਰ ਕਰ ਰਿਹਾ ਹੈ"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"ਨਕਸ਼ੇ ਲਈ ਵਰਤੋ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ਪਹੁੰਚ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ਮੀਡੀਆ ਔਡੀਓ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ਫੋਨ ਔਡੀਓ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਲਈ ਵਰਤੋ"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 7f7d68d..916bb01 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem z uwierzytelnianiem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Poza zasięgiem"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nie wykryto dostępu do internetu. Nie można automatycznie przywrócić połączenia."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Zapisane przez: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Połączono przez Asystenta Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Połączono przez %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Dostępne przez %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Połączono, brak internetu"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Rozłączona"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Rozłączanie..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Łączenie..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Używaj do udostępniania kontaktów"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Udostępnianie połączenia internetowego"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Dostęp do wiadomości"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Dostęp do karty SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Połączono z funkcją audio multimediów"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Połączono z funkcją audio telefonu"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Połączono z serwerem transferu plików"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Połączono z mapą"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Połączono z PDU"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Brak połączenia z serwerem transferu plików"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Podłączono do urządzenia wejściowego"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Połączone w celu dostępu do internetu"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Udostępnianie połączenia internetowego"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Użyj na potrzeby dostępu do internetu"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Używaj dla mapy"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Używaj, by uzyskać dostęp do karty SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Użyj dla funkcji audio multimediów"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Użyj dla funkcji audio telefonu"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Użyj do transferu plików"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index a0e9362..26da01c 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detetado; não será efetuada uma nova ligação automaticamente."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Guardada por <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Ligado através do Assistente de Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Ligado através de %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível através de %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ligado, sem Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desligado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"A desligar..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"A ligar..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Utilizar para a partilha de contactos"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Partilha da ligação à internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Acesso a mensagens"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acesso ao SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ligado ao áudio de multimédia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ligado ao áudio do telefone"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ligado ao servidor de transferência de ficheiros"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Ligado ao mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Ligado ao SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Não ligado ao servidor de transferência de ficheiros"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Ligado a um dispositivo de entrada"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Ligado ao aparelho para acesso à internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"A partilhar a ligação à internet local com o aparelho"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Utilizar para acesso à internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Utilizar para o mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Utilizar para acesso ao SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utilizar para áudio de multimédia"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utilizar para áudio do telefone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utilizar para transferência de ficheiros"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 9ede1cd..efe578c 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nenhum acesso à Internet detectado. O dispositivo não conectará automaticamente."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Salvas por <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Conectado via assistente de Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectada, sem Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectado"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Conectando..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Usar para compartilhamento de contatos"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Compartilhamento de conexão à Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Acesso a mensagens"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acesso SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectado ao áudio da mídia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectado ao áudio do telefone"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectado ao servidor de transferência de arquivo"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Conectado ao mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Conectado a SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Não está conectado ao servidor de transferência de arquivo"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Conectado ao dispositivo de entrada"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Conectado ao dispositivo para acesso à Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Compart. conexão local de Intern. com disp."</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Usar para acesso à Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Usar para mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use para acesso SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Usar para áudio de mídia"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Usar para áudio do telefone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Usado para transferência de arquivo"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index ea3eee9d9..31d8435 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problemă la autentificare"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"În afara ariei de acoperire"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nu s-a detectat acces la internet, nu se va efectua reconectarea automată."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Salvată de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Conexiune realizată printr-un asistent Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectată prin %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibilă prin %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Conectată, fără internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Deconectat"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"În curs de deconectare..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Se conectează..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Utilizați pentru a permite accesul la Agendă"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Distribuirea conexiunii la internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Acces la mesaje"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Acces la SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Conectat la profilul pentru conţinut media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Conectat la componenta audio a telefonului"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Conectat la serverul de transfer de fişiere"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Conectat la hartă"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Conectat la SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Neconectat la serverul de transfer de fişiere"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Conectat la dispozitivul de intrare"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Conectat la dispoz. pt. acces internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Se permite dispoz. acces la internet local"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Utilizaţi pentru acces internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Utilizați pentru hartă"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Folosiți pentru acces la SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Utilizaţi pentru profilul pentru conţinut media audio"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Utilizaţi pentru componenta audio a telefonului"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Utilizaţi pentru transferul de fişiere"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 88dcf5e..0e6f7e9 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Ошибка аутентификации"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Недоступна"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Подключение к Интернету отсутствует и не будет восстановлено автоматически."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Кто сохранил: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Установлено подключение через Ассистента Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Подключено к %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Доступно через %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Подключено, без Интернета"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Отключено"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Отключение..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Подключение..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Использовать для обмена контактами"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Профиль PAN"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Доступ к сообщениям"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Доступ к SIM-карте"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Подключено к мультимедийному аудиоустройству"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Подключено к аудиоустройству телефона"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Установлено подключение к серверу передачи файлов"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Доступ к сообщениям"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Подключено к точке доступа"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Нет подключения к серверу передачи файлов"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Подключено к устройству ввода"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Используется интернет-подключение другого устройства"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Устройство работает в режиме модема"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Использовать для доступа к Интернету"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Использовать для доступа к сообщениям"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Использовать для доступа к SIM-карте"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Использовать для мультимедийного аудиоустройства"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Использовать для аудиоустройства телефона"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Используется для передачи файлов"</string>
diff --git a/packages/SettingsLib/res/values-si-rLK/strings.xml b/packages/SettingsLib/res/values-si-rLK/strings.xml
index 873baf1..f59acf7 100644
--- a/packages/SettingsLib/res/values-si-rLK/strings.xml
+++ b/packages/SettingsLib/res/values-si-rLK/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"සත්‍යාපනයේ ගැටලුවකි"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"පරාසයේ නැත"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"අන්තර්ජාල ප්‍රවේශය අනාවරණය වුයේ නැත, ස්වයංක්‍රිය නැවත සම්බන්ධ වීම වූ නැත"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> විසින් සුරකින ලදී"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi සහායක හරහා සම්බන්ධ කරන ලදි"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s හරහා සම්බන්ධ විය"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"සම්බන්ධයි, අන්තර්ජාලය නැත"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"විසන්ධි වුණි"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"විසන්ධි වෙමින්…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"සම්බන්ධ වෙමින්…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"සම්බන්ධතා බෙදාගැනීම සඳහා භාවිතා කිරීම"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"අන්තර්ජාල සම්බන්ධතා බෙදාගැනීම"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"පණිවිඩ ප්‍රවේශය"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ප්‍රවේශය"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"මාධ්‍ය ශ්‍රව්‍යට සම්බන්ධ විය"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"දුරකතනයේ ශ්‍රව්‍යට සම්බන්ධ විය"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ගොනු හුවමාරු සේවාදායකය සමග සම්බන්ධ විය"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"සිතියම වෙත සම්බන්ධිතයි"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP වෙත සම්බන්ධ විය"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ගොනු හුවමාරු සේවාදායකය වෙත සම්බන්ධ වී නොමැත"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ආදාන උපාංග වෙත සම්බන්ධිතයි"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"අන්තර්ජාල ප්‍රවේශය සඳහා උපාංගය වෙත සම්බන්ධ වුණි"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"මෙම උපාංගය සමඟ පෙදෙසි අන්තර්ජාල සම්බන්ධතාවය බෙදාගනිමින්"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"අන්තර්ජාල ප්‍රවේශය සඳහා භාවිතා කරන්න"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"සිතියම සඳහා භාවිතා කරන්න"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ප්‍රවේශය සඳහා භාවිත කරන්න"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"මාධ්‍ය ශ්‍රව්‍ය සඳහා භාවිතා කරන්න"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"දුරකථන ශ්‍රව්‍ය සඳහා භාවිතා කෙරේ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ගොනු හුවමාරුව සඳහා භාවිතා කරන්න"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 6196d49..cd31316 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problém s overením totožnosti"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Mimo dosah"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nenašiel sa žiadny prístup k internetu, preto nedôjde k automatickému opätovnému pripojeniu"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Uložil(a) <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Pripojené pomocou Asistenta Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Pripojené prostredníctvom %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"K dispozícii prostredníctvom %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Pripojené, žiadny internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Odpojený"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Prebieha odpájanie..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Prebieha pripájanie…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Použiť na zdieľanie kontaktov"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Zdieľanie pripojenia na Internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Prístup ku správam"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Prístup k SIM karte"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Pripojené ku zvukovému médiu"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Pripojené ku zvuku telefónu"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Pripojené na server pre prenos údajov"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Pripojené k mape"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Pripojené k systému SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Nepripojené k serveru pre prenos súborov"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Pripojené na vstupné zariadenie"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Pripoj. k zariad. s príst. na Internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Zdieľa miestne internet. pripoj. so zariad"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Použiť na prístup k Internetu"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Použiť pre mapu"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Použiť na pristupovanie k SIM karte"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Umožňuje pripojenie zvukového média"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Použiť pre zvuk telefónu"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Použiť na prenos súborov"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index a2060c9..ded401f 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Težava s preverjanjem pristnosti"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ni v obsegu"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Ni zaznanega dostopa do interneta; samodejna vnovična vzpostavitev povezave se ne bo izvedla."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Shranil(-a): <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Povezava vzpostavljena prek pomočnika za Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Vzpostavljena povezava prek: %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Na voljo prek: %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Vzpostavljena povezava, brez interneta"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Prekinjena povezava"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Prekinjanje povezave ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Vzpostavljanje povezave ..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Uporabi za dajanje stikov v skupno rabo"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Skupna raba internetne povezave"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Dostop do sporočil"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Dostop do kartice SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Povezan s profilom za predstavnostni zvok"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Povezava s profilom za zvok telefona vzpostavljena"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Povezava s strežnikom za prenos datotek je vzpostavljena"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Povezava je vzpostavljena z zemljevidom"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Vzpostavljena povezava s profilom SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Povezava s strežnikom za prenos datotek ni vzpostavljena"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Povezava z vnosno napravo je vzpostavljena"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Povezava z napravo za internetni dostop"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Skupna raba lok. internetne povezave z napravo"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Uporabi za dostop do interneta"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Uporabi za zemljevid"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Uporablja se za dostop do kartice SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Uporabi za zvok predstavnosti"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Uporabi za zvok telefona"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Uporabi za prenos datotek"</string>
diff --git a/packages/SettingsLib/res/values-sq-rAL/strings.xml b/packages/SettingsLib/res/values-sq-rAL/strings.xml
index 0085228..3f8ec26 100644
--- a/packages/SettingsLib/res/values-sq-rAL/strings.xml
+++ b/packages/SettingsLib/res/values-sq-rAL/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problem me vërtetimin"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Nuk është brenda rrezes"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Nuk u diktua qasje në internet. Lidhja nuk do të realizohet automatikisht."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"E ruajtur nga <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"I lidhur nëpërmjet ndihmësit të Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"E lidhur përmes %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"E mundshme përmes %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"U lidh, nuk ka internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Shkëputur"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Po shkëputet..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Po lidhet..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Përdore për ndarjen e kontakteve"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Ndarja e lidhjes së internetit"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Qasja në mesazhe"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Qasje në kartën SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"U lidh me audion e medias"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"U lidh me audion e telefonit"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"U lidh me serverin e transferimit të skedarëve"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"U lidh me hartën"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Lidhur me SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Nuk u lidh me serverin e transferimit të skedarëve"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"U lidh me pajisjen e hyrjes"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Lidhur me pajisjen për qasje në internet"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Po ndan lidhjen lokale të internetit me pajisjen"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Përdor për qasje në internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Përdore për hartën"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Përdor për qasje në kartën SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Përdor për audion e medias"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Përdor për audion e telefonit"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Përdor për transferimin e skedarëve"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index a534a71..5cabe3c 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблем са потврдом аутентичности"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Није у опсегу"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Приступ интернету није откривен, аутоматско повезивање није могуће."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Сачувао/ла је <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Повезано преко Wi‑Fi помоћника"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Веза је успостављена преко приступне тачке %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Доступна је преко приступне тачке %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Веза је успостављена, нема интернета"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Веза је прекинута"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Прекидање везе..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Повезивање…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Користите за дељење контаката"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Дељење интернет везе"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Приступ порукама"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Приступ SIM картици"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Повезано са звуком медија"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Повезано са звуком телефона"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Повезано са сервером за пренос датотека"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Повезано је са мапом"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Веза са тачком приступа услугама је успостављена"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Није повезано са сервером за пренос датотека"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Повезан са улазним уређајем"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Повез. са уређ. ради приступа Интернету"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Локална интернет веза се дели са уређајем"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Користи за приступ Интернету"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Користи се за мапу"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Користи за приступ SIM картици"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Коришћење за звук медија"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Коришћење за аудио телефона"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Коришћење за пренос датотека"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 9251b60..6246328 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Autentiseringsproblem"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Utom räckhåll"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Ingen internetåtkomst hittades. Det går inte att återansluta automatiskt."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Sparades av <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Ansluten via Wi-Fi-assistent"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Anslutet via %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Tillgängligt via %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ansluten, inget internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Kopplas ifrån"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Kopplar ifrån…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Ansluter…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Använd för kontaktdelning"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Delning av Internetanslutning"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Meddelandeåtkomst"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-åtkomst"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ansluten till medialjud"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ansluten till telefonens ljud"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ansluten till filöverföringsserver"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Ansluten till MAP"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Ansluten till SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Inte ansluten till filöverföringsserver"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Ansluten till indataenhet"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Ansluten för Internetåtkomst"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Dela lokal Internetanslutning med enhet"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Använd för Internetåtkomst"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Använd för MAP"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Använd för SIM-åtkomst"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Använd för medialjud"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Använd för telefonens ljud"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Använd för filöverföring"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index f2028a5..aa30af98 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Tatizo la uthibitishaji"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Haiko karibu"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Hakuna Ufikiaji kwa Intaneti Uliogunduliwa, haitaweza kuunganisha kiotomatiki."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Ilihifadhiwa na <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Imeunganishwa kupitia Kisaidizi cha Wi-Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Imeunganishwa kupitia %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Inapatikana kupitia %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Imeunganishwa, hakuna Intaneti"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Imetenganishwa"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Inatenganisha..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Inaunganisha…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Tumia kwa kushiriki anwani"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Kushiriki muunganisho wa tovuti"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Ufikiaji wa Ujumbe"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Ufikiaji wa SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Imeunganishwa kwenye sikika ya njia ya mawasiliano"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Imeunganishwa kwenye sauti ya simu"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Imeunganishwa kwenye seva ya kuhamisha faili"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Imeunganishwa kwenye ramani"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Imeunganishwa kwenye SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Haijaunganishwa kwenye seva ya kuhamisha faili"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Umeunganishwa kwa kifaa cha kuingiza"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Umeunganishwa kwa kifaa cha ufikia Mtandao"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Kushiriki muunganisho wa mtandao wa nyumbani na kifaa"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Tumia kwa ufikiaji mtandao"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Tumia kwa ramani"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Tumia kwa ufikiaji wa SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Tumia kwa sauti ya media"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Tumia kwa sauti ya simu"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Tumia kwa hali faili"</string>
diff --git a/packages/SettingsLib/res/values-ta-rIN/strings.xml b/packages/SettingsLib/res/values-ta-rIN/strings.xml
index ffd984f3..93bd89b 100644
--- a/packages/SettingsLib/res/values-ta-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ta-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"அங்கீகரிப்புச் சிக்கல்"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"தொடர்பு எல்லையில் இல்லை"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"இணைய அணுகல் இல்லை, மீண்டும் தானாக இணையாது."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> சேமித்தது"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"வைஃபை அசிஸ்டண்ட் மூலம் இணைக்கப்பட்டது"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s வழியாகக் கிடைக்கிறது"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"இணைக்கப்பட்டது, இணையம் இல்லை"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"தொடர்பு துண்டிக்கப்பட்டது"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"துண்டிக்கிறது..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"இணைக்கிறது..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"தொடர்புப் பகிர்தலுக்குப் பயன்படுத்து"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"இணைய இணைப்பு பகிர்தல்"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"செய்திக்கான அணுகல்"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"சிம் அணுகல்"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"மீடியா ஆடியோவுடன் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"மொபைல் ஆடியோவுடன் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"கோப்பைப் பரிமாற்றும் சேவையகத்துடன் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"வரைபடத்துடன் இணைக்கப்பட்டது"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP உடன் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"கோப்பு இடமாற்றும் சேவையகத்துடன் இணைக்கப்படவில்லை"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"உள்ளீட்டுச் சாதனத்துடன் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"இணைய அணுகலுக்காகச் சாதனம் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"சாதனத்துடன் அக இணைய இணைப்பைப் பகிர்கிறது"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"இணைய அணுகலுக்காகப் பயன்படுத்து"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"வரைபடத்திற்குப் பயன்படுத்து"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"சிம் அணுகலுக்குப் பயன்படுத்தும்"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"மீடியாவின் ஆடியோவிற்குப் பயன்படுத்து"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"மொபைல் ஆடியோவைப் பயன்படுத்து"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"கோப்பு பரிமாற்றத்திற்காகப் பயன்படுத்து"</string>
diff --git a/packages/SettingsLib/res/values-te-rIN/strings.xml b/packages/SettingsLib/res/values-te-rIN/strings.xml
index 2cb5a77..766b1d9 100644
--- a/packages/SettingsLib/res/values-te-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-te-rIN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ప్రామాణీకరణ సమస్య"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"పరిధిలో లేదు"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"ఇంటర్నెట్ ప్రాప్యత కనుగొనబడలేదు, స్వయంచాలకంగా మళ్లీ కనెక్ట్ చేయబడదు."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా సేవ్ చేయబడింది"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi సహాయకం ద్వారా కనెక్ట్ చేయబడింది"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"కనెక్ట్ చేయబడింది, ఇంటర్నెట్ లేదు"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"డిస్‌కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"డిస్‌కనెక్ట్ చేస్తోంది..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"కనెక్ట్ చేస్తోంది..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"పరిచయ భాగస్వామ్యం కోసం ఉపయోగించు"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"ఇంటర్నెట్ కనెక్షన్ భాగస్వామ్యం"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"సందేశ ప్రాప్యత"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM ప్రాప్యత"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"మీడియా ఆడియోకు కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"ఫోన్ ఆడియోకు కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"ఫైల్ బదిలీ సర్వర్‌కు కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"మ్యాప్‌కు కనెక్ట్ చేయబడింది"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAPకి కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ఫైల్ బదిలీ సర్వర్‌కు కనెక్ట్ చేయబడలేదు"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ఇన్‌పుట్ పరికరానికి కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"ఇంటర్నెట్ ప్రాప్యత కోసం పరికరానికి కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"స్థానిక ఇంటర్నెట్ కనెక్షన్‌ను పరికరంతో భాగస్వామ్యం చేయడం"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ఇంటర్నెట్ ప్రాప్యత కోసం ఉపయోగించు"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"మ్యాప్ కోసం ఉపయోగించు"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM ప్రాప్యత కోసం ఉపయోగించబడుతుంది"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"మీడియా ఆడియో కోసం ఉపయోగించు"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ఫోన్ ఆడియో కోసం ఉపయోగించు"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ఫైల్ బదిలీ కోసం ఉపయోగించు"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index ffdde90..c48452e 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"ปัญหาในการตรวจสอบสิทธิ์"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"ไม่อยู่ในพื้นที่ให้บริการ"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"ไม่พบการเข้าถึงอินเทอร์เน็ต ระบบจะไม่เชื่อมต่อใหม่โดยอัตโนมัติ"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"บันทึกโดย <xliff:g id="NAME">%1$s</xliff:g> แล้ว"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"เชื่อมต่อผ่านตัวช่วย Wi-Fi อยู่"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"พร้อมใช้งานผ่านทาง %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"เชื่อมต่อแล้ว ไม่พบอินเทอร์เน็ต"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"ตัดการเชื่อมต่อ"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"กำลังตัดการเชื่อมต่อ..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"กำลังเชื่อมต่อ…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"ใช้สำหรับการแชร์รายชื่อผู้ติดต่อ"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"การแชร์การเชื่อมต่ออินเทอร์เน็ต"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"การเข้าถึงข้อความ"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"การเข้าถึงซิม"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"เชื่อมต่อกับระบบเสียงของสื่อแล้ว"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"เชื่อมต่อกับระบบเสียงของโทรศัพท์แล้ว"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"เชื่อมต่อกับเซิร์ฟเวอร์สำหรับโอนไฟล์แล้ว"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"เชื่อมต่อกับแผนที่แล้ว"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"เชื่อมต่อ SAP แล้ว"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์สำหรับโอนไฟล์"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"เชื่อมต่อกับอุปกรณ์อินพุตแล้ว"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"เชื่อมต่อกับอุปกรณ์สำหรับการเข้าถึงอินเทอร์เน็ต"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"กำลังแชร์อินเทอร์เน็ตกับอุปกรณ์"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"ใช้การเข้าถึงอินเทอร์เน็ต"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"ใช้สำหรับแผนที่"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"ใช้สำหรับการเข้าถึงซิม"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"ใช้สำหรับระบบเสียงของสื่อ"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"ใช้สำหรับระบบเสียงของโทรศัพท์"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"ใช้สำหรับการโอนไฟล์"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index f967380..1ad4780 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema sa pagpapatotoo"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Wala sa sakop"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Walang Natukoy na Access sa Internet, hindi awtomatikong muling kumonekta."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Na-save ni <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Nakakonekta sa pamamagitan ng Wi‑Fi assistant"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Nakakonekta sa pamamagitan ng %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Available sa pamamagitan ng %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Nakakonekta, walang Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Hindi nakakonekta"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Nadidiskonekta..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Kumukonekta…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Gamitin para sa pagbabahagi ng contact"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Pagbabahagi ng koneksyon sa internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Access sa Mensahe"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Access sa SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Konektado sa media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Nakakonekta sa audio ng telepono"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Nakakonekta sa server sa paglilipat ng file"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Nakakonekta sa mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Nakakonekta sa SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Hindi konektado sa server ng paglipat ng file"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Nakakonekta sa device ng input"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Konektado sa device sa Internet access"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Pagbahagi lokal koneksyon sa Internet sa device"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Gamitin para sa pag-access sa Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Gamitin para sa mapa"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Gamitin para sa pag-access sa SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Gamitin para sa media audio"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Ginagamit para sa audio ng telepono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Ginagamit para sa paglilipat ng file"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index abebe44..3d59096 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Kimlik doğrulama sorunu"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Kapsama alanı dışında"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"İnternet Erişimi algılanmadı, otomatik olarak tekrar bağlanmayacak."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tarafından kaydedildi"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Kablosuz bağlantı yardımcısıyla bağlandı"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s üzerinden bağlı"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s üzerinden kullanılabilir"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Bağlı, İnternet yok"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Bağlantı kesildi"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Bağlantı kesiliyor…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Bağlanıyor…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Kişi paylaşmak için kullan"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"İnternet bağlantısı paylaşımı"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Mesaj Erişimi"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Erişimi"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Medya sesine bağlanıldı"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefon sesine bağlandı"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Dosya aktarım sunucusuna bağlandı"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"MAP\'ye bağlı"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP\'ye bağlı"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Dosya aktarım sunucusuna bağlanmadı"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Giriş cihazına bağlı"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"İnternet erişimi için cihaza bağlandı"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Cihazla yerel Intrnt bağlantısını paylaşıyor"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"İnternet erişimi için kullan"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"MAP için kullan"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM erişimi için kullan"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Medya sesi için kullan"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Telefon sesi için kullan"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Dosya aktarımı için kullan"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 64bb3a0..49fb760 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -29,20 +29,16 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Проблема з автентифікацією"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Не в діапазоні"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Немає доступу до Інтернету. Спроба під’єднання не здійснюватиметься автоматично."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Збережено додатком <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Під’єднано через Диспетчер Wi-Fi-з’єднання"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Під’єднано через %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Доступ через %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Під’єднано, але немає доступу до Інтернету"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Роз’єднано"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Відключення..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Підключення…"</string>
     <string name="bluetooth_connected" msgid="6038755206916626419">"Підключено"</string>
-    <string name="bluetooth_pairing" msgid="1426882272690346242">"Ств.пари..."</string>
+    <string name="bluetooth_pairing" msgid="1426882272690346242">"Підключення…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2866994875046035609">"Під’єднано (без телефону)"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Під’єднано (без медіа-файлів)"</string>
     <string name="bluetooth_connected_no_map" msgid="6504436917057479986">"Під’єднано (без доступу до повідомлень)"</string>
@@ -56,27 +52,24 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Використовувати для надсилання контактів"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Надання доступу до Інтернету"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Доступ до повідомлень"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Доступ до SIM-карти"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Підключено до аудіоджерела"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Підключено до звуку телеф."</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Підключ. до сервера передачі файлів"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Під’єднано до карти"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Під’єднано до точки доступу"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Не підключ. до сервера передачі файлів"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Підключено до пристрою введ."</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Під’єдн. до пристр. для дост.до Інтерн."</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Доступ до локал.з’єдн. з Інтерн. ч-з пристрій"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Використовувати для доступу до Інтернету"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Використовувати для карти"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Використовувати для доступу до SIM-карти"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Викор. для аудіоджер."</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Викор. для звуку тел."</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Викор. для перед. файлів"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Викор. для введ."</string>
-    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Ств.пару"</string>
+    <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Підключити"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"ПІДКЛЮЧИТИСЯ"</string>
     <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Скасувати"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Якщо ви під’єднаєте інший пристрій, він матиме доступ до ваших контактів та історії дзвінків."</string>
diff --git a/packages/SettingsLib/res/values-ur-rPK/strings.xml b/packages/SettingsLib/res/values-ur-rPK/strings.xml
index bcb1170..a4869ad 100644
--- a/packages/SettingsLib/res/values-ur-rPK/strings.xml
+++ b/packages/SettingsLib/res/values-ur-rPK/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"توثیق کا مسئلہ"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"رینج میں نہیں ہے"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"انٹرنیٹ تک کسی رسائی کا پتہ نہیں چلا، خود بخود دوبارہ منسلک نہیں ہوگا۔"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> کی جانب سے محفوظ کردہ"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"‏Wi‑Fi اسسٹنٹ کے ذریعے منسلک ہے"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"‏منسلک بذریعہ ‎%1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"‏دستیاب بذریعہ ‎%1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"منسلک، انٹرنیٹ نہیں ہے"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"منقطع"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"منقطع کیا جارہا ہے…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"مربوط ہو رہا ہے…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"رابطہ کے اشتراک کیلئے استعمال کریں"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"انٹرنیٹ کنکشن کا اشتراک کرنا"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"پیغام تک رسائی"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"‏SIM رسائی"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"میڈیا آڈیو سے مربوط"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"فون آڈیو سے مربوط"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"فائل منتقلی سرور سے مربوط ہو گیا ہے"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"نقشہ سے مربوط ہوگیا"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"‏SAP سے منسلک"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"فائل منتقلی سرور سے مربوط نہیں ہے"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"ان پٹ آلہ سے مربوط"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"انٹرنیٹ رسائی کیلئے آلہ سے مربوط ہو گیا"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"آلہ کے ساتھ مقامی انٹرنیٹ کنکشن کا اشتراک کر رہا ہے"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"انٹرنیٹ رسائی کیلئے استعمال"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"نقشہ کیلئے استعمال کریں"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"‏SIM رسائی کے لئے استعمال کریں"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"میڈیا آڈیو کیلئے استعمال کریں"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"فون آڈیو کیلئے استعمال کریں"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"فائل منتقل کرنے کیلئے استعمال کریں"</string>
diff --git a/packages/SettingsLib/res/values-uz-rUZ/arrays.xml b/packages/SettingsLib/res/values-uz-rUZ/arrays.xml
index 31a18cc6..f2cae2c 100644
--- a/packages/SettingsLib/res/values-uz-rUZ/arrays.xml
+++ b/packages/SettingsLib/res/values-uz-rUZ/arrays.xml
@@ -26,7 +26,7 @@
     <item msgid="8513729475867537913">"Ulanmoqda…"</item>
     <item msgid="515055375277271756">"Tasdiqdan o‘tilmoqda…"</item>
     <item msgid="1943354004029184381">"IP manzil o‘zlashtirilmoqda…"</item>
-    <item msgid="4221763391123233270">"Ulandi"</item>
+    <item msgid="4221763391123233270">"Ulangan"</item>
     <item msgid="624838831631122137">"Muzlatildi"</item>
     <item msgid="7979680559596111948">"Uzilmoqda…"</item>
     <item msgid="1634960474403853625">"Uzilgan"</item>
diff --git a/packages/SettingsLib/res/values-uz-rUZ/strings.xml b/packages/SettingsLib/res/values-uz-rUZ/strings.xml
index e902cc0..9072c7c 100644
--- a/packages/SettingsLib/res/values-uz-rUZ/strings.xml
+++ b/packages/SettingsLib/res/values-uz-rUZ/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Tasdiqdan o‘tishda muammo"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Aloqada emas"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Internetga ulanish aniqlanmadi, avtomatik ravishda qayta ulana olmaydi."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> tomonidan saqlangan"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Wi‑Fi yordamchisi orqali ulangan"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s orqali ulangan"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s orqali ishlaydi"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Ulangan, lekin internet aloqasi yo‘q"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Uzildi"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Uzilyapti…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Ulanmoqda…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Kontaktlarni ulashish uchun ishlatilsin"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet aloqasi ulashmasi"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Xabarga kirish"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM-kartaga kirish"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Audio qurilmasiga ulangan"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Telefon karnayiga ulanildi"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Fayl almashinish serveriga ulanildi"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Xaritaga ulangan"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Ulanish nuqtasiga ulandi"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Fayl uzatish serveriga ulanmagan"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Kiritish qurilmasiga ulanildi"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Internet manbai qurilmasiga ulanildi"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Qurilmaga mahaliy internet aloqani tarqatish"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Internet manbai sifatida foydalanish"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Xaritada foydalanish"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"SIM-kartaga kirish uchun foydalanish"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Audio qurilma uchun foydalanish"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Dok’dan karnay sifatida foydalanish"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Fayl almashinish uchun foydalanish"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index b80e3ac..bd537b5 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Sự cố xác thực"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ngoài vùng phủ sóng"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Không phát hiện thấy truy cập Internet nào, mạng sẽ không được tự động kết nối lại."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Được lưu bởi <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Được kết nối qua trình hỗ trợ Wi‑Fi"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Được kết nối qua %1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Có sẵn qua %1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Đã kết nối, không có Internet"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Đã ngắt kết nối"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Đang ngắt kết nối…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Đang kết nối…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Sử dụng để chia sẻ liên hệ"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Chia sẻ kết nối internet"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Truy cập tin nhắn"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Quyền truy cập SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Đã kết nối với âm thanh phương tiện"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Đã kết nối với âm thanh điện thoại"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Đã kết nối với máy chủ chuyển tệp"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Đã kết nối với bản đồ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Được kết nối với SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Chưa kết nối với máy chủ chuyển tệp"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Đã kết nối với thiết bị nhập"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Đã kết nối với thiết bị"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Chia sẻ kết nối Internet"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Sử dụng để truy cập Internet"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Sử dụng cho bản đồ"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Sử dụng để truy cập SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Sử dụng cho âm thanh phương tiện"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Sử dụng cho âm thanh điện thoại"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Sử dụng để chuyển tệp"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 0e080c5..845cab4 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"身份验证出现问题"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"不在范围内"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"未检测到任何互联网连接,因此不会自动重新连接。"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"已通过<xliff:g id="NAME">%1$s</xliff:g>保存"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"已连接(通过 WLAN 助手)"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"已通过%1$s连接"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"可通过%1$s连接"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已连接,但无法访问互联网"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"已断开连接"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"正在断开连接..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"正在连接..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"用于共享联系人"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"共享互联网连接"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"消息权限"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 卡存取权限"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"已连接到媒体音频"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"已连接到手机音频"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"已连接到文件传输服务器"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"已连接到地图"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"已连接到 SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"未连接到文件传输服务器"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"已连接到输入设备"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"经由其他设备连接到互联网"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"与其他设备共享该设备的互联网连接"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"用于连接互联网"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"用于地图"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"用于存取 SIM 卡"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"用于媒体音频"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"用于手机音频"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"用于文件传输"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index bd770f5..4be03aa 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"驗證問題"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"超出可用範圍"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"未能偵測到互聯網連線,因此不會自動重新連線。"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"<xliff:g id="NAME">%1$s</xliff:g> 的儲存"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"已透過 Wi-Fi 小幫手連線"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 連線"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已連線,沒有互聯網"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"已中斷連線"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"正在中斷連線..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"正在連線..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"用於聯絡人共用"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"互聯網連線分享"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"訊息存取權"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 卡存取"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"已連接媒體音頻裝置"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"已連接手機耳機"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"已連線至檔案傳輸伺服器"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"已連結地圖"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"已連接 SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"未連線至檔案傳輸伺服器"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"已連線至輸入裝置"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"已連線至裝置並取得互聯網連線"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"與裝置分享本地互聯網連線"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"用於上網"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"用於地圖"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"用來存取 SIM 卡"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"用於媒體音效"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"用於手機音效"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"用於傳輸檔案"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 65f5392..8771ffc 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"驗證問題"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"不在有效範圍內"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"未偵測到可用的網際網路連線,系統無法為您自動重新連線。"</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"由<xliff:g id="NAME">%1$s</xliff:g>儲存"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"已透過 Wi‑Fi 小幫手連線"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 使用"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"已連線,沒有網際網路"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"已中斷連線"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"正在中斷連線…"</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"連線中…"</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"用於聯絡人共用"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"網際網路連線分享"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"訊息存取權"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM 卡存取權"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"連接至媒體音訊"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"連接至電話音訊"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"已連線到檔案傳輸伺服器"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"已連線至地圖"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"已連線到 SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"不要連線到檔案傳輸伺服器"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"已連線到輸入裝置"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"已連線至裝置並取得網際網路存取權"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"與裝置分享本地網際網路連線"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"用於網際網路連線"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"地圖使用偏好"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"用於 SIM 卡存取權"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"用於媒體音訊"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"用於電話音訊"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"用於傳輸檔案"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 8d51a4b..27608bf 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -29,15 +29,11 @@
     <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Inkinga yokufakazela ubuqiniso"</string>
     <string name="wifi_not_in_range" msgid="1136191511238508967">"Ayikho ebubanzini"</string>
     <string name="wifi_no_internet" msgid="9151470775868728896">"Ukufinyeela okungekhona kwe-inthanethi kutholakele, ngeke kuxhumeke ngokuzenzakalelayo."</string>
-    <!-- no translation found for saved_network (4352716707126620811) -->
-    <skip />
+    <string name="saved_network" msgid="4352716707126620811">"Kulondolozwe ngu-<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_wfa" msgid="3805736726317410714">"Ixhunywe ngomsizi we-Wi-FI"</string>
-    <!-- no translation found for connected_via_passpoint (2826205693803088747) -->
-    <skip />
-    <!-- no translation found for available_via_passpoint (1617440946846329613) -->
-    <skip />
-    <!-- no translation found for wifi_connected_no_internet (3149853966840874992) -->
-    <skip />
+    <string name="connected_via_passpoint" msgid="2826205693803088747">"Kuxhumeke nge-%1$s"</string>
+    <string name="available_via_passpoint" msgid="1617440946846329613">"Iyatholakala nge-%1$s"</string>
+    <string name="wifi_connected_no_internet" msgid="3149853966840874992">"Kuxhumekile, ayikho i-inthanethi"</string>
     <string name="bluetooth_disconnected" msgid="6557104142667339895">"Ayixhunyiwe"</string>
     <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Inqamula uxhumano kwi-inthanethi..."</string>
     <string name="bluetooth_connecting" msgid="8555009514614320497">"Iyaxhuma..."</string>
@@ -56,22 +52,19 @@
     <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Sebenzisela ukwabelana kokuxhumana"</string>
     <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Ukwabelana ngoxhumano lwe-Inthanethi"</string>
     <string name="bluetooth_profile_map" msgid="5465271250454324383">"Ukufinyelela umlayezo"</string>
-    <!-- no translation found for bluetooth_profile_sap (5764222021851283125) -->
-    <skip />
+    <string name="bluetooth_profile_sap" msgid="5764222021851283125">"Ukufinyelela kwe-SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Ixhume emsindweni wemidiya"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Ixhunywe kumsindo wefoni"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Ixhunywe kwiseva yokudlulisa ifayela"</string>
     <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Ixhumeke kumephu"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_connected (8561765057453083838) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Kuxhumeke ku-SAP"</string>
     <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Ayixhunyiwe kwiseva sokudlulisa ifayela"</string>
     <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Ixhunywe kwidivaysi yokufakwayo"</string>
     <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Ixhunyiwe kwidivaysi yokufinyelela kwi-Inthanethi"</string>
     <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Yabelana noxhumano lwe-Inthanethi kanye nedivaysi"</string>
     <string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Sebenzisa ukufinyelela i-Inthanethi"</string>
     <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Sebenzisela imephu"</string>
-    <!-- no translation found for bluetooth_sap_profile_summary_use_for (7085362712786907993) -->
-    <skip />
+    <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Ukusebenzisa kokufinyelela kwe-SIM"</string>
     <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Sebenzisela umsindo wemidiya"</string>
     <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Sebenziselwa umsindo wefoni"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Sebenziselwa ukudlulisa ifayela"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
index bf92fda..4bcbea7 100755
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java
@@ -355,7 +355,9 @@
                 return;
             }
             int errorMsg = R.string.bluetooth_pairing_error_message;
-            Utils.showError(context, cachedDevice.getName(), errorMsg);
+            if (context != null && cachedDevice != null) {
+                Utils.showError(context, cachedDevice.getName(), errorMsg);
+            }
         }
     }
 
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java
index c81f22a..5d3d120 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/StorageMeasurement.java
@@ -37,6 +37,7 @@
 import android.os.storage.StorageVolume;
 import android.os.storage.VolumeInfo;
 import android.util.Log;
+import android.util.SparseArray;
 import android.util.SparseLongArray;
 
 import com.android.internal.app.IMediaContainerService;
@@ -80,41 +81,45 @@
         public long availSize;
 
         /**
-         * Total apps disk usage.
+         * Total apps disk usage per profiles of the current user.
          * <p>
          * When measuring internal storage, this value includes the code size of
-         * all apps (regardless of install status for current user), and
-         * internal disk used by the current user's apps. When the device
+         * all apps (regardless of install status for the given profile), and
+         * internal disk used by the profile's apps. When the device
          * emulates external storage, this value also includes emulated storage
-         * used by the current user's apps.
+         * used by the profile's apps.
          * <p>
          * When measuring a physical {@link StorageVolume}, this value includes
-         * usage by all apps on that volume.
+         * usage by all apps on that volume and only for the primary profile.
+         * <p>
+         * Key is {@link UserHandle}.
          */
-        public long appsSize;
+        public SparseLongArray appsSize = new SparseLongArray();
 
         /**
-         * Total cache disk usage by apps.
+         * Total cache disk usage by apps (over all users and profiles).
          */
         public long cacheSize;
 
         /**
          * Total media disk usage, categorized by types such as
-         * {@link Environment#DIRECTORY_MUSIC}.
+         * {@link Environment#DIRECTORY_MUSIC} for every user profile of the current user.
          * <p>
          * When measuring internal storage, this reflects media on emulated
-         * storage for the current user.
+         * storage for the respective profile.
          * <p>
          * When measuring a physical {@link StorageVolume}, this reflects media
          * on that volume.
+         * <p>
+         * Key of the {@link SparseArray} is {@link UserHandle}.
          */
-        public HashMap<String, Long> mediaSize = new HashMap<>();
+        public SparseArray<HashMap<String, Long>> mediaSize = new SparseArray<>();
 
         /**
-         * Misc external disk usage for the current user, unaccounted in
-         * {@link #mediaSize}.
+         * Misc external disk usage for the current user's profiles, unaccounted in
+         * {@link #mediaSize}. Key is {@link UserHandle}.
          */
-        public long miscSize;
+        public SparseLongArray miscSize = new SparseLongArray();
 
         /**
          * Total disk usage for users, which is only meaningful for emulated
@@ -187,10 +192,16 @@
         private int mRemaining;
 
         public StatsObserver(boolean isPrivate, MeasurementDetails details, int currentUser,
-                Message finished, int remaining) {
+                List<UserInfo> profiles, Message finished, int remaining) {
             mIsPrivate = isPrivate;
             mDetails = details;
             mCurrentUser = currentUser;
+            if (isPrivate) {
+                // Add the profile ids as keys to detail's app sizes.
+                for (UserInfo userInfo : profiles) {
+                    mDetails.appsSize.put(userInfo.id, 0);
+                }
+            }
             mFinished = finished;
             mRemaining = remaining;
         }
@@ -220,11 +231,8 @@
                     cacheSize += stats.externalCacheSize;
                 }
 
-                // Count code and data for current user
-                if (stats.userHandle == mCurrentUser) {
-                    mDetails.appsSize += codeSize;
-                    mDetails.appsSize += dataSize;
-                }
+                // Count code and data for current user's profiles (keys prepared in constructor)
+                addValueIfKeyExists(mDetails.appsSize, stats.userHandle, codeSize + dataSize);
 
                 // User summary only includes data (code is only counted once
                 // for the current user)
@@ -235,8 +243,9 @@
 
             } else {
                 // Physical storage; only count external sizes
-                mDetails.appsSize += stats.externalCodeSize + stats.externalDataSize
-                        + stats.externalMediaSize + stats.externalObbSize;
+                addValue(mDetails.appsSize, mCurrentUser,
+                        stats.externalCodeSize + stats.externalDataSize
+                        + stats.externalMediaSize + stats.externalObbSize);
                 mDetails.cacheSize += stats.externalCacheSize;
             }
         }
@@ -342,7 +351,8 @@
         final PackageManager packageManager = mContext.getPackageManager();
 
         final List<UserInfo> users = userManager.getUsers();
-        final int currentUser = ActivityManager.getCurrentUser();
+        final List<UserInfo> currentProfiles = userManager.getEnabledProfiles(
+                ActivityManager.getCurrentUser());
 
         final MeasurementDetails details = new MeasurementDetails();
         final Message finished = mMeasurementHandler.obtainMessage(MeasurementHandler.MSG_COMPLETED,
@@ -354,19 +364,24 @@
         }
 
         if (mSharedVolume != null && mSharedVolume.isMountedReadable()) {
-            final File basePath = mSharedVolume.getPathForUser(currentUser);
+            for (UserInfo currentUserInfo : currentProfiles) {
+                final int userId = currentUserInfo.id;
+                final File basePath = mSharedVolume.getPathForUser(userId);
+                HashMap<String, Long> mediaMap = new HashMap<>(sMeasureMediaTypes.size());
+                details.mediaSize.put(userId, mediaMap);
 
-            // Measure media types for emulated storage, or for primary physical
-            // external volume
-            for (String type : sMeasureMediaTypes) {
-                final File path = new File(basePath, type);
-                final long size = getDirectorySize(imcs, path);
-                details.mediaSize.put(type, size);
+                // Measure media types for emulated storage, or for primary physical
+                // external volume
+                for (String type : sMeasureMediaTypes) {
+                    final File path = new File(basePath, type);
+                    final long size = getDirectorySize(imcs, path);
+                    mediaMap.put(type, size);
+                }
+
+                // Measure misc files not counted under media
+                addValue(details.miscSize, userId, measureMisc(imcs, basePath));
             }
 
-            // Measure misc files not counted under media
-            details.miscSize = measureMisc(imcs, basePath);
-
             if (mSharedVolume.getType() == VolumeInfo.TYPE_EMULATED) {
                 // Measure total emulated storage of all users; internal apps data
                 // will be spliced in later
@@ -403,8 +418,8 @@
                 return;
             }
 
-            final StatsObserver observer = new StatsObserver(
-                    true, details, currentUser, finished, count);
+            final StatsObserver observer = new StatsObserver(true, details,
+                    ActivityManager.getCurrentUser(), currentProfiles, finished, count);
             for (UserInfo user : users) {
                 for (ApplicationInfo app : volumeApps) {
                     packageManager.getPackageSizeInfo(app.packageName, user.id, observer);
@@ -452,4 +467,11 @@
     private static void addValue(SparseLongArray array, int key, long value) {
         array.put(key, array.get(key) + value);
     }
+
+    private static void addValueIfKeyExists(SparseLongArray array, int key, long value) {
+        final int index = array.indexOfKey(key);
+        if (index >= 0) {
+            array.put(key, array.valueAt(index) + value);
+        }
+    }
 }
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index ea032b3..b41e1ac 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -52,6 +52,7 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 286aa32..39f7a33 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"Interface du système"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Effacer"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Supprimer de la liste"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informations sur l\'application"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Infos application"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vos écrans récents s\'affichent ici"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Masquer les applications récentes"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -298,7 +298,7 @@
     <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> au maximum"</string>
     <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
     <string name="recents_empty_message" msgid="8682129509540827999">"Vos écrans récents s\'affichent ici"</string>
-    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informations sur l\'application"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Infos application"</string>
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string>
     <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 18018d9..aac76c6 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -244,7 +244,7 @@
     <string name="ethernet_label" msgid="7967563676324087464">"이더넷"</string>
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"알림 일시중지"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"중요 알림만"</string>
-    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"알람만 수신"</string>
+    <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"알람만"</string>
     <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"모두 차단"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"블루투스"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"블루투스(<xliff:g id="NUMBER">%d</xliff:g>개의 기기)"</string>
@@ -326,10 +326,10 @@
     <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"전체 무음입니다. 이렇게 하면 스크린 리더도 무음으로 설정됩니다."</string>
     <string name="interruption_level_none" msgid="6000083681244492992">"모두 차단"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"중요 알림만"</string>
-    <string name="interruption_level_alarms" msgid="5226306993448328896">"알람만 수신"</string>
+    <string name="interruption_level_alarms" msgid="5226306993448328896">"알람만"</string>
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"모두\n차단"</string>
     <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"중요 알림만\n허용"</string>
-    <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"알람만\n수신"</string>
+    <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"알람만\n"</string>
     <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string>
     <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"사용자 전환"</string>
     <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"사용자 전환, 현재 사용자 <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 65e0cd5..67a7418 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -65,8 +65,8 @@
     <string name="usb_debugging_title" msgid="4513918393387141949">"Povoliť ladenie USB?"</string>
     <string name="usb_debugging_message" msgid="2220143855912376496">"Digitálny odtlačok RSA počítača je:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"Vždy povoliť z tohto počítača"</string>
-    <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ladenie USB nie je povolené"</string>
-    <string name="usb_debugging_secondary_user_message" msgid="6011931347142270156">"Používateľ, ktorý je práve prihlásený na tomto zariadení, nemôže zapnúť ladenie USB. Ak chcete použiť túto funkciu, prepnite na hlavného používateľa <xliff:g id="NAME">%s</xliff:g>."</string>
+    <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Ladenie cez USB nie je povolené"</string>
+    <string name="usb_debugging_secondary_user_message" msgid="6011931347142270156">"Používateľ, ktorý je práve prihlásený na tomto zariadení, nemôže zapnúť ladenie cez USB. Ak chcete použiť túto funkciu, prepnite na hlavného používateľa <xliff:g id="NAME">%s</xliff:g>."</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Priblížiť na celú obrazovku"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Na celú obrazovku"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Prebieha ukladanie snímky obrazovky..."</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 0d0ee09..26ebdcf 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -279,7 +279,7 @@
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
     <string name="quick_settings_inversion_label" msgid="8790919884718619648">"I-invert ang mga kulay"</string>
-    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode ng pagtatama ng kulay"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Correction mode ng kulay"</string>
     <string name="quick_settings_more_settings" msgid="326112621462813682">"Marami pang setting"</string>
     <string name="quick_settings_done" msgid="3402999958839153376">"Tapos na"</string>
     <string name="quick_settings_connected" msgid="1722253542984847487">"Nakakonekta"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 618cf09..18aa25c 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -247,7 +247,7 @@
     <string name="quick_settings_dnd_label" msgid="8735855737575028208">"勿扰"</string>
     <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"仅限优先打扰"</string>
     <string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"仅限闹钟"</string>
-    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"完全静音"</string>
+    <string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"完全阻止"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"蓝牙"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"蓝牙(<xliff:g id="NUMBER">%d</xliff:g> 台设备)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"蓝牙:关闭"</string>
@@ -326,7 +326,7 @@
     <string name="voice_hint" msgid="8939888732119726665">"滑动图标即可打开语音助理"</string>
     <string name="camera_hint" msgid="7939688436797157483">"滑动图标即可打开相机"</string>
     <string name="interruption_level_none_with_warning" msgid="5114872171614161084">"完全静音。此模式也会将屏幕阅读器静音。"</string>
-    <string name="interruption_level_none" msgid="6000083681244492992">"完全静音"</string>
+    <string name="interruption_level_none" msgid="6000083681244492992">"完全阻止"</string>
     <string name="interruption_level_priority" msgid="6426766465363855505">"仅限优先打扰"</string>
     <string name="interruption_level_alarms" msgid="5226306993448328896">"仅限闹钟"</string>
     <string name="interruption_level_none_twoline" msgid="3957581548190765889">"完全\n静音"</string>
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 6acd137..9f6d8df 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -38,7 +38,9 @@
 import android.view.SurfaceHolder;
 import android.view.WindowManager;
 
+import java.io.FileDescriptor;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.FloatBuffer;
@@ -147,6 +149,10 @@
         private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0;
         private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
 
+        private int mRotationAtLastSurfaceSizeUpdate = -1;
+        private int mDisplayWidthAtLastSurfaceSizeUpdate = -1;
+        private int mDisplayHeightAtLastSurfaceSizeUpdate = -1;
+
         public DrawableEngine() {
             super();
             setFixedSizeAllowed(true);
@@ -315,6 +321,9 @@
                 if (newRotation != mLastRotation) {
                     // Update surface size (if necessary)
                     updateSurfaceSize(getSurfaceHolder(), displayInfo);
+                    mRotationAtLastSurfaceSizeUpdate = newRotation;
+                    mDisplayWidthAtLastSurfaceSizeUpdate = displayInfo.logicalWidth;
+                    mDisplayHeightAtLastSurfaceSizeUpdate = displayInfo.logicalHeight;
                 }
                 SurfaceHolder sh = getSurfaceHolder();
                 final Rect frame = sh.getSurfaceFrame();
@@ -449,6 +458,37 @@
             }
         }
 
+        @Override
+        protected void dump(String prefix, FileDescriptor fd, PrintWriter out, String[] args) {
+            super.dump(prefix, fd, out, args);
+
+            out.print(prefix); out.println("ImageWallpaper.DrawableEngine:");
+            out.print(prefix); out.print(" mBackground="); out.print(mBackground);
+            out.print(" mBackgroundWidth="); out.print(mBackgroundWidth);
+            out.print(" mBackgroundHeight="); out.println(mBackgroundHeight);
+
+            out.print(prefix); out.print(" mLastRotation="); out.print(mLastRotation);
+            out.print(" mLastSurfaceWidth="); out.print(mLastSurfaceWidth);
+            out.print(" mLastSurfaceHeight="); out.println(mLastSurfaceHeight);
+
+            out.print(prefix); out.print(" mXOffset="); out.print(mXOffset);
+            out.print(" mYOffset="); out.println(mYOffset);
+
+            out.print(prefix); out.print(" mVisible="); out.print(mVisible);
+            out.print(" mRedrawNeeded="); out.print(mRedrawNeeded);
+            out.print(" mOffsetsChanged="); out.println(mOffsetsChanged);
+
+            out.print(prefix); out.print(" mLastXTranslation="); out.print(mLastXTranslation);
+            out.print(" mLastYTranslation="); out.print(mLastYTranslation);
+            out.print(" mScale="); out.println(mScale);
+
+            out.print(prefix); out.println(" DisplayInfo at last updateSurfaceSize:");
+            out.print(prefix);
+            out.print("  rotation="); out.print(mRotationAtLastSurfaceSizeUpdate);
+            out.print("  width="); out.print(mDisplayWidthAtLastSurfaceSizeUpdate);
+            out.print("  height="); out.println(mDisplayHeightAtLastSurfaceSizeUpdate);
+        }
+
         private void drawWallpaperWithCanvas(SurfaceHolder sh, int w, int h, int left, int top) {
             Canvas c = sh.lockCanvas();
             if (c != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index 51d0bf1..0daa5c9 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -30,6 +30,7 @@
 import com.android.internal.app.AssistUtils;
 import com.android.internal.app.IVoiceInteractionSessionShowCallback;
 import com.android.systemui.R;
+import com.android.systemui.statusbar.BaseStatusBar;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.phone.PhoneStatusBar;
 
@@ -45,11 +46,6 @@
     private static final String ASSIST_ICON_METADATA_NAME =
             "com.android.systemui.action_assist_icon";
 
-    private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder()
-            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
-            .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
-            .build();
-
     private static final long TIMEOUT_SERVICE = 2500;
     private static final long TIMEOUT_ACTIVITY = 1000;
 
@@ -58,7 +54,7 @@
     private final AssistDisclosure mAssistDisclosure;
 
     private AssistOrbContainer mView;
-    private final PhoneStatusBar mBar;
+    private final BaseStatusBar mBar;
     private final AssistUtils mAssistUtils;
 
     private ComponentName mAssistComponent;
@@ -92,7 +88,7 @@
         }
     };
 
-    public AssistManager(PhoneStatusBar bar, Context context) {
+    public AssistManager(BaseStatusBar bar, Context context) {
         mContext = context;
         mBar = bar;
         mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
@@ -125,7 +121,8 @@
         }
     }
 
-    public void onGestureInvoked() {
+    public void startAssist(Bundle args) {
+        updateAssistInfo();
         if (mAssistComponent == null) {
             return;
         }
@@ -137,7 +134,7 @@
                     ? TIMEOUT_SERVICE
                     : TIMEOUT_ACTIVITY);
         }
-        startAssist();
+        startAssistInternal(args);
     }
 
     public void hideAssist() {
@@ -168,17 +165,17 @@
         mView.show(true /* show */, true /* animate */);
     }
 
-    private void startAssist() {
+    private void startAssistInternal(Bundle args) {
         if (mAssistComponent != null) {
             if (isAssistantService()) {
-                startVoiceInteractor();
+                startVoiceInteractor(args);
             } else {
-                startAssistActivity();
+                startAssistActivity(args);
             }
         }
     }
 
-    private void startAssistActivity() {
+    private void startAssistActivity(Bundle args) {
         if (!mBar.isDeviceProvisioned()) {
             return;
         }
@@ -191,13 +188,14 @@
                 Settings.Secure.ASSIST_STRUCTURE_ENABLED, 1, UserHandle.USER_CURRENT) != 0;
 
         final Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .getAssistIntent(mContext, structureEnabled, UserHandle.USER_CURRENT);
+                .getAssistIntent(structureEnabled);
         if (intent == null) {
             return;
         }
         if (mAssistComponent != null) {
             intent.setComponent(mAssistComponent);
         }
+        intent.putExtras(args);
 
         if (structureEnabled) {
             showDisclosure();
@@ -219,8 +217,8 @@
         }
     }
 
-    private void startVoiceInteractor() {
-        mAssistUtils.showSessionForActiveService(mShowCallback);
+    private void startVoiceInteractor(Bundle args) {
+        mAssistUtils.showSessionForActiveService(args, mShowCallback);
     }
 
     public void launchVoiceAssistFromKeyguard() {
@@ -304,8 +302,4 @@
     public void onUserSwitched(int newUserId) {
         updateAssistInfo();
     }
-
-    public void prepareBeforeInvocation() {
-        updateAssistInfo();
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
index c33ef7c..3bfff2f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -144,7 +144,7 @@
             state.label = removeDoubleQuotes(cb.enabledDesc);
             signalContentDescription = cb.wifiSignalContentDescription;
         } else if (wifiNotConnected) {
-            state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_0);
+            state.icon = ResourceIcon.get(R.drawable.ic_qs_wifi_full_0);
             state.label = r.getString(R.string.quick_settings_wifi_label);
             signalContentDescription = r.getString(R.string.accessibility_no_wifi);
         } else {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index b60c66f..17db471 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -52,6 +52,7 @@
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.provider.Settings;
 import android.util.Log;
 import android.util.MutableBoolean;
@@ -62,6 +63,8 @@
 import android.view.SurfaceControl;
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityManager;
+
+import com.android.internal.app.AssistUtils;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.recents.Constants;
@@ -89,7 +92,7 @@
     AppWidgetManager mAwm;
     PackageManager mPm;
     IPackageManager mIpm;
-    SearchManager mSm;
+    AssistUtils mAssistUtils;
     WindowManager mWm;
     Display mDisplay;
     String mRecentsPackage;
@@ -114,7 +117,7 @@
         mAwm = AppWidgetManager.getInstance(context);
         mPm = context.getPackageManager();
         mIpm = AppGlobals.getPackageManager();
-        mSm = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
+        mAssistUtils = new AssistUtils(context);
         mWm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
         mDisplay = mWm.getDefaultDisplay();
         mRecentsPackage = context.getPackageName();
@@ -133,10 +136,7 @@
         mBgProtectionCanvas = new Canvas();
 
         // Resolve the assist intent
-        Intent assist = mSm.getAssistIntent(context, false);
-        if (assist != null) {
-            mAssistComponent = assist.getComponent();
-        }
+        mAssistComponent = mAssistUtils.getAssistComponentForUser(UserHandle.myUserId());
 
         if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
             // Create a dummy icon
@@ -580,6 +580,7 @@
      * Returns the first Recents widget from the same package as the global assist activity.
      */
     private AppWidgetProviderInfo resolveSearchAppWidget() {
+        if (mAssistComponent == null) return null;
         List<AppWidgetProviderInfo> widgets = mAwm.getInstalledProviders(
                 AppWidgetProviderInfo.WIDGET_CATEGORY_SEARCHBOX);
         for (AppWidgetProviderInfo info : widgets) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 6ad0ef9..f62dc59 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -41,9 +41,9 @@
 import android.database.ContentObserver;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
 import android.os.AsyncTask;
 import android.os.Build;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
@@ -65,7 +65,6 @@
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.view.Display;
-import android.view.Gravity;
 import android.view.IWindowManager;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -2125,4 +2124,11 @@
             mAssistManager.showDisclosure();
         }
     }
+
+    @Override
+    public void startAssist(Bundle args) {
+        if (mAssistManager != null) {
+            mAssistManager.startAssist(args);
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 0deff08..a1b07b5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.statusbar;
 
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
@@ -62,6 +63,7 @@
     private static final int MSG_APP_TRANSITION_CANCELLED   = 20 << MSG_SHIFT;
     private static final int MSG_APP_TRANSITION_STARTING    = 21 << MSG_SHIFT;
     private static final int MSG_ASSIST_DISCLOSURE          = 22 << MSG_SHIFT;
+    private static final int MSG_START_ASSIST               = 23 << MSG_SHIFT;
 
     public static final int FLAG_EXCLUDE_NONE = 0;
     public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
@@ -106,6 +108,7 @@
         public void appTransitionCancelled();
         public void appTransitionStarting(long startTime, long duration);
         public void showAssistDisclosure();
+        public void startAssist(Bundle args);
     }
 
     public CommandQueue(Callbacks callbacks, StatusBarIconList list) {
@@ -283,6 +286,13 @@
         }
     }
 
+    public void startAssist(Bundle args) {
+        synchronized (mList) {
+            mHandler.removeMessages(MSG_START_ASSIST);
+            mHandler.obtainMessage(MSG_START_ASSIST, args).sendToTarget();
+        }
+    }
+
     private final class H extends Handler {
         public void handleMessage(Message msg) {
             final int what = msg.what & MSG_MASK;
@@ -378,6 +388,9 @@
                 case MSG_ASSIST_DISCLOSURE:
                     mCallbacks.showAssistDisclosure();
                     break;
+                case MSG_START_ASSIST:
+                    mCallbacks.startAssist((Bundle) msg.obj);
+                    break;
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
index 08a6603..ccec759 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
@@ -44,6 +44,7 @@
     private int mClipTopOptimization;
     private static Rect mClipRect = new Rect();
     private boolean mWillBeGone;
+    private int mMinClipTopAmount = 0;
 
     public ExpandableView(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -400,6 +401,14 @@
         mWillBeGone = willBeGone;
     }
 
+    public int getMinClipTopAmount() {
+        return mMinClipTopAmount;
+    }
+
+    public void setMinClipTopAmount(int minClipTopAmount) {
+        mMinClipTopAmount = minClipTopAmount;
+    }
+
     /**
      * A listener notifying when {@link #getActualHeight} changes.
      */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
index 7072dcb..950b162 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
@@ -25,8 +25,6 @@
 
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * A class to handle notifications and their corresponding groups.
@@ -143,7 +141,7 @@
             return true;
         }
         NotificationGroup group = mGroupMap.get(sbn.getGroupKey());
-        if (group != null && group.expanded) {
+        if (group != null && (group.expanded || group.summary == null)) {
             return true;
         }
         return false;
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 20f4dc7..bda1374 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -81,7 +81,6 @@
 import android.view.ThreadedRenderer;
 import android.view.VelocityTracker;
 import android.view.View;
-import android.view.ViewConfiguration;
 import android.view.ViewGroup.LayoutParams;
 import android.view.ViewStub;
 import android.view.WindowManager;
@@ -106,7 +105,6 @@
 import com.android.systemui.EventLogTags;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
-import com.android.systemui.SwipeHelper;
 import com.android.systemui.assist.AssistManager;
 import com.android.systemui.doze.DozeHost;
 import com.android.systemui.doze.DozeLog;
@@ -943,6 +941,7 @@
         addPostCollapseAction(new Runnable() {
             @Override
             public void run() {
+                mStackScroller.setDismissAllInProgress(false);
                 try {
                     mBarService.onClearAllNotifications(mCurrentUserId);
                 } catch (Exception ex) { }
@@ -957,12 +956,6 @@
         Runnable animationFinishAction = new Runnable() {
             @Override
             public void run() {
-                mStackScroller.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        mStackScroller.setDismissAllInProgress(false);
-                    }
-                });
                 animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
             }
         };
@@ -1045,8 +1038,7 @@
             if (shouldDisableNavbarGestures()) {
                 return false;
             }
-            mAssistManager.prepareBeforeInvocation();
-            mAssistManager.onGestureInvoked();
+            mAssistManager.startAssist(new Bundle() /* args */);
             awakenDreams();
             if (mNavigationBarView != null) {
                 mNavigationBarView.abortCurrentGesture();
@@ -2145,11 +2137,13 @@
     }
 
     private void runPostCollapseRunnables() {
-        int size = mPostCollapseRunnables.size();
-        for (int i = 0; i < size; i++) {
-            mPostCollapseRunnables.get(i).run();
-        }
+        ArrayList<Runnable> clonedList = new ArrayList<>(mPostCollapseRunnables);
         mPostCollapseRunnables.clear();
+        int size = clonedList.size();
+        for (int i = 0; i < size; i++) {
+            clonedList.get(i).run();
+        }
+
     }
 
     Animator mScrollViewAnim, mClearButtonAnim;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
index b1c650e..82224d4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -191,7 +191,7 @@
         } else {
             mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE, TelephonyIcons.LTE);
         }
-        mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_IWLAN, TelephonyIcons.FOUR_G);
+        mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_IWLAN, TelephonyIcons.WFC);
     }
 
     @Override
@@ -223,7 +223,8 @@
         boolean activityOut = mCurrentState.dataConnected
                         && !mCurrentState.carrierNetworkChangeMode
                         && mCurrentState.activityOut;
-        showDataIcon &= mCurrentState.isDefault;
+        showDataIcon &= mCurrentState.isDefault
+                || mCurrentState.iconGroup == TelephonyIcons.ROAMING;
         int typeIcon = showDataIcon ? icons.mDataType : 0;
         mCallbackHandler.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon,
                 activityIn, activityOut, dataContentDescription, description, icons.mIsWide,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
index 8a27653..83e0446 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
@@ -245,6 +245,18 @@
             TelephonyIcons.QS_DATA_3G
             );
 
+    static final MobileIconGroup WFC = new MobileIconGroup(
+            "WFC",
+            TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH,
+            TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH,
+            AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH,
+            0, 0,
+            TelephonyIcons.TELEPHONY_NO_NETWORK,
+            TelephonyIcons.QS_TELEPHONY_NO_NETWORK,
+            AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0],
+            0, 0, false, 0
+            );
+
     static final MobileIconGroup UNKNOWN = new MobileIconGroup(
             "Unknown",
             TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
index 4a7ea96..3a97be6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/AmbientState.java
@@ -43,6 +43,7 @@
     private int mTopPadding;
     private boolean mShadeExpanded;
     private float mMaxHeadsUpTranslation;
+    private boolean mDismissAllInProgress;
 
     public int getScrollY() {
         return mScrollY;
@@ -183,4 +184,12 @@
         HeadsUpManager.HeadsUpEntry topEntry = mHeadsUpManager.getTopEntry();
         return topEntry == null ? null : topEntry.entry.row;
     }
+
+    public void setDismissAllInProgress(boolean dismissAllInProgress) {
+        mDismissAllInProgress = dismissAllInProgress;
+    }
+
+    public boolean isDismissAllInProgress() {
+        return mDismissAllInProgress;
+    }
 }
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 bde07de..0d89b21 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -773,8 +773,7 @@
     }
 
     public boolean canChildBeDismissed(View v) {
-        final View veto = v.findViewById(R.id.veto);
-        return (veto != null && veto.getVisibility() != View.GONE);
+        return StackScrollAlgorithm.canChildBeDismissed(v);
     }
 
     @Override
@@ -2610,9 +2609,28 @@
     public void setDismissAllInProgress(boolean dismissAllInProgress) {
         mDismissAllInProgress = dismissAllInProgress;
         mDismissView.setDismissAllInProgress(dismissAllInProgress);
+        mAmbientState.setDismissAllInProgress(dismissAllInProgress);
         if (dismissAllInProgress) {
             disableClipOptimization();
         }
+        handleDismissAllClipping();
+    }
+
+    private void handleDismissAllClipping() {
+        final int count = getChildCount();
+        boolean previousChildWillBeDismissed = false;
+        for (int i = 0; i < count; i++) {
+            ExpandableView child = (ExpandableView) getChildAt(i);
+            if (child.getVisibility() == GONE) {
+                continue;
+            }
+            if (mDismissAllInProgress && previousChildWillBeDismissed) {
+                child.setMinClipTopAmount(child.getClipTopAmount());
+            } else {
+                child.setMinClipTopAmount(0);
+            }
+            previousChildWillBeDismissed = canChildBeDismissed(child);
+        }
     }
 
     private void disableClipOptimization() {
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 5c604b6..5d2e5b7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -202,6 +202,7 @@
 
     private void updateClipping(StackScrollState resultState,
             StackScrollAlgorithmState algorithmState, AmbientState ambientState) {
+        boolean dismissAllInProgress = ambientState.isDismissAllInProgress();
         float previousNotificationEnd = 0;
         float previousNotificationStart = 0;
         boolean previousNotificationIsSwiped = false;
@@ -237,16 +238,29 @@
             updateChildClippingAndBackground(state, newHeight, clipHeight,
                     newHeight - (previousNotificationStart - newYTranslation));
 
+            if (dismissAllInProgress) {
+                state.clipTopAmount = Math.max(child.getMinClipTopAmount(), state.clipTopAmount);
+            }
+
             if (!child.isTransparent()) {
                 // Only update the previous values if we are not transparent,
                 // otherwise we would clip to a transparent view.
-                previousNotificationStart = newYTranslation + state.clipTopAmount * state.scale;
-                previousNotificationEnd = newNotificationEnd;
-                previousNotificationIsSwiped = ambientState.getDraggedViews().contains(child);
+                if ((dismissAllInProgress && canChildBeDismissed(child))) {
+                    previousNotificationIsSwiped = true;
+                } else {
+                    previousNotificationIsSwiped = ambientState.getDraggedViews().contains(child);
+                    previousNotificationEnd = newNotificationEnd;
+                    previousNotificationStart = newYTranslation + state.clipTopAmount * state.scale;
+                }
             }
         }
     }
 
+    public static boolean canChildBeDismissed(View v) {
+        final View veto = v.findViewById(R.id.veto);
+        return (veto != null && veto.getVisibility() != View.GONE);
+    }
+
     /**
      * Updates the shadow outline and the clipping for a view.
      *
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
index a4ccfd1..7836411 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
@@ -157,6 +157,7 @@
         lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
         lp.y = res.getDimensionPixelSize(R.dimen.volume_offset_top);
         lp.gravity = Gravity.TOP;
+        lp.windowAnimations = -1;
         window.setAttributes(lp);
         window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
 
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java
index 4bb1011..8144ea4 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogMotion.java
@@ -36,7 +36,6 @@
 
     private static final float ANIMATION_SCALE = 1.0f;
     private static final int PRE_DISMISS_DELAY = 50;
-    private static final int POST_SHOW_DELAY = 200;
 
     private final Dialog mDialog;
     private final View mDialogView;
@@ -70,12 +69,7 @@
                 if (D.BUG) Log.d(TAG, "mDialog.onShow");
                 final int h = mDialogView.getHeight();
                 mDialogView.setTranslationY(-h);
-                mHandler.postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        startShowAnimation();
-                    }
-                }, POST_SHOW_DELAY);
+                startShowAnimation();
             }
         });
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
index e60e0a6..360562c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
@@ -71,6 +71,14 @@
                 TelephonyIcons.QS_DATA_H);
     }
 
+    public void testWfcNoDataIcon() {
+        setupDefaultSignal();
+        updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
+                TelephonyManager.NETWORK_TYPE_IWLAN);
+
+        verifyDataIndicators(0, 0);
+    }
+
     public void test4gDataIcon() {
         // Switch to showing 4g icon and re-initialize the NetworkController.
         mConfig.show4gForLte = true;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
index 168aebe..52dea40 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
@@ -127,6 +127,7 @@
         for (int testStrength = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
                 testStrength <= SignalStrength.SIGNAL_STRENGTH_GREAT; testStrength++) {
             setupDefaultSignal();
+            setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
             setGsmRoaming(true);
             setLevel(testStrength);
 
diff --git a/packages/VpnDialogs/res/layout/confirm.xml b/packages/VpnDialogs/res/layout/confirm.xml
index 66fec59..b245a10 100644
--- a/packages/VpnDialogs/res/layout/confirm.xml
+++ b/packages/VpnDialogs/res/layout/confirm.xml
@@ -22,8 +22,8 @@
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp"
-            android:paddingTop="4mm"
-            android:paddingLeft="3mm"
-            android:paddingRight="3mm"
-            android:paddingBottom="4mm"/>
+            android:paddingTop="16dp"
+            android:paddingLeft="24dp"
+            android:paddingRight="24dp"
+            android:paddingBottom="8dp"/>
 </ScrollView>
diff --git a/packages/VpnDialogs/res/layout/manage.xml b/packages/VpnDialogs/res/layout/manage.xml
index 6b504e4..d0b14b3 100644
--- a/packages/VpnDialogs/res/layout/manage.xml
+++ b/packages/VpnDialogs/res/layout/manage.xml
@@ -18,7 +18,7 @@
 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:padding="3mm"
+        android:padding="24dp"
         android:stretchColumns="0,1"
         android:shrinkColumns="1">
 
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 7f124dc..8ca075f 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -493,10 +493,10 @@
             }
         }
 
-        private void maybeLogBroadcast(NetworkAgentInfo nai, boolean connected, int type,
+        private void maybeLogBroadcast(NetworkAgentInfo nai, DetailedState state, int type,
                 boolean isDefaultNetwork) {
             if (DBG) {
-                log("Sending " + (connected ? "connected" : "disconnected") +
+                log("Sending " + state +
                         " broadcast for type " + type + " " + nai.name() +
                         " isDefaultNetwork=" + isDefaultNetwork);
             }
@@ -520,8 +520,8 @@
             // Send a broadcast if this is the first network of its type or if it's the default.
             final boolean isDefaultNetwork = isDefaultNetwork(nai);
             if (list.size() == 1 || isDefaultNetwork) {
-                maybeLogBroadcast(nai, true, type, isDefaultNetwork);
-                sendLegacyNetworkBroadcast(nai, true, type);
+                maybeLogBroadcast(nai, DetailedState.CONNECTED, type, isDefaultNetwork);
+                sendLegacyNetworkBroadcast(nai, DetailedState.CONNECTED, type);
             }
         }
 
@@ -538,17 +538,19 @@
                 return;
             }
 
+            final DetailedState state = DetailedState.DISCONNECTED;
+
             if (wasFirstNetwork || wasDefault) {
-                maybeLogBroadcast(nai, false, type, wasDefault);
-                sendLegacyNetworkBroadcast(nai, false, type);
+                maybeLogBroadcast(nai, state, type, wasDefault);
+                sendLegacyNetworkBroadcast(nai, state, type);
             }
 
             if (!list.isEmpty() && wasFirstNetwork) {
                 if (DBG) log("Other network available for type " + type +
                               ", sending connected broadcast");
                 final NetworkAgentInfo replacement = list.get(0);
-                maybeLogBroadcast(replacement, false, type, isDefaultNetwork(replacement));
-                sendLegacyNetworkBroadcast(replacement, false, type);
+                maybeLogBroadcast(replacement, state, type, isDefaultNetwork(replacement));
+                sendLegacyNetworkBroadcast(replacement, state, type);
             }
         }
 
@@ -560,6 +562,21 @@
             }
         }
 
+        // send out another legacy broadcast - currently only used for suspend/unsuspend
+        // toggle
+        public void update(NetworkAgentInfo nai) {
+            final boolean isDefault = isDefaultNetwork(nai);
+            final DetailedState state = nai.networkInfo.getDetailedState();
+            for (int type = 0; type < mTypeLists.length; type++) {
+                final ArrayList<NetworkAgentInfo> list = mTypeLists[type];
+                final boolean isFirst = (list != null && list.size() > 0 && nai == list.get(0));
+                if (isFirst || isDefault) {
+                    maybeLogBroadcast(nai, state, type, isDefault);
+                    sendLegacyNetworkBroadcast(nai, state, type);
+                }
+            }
+        }
+
         private String naiToString(NetworkAgentInfo nai) {
             String name = (nai != null) ? nai.name() : "null";
             String state = (nai.networkInfo != null) ?
@@ -4502,6 +4519,7 @@
     private void updateNetworkInfo(NetworkAgentInfo networkAgent, NetworkInfo newInfo) {
         NetworkInfo.State state = newInfo.getState();
         NetworkInfo oldInfo = null;
+        final int oldScore = networkAgent.getCurrentScore();
         synchronized (networkAgent) {
             oldInfo = networkAgent.networkInfo;
             networkAgent.networkInfo = newInfo;
@@ -4560,8 +4578,7 @@
 
             // This has to happen after matching the requests, because callbacks are just requests.
             notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_PRECHECK);
-        } else if (state == NetworkInfo.State.DISCONNECTED ||
-                state == NetworkInfo.State.SUSPENDED) {
+        } else if (state == NetworkInfo.State.DISCONNECTED) {
             networkAgent.asyncChannel.disconnect();
             if (networkAgent.isVPN()) {
                 synchronized (mProxyLock) {
@@ -4573,6 +4590,17 @@
                     }
                 }
             }
+        } else if ((oldInfo != null && oldInfo.getState() == NetworkInfo.State.SUSPENDED) ||
+                state == NetworkInfo.State.SUSPENDED) {
+            // going into or coming out of SUSPEND: rescore and notify
+            if (networkAgent.getCurrentScore() != oldScore) {
+                rematchAllNetworksAndRequests(networkAgent, oldScore,
+                        NascentState.NOT_JUST_VALIDATED);
+            }
+            notifyNetworkCallbacks(networkAgent, (state == NetworkInfo.State.SUSPENDED ?
+                    ConnectivityManager.CALLBACK_SUSPENDED :
+                    ConnectivityManager.CALLBACK_RESUMED));
+            mLegacyTypeTracker.update(networkAgent);
         }
     }
 
@@ -4608,7 +4636,7 @@
         }
     }
 
-    private void sendLegacyNetworkBroadcast(NetworkAgentInfo nai, boolean connected, int type) {
+    private void sendLegacyNetworkBroadcast(NetworkAgentInfo nai, DetailedState state, int type) {
         // The NetworkInfo we actually send out has no bearing on the real
         // state of affairs. For example, if the default connection is mobile,
         // and a request for HIPRI has just gone away, we need to pretend that
@@ -4617,11 +4645,11 @@
         // and is still connected.
         NetworkInfo info = new NetworkInfo(nai.networkInfo);
         info.setType(type);
-        if (connected) {
-            info.setDetailedState(DetailedState.CONNECTED, null, info.getExtraInfo());
+        if (state != DetailedState.DISCONNECTED) {
+            info.setDetailedState(state, null, info.getExtraInfo());
             sendConnectedBroadcast(info);
         } else {
-            info.setDetailedState(DetailedState.DISCONNECTED, info.getReason(), info.getExtraInfo());
+            info.setDetailedState(state, info.getReason(), info.getExtraInfo());
             Intent intent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
             intent.putExtra(ConnectivityManager.EXTRA_NETWORK_INFO, info);
             intent.putExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, info.getType());
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index 894f513..da552dd 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -31,6 +31,7 @@
 import android.annotation.Nullable;
 import android.app.ActivityManagerNative;
 import android.app.AppOpsManager;
+import android.app.IActivityManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -39,10 +40,10 @@
 import android.content.ServiceConnection;
 import android.content.pm.IPackageMoveObserver;
 import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
 import android.content.pm.UserInfo;
 import android.content.res.Configuration;
 import android.content.res.ObbInfo;
-import android.mtp.MtpStorage;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.DropBoxManager;
@@ -53,12 +54,12 @@
 import android.os.HandlerThread;
 import android.os.IBinder;
 import android.os.Looper;
-import android.os.Looper;
 import android.os.Message;
 import android.os.Process;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -73,6 +74,7 @@
 import android.os.storage.StorageVolume;
 import android.os.storage.VolumeInfo;
 import android.os.storage.VolumeRecord;
+import android.provider.MediaStore;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
@@ -127,6 +129,7 @@
 import java.util.Objects;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 import javax.crypto.SecretKey;
 import javax.crypto.SecretKeyFactory;
@@ -176,7 +179,6 @@
         }
     }
 
-    private static final boolean LOCAL_LOGD = false;
     private static final boolean DEBUG_EVENTS = false;
     private static final boolean DEBUG_OBB = false;
 
@@ -402,16 +404,6 @@
         }
     }
 
-    private static int sNextMtpIndex = 1;
-
-    private static int allocateMtpIndex(String volId) {
-        if (VolumeInfo.ID_EMULATED_INTERNAL.equals(volId)) {
-            return 0;
-        } else {
-            return sNextMtpIndex++;
-        }
-    }
-
     /** List of crypto types.
       * These must match CRYPT_TYPE_XXX in cryptfs.h AND their
       * corresponding commands in CommandListener.cpp */
@@ -702,6 +694,15 @@
     }
 
     private void waitForLatch(CountDownLatch latch, String condition) {
+        try {
+            waitForLatch(latch, condition, -1);
+        } catch (TimeoutException ignored) {
+        }
+    }
+
+    private void waitForLatch(CountDownLatch latch, String condition, long timeoutMillis)
+            throws TimeoutException {
+        final long startMillis = SystemClock.elapsedRealtime();
         while (true) {
             try {
                 if (latch.await(5000, TimeUnit.MILLISECONDS)) {
@@ -713,6 +714,10 @@
             } catch (InterruptedException e) {
                 Slog.w(TAG, "Interrupt while waiting for " + condition);
             }
+            if (timeoutMillis > 0 && SystemClock.elapsedRealtime() > startMillis + timeoutMillis) {
+                throw new TimeoutException("Thread " + Thread.currentThread().getName()
+                        + " gave up waiting for " + condition + " after " + timeoutMillis + "ms");
+            }
         }
     }
 
@@ -733,16 +738,36 @@
         MountServiceIdler.scheduleIdlePass(mContext);
     }
 
+    /**
+     * MediaProvider has a ton of code that makes assumptions about storage
+     * paths never changing, so we outright kill them to pick up new state.
+     */
+    @Deprecated
+    private void killMediaProvider() {
+        final ProviderInfo provider = mPms.resolveContentProvider(MediaStore.AUTHORITY, 0,
+                UserHandle.USER_OWNER);
+        if (provider != null) {
+            final IActivityManager am = ActivityManagerNative.getDefault();
+            try {
+                am.killApplicationWithAppId(provider.applicationInfo.packageName,
+                        UserHandle.getAppId(provider.applicationInfo.uid), "vold reset");
+            } catch (RemoteException e) {
+            }
+        }
+    }
+
     private void resetIfReadyAndConnectedLocked() {
         Slog.d(TAG, "Thinking about reset, mSystemReady=" + mSystemReady
                 + ", mDaemonConnected=" + mDaemonConnected);
         if (mSystemReady && mDaemonConnected) {
+            killMediaProvider();
+
             mDisks.clear();
             mVolumes.clear();
 
             // Create a stub volume that represents internal storage
             final VolumeInfo internal = new VolumeInfo(VolumeInfo.ID_PRIVATE_INTERNAL,
-                    VolumeInfo.TYPE_PRIVATE, null, null, 0);
+                    VolumeInfo.TYPE_PRIVATE, null, null);
             internal.state = VolumeInfo.STATE_MOUNTED;
             internal.path = Environment.getDataDirectory().getAbsolutePath();
             mVolumes.put(internal.id, internal);
@@ -967,8 +992,7 @@
                 final String partGuid = TextUtils.nullIfEmpty(cooked[4]);
 
                 final DiskInfo disk = mDisks.get(diskId);
-                final int mtpIndex = allocateMtpIndex(id);
-                final VolumeInfo vol = new VolumeInfo(id, type, disk, partGuid, mtpIndex);
+                final VolumeInfo vol = new VolumeInfo(id, type, disk, partGuid);
                 mVolumes.put(id, vol);
                 onVolumeCreatedLocked(vol);
                 break;
@@ -1617,7 +1641,9 @@
         waitForReady();
 
         try {
-            final NativeDaemonEvent res = mConnector.execute("volume", "benchmark", volId);
+            // TODO: make benchmark async so we don't block other commands
+            final NativeDaemonEvent res = mConnector.execute(3 * DateUtils.MINUTE_IN_MILLIS,
+                    "volume", "benchmark", volId);
             return Long.parseLong(res.getMessage());
         } catch (NativeDaemonTimeoutException e) {
             return Long.MAX_VALUE;
@@ -1634,10 +1660,12 @@
         final CountDownLatch latch = findOrCreateDiskScanLatch(diskId);
         try {
             mConnector.execute("volume", "partition", diskId, "public");
+            waitForLatch(latch, "partitionPublic", 3 * DateUtils.MINUTE_IN_MILLIS);
         } catch (NativeDaemonConnectorException e) {
             throw e.rethrowAsParcelableException();
+        } catch (TimeoutException e) {
+            throw new IllegalStateException(e);
         }
-        waitForLatch(latch, "partitionPublic");
     }
 
     @Override
@@ -1649,10 +1677,12 @@
         final CountDownLatch latch = findOrCreateDiskScanLatch(diskId);
         try {
             mConnector.execute("volume", "partition", diskId, "private");
+            waitForLatch(latch, "partitionPrivate", 3 * DateUtils.MINUTE_IN_MILLIS);
         } catch (NativeDaemonConnectorException e) {
             throw e.rethrowAsParcelableException();
+        } catch (TimeoutException e) {
+            throw new IllegalStateException(e);
         }
-        waitForLatch(latch, "partitionPrivate");
     }
 
     @Override
@@ -1664,10 +1694,12 @@
         final CountDownLatch latch = findOrCreateDiskScanLatch(diskId);
         try {
             mConnector.execute("volume", "partition", diskId, "mixed", ratio);
+            waitForLatch(latch, "partitionMixed", 3 * DateUtils.MINUTE_IN_MILLIS);
         } catch (NativeDaemonConnectorException e) {
             throw e.rethrowAsParcelableException();
+        } catch (TimeoutException e) {
+            throw new IllegalStateException(e);
         }
-        waitForLatch(latch, "partitionMixed");
     }
 
     @Override
@@ -2604,7 +2636,7 @@
             final String uuid = null;
             final String state = Environment.MEDIA_REMOVED;
 
-            res.add(0, new StorageVolume(id, MtpStorage.getStorageIdForIndex(0), path,
+            res.add(0, new StorageVolume(id, StorageVolume.STORAGE_ID_INVALID, path,
                     description, primary, removable, emulated, mtpReserveSize,
                     allowMassStorage, maxFileSize, owner, uuid, state));
         }
diff --git a/services/core/java/com/android/server/NativeDaemonConnector.java b/services/core/java/com/android/server/NativeDaemonConnector.java
index e7979e4..519a2a3 100644
--- a/services/core/java/com/android/server/NativeDaemonConnector.java
+++ b/services/core/java/com/android/server/NativeDaemonConnector.java
@@ -69,7 +69,7 @@
 
     private AtomicInteger mSequenceNumber;
 
-    private static final int DEFAULT_TIMEOUT = 1 * 60 * 1000; /* 1 minute */
+    private static final long DEFAULT_TIMEOUT = 1 * 60 * 1000; /* 1 minute */
     private static final long WARN_EXECUTE_DELAY_MS = 500; /* .5 sec */
 
     /** Lock held whenever communicating with native daemon. */
@@ -337,7 +337,12 @@
      */
     public NativeDaemonEvent execute(String cmd, Object... args)
             throws NativeDaemonConnectorException {
-        final NativeDaemonEvent[] events = executeForList(cmd, args);
+        return execute(DEFAULT_TIMEOUT, cmd, args);
+    }
+
+    public NativeDaemonEvent execute(long timeoutMs, String cmd, Object... args)
+            throws NativeDaemonConnectorException {
+        final NativeDaemonEvent[] events = executeForList(timeoutMs, cmd, args);
         if (events.length != 1) {
             throw new NativeDaemonConnectorException(
                     "Expected exactly one response, but received " + events.length);
@@ -372,7 +377,7 @@
      */
     public NativeDaemonEvent[] executeForList(String cmd, Object... args)
             throws NativeDaemonConnectorException {
-            return execute(DEFAULT_TIMEOUT, cmd, args);
+        return executeForList(DEFAULT_TIMEOUT, cmd, args);
     }
 
     /**
@@ -387,7 +392,7 @@
      *             {@link NativeDaemonEvent#isClassClientError()} or
      *             {@link NativeDaemonEvent#isClassServerError()}.
      */
-    public NativeDaemonEvent[] execute(int timeout, String cmd, Object... args)
+    public NativeDaemonEvent[] executeForList(long timeoutMs, String cmd, Object... args)
             throws NativeDaemonConnectorException {
         final long startTime = SystemClock.elapsedRealtime();
 
@@ -418,7 +423,7 @@
 
         NativeDaemonEvent event = null;
         do {
-            event = mResponseQueue.remove(sequenceNumber, timeout, logCmd);
+            event = mResponseQueue.remove(sequenceNumber, timeoutMs, logCmd);
             if (event == null) {
                 loge("timed-out waiting for response to " + logCmd);
                 throw new NativeDaemonTimeoutException(logCmd, event);
@@ -606,7 +611,7 @@
 
         // note that the timeout does not count time in deep sleep.  If you don't want
         // the device to sleep, hold a wakelock
-        public NativeDaemonEvent remove(int cmdNum, int timeoutMs, String logCmd) {
+        public NativeDaemonEvent remove(int cmdNum, long timeoutMs, String logCmd) {
             PendingCmd found = null;
             synchronized (mPendingCmds) {
                 for (PendingCmd pendingCmd : mPendingCmds) {
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java
index 4c9d7d3..ad5406c 100644
--- a/services/core/java/com/android/server/SystemConfig.java
+++ b/services/core/java/com/android/server/SystemConfig.java
@@ -90,6 +90,10 @@
     // These are the app package names that should not allow IME switching.
     final ArraySet<String> mFixedImeApps = new ArraySet<>();
 
+    // These are the package names of apps which should be in the 'always'
+    // URL-handling state upon factory reset.
+    final ArraySet<String> mLinkedApps = new ArraySet<>();
+
     public static SystemConfig getInstance() {
         synchronized (SystemConfig.class) {
             if (sInstance == null) {
@@ -127,6 +131,10 @@
         return mFixedImeApps;
     }
 
+    public ArraySet<String> getLinkedApps() {
+        return mLinkedApps;
+    }
+
     SystemConfig() {
         // Read configuration from system
         readPermissions(Environment.buildPath(
@@ -343,6 +351,16 @@
                     XmlUtils.skipCurrentTag(parser);
                     continue;
 
+                } else if ("app-link".equals(name)) {
+                    String pkgname = parser.getAttributeValue(null, "package");
+                    if (pkgname == null) {
+                        Slog.w(TAG, "<app-link> without package in " + permFile + " at "
+                                + parser.getPositionDescription());
+                    } else {
+                        mLinkedApps.add(pkgname);
+                    }
+                    XmlUtils.skipCurrentTag(parser);
+
                 } else {
                     XmlUtils.skipCurrentTag(parser);
                     continue;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 4217c59..88a0c8f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1353,6 +1353,7 @@
     static final int FOREGROUND_PROFILE_CHANGED_MSG = 53;
     static final int DISPATCH_UIDS_CHANGED_MSG = 54;
     static final int REPORT_TIME_TRACKER_MSG = 55;
+    static final int REPORT_USER_SWITCH_COMPLETE_MSG = 56;
 
     static final int FIRST_ACTIVITY_STACK_MSG = 100;
     static final int FIRST_BROADCAST_QUEUE_MSG = 200;
@@ -2014,6 +2015,9 @@
                 AppTimeTracker tracker = (AppTimeTracker)msg.obj;
                 tracker.deliverResult(mContext);
             } break;
+            case REPORT_USER_SWITCH_COMPLETE_MSG: {
+                dispatchUserSwitchComplete(msg.arg1);
+            } break;
             }
         }
     };
@@ -19910,7 +19914,7 @@
             }
         }
 
-        completeSwitchAndInitalize(uss, newUserId, true, false);
+        completeSwitchAndInitialize(uss, newUserId, true, false);
     }
 
     void moveUserToForeground(UserState uss, int oldUserId, int newUserId) {
@@ -19926,10 +19930,10 @@
     }
 
     void continueUserSwitch(UserState uss, int oldUserId, int newUserId) {
-        completeSwitchAndInitalize(uss, newUserId, false, true);
+        completeSwitchAndInitialize(uss, newUserId, false, true);
     }
 
-    void completeSwitchAndInitalize(UserState uss, int newUserId,
+    void completeSwitchAndInitialize(UserState uss, int newUserId,
             boolean clearInitializing, boolean clearSwitching) {
         boolean unfrozen = false;
         synchronized (this) {
@@ -19946,18 +19950,25 @@
             }
         }
         if (unfrozen) {
-            final int N = mUserSwitchObservers.beginBroadcast();
-            for (int i=0; i<N; i++) {
-                try {
-                    mUserSwitchObservers.getBroadcastItem(i).onUserSwitchComplete(newUserId);
-                } catch (RemoteException e) {
-                }
-            }
-            mUserSwitchObservers.finishBroadcast();
+            mHandler.removeMessages(REPORT_USER_SWITCH_COMPLETE_MSG);
+            mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_COMPLETE_MSG,
+                    newUserId, 0));
         }
         stopGuestUserIfBackground();
     }
 
+    /** Called on handler thread */
+    void dispatchUserSwitchComplete(int userId) {
+        final int observerCount = mUserSwitchObservers.beginBroadcast();
+        for (int i = 0; i < observerCount; i++) {
+            try {
+                mUserSwitchObservers.getBroadcastItem(i).onUserSwitchComplete(userId);
+            } catch (RemoteException e) {
+            }
+        }
+        mUserSwitchObservers.finishBroadcast();
+    }
+
     /**
      * Stops the guest user if it has gone to the background.
      */
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 8c3a950..31cdcd5 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -2963,6 +2963,7 @@
         r.state = ActivityState.FINISHING;
 
         if (mode == FINISH_IMMEDIATELY
+                || (mode == FINISH_AFTER_PAUSE && prevState == ActivityState.PAUSED)
                 || prevState == ActivityState.STOPPED
                 || prevState == ActivityState.INITIALIZING) {
             // If this activity is already stopped, we can just finish
diff --git a/services/core/java/com/android/server/am/AppErrorDialog.java b/services/core/java/com/android/server/am/AppErrorDialog.java
index 098b0b6..c8fb351 100644
--- a/services/core/java/com/android/server/am/AppErrorDialog.java
+++ b/services/core/java/com/android/server/am/AppErrorDialog.java
@@ -102,4 +102,13 @@
             dismiss();
         }
     };
+
+    @Override
+    public void dismiss() {
+        if (!mResult.mHasResult) {
+            // We are dismissing and the result has not been set...go ahead and set.
+            mResult.set(FORCE_QUIT);
+        }
+        super.dismiss();
+    }
 }
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index ab47f76..070813b 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -31,6 +31,7 @@
 import android.os.Message;
 import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
+import android.os.ParcelFormatException;
 import android.os.PowerManagerInternal;
 import android.os.Process;
 import android.os.RemoteException;
@@ -1113,7 +1114,7 @@
                                 mStats.mCheckinFile.delete();
                                 return;
                             }
-                        } catch (IOException e) {
+                        } catch (IOException | ParcelFormatException e) {
                             Slog.w(TAG, "Failure reading checkin file "
                                     + mStats.mCheckinFile.getBaseFile(), e);
                         }
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index dd4111d..eef3d63 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -1166,6 +1166,11 @@
             return;
         }
 
+        // If we are being called by the system (e.g. hardware keys) check for current user
+        // so we handle user restrictions correctly.
+        if (uid == android.os.Process.SYSTEM_UID) {
+            uid = UserHandle.getUid(getCurrentUserId(), UserHandle.getAppId(uid));
+        }
         if (mAppOps.noteOp(STREAM_VOLUME_OPS[streamTypeAlias], uid, callingPackage)
                 != AppOpsManager.MODE_ALLOWED) {
             return;
@@ -1412,7 +1417,11 @@
             (flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) != 0) {
             return;
         }
-
+        // If we are being called by the system (e.g. hardware keys) check for current user
+        // so we handle user restrictions correctly.
+        if (uid == android.os.Process.SYSTEM_UID) {
+            uid = UserHandle.getUid(getCurrentUserId(), UserHandle.getAppId(uid));
+        }
         if (mAppOps.noteOp(STREAM_VOLUME_OPS[streamTypeAlias], uid, callingPackage)
                 != AppOpsManager.MODE_ALLOWED) {
             return;
@@ -1540,6 +1549,19 @@
         }
     }
 
+    private int getCurrentUserId() {
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            UserInfo currentUser = ActivityManagerNative.getDefault().getCurrentUser();
+            return currentUser.id;
+        } catch (RemoteException e) {
+            // Activity manager not running, nothing we can do assume user 0.
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+        return UserHandle.USER_OWNER;
+    }
+
     // UI update and Broadcast Intent
     private void sendVolumeUpdate(int streamType, int oldIndex, int index, int flags) {
         streamType = mStreamVolumeAlias[streamType];
@@ -1733,22 +1755,41 @@
         }
     }
 
-    private void setMasterMuteInternal(boolean mute, int flags, String callingPackage, int uid) {
+    private void setMasterMuteInternal(boolean mute, int flags, String callingPackage, int uid,
+            int userId) {
+        // If we are being called by the system check for user we are going to change
+        // so we handle user restrictions correctly.
+        if (uid == android.os.Process.SYSTEM_UID) {
+            uid = UserHandle.getUid(userId, UserHandle.getAppId(uid));
+        }
         if (mAppOps.noteOp(AppOpsManager.OP_AUDIO_MASTER_VOLUME, uid, callingPackage)
                 != AppOpsManager.MODE_ALLOWED) {
             return;
         }
-        if (mute != AudioSystem.getMasterMute()) {
-            setSystemAudioMute(mute);
-            AudioSystem.setMasterMute(mute);
-            // Post a persist master volume msg
-            sendMsg(mAudioHandler, MSG_PERSIST_MASTER_VOLUME_MUTE, SENDMSG_REPLACE, mute ? 1
-                    : 0, UserHandle.getCallingUserId(), null, PERSIST_DELAY);
-            sendMasterMuteUpdate(mute, flags);
+        if (userId != UserHandle.getCallingUserId() &&
+                mContext.checkCallingOrSelfPermission(
+                        android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
+                != PackageManager.PERMISSION_GRANTED) {
+            return;
+        }
+        if (getCurrentUserId() == userId) {
+            if (mute != AudioSystem.getMasterMute()) {
+                setSystemAudioMute(mute);
+                AudioSystem.setMasterMute(mute);
+                // Post a persist master volume msg
+                sendMsg(mAudioHandler, MSG_PERSIST_MASTER_VOLUME_MUTE, SENDMSG_REPLACE, mute ? 1
+                        : 0, userId, null, PERSIST_DELAY);
+                sendMasterMuteUpdate(mute, flags);
 
-            Intent intent = new Intent(AudioManager.MASTER_MUTE_CHANGED_ACTION);
-            intent.putExtra(AudioManager.EXTRA_MASTER_VOLUME_MUTED, mute);
-            sendBroadcastToAll(intent);
+                Intent intent = new Intent(AudioManager.MASTER_MUTE_CHANGED_ACTION);
+                intent.putExtra(AudioManager.EXTRA_MASTER_VOLUME_MUTED, mute);
+                sendBroadcastToAll(intent);
+            }
+        } else {
+            // If not the current user just persist the setting which will be loaded
+            // on user switch.
+            sendMsg(mAudioHandler, MSG_PERSIST_MASTER_VOLUME_MUTE, SENDMSG_REPLACE, mute ? 1
+                    : 0, userId, null, PERSIST_DELAY);
         }
     }
 
@@ -1757,8 +1798,9 @@
         return AudioSystem.getMasterMute();
     }
 
-    public void setMasterMute(boolean mute, int flags, String callingPackage) {
-        setMasterMuteInternal(mute, flags, callingPackage, Binder.getCallingUid());
+    public void setMasterMute(boolean mute, int flags, String callingPackage, int userId) {
+        setMasterMuteInternal(mute, flags, callingPackage, Binder.getCallingUid(),
+                userId);
     }
 
     /** @see AudioManager#getStreamVolume(int) */
@@ -1804,20 +1846,36 @@
         return mStreamVolumeAlias[AudioSystem.STREAM_SYSTEM];
     }
 
-    /** @see AudioManager#setMicrophoneMute(boolean) */
-    public void setMicrophoneMute(boolean on, String callingPackage) {
-        if (mAppOps.noteOp(AppOpsManager.OP_MUTE_MICROPHONE, Binder.getCallingUid(),
-                callingPackage) != AppOpsManager.MODE_ALLOWED) {
+    /** @see AudioManager#setMicrophoneMute(boolean, int) */
+    public void setMicrophoneMute(boolean on, String callingPackage, int userId) {
+        // If we are being called by the system check for user we are going to change
+        // so we handle user restrictions correctly.
+        int uid = Binder.getCallingUid();
+        if (uid == android.os.Process.SYSTEM_UID) {
+            uid = UserHandle.getUid(userId, UserHandle.getAppId(uid));
+        }
+        if (mAppOps.noteOp(AppOpsManager.OP_MUTE_MICROPHONE, uid, callingPackage)
+                != AppOpsManager.MODE_ALLOWED) {
             return;
         }
         if (!checkAudioSettingsPermission("setMicrophoneMute()")) {
             return;
         }
+        if (userId != UserHandle.getCallingUserId() &&
+                mContext.checkCallingOrSelfPermission(
+                android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
+                != PackageManager.PERMISSION_GRANTED) {
+            return;
+        }
 
-        AudioSystem.muteMicrophone(on);
+        // If mute is for current user actually mute, else just persist the setting
+        // which will be loaded on user switch.
+        if (getCurrentUserId() == userId) {
+            AudioSystem.muteMicrophone(on);
+        }
         // Post a persist microphone msg.
         sendMsg(mAudioHandler, MSG_PERSIST_MICROPHONE_MUTE, SENDMSG_REPLACE, on ? 1
-                : 0, UserHandle.getCallingUserId(), null, PERSIST_DELAY);
+                : 0, userId, null, PERSIST_DELAY);
     }
 
     @Override
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 1be3267..4d8d105 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -301,6 +301,20 @@
         return 0;
     }
 
+    public int startPostEnroll(IBinder token) {
+        IFingerprintDaemon daemon = getFingerprintDaemon();
+        if (daemon == null) {
+            Slog.w(TAG, "startPostEnroll: no fingeprintd!");
+            return 0;
+        }
+        try {
+            return daemon.postEnroll();
+        } catch (RemoteException e) {
+            Slog.e(TAG, "startPostEnroll failed", e);
+        }
+        return 0;
+    }
+
     private void stopPendingOperations() {
         if (mEnrollClient != null) {
             stopEnrollment(mEnrollClient.token, true);
@@ -539,8 +553,8 @@
                 }
             } else {
                 result = true; // client not listening
-            }
-            if (fpId <= 0) {
+	    }
+	    if (fpId == 0) {
                 FingerprintUtils.vibrateFingerprintError(getContext());
                 result |= handleFailedAttempt(this);
             } else {
@@ -635,6 +649,12 @@
         }
 
         @Override // Binder call
+        public int postEnroll(IBinder token) {
+            checkPermission(MANAGE_FINGERPRINT);
+            return startPostEnroll(token);
+        }
+
+        @Override // Binder call
         public void enroll(final IBinder token, final byte[] cryptoToken, final int groupId,
                 final IFingerprintServiceReceiver receiver, final int flags) {
             checkPermission(MANAGE_FINGERPRINT);
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintUtils.java b/services/core/java/com/android/server/fingerprint/FingerprintUtils.java
index 1e6e105..d274412 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintUtils.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintUtils.java
@@ -56,7 +56,7 @@
     }
 
     public void addFingerprintForUser(Context ctx, int fingerId, int userId) {
-        getStateForUser(ctx, userId).addFingerprint(fingerId);
+        getStateForUser(ctx, userId).addFingerprint(fingerId, userId);
     }
 
     public void removeFingerprintIdForUser(Context ctx, int fingerId, int userId) {
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java b/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java
index 902d970..0976a22 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java
@@ -68,9 +68,9 @@
         }
     }
 
-    public void addFingerprint(int fingerId) {
+    public void addFingerprint(int fingerId, int groupId) {
         synchronized (this) {
-            mFingerprints.add(new Fingerprint(getDefaultFingerprintName(fingerId), 0, fingerId, 0));
+            mFingerprints.add(new Fingerprint(getUniqueName(), groupId, fingerId, 0));
             scheduleWriteStateLocked();
         }
     }
@@ -107,8 +107,30 @@
         }
     }
 
-    private String getDefaultFingerprintName(int fingerId) {
-        return mCtx.getString(com.android.internal.R.string.fingerprint_name_template, fingerId);
+    /**
+     * Finds a unique name for the given fingerprint
+     * @return unique name
+     */
+    private String getUniqueName() {
+        int guess = 1;
+        while (true) {
+            // Not the most efficient algorithm in the world, but there shouldn't be more than 10
+            String name = mCtx.getString(com.android.internal.R.string.fingerprint_name_template,
+                    guess);
+            if (isUnique(name)) {
+                return name;
+            }
+            guess++;
+        }
+    }
+
+    private boolean isUnique(String name) {
+        for (Fingerprint fp : mFingerprints) {
+            if (fp.getName().equals(name)) {
+                return false;
+            }
+        }
+        return true;
     }
 
     private static File getFileForUser(int userId) {
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 0035d01..8449348 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -436,13 +436,26 @@
 
     @Override
     public INetworkStatsSession openSession() {
-        return openSessionForUsageStats(null);
+        return createSession(null, /* poll on create */ false);
     }
 
     @Override
     public INetworkStatsSession openSessionForUsageStats(final String callingPackage) {
+        return createSession(callingPackage, /* poll on create */ true);
+    }
+
+    private INetworkStatsSession createSession(final String callingPackage, boolean pollOnCreate) {
         assertBandwidthControlEnabled();
 
+        if (pollOnCreate) {
+            final long ident = Binder.clearCallingIdentity();
+            try {
+                performPoll(FLAG_PERSIST_ALL);
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
+        }
+
         // return an IBinder which holds strong references to any loaded stats
         // for its lifetime; when caller closes only weak references remain.
 
@@ -526,6 +539,19 @@
             }
 
             @Override
+            public NetworkStatsHistory getHistoryIntervalForUid(
+                    NetworkTemplate template, int uid, int set, int tag, int fields,
+                    long start, long end) {
+                enforcePermissionForManagedAdmin(mCallingPackage);
+                if (tag == TAG_NONE) {
+                    return getUidComplete().getHistory(template, uid, set, tag, fields, start, end);
+                } else {
+                    return getUidTagComplete().getHistory(template, uid, set, tag, fields,
+                            start, end);
+                }
+            }
+
+            @Override
             public void close() {
                 mUidComplete = null;
                 mUidTagComplete = null;
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 87e9d42..b23b856 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -112,6 +112,9 @@
 
 import libcore.io.IoUtils;
 
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
@@ -1663,7 +1666,12 @@
                 return;
             }
 
-            dumpImpl(pw, DumpFilter.parseFromArguments(args));
+            final DumpFilter filter = DumpFilter.parseFromArguments(args);
+            if (filter != null && filter.stats) {
+                dumpJson(pw, filter);
+            } else {
+                dumpImpl(pw, filter);
+            }
         }
 
         @Override
@@ -1799,6 +1807,32 @@
             return "callState";
         }
         return null;
+    };
+
+    private void dumpJson(PrintWriter pw, DumpFilter filter) {
+        JSONObject dump = new JSONObject();
+        try {
+            dump.put("service", "Notification Manager");
+            JSONArray bans = new JSONArray();
+            try {
+                ArrayMap<Integer, ArrayList<String>> packageBans = getPackageBans(filter);
+                for (Integer userId : packageBans.keySet()) {
+                    for (String packageName : packageBans.get(userId)) {
+                        JSONObject ban = new JSONObject();
+                        ban.put("userId", userId);
+                        ban.put("packageName", packageName);
+                        bans.put(ban);
+                    }
+                }
+            } catch (NameNotFoundException e) {
+                // pass
+            }
+            dump.put("bans", bans);
+            dump.put("stats", mUsageStats.dumpJson(filter));
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        pw.println(dump);
     }
 
     void dumpImpl(PrintWriter pw, DumpFilter filter) {
@@ -1920,18 +1954,10 @@
 
             try {
                 pw.println("\n  Banned Packages:");
-                for(UserInfo user : UserManager.get(getContext()).getUsers()) {
-                    final int userId = user.getUserHandle().getIdentifier();
-                    pw.println("    UserId " + userId);
-                    final PackageManager packageManager = getContext().getPackageManager();
-                    List<PackageInfo> packages = packageManager.getInstalledPackages(0, userId);
-                    final int packageCount = packages.size();
-                    for (int p = 0; p < packageCount; p++) {
-                        final String packageName = packages.get(p).packageName;
-                        final int uid = packageManager.getPackageUid(packageName, userId);
-                        if (!checkNotificationOp(packageName, uid)) {
-                            pw.println("       " + packageName);
-                        }
+                ArrayMap<Integer, ArrayList<String>> packageBans = getPackageBans(filter);
+                for (Integer userId : packageBans.keySet()) {
+                    for (String packageName : packageBans.get(userId)) {
+                        pw.println("    " + userId + ": " + packageName);
                     }
                 }
             } catch (NameNotFoundException e) {
@@ -1940,6 +1966,32 @@
         }
     }
 
+    private ArrayMap<Integer, ArrayList<String>> getPackageBans(DumpFilter filter)
+            throws NameNotFoundException {
+        ArrayMap<Integer, ArrayList<String>> packageBans = new ArrayMap<>();
+        ArrayList<String> packageNames = new ArrayList<>();
+        for (UserInfo user : UserManager.get(getContext()).getUsers()) {
+            final int userId = user.getUserHandle().getIdentifier();
+            final PackageManager packageManager = getContext().getPackageManager();
+            List<PackageInfo> packages = packageManager.getInstalledPackages(0, userId);
+            final int packageCount = packages.size();
+            for (int p = 0; p < packageCount; p++) {
+                final String packageName = packages.get(p).packageName;
+                if (filter == null || filter.matches(packageName)) {
+                    final int uid = packageManager.getPackageUid(packageName, userId);
+                    if (!checkNotificationOp(packageName, uid)) {
+                        packageNames.add(packageName);
+                    }
+                }
+            }
+            if (!packageNames.isEmpty()) {
+                packageBans.put(userId, packageNames);
+                packageNames = new ArrayList<>();
+            }
+        }
+        return packageBans;
+    }
+
     /**
      * The private API only accessible to the system process.
      */
@@ -3449,6 +3501,9 @@
     public static final class DumpFilter {
         public String pkgFilter;
         public boolean zen;
+        public long since;
+        public boolean stats;
+        private boolean all;
 
         public static DumpFilter parseFromArguments(String[] args) {
             if (args != null && args.length == 2 && "p".equals(args[0])
@@ -3460,27 +3515,35 @@
             if (args != null && args.length == 1 && "zen".equals(args[0])) {
                 final DumpFilter filter = new DumpFilter();
                 filter.zen = true;
+                filter.all = true;
+                return filter;
+            }
+            if (args != null && args.length >= 1 && "--stats".equals(args[0])) {
+                final DumpFilter filter = new DumpFilter();
+                filter.stats = true;
+                filter.since = args.length == 2 ? Long.valueOf(args[1]) : 0;
+                filter.all = true;
                 return filter;
             }
             return null;
         }
 
         public boolean matches(StatusBarNotification sbn) {
-            return zen ? true : sbn != null
+            return all ? true : sbn != null
                     && (matches(sbn.getPackageName()) || matches(sbn.getOpPkg()));
         }
 
         public boolean matches(ComponentName component) {
-            return zen ? true : component != null && matches(component.getPackageName());
+            return all ? true : component != null && matches(component.getPackageName());
         }
 
         public boolean matches(String pkg) {
-            return zen ? true : pkg != null && pkg.toLowerCase().contains(pkgFilter);
+            return all ? true : pkg != null && pkg.toLowerCase().contains(pkgFilter);
         }
 
         @Override
         public String toString() {
-            return zen ? "zen" : ('\'' + pkgFilter + '\'');
+            return stats ? "stats" : zen ? "zen" : ('\'' + pkgFilter + '\'');
         }
     }
 
diff --git a/services/core/java/com/android/server/notification/NotificationUsageStats.java b/services/core/java/com/android/server/notification/NotificationUsageStats.java
index 2f0cc0f..0d6e8d6 100644
--- a/services/core/java/com/android/server/notification/NotificationUsageStats.java
+++ b/services/core/java/com/android/server/notification/NotificationUsageStats.java
@@ -22,7 +22,6 @@
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
-import android.os.Bundle;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Message;
@@ -32,8 +31,14 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.server.notification.NotificationManagerService.DumpFilter;
 
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import java.io.PrintWriter;
 import java.util.ArrayDeque;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -220,6 +225,31 @@
         return result;
     }
 
+    public synchronized JSONObject dumpJson(DumpFilter filter) {
+        JSONObject dump = new JSONObject();
+        if (ENABLE_AGGREGATED_IN_MEMORY_STATS) {
+            try {
+                JSONArray aggregatedStats = new JSONArray();
+                for (AggregatedStats as : mStats.values()) {
+                    if (filter != null && !filter.matches(as.key))
+                        continue;
+                    aggregatedStats.put(as.dumpJson());
+                }
+                dump.put("current", aggregatedStats);
+            } catch (JSONException e) {
+                // pass
+            }
+        }
+        if (ENABLE_SQLITE_LOG) {
+            try {
+                dump.put("historical", mSQLiteLog.dumpJson(filter));
+            } catch (JSONException e) {
+                // pass
+            }
+        }
+        return dump;
+    }
+
     public synchronized void dump(PrintWriter pw, String indent, DumpFilter filter) {
         if (ENABLE_AGGREGATED_IN_MEMORY_STATS) {
             for (AggregatedStats as : mStats.values()) {
@@ -250,6 +280,7 @@
 
         private final Context mContext;
         public final String key;
+        private final long mCreated;
         private AggregatedStats mPrevious;
 
         // ---- Updated as the respective events occur.
@@ -285,6 +316,7 @@
         public AggregatedStats(Context context, String key) {
             this.key = key;
             mContext = context;
+            mCreated = SystemClock.elapsedRealtime();
         }
 
         public void countApiUse(NotificationRecord record) {
@@ -450,6 +482,47 @@
                     indent + "  numBlocked=" + numBlocked + ",\n" +
                     indent + "}";
         }
+
+        public JSONObject dumpJson() throws JSONException {
+            JSONObject dump = new JSONObject();
+            dump.put("key", key);
+            dump.put("duration", SystemClock.elapsedRealtime() - mCreated);
+            maybePut(dump, "numPostedByApp", numPostedByApp);
+            maybePut(dump, "numUpdatedByApp", numUpdatedByApp);
+            maybePut(dump, "numRemovedByApp", numRemovedByApp);
+            maybePut(dump, "numPeopleCacheHit", numPeopleCacheHit);
+            maybePut(dump, "numPeopleCacheMiss", numPeopleCacheMiss);
+            maybePut(dump, "numWithStaredPeople", numWithStaredPeople);
+            maybePut(dump, "numWithValidPeople", numWithValidPeople);
+            maybePut(dump, "numBlocked", numBlocked);
+            maybePut(dump, "numWithActions", numWithActions);
+            maybePut(dump, "numPrivate", numPrivate);
+            maybePut(dump, "numSecret", numSecret);
+            maybePut(dump, "numPriorityMax", numPriorityMax);
+            maybePut(dump, "numPriorityHigh", numPriorityHigh);
+            maybePut(dump, "numPriorityLow", numPriorityLow);
+            maybePut(dump, "numPriorityMin", numPriorityMin);
+            maybePut(dump, "numInterrupt", numInterrupt);
+            maybePut(dump, "numWithBigText", numWithBigText);
+            maybePut(dump, "numWithBigPicture", numWithBigPicture);
+            maybePut(dump, "numForegroundService", numForegroundService);
+            maybePut(dump, "numOngoing", numOngoing);
+            maybePut(dump, "numAutoCancel", numAutoCancel);
+            maybePut(dump, "numWithLargeIcon", numWithLargeIcon);
+            maybePut(dump, "numWithInbox", numWithInbox);
+            maybePut(dump, "numWithMediaSession", numWithMediaSession);
+            maybePut(dump, "numWithTitle", numWithTitle);
+            maybePut(dump, "numWithText", numWithText);
+            maybePut(dump, "numWithSubText", numWithSubText);
+            maybePut(dump, "numWithInfoText", numWithInfoText);
+            return dump;
+        }
+
+        private void maybePut(JSONObject dump, String name, int value) throws JSONException {
+            if (value > 0) {
+                dump.put(name, value);
+            }
+        }
     }
 
     /**
@@ -780,14 +853,51 @@
             mWriteHandler.sendMessage(mWriteHandler.obtainMessage(MSG_DISMISS, notification));
         }
 
-        public void printPostFrequencies(PrintWriter pw, String indent, DumpFilter filter) {
+        private JSONArray JsonPostFrequencies(DumpFilter filter) throws JSONException {
+            JSONArray frequencies = new JSONArray();
             SQLiteDatabase db = mHelper.getReadableDatabase();
-            long nowMs = System.currentTimeMillis();
+            long midnight = getMidnightMs();
             String q = "SELECT " +
                     COL_EVENT_USER_ID + ", " +
                     COL_PKG + ", " +
-                    // Bucket by day by looking at 'floor((nowMs - eventTimeMs) / dayMs)'
-                    "CAST(((" + nowMs + " - " + COL_EVENT_TIME + ") / " + DAY_MS + ") AS int) " +
+                    // Bucket by day by looking at 'floor((midnight - eventTimeMs) / dayMs)'
+                    "CAST(((" + midnight + " - " + COL_EVENT_TIME + ") / " + DAY_MS + ") AS int) " +
+                    "AS day, " +
+                    "COUNT(*) AS cnt " +
+                    "FROM " + TAB_LOG + " " +
+                    "WHERE " +
+                    COL_EVENT_TYPE + "=" + EVENT_TYPE_POST +
+                    " AND " + COL_EVENT_TIME + " > " + filter.since +
+                    " GROUP BY " + COL_EVENT_USER_ID + ", day, " + COL_PKG;
+            Cursor cursor = db.rawQuery(q, null);
+            try {
+                for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
+                    int userId = cursor.getInt(0);
+                    String pkg = cursor.getString(1);
+                    if (filter != null && !filter.matches(pkg)) continue;
+                    int day = cursor.getInt(2);
+                    int count = cursor.getInt(3);
+                    JSONObject row = new JSONObject();
+                    row.put("user_id", userId);
+                    row.put("package", pkg);
+                    row.put("day", day);
+                    row.put("count", count);
+                    frequencies.put(row);
+                }
+            } finally {
+                cursor.close();
+            }
+            return frequencies;
+        }
+
+        public void printPostFrequencies(PrintWriter pw, String indent, DumpFilter filter) {
+            SQLiteDatabase db = mHelper.getReadableDatabase();
+            long midnight = getMidnightMs();
+            String q = "SELECT " +
+                    COL_EVENT_USER_ID + ", " +
+                    COL_PKG + ", " +
+                    // Bucket by day by looking at 'floor((midnight - eventTimeMs) / dayMs)'
+                    "CAST(((" + midnight + " - " + COL_EVENT_TIME + ") / " + DAY_MS + ") AS int) " +
                         "AS day, " +
                     "COUNT(*) AS cnt " +
                     "FROM " + TAB_LOG + " " +
@@ -810,6 +920,13 @@
             }
         }
 
+        private long getMidnightMs() {
+            GregorianCalendar midnight = new GregorianCalendar();
+            midnight.set(midnight.get(Calendar.YEAR), midnight.get(Calendar.MONTH),
+                    midnight.get(Calendar.DATE), 23, 59, 59);
+            return midnight.getTimeInMillis();
+        }
+
         private void writeEvent(long eventTimeMs, int eventType, NotificationRecord r) {
             ContentValues cv = new ContentValues();
             cv.put(COL_EVENT_USER_ID, r.sbn.getUser().getIdentifier());
@@ -874,5 +991,15 @@
         public void dump(PrintWriter pw, String indent, DumpFilter filter) {
             printPostFrequencies(pw, indent, filter);
         }
+
+        public JSONObject dumpJson(DumpFilter filter) {
+            JSONObject dump = new JSONObject();
+            try {
+                dump.put("post_frequency", JsonPostFrequencies(filter));
+            } catch (JSONException e) {
+                // pass
+            }
+            return dump;
+        }
     }
 }
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index d3ee22a..8e3334f 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -33,6 +33,7 @@
 import android.provider.CalendarContract;
 import android.provider.ContactsContract;
 import android.provider.MediaStore;
+import android.provider.Telephony.Sms.Intents;
 import android.util.ArraySet;
 import android.util.Log;
 
@@ -54,7 +55,6 @@
     private static final String TAG = "DefaultPermGrantPolicy"; // must be <= 23 chars
     private static final boolean DEBUG = false;
 
-    private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
     private static final String AUDIO_MIME_TYPE = "audio/mpeg";
 
     private static final Set<String> PHONE_PERMISSIONS = new ArraySet<>();
@@ -127,19 +127,6 @@
         SETTINGS_PERMISSIONS.add(Manifest.permission.WRITE_SETTINGS);
     }
 
-    private static final Set<String> INSTALLER_PERMISSIONS = new ArraySet<>();
-    static {
-        INSTALLER_PERMISSIONS.add(Manifest.permission.GRANT_REVOKE_PERMISSIONS);
-        INSTALLER_PERMISSIONS.add(Manifest.permission.INTERACT_ACROSS_USERS_FULL);
-        INSTALLER_PERMISSIONS.add(Manifest.permission.CLEAR_APP_USER_DATA);
-        INSTALLER_PERMISSIONS.add(Manifest.permission.KILL_UID);
-    }
-
-    private static final Set<String> VERIFIER_PERMISSIONS = new ArraySet<>();
-    static {
-        INSTALLER_PERMISSIONS.add(Manifest.permission.GRANT_REVOKE_PERMISSIONS);
-    }
-
     private final PackageManagerService mService;
 
     private PackagesProvider mImePackagesProvider;
@@ -250,30 +237,20 @@
                 syncAdapterPackagesProvider.getPackages(CalendarContract.AUTHORITY, userId) : null;
 
         synchronized (mService.mPackages) {
-            // Installers
-            Intent installerIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
-            installerIntent.addCategory(Intent.CATEGORY_DEFAULT);
-            installerIntent.setDataAndType(Uri.fromFile(new File("foo.apk")),
-                    PACKAGE_MIME_TYPE);
-            List<PackageParser.Package> installerPackages =
-                    getPrivilegedHandlerActivityPackagesLPr(installerIntent, userId);
-            final int installerCount = installerPackages.size();
-            for (int i = 0; i < installerCount; i++) {
-                PackageParser.Package installPackage = installerPackages.get(i);
-                grantInstallPermissionsLPw(installPackage, INSTALLER_PERMISSIONS, userId);
-                grantRuntimePermissionsLPw(installPackage, STORAGE_PERMISSIONS, true, userId);
+            // Installer
+            PackageParser.Package installerPackage = getSystemPackageLPr(
+                    mService.mRequiredInstallerPackage);
+            if (installerPackage != null
+                    && doesPackageSupportRuntimePermissions(installerPackage)) {
+                grantRuntimePermissionsLPw(installerPackage, STORAGE_PERMISSIONS, true, userId);
             }
 
-            // Verifiers
-            Intent verifierIntent = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
-            verifierIntent.setType(PACKAGE_MIME_TYPE);
-            List<PackageParser.Package> verifierPackages =
-                    getPrivilegedHandlerReceiverPackagesLPr(verifierIntent, userId);
-            final int verifierCount = verifierPackages.size();
-            for (int i = 0; i < verifierCount; i++) {
-                PackageParser.Package verifierPackage = verifierPackages.get(i);
-                grantInstallPermissionsLPw(verifierPackage, VERIFIER_PERMISSIONS, userId);
-                grantRuntimePermissionsLPw(verifierPackage, STORAGE_PERMISSIONS, userId);
+            // Verifier
+            PackageParser.Package verifierPackage = getSystemPackageLPr(
+                    mService.mRequiredVerifierPackage);
+            if (verifierPackage != null
+                    && doesPackageSupportRuntimePermissions(verifierPackage)) {
+                grantRuntimePermissionsLPw(verifierPackage, STORAGE_PERMISSIONS, true, userId);
             }
 
             // SetupWizard
@@ -364,6 +341,15 @@
                 }
             }
 
+            // Cell Broadcast Receiver
+            Intent cbrIntent = new Intent(Intents.SMS_CB_RECEIVED_ACTION);
+            PackageParser.Package cbrPackage =
+                    getDefaultSystemHandlerActivityPackageLPr(cbrIntent, userId);
+
+            if (cbrPackage != null && doesPackageSupportRuntimePermissions(cbrPackage)) {
+                grantRuntimePermissionsLPw(cbrPackage, SMS_PERMISSIONS, false, userId);
+            }
+
             // Calendar
             Intent calendarIntent = new Intent(Intent.ACTION_MAIN);
             calendarIntent.addCategory(Intent.CATEGORY_APP_CALENDAR);
@@ -638,39 +624,10 @@
         }
     }
 
-    private List<PackageParser.Package> getPrivilegedHandlerReceiverPackagesLPr(
-            Intent intent, int userId) {
-        List<ResolveInfo> handlers = mService.queryIntentReceivers(
-                intent, intent.resolveTypeIfNeeded(mService.mContext.getContentResolver()),
-                0, userId);
-        return getPrivilegedPackages(handlers);
-    }
-
-    private List<PackageParser.Package> getPrivilegedHandlerActivityPackagesLPr(
-            Intent intent, int userId) {
-        List<ResolveInfo> handlers = mService.queryIntentActivities(
-                intent, intent.resolveTypeIfNeeded(mService.mContext.getContentResolver()),
-                0, userId);
-        return getPrivilegedPackages(handlers);
-    }
-
-    private List<PackageParser.Package> getPrivilegedPackages(List<ResolveInfo> resolveInfos) {
-        List<PackageParser.Package> handlerPackages = new ArrayList<>();
-        final int handlerCount = resolveInfos.size();
-        for (int i = 0; i < handlerCount; i++) {
-            ResolveInfo handler = resolveInfos.get(i);
-            PackageParser.Package handlerPackage = getPrivilegedPackageLPr(
-                    handler.activityInfo.packageName);
-            if (handlerPackage != null) {
-                handlerPackages.add(handlerPackage);
-            }
-        }
-        return handlerPackages;
-    }
-
     private PackageParser.Package getDefaultSystemHandlerActivityPackageLPr(
             Intent intent, int userId) {
-        List<ResolveInfo> handlers = mService.queryIntentActivities(intent, null, 0, userId);
+        List<ResolveInfo> handlers = mService.queryIntentActivities(intent,
+                intent.resolveType(mService.mContext.getContentResolver()), 0, userId);
         final int handlerCount = handlers.size();
         for (int i = 0; i < handlerCount; i++) {
             ResolveInfo handler = handlers.get(i);
@@ -730,18 +687,9 @@
         return null;
     }
 
-    private PackageParser.Package getPrivilegedPackageLPr(String packageName) {
-        PackageParser.Package pkg = mService.mPackages.get(packageName);
-        if (pkg != null && pkg.applicationInfo.isPrivilegedApp()) {
-            return !isSysComponentOrPersistentPrivApp(pkg) ? pkg : null;
-        }
-        return null;
-    }
-
     private void grantRuntimePermissionsLPw(PackageParser.Package pkg, Set<String> permissions,
             int userId) {
         grantRuntimePermissionsLPw(pkg, permissions, false, userId);
-
     }
 
     private void grantRuntimePermissionsLPw(PackageParser.Package pkg, Set<String> permissions,
@@ -783,36 +731,6 @@
         }
     }
 
-    private void grantInstallPermissionsLPw(PackageParser.Package pkg, Set<String> permissions,
-            int userId) {
-        List<String> requestedPermissions = pkg.requestedPermissions;
-
-        if (pkg.isUpdatedSystemApp()) {
-            PackageSetting sysPs = mService.mSettings.getDisabledSystemPkgLPr(pkg.packageName);
-            if (sysPs != null) {
-                requestedPermissions = sysPs.pkg.requestedPermissions;
-            }
-        }
-
-        final int permissionCount = requestedPermissions.size();
-        for (int i = 0; i < permissionCount; i++) {
-            String permission = requestedPermissions.get(i);
-            if (permissions.contains(permission)) {
-                final int flags = mService.getPermissionFlags(permission, pkg.packageName, userId);
-
-                // If any flags are set to the permission, then it is either set in
-                // its current state by the system or device/profile owner or the user.
-                // In all these cases we do not want to clobber the current state.
-                if (flags == 0) {
-                    mService.grantInstallPermissionLPw(permission, pkg);
-                    if (DEBUG) {
-                        Log.i(TAG, "Granted install " + permission + " to " + pkg.packageName);
-                    }
-                }
-            }
-        }
-    }
-
     private static boolean isSysComponentOrPersistentPrivApp(PackageParser.Package pkg) {
         return UserHandle.getAppId(pkg.applicationInfo.uid) < FIRST_APPLICATION_UID
                 || ((pkg.applicationInfo.privateFlags
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 8fbdfca..3c117aa 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -25,6 +25,12 @@
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
 import static android.content.pm.PackageManager.INSTALL_EXTERNAL;
 import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS;
 import static android.content.pm.PackageManager.INSTALL_FAILED_CONFLICTING_PROVIDER;
@@ -72,6 +78,9 @@
 import static com.android.server.pm.InstructionSets.getDexCodeInstructionSets;
 import static com.android.server.pm.InstructionSets.getPreferredInstructionSet;
 import static com.android.server.pm.InstructionSets.getPrimaryInstructionSet;
+import static com.android.server.pm.PermissionsState.PERMISSION_OPERATION_FAILURE;
+import static com.android.server.pm.PermissionsState.PERMISSION_OPERATION_SUCCESS;
+import static com.android.server.pm.PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED;
 
 import android.Manifest;
 import android.app.ActivityManager;
@@ -700,7 +709,8 @@
                 return;
             }
             if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
-                    "Updating IntentFilterVerificationInfo for verificationId:" + verificationId);
+                    "Updating IntentFilterVerificationInfo for package " + packageName
+                            +" verificationId:" + verificationId);
 
             synchronized (mPackages) {
                 if (verified) {
@@ -785,8 +795,6 @@
         boolean hasHTTPorHTTPS = filter.hasDataScheme(IntentFilter.SCHEME_HTTP) ||
                 filter.hasDataScheme(IntentFilter.SCHEME_HTTPS);
         if (!hasHTTPorHTTPS) {
-            if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
-                    "IntentFilter does not contain any HTTP or HTTPS data scheme");
             return false;
         }
         return true;
@@ -928,7 +936,8 @@
     private static final String TAG_DEFAULT_APPS = "da";
     private static final String TAG_INTENT_FILTER_VERIFICATION = "iv";
 
-    private final String mRequiredVerifierPackage;
+    final String mRequiredVerifierPackage;
+    final String mRequiredInstallerPackage;
 
     private final PackageUsage mPackageUsage = new PackageUsage();
 
@@ -2235,6 +2244,7 @@
             if (!mRestoredSettings && !onlyCore) {
                 mSettings.applyDefaultPreferredAppsLPw(this, UserHandle.USER_OWNER);
                 applyFactoryDefaultBrowserLPw(UserHandle.USER_OWNER);
+                primeDomainVerificationsLPw(UserHandle.USER_OWNER);
             }
 
             // If this is first boot after an OTA, and a normal boot, then
@@ -2249,7 +2259,6 @@
                 mSettings.mFingerprint = Build.FINGERPRINT;
             }
 
-            primeDomainVerificationsLPw();
             checkDefaultBrowser();
 
             // All the changes are done during package scanning.
@@ -2262,6 +2271,7 @@
                     SystemClock.uptimeMillis());
 
             mRequiredVerifierPackage = getRequiredVerifierLPr();
+            mRequiredInstallerPackage = getRequiredInstallerLPr();
 
             mInstallerService = new PackageInstallerService(context, this);
 
@@ -2328,6 +2338,39 @@
         return requiredVerifier;
     }
 
+    private String getRequiredInstallerLPr() {
+        Intent installerIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
+        installerIntent.addCategory(Intent.CATEGORY_DEFAULT);
+        installerIntent.setDataAndType(Uri.fromFile(new File("foo.apk")), PACKAGE_MIME_TYPE);
+
+        final List<ResolveInfo> installers = queryIntentActivities(installerIntent,
+                PACKAGE_MIME_TYPE, 0, 0);
+
+        String requiredInstaller = null;
+
+        final int N = installers.size();
+        for (int i = 0; i < N; i++) {
+            final ResolveInfo info = installers.get(i);
+            final String packageName = info.activityInfo.packageName;
+
+            if (!info.activityInfo.applicationInfo.isSystemApp()) {
+                continue;
+            }
+
+            if (requiredInstaller != null) {
+                throw new RuntimeException("There must be one required installer");
+            }
+
+            requiredInstaller = packageName;
+        }
+
+        if (requiredInstaller == null) {
+            throw new RuntimeException("There must be one required installer");
+        }
+
+        return requiredInstaller;
+    }
+
     private ComponentName getIntentFilterVerifierComponentNameLPr() {
         final Intent verification = new Intent(Intent.ACTION_INTENT_FILTER_NEEDS_VERIFICATION);
         final List<ResolveInfo> receivers = queryIntentReceivers(verification, PACKAGE_MIME_TYPE,
@@ -2368,54 +2411,56 @@
         return verifierComponentName;
     }
 
-    private void primeDomainVerificationsLPw() {
-        if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG, "Start priming domain verifications");
-        boolean updated = false;
-        ArraySet<String> allHostsSet = new ArraySet<>();
-        for (PackageParser.Package pkg : mPackages.values()) {
-            final String packageName = pkg.packageName;
-            if (!hasDomainURLs(pkg)) {
-                if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG, "No priming domain verifications for " +
-                            "package with no domain URLs: " + packageName);
-                continue;
-            }
-            if (!pkg.isSystemApp()) {
-                if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
-                        "No priming domain verifications for a non system package : " +
-                                packageName);
-                continue;
-            }
-            for (PackageParser.Activity a : pkg.activities) {
-                for (ActivityIntentInfo filter : a.intents) {
-                    if (hasValidDomains(filter)) {
-                        allHostsSet.addAll(filter.getHostsList());
+    private void primeDomainVerificationsLPw(int userId) {
+        if (DEBUG_DOMAIN_VERIFICATION) {
+            Slog.d(TAG, "Priming domain verifications in user " + userId);
+        }
+
+        SystemConfig systemConfig = SystemConfig.getInstance();
+        ArraySet<String> packages = systemConfig.getLinkedApps();
+        ArraySet<String> domains = new ArraySet<String>();
+
+        for (String packageName : packages) {
+            PackageParser.Package pkg = mPackages.get(packageName);
+            if (pkg != null) {
+                if (!pkg.isSystemApp()) {
+                    Slog.w(TAG, "Non-system app '" + packageName + "' in sysconfig <app-link>");
+                    continue;
+                }
+
+                domains.clear();
+                for (PackageParser.Activity a : pkg.activities) {
+                    for (ActivityIntentInfo filter : a.intents) {
+                        if (hasValidDomains(filter)) {
+                            domains.addAll(filter.getHostsList());
+                        }
                     }
                 }
+
+                if (domains.size() > 0) {
+                    if (DEBUG_DOMAIN_VERIFICATION) {
+                        Slog.v(TAG, "      + " + packageName);
+                    }
+                    // 'Undefined' in the global IntentFilterVerificationInfo, i.e. the usual
+                    // state w.r.t. the formal app-linkage "no verification attempted" state;
+                    // and then 'always' in the per-user state actually used for intent resolution.
+                    final IntentFilterVerificationInfo ivi;
+                    ivi = mSettings.createIntentFilterVerificationIfNeededLPw(packageName,
+                            new ArrayList<String>(domains));
+                    ivi.setStatus(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED);
+                    mSettings.updateIntentFilterVerificationStatusLPw(packageName,
+                            INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS, userId);
+                } else {
+                    Slog.w(TAG, "Sysconfig <app-link> package '" + packageName
+                            + "' does not handle web links");
+                }
+            } else {
+                Slog.w(TAG, "Unknown package '" + packageName + "' in sysconfig <app-link>");
             }
-            if (allHostsSet.size() == 0) {
-                allHostsSet.add("*");
-            }
-            ArrayList<String> allHostsList = new ArrayList<>(allHostsSet);
-            IntentFilterVerificationInfo ivi =
-                    mSettings.createIntentFilterVerificationIfNeededLPw(packageName, allHostsList);
-            if (ivi != null) {
-                if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
-                        "Priming domain verifications for package: " + packageName +
-                        " with hosts:" + ivi.getDomainsString());
-                ivi.setStatus(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS);
-                updated = true;
-            }
-            else {
-                if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
-                        "No priming domain verifications for package: " + packageName);
-            }
-            allHostsSet.clear();
         }
-        if (updated) {
-            if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
-                    "Will need to write primed domain verifications");
-        }
-        if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG, "End priming domain verifications");
+
+        scheduleWritePackageRestrictionsLocked(userId);
+        scheduleWriteSettingsLocked();
     }
 
     private void applyFactoryDefaultBrowserLPw(int userId) {
@@ -2423,7 +2468,7 @@
         // with a product-specific overlay used for vendor customization.
         String browserPkg = mContext.getResources().getString(
                 com.android.internal.R.string.default_browser);
-        if (browserPkg != null) {
+        if (!TextUtils.isEmpty(browserPkg)) {
             // non-empty string => required to be a known package
             PackageSetting ps = mSettings.mPackages.get(browserPkg);
             if (ps == null) {
@@ -3348,7 +3393,7 @@
 
             enforceDeclaredAsUsedAndRuntimePermission(pkg, bp);
 
-            uid = pkg.applicationInfo.uid;
+            uid = UserHandle.getUid(userId, pkg.applicationInfo.uid);
             sb = (SettingBase) pkg.mExtras;
             if (sb == null) {
                 throw new IllegalArgumentException("Unknown package: " + packageName);
@@ -4568,8 +4613,8 @@
 
     private List<ResolveInfo> filterCandidatesWithDomainPreferredActivitiesLPr(
             int flags, List<ResolveInfo> candidates, CrossProfileDomainInfo xpDomainInfo) {
-        if (DEBUG_PREFERRED) {
-            Slog.v("TAG", "Filtering results with prefered activities. Candidates count: " +
+        if (DEBUG_PREFERRED || DEBUG_DOMAIN_VERIFICATION) {
+            Slog.v("TAG", "Filtering results with preferred activities. Candidates count: " +
                     candidates.size());
         }
 
@@ -4582,9 +4627,9 @@
 
         synchronized (mPackages) {
             final int count = candidates.size();
-            // First, try to use the domain preferred app. Partition the candidates into four lists:
+            // First, try to use linked apps. Partition the candidates into four lists:
             // one for the final results, one for the "do not use ever", one for "undefined status"
-            // and finally one for "Browser App type".
+            // and finally one for "browser app type".
             for (int n=0; n<count; n++) {
                 ResolveInfo info = candidates.get(n);
                 String packageName = info.activityInfo.packageName;
@@ -4598,11 +4643,20 @@
                     // Try to get the status from User settings first
                     int status = getDomainVerificationStatusLPr(ps, userId);
                     if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) {
+                        if (DEBUG_DOMAIN_VERIFICATION) {
+                            Slog.i(TAG, "  + always: " + info.activityInfo.packageName);
+                        }
                         alwaysList.add(info);
                     } else if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) {
+                        if (DEBUG_DOMAIN_VERIFICATION) {
+                            Slog.i(TAG, "  + never: " + info.activityInfo.packageName);
+                        }
                         neverList.add(info);
                     } else if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED ||
                             status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK) {
+                        if (DEBUG_DOMAIN_VERIFICATION) {
+                            Slog.i(TAG, "  + ask: " + info.activityInfo.packageName);
+                        }
                         undefinedList.add(info);
                     }
                 }
@@ -4650,17 +4704,20 @@
                     }
                 }
 
-                // If there is nothing selected, add all candidates and remove the ones that the User
-                // has explicitely put into the INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER state
+                // If there is nothing selected, add all candidates and remove the ones that the user
+                // has explicitly put into the INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER state
                 if (result.size() == 0) {
                     result.addAll(candidates);
                     result.removeAll(neverList);
                 }
             }
         }
-        if (DEBUG_PREFERRED) {
-            Slog.v("TAG", "Filtered results with prefered activities. New candidates count: " +
+        if (DEBUG_PREFERRED || DEBUG_DOMAIN_VERIFICATION) {
+            Slog.v(TAG, "Filtered results with preferred activities. New candidates count: " +
                     result.size());
+            for (ResolveInfo info : result) {
+                Slog.v(TAG, "  + " + info.activityInfo);
+            }
         }
         return result;
     }
@@ -8383,7 +8440,7 @@
                 || (compareSignatures(mPlatformPackage.mSignatures, pkg.mSignatures)
                         == PackageManager.SIGNATURE_MATCH);
         if (!allowed && (bp.protectionLevel
-                & PermissionInfo.PROTECTION_FLAG_SYSTEM) != 0) {
+                & PermissionInfo.PROTECTION_FLAG_PRIVILEGED) != 0) {
             if (isSystemApp(pkg)) {
                 // For updated system applications, a system permission
                 // is granted only if it had been defined by the original application.
@@ -8420,19 +8477,39 @@
                 }
             }
         }
-        if (!allowed && (bp.protectionLevel
-                & PermissionInfo.PROTECTION_FLAG_PRE23) != 0
-                && pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.MNC) {
-            // If this was a previously normal/dangerous permission that got moved
-            // to a system permission as part of the runtime permission redesign, then
-            // we still want to blindly grant it to old apps.
-            allowed = true;
-        }
-        if (!allowed && (bp.protectionLevel
-                & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) {
-            // For development permissions, a development permission
-            // is granted only if it was already granted.
-            allowed = origPermissions.hasInstallPermission(perm);
+        if (!allowed) {
+            if (!allowed && (bp.protectionLevel
+                    & PermissionInfo.PROTECTION_FLAG_PRE23) != 0
+                    && pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.MNC) {
+                // If this was a previously normal/dangerous permission that got moved
+                // to a system permission as part of the runtime permission redesign, then
+                // we still want to blindly grant it to old apps.
+                allowed = true;
+            }
+            if (!allowed && (bp.protectionLevel & PermissionInfo.PROTECTION_FLAG_INSTALLER) != 0
+                    && pkg.packageName.equals(mRequiredInstallerPackage)) {
+                // If this permission is to be granted to the system installer and
+                // this app is an installer, then it gets the permission.
+                allowed = true;
+            }
+            if (!allowed && (bp.protectionLevel & PermissionInfo.PROTECTION_FLAG_VERIFIER) != 0
+                    && pkg.packageName.equals(mRequiredVerifierPackage)) {
+                // If this permission is to be granted to the system verifier and
+                // this app is a verifier, then it gets the permission.
+                allowed = true;
+            }
+            if (!allowed && (bp.protectionLevel
+                    & PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0
+                    && isSystemApp(pkg)) {
+                // Any pre-installed system app is allowed to get this permission.
+                allowed = true;
+            }
+            if (!allowed && (bp.protectionLevel
+                    & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) {
+                // For development permissions, a development permission
+                // is granted only if it was already granted.
+                allowed = origPermissions.hasInstallPermission(perm);
+            }
         }
         return allowed;
     }
@@ -12598,7 +12675,7 @@
                                                 KILL_APP_REASON_GIDS_CHANGED);
                                     }
                                 });
-                            break;
+                                break;
                             }
                         }
                     }
@@ -12714,8 +12791,14 @@
         // writer
         synchronized (mPackages) {
             PackageSetting ps = mSettings.mPackages.get(newPkg.packageName);
+
+            // Propagate the permissions state as we do want to drop on the floor
+            // runtime permissions. The update permissions method below will take
+            // care of removing obsolete permissions and grant install permissions.
+            ps.getPermissionsState().copyFrom(disabledPs.getPermissionsState());
             updatePermissionsLPw(newPkg.packageName, newPkg,
                     UPDATE_PERMISSIONS_ALL | UPDATE_PERMISSIONS_REPLACE_PKG);
+
             if (applyUserRestrictions) {
                 if (DEBUG_REMOVE) {
                     Slog.d(TAG, "Propagating install state across reinstall");
@@ -12876,8 +12959,7 @@
                 if (clearPackagePreferredActivitiesLPw(packageName, removeUser)) {
                     scheduleWritePackageRestrictionsLocked(removeUser);
                 }
-                revokeRuntimePermissionsAndClearAllFlagsLocked(ps.getPermissionsState(),
-                        removeUser);
+                resetUserChangesToRuntimePermissionsAndFlagsLocked(ps, removeUser);
             }
             return true;
         }
@@ -13038,8 +13120,7 @@
             }
 
             PackageSetting ps = (PackageSetting) pkg.mExtras;
-            PermissionsState permissionsState = ps.getPermissionsState();
-            revokeRuntimePermissionsAndClearUserSetFlagsLocked(permissionsState, userId);
+            resetUserChangesToRuntimePermissionsAndFlagsLocked(ps, userId);
         }
 
         // Always delete data directories for package, even if we found no other
@@ -13070,66 +13151,118 @@
         return true;
     }
 
-
     /**
-     * Revokes granted runtime permissions and clears resettable flags
-     * which are flags that can be set by a user interaction.
+     * Reverts user permission state changes (permissions and flags).
      *
-     * @param permissionsState The permission state to reset.
+     * @param ps The package for which to reset.
      * @param userId The device user for which to do a reset.
      */
-    private void revokeRuntimePermissionsAndClearUserSetFlagsLocked(
-            PermissionsState permissionsState, int userId) {
-        final int userSetFlags = PackageManager.FLAG_PERMISSION_USER_SET
-                | PackageManager.FLAG_PERMISSION_USER_FIXED
-                | PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE;
+    private void resetUserChangesToRuntimePermissionsAndFlagsLocked(
+            final PackageSetting ps, final int userId) {
+        if (ps.pkg == null) {
+            return;
+        }
 
-        revokeRuntimePermissionsAndClearFlagsLocked(permissionsState, userId, userSetFlags);
-    }
+        final int userSettableFlags = FLAG_PERMISSION_USER_SET
+                | FLAG_PERMISSION_USER_FIXED
+                | FLAG_PERMISSION_REVOKE_ON_UPGRADE;
 
-    /**
-     * Revokes granted runtime permissions and clears all flags.
-     *
-     * @param permissionsState The permission state to reset.
-     * @param userId The device user for which to do a reset.
-     */
-    private void revokeRuntimePermissionsAndClearAllFlagsLocked(
-            PermissionsState permissionsState, int userId) {
-        revokeRuntimePermissionsAndClearFlagsLocked(permissionsState, userId,
-                PackageManager.MASK_PERMISSION_FLAGS);
-    }
+        final int policyOrSystemFlags = FLAG_PERMISSION_SYSTEM_FIXED
+                | FLAG_PERMISSION_POLICY_FIXED;
 
-    /**
-     * Revokes granted runtime permissions and clears certain flags.
-     *
-     * @param permissionsState The permission state to reset.
-     * @param userId The device user for which to do a reset.
-     * @param flags The flags that is going to be reset.
-     */
-    private void revokeRuntimePermissionsAndClearFlagsLocked(
-            PermissionsState permissionsState, final int userId, int flags) {
-        boolean needsWrite = false;
+        boolean writeInstallPermissions = false;
+        boolean writeRuntimePermissions = false;
 
-        for (PermissionState state : permissionsState.getRuntimePermissionStates(userId)) {
-            BasePermission bp = mSettings.mPermissions.get(state.getName());
-            if (bp != null) {
-                permissionsState.revokeRuntimePermission(bp, userId);
-                permissionsState.updatePermissionFlags(bp, userId, flags, 0);
-                needsWrite = true;
+        final int permissionCount = ps.pkg.requestedPermissions.size();
+        for (int i = 0; i < permissionCount; i++) {
+            String permission = ps.pkg.requestedPermissions.get(i);
+
+            BasePermission bp = mSettings.mPermissions.get(permission);
+            if (bp == null) {
+                continue;
+            }
+
+            // If shared user we just reset the state to which only this app contributed.
+            if (ps.sharedUser != null) {
+                boolean used = false;
+                final int packageCount = ps.sharedUser.packages.size();
+                for (int j = 0; j < packageCount; j++) {
+                    PackageSetting pkg = ps.sharedUser.packages.valueAt(j);
+                    if (pkg.pkg != null && !pkg.pkg.packageName.equals(ps.pkg.packageName)
+                            && pkg.pkg.requestedPermissions.contains(permission)) {
+                        used = true;
+                        break;
+                    }
+                }
+                if (used) {
+                    continue;
+                }
+            }
+
+            PermissionsState permissionsState = ps.getPermissionsState();
+
+            final int oldFlags = permissionsState.getPermissionFlags(bp.name, userId);
+
+            // Always clear the user settable flags.
+            final boolean hasInstallState = permissionsState.getInstallPermissionState(
+                    bp.name) != null;
+            if (permissionsState.updatePermissionFlags(bp, userId, userSettableFlags, 0)) {
+                if (hasInstallState) {
+                    writeInstallPermissions = true;
+                } else {
+                    writeRuntimePermissions = true;
+                }
+            }
+
+            // Below is only runtime permission handling.
+            if (!bp.isRuntime()) {
+                continue;
+            }
+
+            // Never clobber system or policy.
+            if ((oldFlags & policyOrSystemFlags) != 0) {
+                continue;
+            }
+
+            // If this permission was granted by default, make sure it is.
+            if ((oldFlags & FLAG_PERMISSION_GRANTED_BY_DEFAULT) != 0) {
+                if (permissionsState.grantRuntimePermission(bp, userId)
+                        != PERMISSION_OPERATION_FAILURE) {
+                    writeRuntimePermissions = true;
+                }
+            } else {
+                // Otherwise, reset the permission.
+                final int revokeResult = permissionsState.revokeRuntimePermission(bp, userId);
+                switch (revokeResult) {
+                    case PERMISSION_OPERATION_SUCCESS: {
+                        writeRuntimePermissions = true;
+                    } break;
+
+                    case PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED: {
+                        writeRuntimePermissions = true;
+                        // If gids changed for this user, kill all affected packages.
+                        mHandler.post(new Runnable() {
+                            @Override
+                            public void run() {
+                                // This has to happen with no lock held.
+                                killSettingPackagesForUser(ps, userId,
+                                        KILL_APP_REASON_GIDS_CHANGED);
+                            }
+                        });
+                    } break;
+                }
             }
         }
 
-        // Ensure default permissions are never cleared.
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mDefaultPermissionPolicy.grantDefaultPermissions(userId);
-            }
-        });
-
-        if (needsWrite) {
+        // Synchronously write as we are taking permissions away.
+        if (writeRuntimePermissions) {
             mSettings.writeRuntimePermissionsForUserLPr(userId, true);
         }
+
+        // Synchronously write as we are taking permissions away.
+        if (writeInstallPermissions) {
+            mSettings.writeLPr();
+        }
     }
 
     /**
@@ -13559,6 +13692,7 @@
             clearPackagePreferredActivitiesLPw(null, userId);
             mSettings.applyDefaultPreferredAppsLPw(this, userId);
             applyFactoryDefaultBrowserLPw(userId);
+            primeDomainVerificationsLPw(userId);
 
             scheduleWritePackageRestrictionsLocked(userId);
         }
@@ -14673,7 +14807,7 @@
                 pw.println();
                 int count = mSettings.mPackages.size();
                 if (count == 0) {
-                    pw.println("No domain preferred apps!");
+                    pw.println("No applications!");
                     pw.println();
                 } else {
                     final String prefix = "  ";
@@ -14682,45 +14816,41 @@
                         pw.println("No domain preferred apps!");
                         pw.println();
                     } else {
-                        pw.println("Domain preferred apps status:");
+                        pw.println("App verification status:");
                         pw.println();
                         count = 0;
                         for (PackageSetting ps : allPackageSettings) {
                             IntentFilterVerificationInfo ivi = ps.getIntentFilterVerificationInfo();
                             if (ivi == null || ivi.getPackageName() == null) continue;
-                            pw.println(prefix + "Package Name: " + ivi.getPackageName());
+                            pw.println(prefix + "Package: " + ivi.getPackageName());
                             pw.println(prefix + "Domains: " + ivi.getDomainsString());
-                            pw.println(prefix + "Status: " + ivi.getStatusString());
+                            pw.println(prefix + "Status:  " + ivi.getStatusString());
                             pw.println();
                             count++;
                         }
                         if (count == 0) {
-                            pw.println(prefix + "No domain preferred app status!");
+                            pw.println(prefix + "No app verification established.");
                             pw.println();
                         }
                         for (int userId : sUserManager.getUserIds()) {
-                            pw.println("Domain preferred apps for User " + userId + ":");
+                            pw.println("App linkages for user " + userId + ":");
                             pw.println();
                             count = 0;
                             for (PackageSetting ps : allPackageSettings) {
-                                IntentFilterVerificationInfo ivi = ps.getIntentFilterVerificationInfo();
-                                if (ivi == null || ivi.getPackageName() == null) {
-                                    continue;
-                                }
                                 final int status = ps.getDomainVerificationStatusForUser(userId);
                                 if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) {
                                     continue;
                                 }
-                                pw.println(prefix + "Package Name: " + ivi.getPackageName());
-                                pw.println(prefix + "Domains: " + ivi.getDomainsString());
+                                pw.println(prefix + "Package: " + ps.name);
+                                pw.println(prefix + "Domains: " + dumpDomainString(ps.name));
                                 String statusStr = IntentFilterVerificationInfo.
                                         getStatusStringFromValue(status);
-                                pw.println(prefix + "Status: " + statusStr);
+                                pw.println(prefix + "Status:  " + statusStr);
                                 pw.println();
                                 count++;
                             }
                             if (count == 0) {
-                                pw.println(prefix + "No domain preferred apps!");
+                                pw.println(prefix + "No configured app linkages.");
                                 pw.println();
                             }
                         }
@@ -14842,6 +14972,35 @@
         }
     }
 
+    private String dumpDomainString(String packageName) {
+        List<IntentFilterVerificationInfo> iviList = getIntentFilterVerifications(packageName);
+        List<IntentFilter> filters = getAllIntentFilters(packageName);
+
+        ArraySet<String> result = new ArraySet<>();
+        if (iviList.size() > 0) {
+            for (IntentFilterVerificationInfo ivi : iviList) {
+                for (String host : ivi.getDomains()) {
+                    result.add(host);
+                }
+            }
+        }
+        if (filters != null && filters.size() > 0) {
+            for (IntentFilter filter : filters) {
+                if (filter.hasDataScheme(IntentFilter.SCHEME_HTTP) ||
+                        filter.hasDataScheme(IntentFilter.SCHEME_HTTPS)) {
+                    result.addAll(filter.getHostsList());
+                }
+            }
+        }
+
+        StringBuilder sb = new StringBuilder(result.size() * 16);
+        for (String domain : result) {
+            if (sb.length() > 0) sb.append(" ");
+            sb.append(domain);
+        }
+        return sb.toString();
+    }
+
     // ------- apps on sdcard specific code -------
     static final boolean DEBUG_SD_INSTALL = false;
 
@@ -15761,6 +15920,7 @@
             mInstaller.createUserConfig(userHandle);
             mSettings.createNewUserLILPw(this, mInstaller, userHandle);
             applyFactoryDefaultBrowserLPw(userHandle);
+            primeDomainVerificationsLPw(userHandle);
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 967d718..bdcd714 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -824,14 +824,8 @@
                 continue;
             }
 
-            // If no user has the permission, nothing to remove.
-            if (!sus.getPermissionsState().hasPermission(bp.name, userId)) {
-                 continue;
-            }
-
-            boolean used = false;
-
             // Check if another package in the shared user needs the permission.
+            boolean used = false;
             for (PackageSetting pkg : sus.packages) {
                 if (pkg.pkg != null
                         && !pkg.pkg.packageName.equals(deletedPs.pkg.packageName)
@@ -840,26 +834,43 @@
                     break;
                 }
             }
+            if (used) {
+                continue;
+            }
 
-            if (!used) {
-                PermissionsState permissionsState = sus.getPermissionsState();
+            PermissionsState permissionsState = sus.getPermissionsState();
+            PackageSetting disabledPs = getDisabledSystemPkgLPr(deletedPs.pkg.packageName);
 
-                // Try to revoke as an install permission which is for all users.
-                // The package is gone - no need to keep flags for applying policy.
-                permissionsState.updatePermissionFlags(bp, userId,
-                        PackageManager.MASK_PERMISSION_FLAGS, 0);
-
-                if (permissionsState.revokeInstallPermission(bp) ==
-                        PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED) {
-                    return UserHandle.USER_ALL;
+            // If the package is shadowing is a disabled system package,
+            // do not drop permissions that the shadowed package requests.
+            if (disabledPs != null) {
+                boolean reqByDisabledSysPkg = false;
+                for (String permission : disabledPs.pkg.requestedPermissions) {
+                    if (permission.equals(eachPerm)) {
+                        reqByDisabledSysPkg = true;
+                        break;
+                    }
                 }
-
-                // Try to revoke as an install permission which is per user.
-                if (permissionsState.revokeRuntimePermission(bp, userId) ==
-                        PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED) {
-                    return userId;
+                if (reqByDisabledSysPkg) {
+                    continue;
                 }
             }
+
+            // Try to revoke as an install permission which is for all users.
+            // The package is gone - no need to keep flags for applying policy.
+            permissionsState.updatePermissionFlags(bp, userId,
+                    PackageManager.MASK_PERMISSION_FLAGS, 0);
+
+            if (permissionsState.revokeInstallPermission(bp) ==
+                    PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED) {
+                return UserHandle.USER_ALL;
+            }
+
+            // Try to revoke as an install permission which is per user.
+            if (permissionsState.revokeRuntimePermission(bp, userId) ==
+                    PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED) {
+                return userId;
+            }
         }
 
         return UserHandle.USER_NULL;
@@ -1058,36 +1069,8 @@
             }
             return false;
         }
+
         current.setDomainVerificationStatusForUser(status, userId);
-
-        if (current.getIntentFilterVerificationInfo() == null) {
-            if (DEBUG_DOMAIN_VERIFICATION) {
-                Slog.w(PackageManagerService.TAG,
-                        "No IntentFilterVerificationInfo known: " + packageName);
-            }
-            return false;
-        }
-
-        // Then, if we set a ALWAYS status, then put NEVER status for Apps whose IntentFilter
-        // domains overlap the domains of the current package
-        ArraySet<String> currentDomains = current.getIntentFilterVerificationInfo().getDomains();
-        if (status == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) {
-            for (PackageSetting ps : mPackages.values()) {
-                if (ps == null || ps.pkg == null || packageName.equals(ps.pkg.packageName)) {
-                    continue;
-                }
-                IntentFilterVerificationInfo ivi = ps.getIntentFilterVerificationInfo();
-                if (ivi == null) {
-                    continue;
-                }
-                ArraySet<String> set = ivi.getDomains();
-                set.retainAll(currentDomains);
-                if (set.size() > 0) {
-                    ps.setDomainVerificationStatusForUser(
-                            INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER, userId);
-                }
-            }
-        }
         return true;
     }
 
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 3393d7d..87efb8d 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -3048,14 +3048,6 @@
         }
     }
 
-    private void launchAssistAction() {
-        launchAssistAction(null, Integer.MIN_VALUE);
-    }
-
-    private void launchAssistAction(String hint) {
-        launchAssistAction(hint, Integer.MIN_VALUE);
-    }
-
     private void launchAssistAction(String hint, int deviceId) {
         sendCloseSystemWindows(SYSTEM_DIALOG_REASON_ASSIST);
         Bundle args = null;
@@ -3063,8 +3055,29 @@
             args = new Bundle();
             args.putInt(Intent.EXTRA_ASSIST_INPUT_DEVICE_ID, deviceId);
         }
-        ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                .launchAssistAction(hint, UserHandle.myUserId(), args);
+        if ((mContext.getResources().getConfiguration().uiMode
+                & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_TELEVISION) {
+            // On TV, use legacy handling until assistants are implemented in the proper way.
+            ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
+                    .launchLegacyAssist(hint, UserHandle.myUserId(), args);
+        } else {
+            try {
+                if (hint != null) {
+                    if (args == null) {
+                        args = new Bundle();
+                    }
+                    args.putBoolean(hint, true);
+                }
+                IStatusBarService statusbar = getStatusBarService();
+                if (statusbar != null) {
+                    statusbar.startAssist(args);
+                }
+            } catch (RemoteException e) {
+                Slog.e(TAG, "RemoteException when starting assist", e);
+                // re-acquire status bar service next time it is needed.
+                mStatusBarService = null;
+            }
+        }
     }
 
     private void startActivityAsUser(Intent intent, UserHandle handle) {
diff --git a/services/core/java/com/android/server/search/SearchManagerService.java b/services/core/java/com/android/server/search/SearchManagerService.java
index dd2286f..04b2f60 100644
--- a/services/core/java/com/android/server/search/SearchManagerService.java
+++ b/services/core/java/com/android/server/search/SearchManagerService.java
@@ -45,6 +45,8 @@
 
 import com.android.internal.content.PackageMonitor;
 import com.android.internal.util.IndentingPrintWriter;
+import com.android.server.LocalServices;
+import com.android.server.statusbar.StatusBarManagerInternal;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -240,16 +242,24 @@
     }
 
     @Override
-    public ComponentName getAssistIntent(int userHandle) {
+    public void launchAssist(Bundle args) {
+        StatusBarManagerInternal statusBarManager =
+                LocalServices.getService(StatusBarManagerInternal.class);
+        if (statusBarManager != null) {
+            statusBarManager.startAssist(args);
+        }
+    }
+
+    private ComponentName getLegacyAssistComponent(int userHandle) {
         try {
             userHandle = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
-                    Binder.getCallingUid(), userHandle, true, false, "getAssistIntent", null);
+                    Binder.getCallingUid(), userHandle, true, false, "getLegacyAssistComponent", null);
             IPackageManager pm = AppGlobals.getPackageManager();
             Intent assistIntent = new Intent(Intent.ACTION_ASSIST);
             ResolveInfo info =
                     pm.resolveIntent(assistIntent,
-                    assistIntent.resolveTypeIfNeeded(mContext.getContentResolver()),
-                    PackageManager.MATCH_DEFAULT_ONLY, userHandle);
+                            assistIntent.resolveTypeIfNeeded(mContext.getContentResolver()),
+                            PackageManager.MATCH_DEFAULT_ONLY, userHandle);
             if (info != null) {
                 return new ComponentName(
                         info.activityInfo.applicationInfo.packageName,
@@ -257,16 +267,16 @@
             }
         } catch (RemoteException re) {
             // Local call
-            Log.e(TAG, "RemoteException in getAssistIntent: " + re);
+            Log.e(TAG, "RemoteException in getLegacyAssistComponent: " + re);
         } catch (Exception e) {
-            Log.e(TAG, "Exception in getAssistIntent: " + e);
+            Log.e(TAG, "Exception in getLegacyAssistComponent: " + e);
         }
         return null;
     }
 
     @Override
-    public boolean launchAssistAction(String hint, int userHandle, Bundle args) {
-        ComponentName comp = getAssistIntent(userHandle);
+    public boolean launchLegacyAssist(String hint, int userHandle, Bundle args) {
+        ComponentName comp = getLegacyAssistComponent(userHandle);
         if (comp == null) {
             return false;
         }
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index 4692403..130815e 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -16,6 +16,8 @@
 
 package com.android.server.statusbar;
 
+import android.os.Bundle;
+
 import com.android.server.notification.NotificationDelegate;
 
 public interface StatusBarManagerInternal {
@@ -25,4 +27,5 @@
     void notificationLightOff();
     void showScreenPinningRequest();
     void showAssistDisclosure();
+    void startAssist(Bundle args);
 }
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 5ceb6ad..2a817ea 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -18,6 +18,7 @@
 
 import android.app.StatusBarManager;
 import android.os.Binder;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -165,6 +166,16 @@
                 }
             }
         }
+
+        @Override
+        public void startAssist(Bundle args) {
+            if (mBar != null) {
+                try {
+                    mBar.startAssist(args);
+                } catch (RemoteException e) {
+                }
+            }
+        }
     };
 
     // ================================================================================
@@ -526,6 +537,15 @@
         }
     }
 
+    @Override
+    public void startAssist(Bundle args) {
+        if (mBar != null) {
+            try {
+                mBar.startAssist(args);
+            } catch (RemoteException ex) {}
+        }
+    }
+
     private void enforceStatusBar() {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR,
                 "StatusBarManagerService");
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index 0bc6d22..11eb572 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -197,18 +197,25 @@
         final WindowState winShowWhenLocked = (WindowState) mPolicy.getWinShowWhenLockedLw();
         final AppWindowToken appShowWhenLocked = winShowWhenLocked == null ?
                 null : winShowWhenLocked.mAppToken;
-        final boolean hideWhenLocked =
-                !(((win.mIsImWindow || imeTarget == win) && showImeOverKeyguard)
-                        || (appShowWhenLocked != null && (appShowWhenLocked == win.mAppToken
-                        // Show all SHOW_WHEN_LOCKED windows while they're animating
-                        || (win.mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0 && win.isAnimatingLw()
-                        // Show error dialogs over apps that dismiss keyguard.
-                        || (win.mAttrs.privateFlags & PRIVATE_FLAG_SYSTEM_ERROR) != 0)));
+
+        boolean allowWhenLocked = false;
+        // Show IME over the keyguard if the target allows it
+        allowWhenLocked |= (win.mIsImWindow || imeTarget == win) && showImeOverKeyguard;
+        // Show SHOW_WHEN_LOCKED windows that turn on the screen
+        allowWhenLocked |= (win.mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0 && win.mTurnOnScreen;
+
+        if (appShowWhenLocked != null) {
+            allowWhenLocked |= appShowWhenLocked == win.mAppToken
+                    // Show all SHOW_WHEN_LOCKED windows while they're animating
+                    || (win.mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0 && win.isAnimatingLw()
+                    // Show error dialogs over apps that dismiss keyguard.
+                    || (win.mAttrs.privateFlags & PRIVATE_FLAG_SYSTEM_ERROR) != 0;
+        }
 
         // Only hide windows if the keyguard is active and not animating away.
         boolean keyguardOn = mPolicy.isKeyguardShowingOrOccluded()
                 && mForceHiding != KEYGUARD_ANIMATING_OUT;
-        return keyguardOn && hideWhenLocked && (win.getDisplayId() == Display.DEFAULT_DISPLAY);
+        return keyguardOn && !allowWhenLocked && (win.getDisplayId() == Display.DEFAULT_DISPLAY);
     }
 
     private void updateWindowsLocked(final int displayId) {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index c3174a3..5d05f32 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -4406,15 +4406,25 @@
 
 
     private void clearUserRestrictions(UserHandle userHandle) {
-        AudioManager audioManager =
-                (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
         Bundle userRestrictions = mUserManager.getUserRestrictions();
         mUserManager.setUserRestrictions(new Bundle(), userHandle);
+        IAudioService iAudioService = IAudioService.Stub.asInterface(
+                ServiceManager.getService(Context.AUDIO_SERVICE));
         if (userRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME)) {
-            audioManager.setMasterMute(false, 0);
+            try {
+                iAudioService.setMasterMute(true, 0, mContext.getPackageName(),
+                        userHandle.getIdentifier());
+            } catch (RemoteException e) {
+                // Not much we can do here.
+            }
         }
         if (userRestrictions.getBoolean(UserManager.DISALLOW_UNMUTE_MICROPHONE)) {
-            audioManager.setMicrophoneMute(false);
+            try {
+                iAudioService.setMicrophoneMute(true, mContext.getPackageName(),
+                        userHandle.getIdentifier());
+            } catch (RemoteException e) {
+                // Not much we can do here.
+            }
         }
     }
 
@@ -5425,9 +5435,11 @@
             try {
                 if (enabled && !alreadyRestricted) {
                     if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
-                        iAudioService.setMicrophoneMute(true, mContext.getPackageName());
+                        iAudioService.setMicrophoneMute(true, mContext.getPackageName(),
+                                userHandle);
                     } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
-                        iAudioService.setMasterMute(true, 0, mContext.getPackageName());
+                        iAudioService.setMasterMute(true, 0, mContext.getPackageName(),
+                                userHandle);
                     }
                     if (UserManager.DISALLOW_CONFIG_WIFI.equals(key)) {
                         Settings.Secure.putIntForUser(mContext.getContentResolver(),
@@ -5475,9 +5487,11 @@
                 }
                 if (!enabled && alreadyRestricted) {
                     if (UserManager.DISALLOW_UNMUTE_MICROPHONE.equals(key)) {
-                        iAudioService.setMicrophoneMute(false, mContext.getPackageName());
+                        iAudioService.setMicrophoneMute(false, mContext.getPackageName(),
+                                userHandle);
                     } else if (UserManager.DISALLOW_ADJUST_VOLUME.equals(key)) {
-                        iAudioService.setMasterMute(false, 0, mContext.getPackageName());
+                        iAudioService.setMasterMute(false, 0, mContext.getPackageName(),
+                                userHandle);
                     }
                 }
             } catch (RemoteException re) {
@@ -6026,13 +6040,16 @@
         Preconditions.checkNotNull(who, "ComponentName is null");
         synchronized (this) {
             getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
-
-            IAudioService iAudioService = IAudioService.Stub.asInterface(
-                    ServiceManager.getService(Context.AUDIO_SERVICE));
+            int userId = UserHandle.getCallingUserId();
+            long identity = Binder.clearCallingIdentity();
             try {
-                iAudioService.setMasterMute(on, 0, who.getPackageName());
+                IAudioService iAudioService = IAudioService.Stub.asInterface(
+                        ServiceManager.getService(Context.AUDIO_SERVICE));
+                iAudioService.setMasterMute(on, 0, mContext.getPackageName(), userId);
             } catch (RemoteException re) {
                 Slog.e(LOG_TAG, "Failed to setMasterMute", re);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
             }
         }
     }
diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java
index f82a4dd..d90ade8 100644
--- a/services/usb/java/com/android/server/usb/UsbService.java
+++ b/services/usb/java/com/android/server/usb/UsbService.java
@@ -310,6 +310,13 @@
     @Override
     public void setUsbDataUnlocked(boolean unlocked) {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        // If attempt to change USB function while file transfer is restricted, ensure that
+        // usb data is always locked, and return.
+        UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        if (userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
+            if (mDeviceManager != null) mDeviceManager.setUsbDataUnlocked(false);
+            return;
+        }
         mDeviceManager.setUsbDataUnlocked(unlocked);
     }
 
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 61ae1c0..36478da 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -761,7 +761,8 @@
         }
 
         @Override
-        public void showSessionForActiveService(IVoiceInteractionSessionShowCallback showCallback) {
+        public void showSessionForActiveService(Bundle args,
+                IVoiceInteractionSessionShowCallback showCallback) {
             enforceCallingPermission(Manifest.permission.ACCESS_VOICE_INTERACTION_SERVICE);
             synchronized (this) {
                 if (mImpl == null) {
@@ -771,7 +772,7 @@
                 }
                 final long caller = Binder.clearCallingIdentity();
                 try {
-                    mImpl.showSessionLocked(new Bundle() /* sessionArgs */,
+                    mImpl.showSessionLocked(args,
                             VoiceInteractionSession.SHOW_SOURCE_ASSIST_GESTURE
                                     | VoiceInteractionSession.SHOW_WITH_ASSIST
                                     | VoiceInteractionSession.SHOW_WITH_SCREENSHOT,
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index e756a57..4569549 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -921,7 +921,8 @@
      */
     public void registerCallback(Callback callback, Handler handler) {
         unregisterCallback(callback);
-        if (callback != null && handler != null) {
+        // Don't allow new callback registration if the call is already being destroyed.
+        if (callback != null && handler != null && mState != STATE_DISCONNECTED) {
             mCallbackRecords.add(new CallbackRecord<Callback>(callback, handler));
         }
     }
@@ -932,7 +933,8 @@
      * @param callback A {@code Callback}.
      */
     public void unregisterCallback(Callback callback) {
-        if (callback != null) {
+        // Don't allow callback deregistration if the call is already being destroyed.
+        if (callback != null && mState != STATE_DISCONNECTED) {
             for (CallbackRecord<Callback> record : mCallbackRecords) {
                 if (record.getCallback() == callback) {
                     mCallbackRecords.remove(record);
@@ -1080,7 +1082,6 @@
         // DISCONNECTED Call while still relying on the existence of that Call in the Phone's list.
         if (mState == STATE_DISCONNECTED) {
             fireCallDestroyed();
-            mPhone.internalRemoveCall(this);
         }
     }
 
@@ -1096,7 +1097,6 @@
             mState = Call.STATE_DISCONNECTED;
             fireStateChanged(mState);
             fireCallDestroyed();
-            mPhone.internalRemoveCall(this);
         }
     }
 
@@ -1192,13 +1192,42 @@
     }
 
     private void fireCallDestroyed() {
-        for (CallbackRecord<Callback> record: mCallbackRecords) {
-            final Call call = this;
+        /**
+         * To preserve the ordering of the Call's onCallDestroyed callback and Phone's
+         * onCallRemoved callback, we remove this call from the Phone's record
+         * only once all of the registered onCallDestroyed callbacks are executed.
+         * All the callbacks get removed from our records as a part of this operation
+         * since onCallDestroyed is the final callback.
+         */
+        final Call call = this;
+        if (mCallbackRecords.isEmpty()) {
+            // No callbacks registered, remove the call from Phone's record.
+            mPhone.internalRemoveCall(call);
+        }
+        for (final CallbackRecord<Callback> record : mCallbackRecords) {
             final Callback callback = record.getCallback();
             record.getHandler().post(new Runnable() {
                 @Override
                 public void run() {
-                    callback.onCallDestroyed(call);
+                    boolean isFinalRemoval = false;
+                    RuntimeException toThrow = null;
+                    try {
+                        callback.onCallDestroyed(call);
+                    } catch (RuntimeException e) {
+                            toThrow = e;
+                    }
+                    synchronized(Call.this) {
+                        mCallbackRecords.remove(record);
+                        if (mCallbackRecords.isEmpty()) {
+                            isFinalRemoval = true;
+                        }
+                    }
+                    if (isFinalRemoval) {
+                        mPhone.internalRemoveCall(call);
+                    }
+                    if (toThrow != null) {
+                        throw toThrow;
+                    }
                 }
             });
         }
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index fa1ed54..f4a6064 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -335,7 +335,7 @@
      *                 onSubscriptionsChanged overridden.
      */
     public void addOnSubscriptionsChangedListener(OnSubscriptionsChangedListener listener) {
-        String pkgForDebug = mContext != null ? mContext.getPackageName() : "<unknown>";
+        String pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>";
         if (DBG) {
             logd("register OnSubscriptionsChangedListener pkgForDebug=" + pkgForDebug
                     + " listener=" + listener);
@@ -361,7 +361,7 @@
      * @param listener that is to be unregistered.
      */
     public void removeOnSubscriptionsChangedListener(OnSubscriptionsChangedListener listener) {
-        String pkgForDebug = mContext != null ? mContext.getPackageName() : "<unknown>";
+        String pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>";
         if (DBG) {
             logd("unregister OnSubscriptionsChangedListener pkgForDebug=" + pkgForDebug
                     + " listener=" + listener);
@@ -603,7 +603,7 @@
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
                 // FIXME: This returns 1 on success, 0 on error should should we return it?
-                iSub.addSubInfoRecord(iccId, slotId, mContext.getOpPackageName());
+                iSub.addSubInfoRecord(iccId, slotId);
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -633,7 +633,7 @@
         try {
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
-                result = iSub.setIconTint(tint, subId, mContext.getOpPackageName());
+                result = iSub.setIconTint(tint, subId);
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -678,8 +678,7 @@
         try {
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
-                result = iSub.setDisplayNameUsingSrc(displayName, subId, nameSource,
-                        mContext.getOpPackageName());
+                result = iSub.setDisplayNameUsingSrc(displayName, subId, nameSource);
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -707,7 +706,7 @@
         try {
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
-                result = iSub.setDisplayNumber(number, subId, mContext.getOpPackageName());
+                result = iSub.setDisplayNumber(number, subId);
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -736,7 +735,7 @@
         try {
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
-                result = iSub.setDataRoaming(roaming, subId, mContext.getOpPackageName());
+                result = iSub.setDataRoaming(roaming, subId);
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -975,7 +974,7 @@
         try {
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
-                iSub.clearSubInfo(mContext.getOpPackageName());
+                iSub.clearSubInfo();
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -1009,7 +1008,7 @@
         try {
             ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
             if (iSub != null) {
-                iSub.clearDefaultsForInactiveSubIds(mContext.getOpPackageName());
+                iSub.clearDefaultsForInactiveSubIds();
             }
         } catch (RemoteException ex) {
             // ignore it
@@ -1153,4 +1152,3 @@
         return false;
     }
 }
-
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 68f71f2..e74344c 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -1371,7 +1371,7 @@
        try {
            ITelephony telephony = getITelephony();
            if (telephony != null) {
-               return telephony.getNetworkTypeForSubscriber(subId);
+               return telephony.getNetworkTypeForSubscriber(subId, getOpPackageName());
            } else {
                // This can happen when the ITelephony interface is not up yet.
                return NETWORK_TYPE_UNKNOWN;
@@ -1425,7 +1425,7 @@
         try{
             ITelephony telephony = getITelephony();
             if (telephony != null) {
-                return telephony.getDataNetworkTypeForSubscriber(subId);
+                return telephony.getDataNetworkTypeForSubscriber(subId, getOpPackageName());
             } else {
                 // This can happen when the ITelephony interface is not up yet.
                 return NETWORK_TYPE_UNKNOWN;
@@ -1919,7 +1919,7 @@
             ITelephony telephony = getITelephony();
             if (telephony == null)
                 return PhoneConstants.LTE_ON_CDMA_UNKNOWN;
-            return telephony.getLteOnCdmaModeForSubscriber(subId);
+            return telephony.getLteOnCdmaModeForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             // Assume no ICC card if remote exception which shouldn't happen
             return PhoneConstants.LTE_ON_CDMA_UNKNOWN;
@@ -2657,7 +2657,7 @@
             ITelephony telephony = getITelephony();
             if (telephony == null)
                 return -1;
-            return telephony.getCdmaEriIconIndexForSubscriber(subId);
+            return telephony.getCdmaEriIconIndexForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return -1;
@@ -2688,7 +2688,7 @@
             ITelephony telephony = getITelephony();
             if (telephony == null)
                 return -1;
-            return telephony.getCdmaEriIconModeForSubscriber(subId);
+            return telephony.getCdmaEriIconModeForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return -1;
@@ -2716,7 +2716,7 @@
             ITelephony telephony = getITelephony();
             if (telephony == null)
                 return null;
-            return telephony.getCdmaEriTextForSubscriber(subId);
+            return telephony.getCdmaEriTextForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             // the phone process is restarting.
             return null;
@@ -3833,7 +3833,7 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null)
-                return telephony.isOffhook();
+                return telephony.isOffhook(getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isOffhook", e);
         }
@@ -3846,7 +3846,7 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null)
-                return telephony.isRinging();
+                return telephony.isRinging(getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isRinging", e);
         }
@@ -3859,7 +3859,7 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null)
-                return telephony.isIdle();
+                return telephony.isIdle(getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isIdle", e);
         }
@@ -3872,7 +3872,7 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null)
-                return telephony.isRadioOn();
+                return telephony.isRadioOn(getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isRadioOn", e);
         }
diff --git a/telephony/java/com/android/internal/telephony/ISub.aidl b/telephony/java/com/android/internal/telephony/ISub.aidl
index 918a2eb..0555121 100755
--- a/telephony/java/com/android/internal/telephony/ISub.aidl
+++ b/telephony/java/com/android/internal/telephony/ISub.aidl
@@ -83,7 +83,7 @@
     List<SubscriptionInfo> getActiveSubscriptionInfoList(String callingPackage);
 
     /**
-     * @param callingPackage The package maing the call.
+     * @param callingPackage The package making the call.
      * @return the number of active subscriptions
      */
     int getActiveSubInfoCount(String callingPackage);
@@ -97,57 +97,50 @@
      * Add a new SubscriptionInfo to subinfo database if needed
      * @param iccId the IccId of the SIM card
      * @param slotId the slot which the SIM is inserted
-     * @param callingPackage The package maing the call.
      * @return the URL of the newly created row or the updated row
      */
-    int addSubInfoRecord(String iccId, int slotId, String callingPackage);
+    int addSubInfoRecord(String iccId, int slotId);
 
     /**
      * Set SIM icon tint color by simInfo index
      * @param tint the icon tint color of the SIM
      * @param subId the unique SubscriptionInfo index in database
-     * @param callingPackage The package maing the call.
      * @return the number of records updated
      */
-    int setIconTint(int tint, int subId, String callingPackage);
+    int setIconTint(int tint, int subId);
 
     /**
      * Set display name by simInfo index
      * @param displayName the display name of SIM card
      * @param subId the unique SubscriptionInfo index in database
-     * @param callingPackage The package maing the call.
      * @return the number of records updated
      */
-    int setDisplayName(String displayName, int subId, String callingPackage);
+    int setDisplayName(String displayName, int subId);
 
     /**
      * Set display name by simInfo index with name source
      * @param displayName the display name of SIM card
      * @param subId the unique SubscriptionInfo index in database
      * @param nameSource, 0: DEFAULT_SOURCE, 1: SIM_SOURCE, 2: USER_INPUT
-     * @param callingPackage The package maing the call.
      * @return the number of records updated
      */
-    int setDisplayNameUsingSrc(String displayName, int subId, long nameSource,
-            String callingPackage);
+    int setDisplayNameUsingSrc(String displayName, int subId, long nameSource);
 
     /**
      * Set phone number by subId
      * @param number the phone number of the SIM
      * @param subId the unique SubscriptionInfo index in database
-     * @param callingPackage The package maing the call.
      * @return the number of records updated
      */
-    int setDisplayNumber(String number, int subId, String callingPackage);
+    int setDisplayNumber(String number, int subId);
 
     /**
      * Set data roaming by simInfo index
      * @param roaming 0:Don't allow data when roaming, 1:Allow data when roaming
-     * @param callingPackage The package maing the call.
      * @param subId the unique SubscriptionInfo index in database
      * @return the number of records updated
      */
-    int setDataRoaming(int roaming, int subId, String callingPackage);
+    int setDataRoaming(int roaming, int subId);
 
     int getSlotId(int subId);
 
@@ -155,7 +148,7 @@
 
     int getDefaultSubId();
 
-    int clearSubInfo(String callingPackage);
+    int clearSubInfo();
 
     int getPhoneId(int subId);
 
@@ -175,7 +168,7 @@
 
     void setDefaultSmsSubId(int subId);
 
-    void clearDefaultsForInactiveSubIds(String callingPackage);
+    void clearDefaultsForInactiveSubIds();
 
     int[] getActiveSubIdList();
 
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 7dc71ed..6db88a7 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -116,59 +116,67 @@
 
     /**
      * Check if we are in either an active or holding call
+     * @param callingPackage the name of the package making the call.
      * @return true if the phone state is OFFHOOK.
      */
-    boolean isOffhook();
+    boolean isOffhook(String callingPackage);
 
     /**
      * Check if a particular subId has an active or holding call
      *
      * @param subId user preferred subId.
+     * @param callingPackage the name of the package making the call.
      * @return true if the phone state is OFFHOOK.
      */
-    boolean isOffhookForSubscriber(int subId);
+    boolean isOffhookForSubscriber(int subId, String callingPackage);
 
     /**
      * Check if an incoming phone call is ringing or call waiting
      * on a particular subId.
      *
      * @param subId user preferred subId.
+     * @param callingPackage the name of the package making the call.
      * @return true if the phone state is RINGING.
      */
-    boolean isRingingForSubscriber(int subId);
+    boolean isRingingForSubscriber(int subId, String callingPackage);
 
     /**
      * Check if an incoming phone call is ringing or call waiting.
+     * @param callingPackage the name of the package making the call.
      * @return true if the phone state is RINGING.
      */
-    boolean isRinging();
+    boolean isRinging(String callingPackage);
 
     /**
      * Check if the phone is idle.
+     * @param callingPackage the name of the package making the call.
      * @return true if the phone state is IDLE.
      */
-    boolean isIdle();
+    boolean isIdle(String callingPackage);
 
     /**
      * Check if the phone is idle on a particular subId.
      *
      * @param subId user preferred subId.
+     * @param callingPackage the name of the package making the call.
      * @return true if the phone state is IDLE.
      */
-    boolean isIdleForSubscriber(int subId);
+    boolean isIdleForSubscriber(int subId, String callingPackage);
 
     /**
      * Check to see if the radio is on or not.
+     * @param callingPackage the name of the package making the call.
      * @return returns true if the radio is on.
      */
-    boolean isRadioOn();
+    boolean isRadioOn(String callingPackage);
 
     /**
      * Check to see if the radio is on or not on particular subId.
      * @param subId user preferred subId.
+     * @param callingPackage the name of the package making the call.
      * @return returns true if the radio is on.
      */
-    boolean isRadioOnForSubscriber(int subId);
+    boolean isRadioOnForSubscriber(int subId, String callingPackage);
 
     /**
      * Check if the SIM pin lock is enabled.
@@ -380,40 +388,46 @@
 
     /**
      * Returns the CDMA ERI icon index to display
+     * @param callingPackage package making the call.
      */
-    int getCdmaEriIconIndex();
+    int getCdmaEriIconIndex(String callingPackage);
 
     /**
      * Returns the CDMA ERI icon index to display on particular subId.
      * @param subId user preferred subId.
+     * @param callingPackage package making the call.
      */
-    int getCdmaEriIconIndexForSubscriber(int subId);
+    int getCdmaEriIconIndexForSubscriber(int subId, String callingPackage);
 
     /**
      * Returns the CDMA ERI icon mode,
      * 0 - ON
      * 1 - FLASHING
+     * @param callingPackage package making the call.
      */
-    int getCdmaEriIconMode();
+    int getCdmaEriIconMode(String callingPackage);
 
     /**
      * Returns the CDMA ERI icon mode on particular subId,
      * 0 - ON
      * 1 - FLASHING
      * @param subId user preferred subId.
+     * @param callingPackage package making the call.
      */
-    int getCdmaEriIconModeForSubscriber(int subId);
+    int getCdmaEriIconModeForSubscriber(int subId, String callingPackage);
 
     /**
      * Returns the CDMA ERI text,
+     * @param callingPackage package making the call.
      */
-    String getCdmaEriText();
+    String getCdmaEriText(String callingPackage);
 
     /**
      * Returns the CDMA ERI text for particular subId,
      * @param subId user preferred subId.
+     * @param callingPackage package making the call.
      */
-    String getCdmaEriTextForSubscriber(int subId);
+    String getCdmaEriTextForSubscriber(int subId, String callingPackage);
 
     /**
      * Returns true if OTA service provisioning needs to run.
@@ -440,28 +454,30 @@
     int getVoiceMessageCountForSubscriber(int subId);
 
     /**
-      * Returns the network type for data transmission
-      */
-    int getNetworkType();
+     * Returns the network type for data transmission
+     * @param callingPackage package making the call.
+     */
+    int getNetworkType(String callingPackage);
 
     /**
      * Returns the network type of a subId.
      * @param subId user preferred subId.
-     * Returns the network type
+     * @param callingPackage package making the call.
      */
-    int getNetworkTypeForSubscriber(int subId);
+    int getNetworkTypeForSubscriber(int subId, String callingPackage);
 
     /**
-      * Returns the network type for data transmission
-      */
-    int getDataNetworkType();
+     * Returns the network type for data transmission
+     * @param callingPackage package making the call.
+     */
+    int getDataNetworkType(String callingPackage);
 
     /**
-      * Returns the data network type of a subId
-      * @param subId user preferred subId.
-      * Returns the network type
-      */
-    int getDataNetworkTypeForSubscriber(int subId);
+     * Returns the data network type of a subId
+     * @param subId user preferred subId.
+     * @param callingPackage package making the call.
+     */
+    int getDataNetworkTypeForSubscriber(int subId, String callingPackage);
 
     /**
       * Returns the network type for voice
@@ -492,20 +508,22 @@
      * is a tri-state return value as for a period of time
      * the mode may be unknown.
      *
+     * @param callingPackage the name of the calling package
      * @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
      * or {@link PHone#LTE_ON_CDMA_TRUE}
      */
-    int getLteOnCdmaMode();
+    int getLteOnCdmaMode(String callingPackage);
 
     /**
      * Return if the current radio is LTE on CDMA. This
      * is a tri-state return value as for a period of time
      * the mode may be unknown.
      *
+     * @param callingPackage the name of the calling package
      * @return {@link Phone#LTE_ON_CDMA_UNKNOWN}, {@link Phone#LTE_ON_CDMA_FALSE}
      * or {@link PHone#LTE_ON_CDMA_TRUE}
      */
-    int getLteOnCdmaModeForSubscriber(int subId);
+    int getLteOnCdmaModeForSubscriber(int subId, String callingPackage);
 
     /**
      * Returns the all observed cell information of the device.
@@ -890,9 +908,10 @@
      * Get phone radio type and access technology.
      *
      * @param phoneId which phone you want to get
+     * @param callingPackage the name of the package making the call
      * @return phone radio type and access technology
      */
-    int getRadioAccessFamily(in int phoneId);
+    int getRadioAccessFamily(in int phoneId, String callingPackage);
 
     /**
      * Enables or disables video calling.
diff --git a/tests/VoiceInteraction/res/layout/main.xml b/tests/VoiceInteraction/res/layout/main.xml
index 092d37d..0f968eb 100644
--- a/tests/VoiceInteraction/res/layout/main.xml
+++ b/tests/VoiceInteraction/res/layout/main.xml
@@ -30,10 +30,17 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingTop="64dp"
-            android:paddingBottom="64dp"
             android:text="@string/asyncStructure"
             />
 
+    <EditText android:id="@+id/text"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:paddingTop="64dp"
+            android:paddingBottom="64dp"
+            android:text="@string/largetext" />
+
 </LinearLayout>
 
 
diff --git a/tests/VoiceInteraction/res/values/strings.xml b/tests/VoiceInteraction/res/values/strings.xml
index cf660e6..ab39f99 100644
--- a/tests/VoiceInteraction/res/values/strings.xml
+++ b/tests/VoiceInteraction/res/values/strings.xml
@@ -30,4 +30,233 @@
     <string name="cancelVoice">Cancel</string>
     <string name="jumpOut">Jump out</string>
 
+    <string name="largetext">This is a bunch of text that we will use to show how we handle it
+when reporting it for assist data.  We need many many lines of text, like\n
+this\n
+and\n
+this other\n
+one\n
+two\n
+three\n
+four\n
+five\n
+six\n
+seven\n
+eight\n
+nine\n
+ten\n
+eleven\n
+twelve\n
+thirteen\n
+fourteen\n
+fifteen\n
+sixteen\n
+seventeen\n
+eighteen\n
+nineteen\n
+twenty\n
+<big><big><big>So shaken as we are, so wan with care,\n
+Find we a time for frighted peace to pant,\n</big>
+And breathe short-winded accents of new broils\n
+To be commenced in strands afar remote.\n</big>
+No more the thirsty entrance of this soil\n
+Shall daub her lips with her own children\'s blood;\n</big>
+<b>Nor more shall trenching war channel her fields,\n
+Nor bruise her flowerets with the armed hoofs\n</b>
+<i>Of hostile paces: those opposed eyes,\n
+Which, like the meteors of a troubled heaven,\n</i>
+All of one nature, of one substance bred,\n
+Did lately meet in the intestine shock\n
+And furious close of civil butchery\n
+Shall now, in mutual well-beseeming ranks,\n
+March all one way and be no more opposed\n
+Against acquaintance, kindred and allies:\n
+The edge of war, like an ill-sheathed knife,\n
+No more shall cut his master. Therefore, friends,\n
+As far as to the sepulchre of Christ,\n
+Whose soldier now, under whose blessed cross\n
+We are impressed and engaged to fight,\n
+Forthwith a power of English shall we levy;\n
+Whose arms were moulded in their mothers\' womb\n
+To chase these pagans in those holy fields\n
+Over whose acres walk\'d those blessed feet\n
+Which fourteen hundred years ago were nail\'d\n
+For our advantage on the bitter cross.\n
+But this our purpose now is twelve month old,\n
+And bootless \'tis to tell you we will go:\n
+Therefore we meet not now. Then let me hear\n
+Of you, my gentle cousin Westmoreland,\n
+What yesternight our council did decree\n
+In forwarding this dear expedience.\n
+\n
+Hear him but reason in divinity,\n
+And all-admiring with an inward wish\n
+You would desire the king were made a prelate:\n
+Hear him debate of commonwealth affairs,\n
+You would say it hath been all in all his study:\n
+List his discourse of war, and you shall hear\n
+A fearful battle render\'d you in music:\n
+Turn him to any cause of policy,\n
+The Gordian knot of it he will unloose,\n
+Familiar as his garter: that, when he speaks,\n
+The air, a charter\'d libertine, is still,\n
+And the mute wonder lurketh in men\'s ears,\n
+To steal his sweet and honey\'d sentences;\n
+So that the art and practic part of life\n
+Must be the mistress to this theoric:\n
+Which is a wonder how his grace should glean it,\n
+Since his addiction was to courses vain,\n
+His companies unletter\'d, rude and shallow,\n
+His hours fill\'d up with riots, banquets, sports,\n
+And never noted in him any study,\n
+Any retirement, any sequestration\n
+From open haunts and popularity.\n
+\n
+I come no more to make you laugh: things now,\n
+That bear a weighty and a serious brow,\n
+Sad, high, and working, full of state and woe,\n
+Such noble scenes as draw the eye to flow,\n
+e now present. Those that can pity, here\n
+May, if they think it well, let fall a tear;\n
+The subject will deserve it. Such as give\n
+Their money out of hope they may believe,\n
+May here find truth too. Those that come to see\n
+Only a show or two, and so agree\n
+The play may pass, if they be still and willing,\n
+I\'ll undertake may see away their shilling\n
+Richly in two short hours. Only they\n
+That come to hear a merry bawdy play,\n
+A noise of targets, or to see a fellow\n
+In a long motley coat guarded with yellow,\n
+Will be deceived; for, gentle hearers, know,\n
+To rank our chosen truth with such a show\n
+As fool and fight is, beside forfeiting\n
+Our own brains, and the opinion that we bring,\n
+To make that only true we now intend,\n
+Will leave us never an understanding friend.\n
+Therefore, for goodness\' sake, and as you are known\n
+The first and happiest hearers of the town,\n
+Be sad, as we would make ye: think ye see\n
+The very persons of our noble story\n
+As they were living; think you see them great,\n
+And follow\'d with the general throng and sweat\n
+Of thousand friends; then in a moment, see\n
+How soon this mightiness meets misery:\n
+And, if you can be merry then, I\'ll say\n
+A man may weep upon his wedding-day.\n
+\n
+<big>First, heaven be the record to my speech!\n
+In the devotion of a subject\'s love,\n</big>
+<b>Tendering the precious safety of my prince,\n
+And free from other misbegotten hate,\n</b>
+Come I appellant to this princely presence.\n
+Now, Thomas Mowbray, do I turn to thee,\n
+And mark my greeting well; for what I speak\n
+My body shall make good upon this earth,\n
+Or my divine soul answer it in heaven.\n
+Thou art a traitor and a miscreant,\n
+Too good to be so and too bad to live,\n
+Since the more fair and crystal is the sky,\n
+The uglier seem the clouds that in it fly.\n
+Once more, the more to aggravate the note,\n
+With a foul traitor\'s name stuff I thy throat;\n
+And wish, so please my sovereign, ere I move,\n
+What my tongue speaks my right drawn sword may prove.\n
+\n
+Now is the winter of our discontent\n
+Made glorious summer by this sun of York;\n
+And all the clouds that lour\'d upon our house\n
+In the deep bosom of the ocean buried.\n
+Now are our brows bound with victorious wreaths;\n
+Our bruised arms hung up for monuments;\n
+Our stern alarums changed to merry meetings,\n
+Our dreadful marches to delightful measures.\n
+Grim-visaged war hath smooth\'d his wrinkled front;\n
+And now, instead of mounting barded steeds\n
+To fright the souls of fearful adversaries,\n
+He capers nimbly in a lady\'s chamber\n
+To the lascivious pleasing of a lute.\n
+But I, that am not shaped for sportive tricks,\n
+Nor made to court an amorous looking-glass;\n
+I, that am rudely stamp\'d, and want love\'s majesty\n
+To strut before a wanton ambling nymph;\n
+I, that am curtail\'d of this fair proportion,\n
+Cheated of feature by dissembling nature,\n
+Deformed, unfinish\'d, sent before my time\n
+Into this breathing world, scarce half made up,\n
+And that so lamely and unfashionable\n
+That dogs bark at me as I halt by them;\n
+Why, I, in this weak piping time of peace,\n
+Have no delight to pass away the time,\n
+Unless to spy my shadow in the sun\n
+And descant on mine own deformity:\n
+And therefore, since I cannot prove a lover,\n
+To entertain these fair well-spoken days,\n
+I am determined to prove a villain\n
+And hate the idle pleasures of these days.\n
+Plots have I laid, inductions dangerous,\n
+By drunken prophecies, libels and dreams,\n
+To set my brother Clarence and the king\n
+In deadly hate the one against the other:\n
+And if King Edward be as true and just\n
+As I am subtle, false and treacherous,\n
+This day should Clarence closely be mew\'d up,\n
+About a prophecy, which says that \'G\'\n
+Of Edward\'s heirs the murderer shall be.\n
+Dive, thoughts, down to my soul: here\n
+Clarence comes.\n
+\n
+To bait fish withal: if it will feed nothing else,\n
+it will feed my revenge. He hath disgraced me, and\n
+hindered me half a million; laughed at my losses,\n
+mocked at my gains, scorned my nation, thwarted my\n
+bargains, cooled my friends, heated mine\n
+enemies; and what\'s his reason? I am a Jew. Hath\n
+not a Jew eyes? hath not a Jew hands, organs,\n
+dimensions, senses, affections, passions? fed with\n
+the same food, hurt with the same weapons, subject\n
+to the same diseases, healed by the same means,\n
+warmed and cooled by the same winter and summer, as\n
+a Christian is? If you prick us, do we not bleed?\n
+if you tickle us, do we not laugh? if you poison\n
+us, do we not die? and if you wrong us, shall we not\n
+revenge? If we are like you in the rest, we will\n
+resemble you in that. If a Jew wrong a Christian,\n
+what is his humility? Revenge. If a Christian\n
+wrong a Jew, what should his sufferance be by\n
+Christian example? Why, revenge. The villany you\n
+teach me, I will execute, and it shall go hard but I\n
+will better the instruction.\n
+\n
+Virtue! a fig! \'tis in ourselves that we are thus\n
+or thus. Our bodies are our gardens, to the which\n
+our wills are gardeners: so that if we will plant\n
+nettles, or sow lettuce, set hyssop and weed up\n
+thyme, supply it with one gender of herbs, or\n
+distract it with many, either to have it sterile\n
+with idleness, or manured with industry, why, the\n
+power and corrigible authority of this lies in our\n
+wills. If the balance of our lives had not one\n
+scale of reason to poise another of sensuality, the\n
+blood and baseness of our natures would conduct us\n
+to most preposterous conclusions: but we have\n
+reason to cool our raging motions, our carnal\n
+stings, our unbitted lusts, whereof I take this that\n
+you call love to be a sect or scion.\n
+\n
+Blow, winds, and crack your cheeks! rage! blow!\n
+You cataracts and hurricanoes, spout\n
+Till you have drench\'d our steeples, drown\'d the cocks!\n
+You sulphurous and thought-executing fires,\n
+Vaunt-couriers to oak-cleaving thunderbolts,\n
+Singe my white head! And thou, all-shaking thunder,\n
+Smite flat the thick rotundity o\' the world!\n
+Crack nature\'s moulds, an germens spill at once,\n
+That make ingrateful man!
+5...\n
+4...\n
+3...\n
+2...\n
+1...\n
+BEEEEEEEEEEEEEEEEEP!</string>
 </resources>
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java
index 339755f..005a483 100644
--- a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AssistVisualizer.java
@@ -38,6 +38,9 @@
         final Matrix matrix;
         final String className;
         final CharSequence text;
+        final int scrollY;
+        final int[] lineCharOffsets;
+        final int[] lineBaselines;
 
         TextEntry(AssistStructure.ViewNode node, int parentLeft, int parentTop, Matrix matrix) {
             int left = parentLeft+node.getLeft();
@@ -48,16 +51,19 @@
             this.matrix = new Matrix(matrix);
             this.className = node.getClassName();
             this.text = node.getText() != null ? node.getText() : node.getContentDescription();
+            this.scrollY = node.getScrollY();
+            this.lineCharOffsets = node.getTextLineCharOffsets();
+            this.lineBaselines = node.getTextLineBaselines();
         }
     }
 
     AssistStructure mAssistStructure;
     final Paint mFramePaint = new Paint();
+    final Paint mFrameBaselinePaint = new Paint();
     final Paint mFrameNoTransformPaint = new Paint();
     final ArrayList<Matrix> mMatrixStack = new ArrayList<>();
     final ArrayList<TextEntry> mTextRects = new ArrayList<>();
     final int[] mTmpLocation = new int[2];
-    final float[] mTmpMatrixPoint = new float[2];
 
     public AssistVisualizer(Context context, @Nullable AttributeSet attrs) {
         super(context, attrs);
@@ -65,6 +71,9 @@
         mFramePaint.setColor(0xffff0000);
         mFramePaint.setStyle(Paint.Style.STROKE);
         mFramePaint.setStrokeWidth(0);
+        mFrameBaselinePaint.setColor(0xa0b0b000);
+        mFrameBaselinePaint.setStyle(Paint.Style.STROKE);
+        mFrameBaselinePaint.setStrokeWidth(0);
         float density = getResources().getDisplayMetrics().density;
         mFramePaint.setShadowLayer(density, density, density, 0xff000000);
         mFrameNoTransformPaint.setColor(0xff0000ff);
@@ -106,6 +115,14 @@
                     + " in " + te.parentLeft + "," + te.parentTop
                     + " matrix=" + te.matrix.toShortString() + ": "
                     + te.text);
+            if (te.lineCharOffsets != null && te.lineBaselines != null) {
+                final int num = te.lineCharOffsets.length < te.lineBaselines.length
+                        ? te.lineCharOffsets.length : te.lineBaselines.length;
+                for (int j=0; j<num; j++) {
+                    Log.d(TAG, "  Line #" + j + ": offset=" + te.lineCharOffsets[j]
+                            + " baseline=" + te.lineBaselines[j]);
+                }
+            }
         }
     }
 
@@ -171,6 +188,13 @@
             canvas.concat(te.matrix);
             canvas.drawRect(0, 0, te.bounds.right - te.bounds.left, te.bounds.bottom - te.bounds.top,
                     mFramePaint);
+            if (te.lineBaselines != null) {
+                for (int j=0; j<te.lineBaselines.length; j++) {
+                    canvas.drawLine(0, te.lineBaselines[j] - te.scrollY,
+                            te.bounds.right - te.bounds.left, te.lineBaselines[j] - te.scrollY,
+                            mFrameBaselinePaint);
+                }
+            }
             canvas.restore();
         }
     }
diff --git a/tools/layoutlib/bridge/bridge.iml b/tools/layoutlib/bridge/bridge.iml
index af2fe7f..ccc10b3 100644
--- a/tools/layoutlib/bridge/bridge.iml
+++ b/tools/layoutlib/bridge/bridge.iml
@@ -46,7 +46,7 @@
         </CLASSES>
         <JAVADOC />
         <SOURCES>
-          <root url="file://$ANDROID_SRC$/tools/base/common/src/main/java" />
+          <root url="jar://$MODULE_DIR$/../../../../../prebuilts/misc/common/tools-common/tools-common-prebuilt-sources.jar!/" />
         </SOURCES>
       </library>
     </orderEntry>
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index 57dd429..65b65ec 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -1171,8 +1171,9 @@
         float[] advances = new float[count];
         native_getTextRunAdvances(nativePaint, nativeTypeface, text, start, count,
                 contextStart, contextEnd - contextStart, isRtl, advances, 0);
+        int startOffset = offset - start;  // offset from start.
         float sum = 0;
-        for (int i = 0; i < offset; i++) {
+        for (int i = 0; i < startOffset; i++) {
             sum += advances[i];
         }
         return sum;
diff --git a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
index 6767a07..20b6e41 100644
--- a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
+++ b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
@@ -25,7 +25,9 @@
 import com.android.layoutlib.bridge.BridgeConstants;
 import com.android.layoutlib.bridge.android.BridgeContext;
 import com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
+import com.android.layoutlib.bridge.android.support.RecyclerViewUtil;
 import com.android.layoutlib.bridge.impl.ParserFactory;
+import com.android.layoutlib.bridge.util.ReflectionUtils;
 import com.android.resources.ResourceType;
 import com.android.util.Pair;
 
@@ -112,14 +114,8 @@
             }
 
             // Finally try again using the custom view loader
-            try {
-                if (view == null) {
-                    view = loadCustomView(name, attrs);
-                }
-            } catch (ClassNotFoundException e) {
-                // If the class was not found, we throw the exception directly, because this
-                // method is already expected to throw it.
-                throw e;
+            if (view == null) {
+                view = loadCustomView(name, attrs);
             }
         } catch (Exception e) {
             // Wrap the real exception in a ClassNotFoundException, so that the calling method
@@ -242,6 +238,25 @@
                     bc.setScrollYPos(view, value);
                 }
             }
+            if (ReflectionUtils.isInstanceOf(view, RecyclerViewUtil.CN_RECYCLER_VIEW)) {
+                Integer resourceId = null;
+                String attrVal = attrs.getAttributeValue(BridgeConstants.NS_TOOLS_URI,
+                        BridgeConstants.ATTR_LIST_ITEM);
+                if (attrVal != null && !attrVal.isEmpty()) {
+                    ResourceValue resValue = bc.getRenderResources().findResValue(attrVal, false);
+                    if (resValue.isFramework()) {
+                        resourceId = Bridge.getResourceId(resValue.getResourceType(),
+                                resValue.getName());
+                    } else {
+                        resourceId = mLayoutlibCallback.getResourceId(resValue.getResourceType(),
+                                resValue.getName());
+                    }
+                }
+                if (resourceId == null) {
+                    resourceId = 0;
+                }
+                RecyclerViewUtil.setAdapter(view, bc, mLayoutlibCallback, resourceId);
+            }
         }
     }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java
index 1af6998..661c08b9 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java
@@ -41,6 +41,7 @@
 
     /** App auto namespace */
     public final static String NS_APP_RES_AUTO = "http://schemas.android.com/apk/res-auto";
+    public final static String NS_TOOLS_URI = "http://schemas.android.com/tools";
 
     public final static String R = "com.android.internal.R";
 
@@ -50,5 +51,5 @@
     public final static String WRAP_CONTENT = "wrap_content";
 
     /** Attribute in the tools namespace used to specify layout manager for RecyclerView. */
-    public static final String ATTR_LAYOUT_MANAGER_TYPE = "layoutManager";
+    public static final String ATTR_LIST_ITEM = "list_item";
 }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 582ac33..362048d 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -149,6 +149,7 @@
     private SharedPreferences mSharedPreferences;
     private ClassLoader mClassLoader;
     private IBinder mBinder;
+    private PackageManager mPackageManager;
 
 
     /**
@@ -904,6 +905,14 @@
         return mApplicationInfo.packageName;
     }
 
+    @Override
+    public PackageManager getPackageManager() {
+        if (mPackageManager == null) {
+            mPackageManager = new BridgePackageManager();
+        }
+        return mPackageManager;
+    }
+
     // ------------- private new methods
 
     /**
@@ -1366,12 +1375,6 @@
     }
 
     @Override
-    public PackageManager getPackageManager() {
-        // pass
-        return null;
-    }
-
-    @Override
     public String getBasePackageName() {
         // pass
         return null;
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
new file mode 100644
index 0000000..401f0bb
--- /dev/null
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
@@ -0,0 +1,769 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.layoutlib.bridge.android;
+
+import android.app.PackageInstallObserver;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.IntentSender;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ContainerEncryptionParams;
+import android.content.pm.FeatureInfo;
+import android.content.pm.IPackageDataObserver;
+import android.content.pm.IPackageDeleteObserver;
+import android.content.pm.IPackageInstallObserver;
+import android.content.pm.IPackageStatsObserver;
+import android.content.pm.InstrumentationInfo;
+import android.content.pm.IntentFilterVerificationInfo;
+import android.content.pm.KeySet;
+import android.content.pm.ManifestDigest;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.content.pm.ProviderInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.VerificationParams;
+import android.content.pm.VerifierDeviceIdentity;
+import android.content.res.Resources;
+import android.content.res.XmlResourceParser;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.os.storage.VolumeInfo;
+
+import java.util.List;
+
+/**
+ * An implementation of {@link PackageManager} that does nothing.
+ */
+@SuppressWarnings("deprecation")
+public class BridgePackageManager extends PackageManager {
+    @Override
+    public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public String[] currentToCanonicalPackageNames(String[] names) {
+        return new String[0];
+    }
+
+    @Override
+    public String[] canonicalToCurrentPackageNames(String[] names) {
+        return new String[0];
+    }
+
+    @Override
+    public Intent getLaunchIntentForPackage(String packageName) {
+        return null;
+    }
+
+    @Override
+    public Intent getLeanbackLaunchIntentForPackage(String packageName) {
+        return null;
+    }
+
+    @Override
+    public int[] getPackageGids(String packageName) throws NameNotFoundException {
+        return new int[0];
+    }
+
+    @Override
+    public int getPackageUid(String packageName, int userHandle) throws NameNotFoundException {
+        return 0;
+    }
+
+    @Override
+    public PermissionInfo getPermissionInfo(String name, int flags) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public List<PermissionInfo> queryPermissionsByGroup(String group, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public PermissionGroupInfo getPermissionGroupInfo(String name, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
+        return null;
+    }
+
+    @Override
+    public ApplicationInfo getApplicationInfo(String packageName, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public ActivityInfo getActivityInfo(ComponentName component, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public ActivityInfo getReceiverInfo(ComponentName component, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public ServiceInfo getServiceInfo(ComponentName component, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public ProviderInfo getProviderInfo(ComponentName component, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public List<PackageInfo> getInstalledPackages(int flags) {
+        return null;
+    }
+
+    @Override
+    public List<PackageInfo> getPackagesHoldingPermissions(String[] permissions, int flags) {
+        return null;
+    }
+
+    @Override
+    public List<PackageInfo> getInstalledPackages(int flags, int userId) {
+        return null;
+    }
+
+    @Override
+    public int checkPermission(String permName, String pkgName) {
+        return 0;
+    }
+
+    @Override
+    public boolean addPermission(PermissionInfo info) {
+        return false;
+    }
+
+    @Override
+    public boolean addPermissionAsync(PermissionInfo info) {
+        return false;
+    }
+
+    @Override
+    public void removePermission(String name) {
+    }
+
+    @Override
+    public void grantRuntimePermission(String packageName, String permissionName, UserHandle user) {
+    }
+
+    @Override
+    public void revokeRuntimePermission(String packageName, String permissionName,
+            UserHandle user) {
+    }
+
+    @Override
+    public int getPermissionFlags(String permissionName, String packageName, UserHandle user) {
+        return 0;
+    }
+
+    @Override
+    public void updatePermissionFlags(String permissionName, String packageName, int flagMask,
+            int flagValues, UserHandle user) {
+    }
+
+    @Override
+    public boolean shouldShowRequestPermissionRationale(String permission) {
+        return false;
+    }
+
+    @Override
+    public int checkSignatures(String pkg1, String pkg2) {
+        return 0;
+    }
+
+    @Override
+    public int checkSignatures(int uid1, int uid2) {
+        return 0;
+    }
+
+    @Override
+    public String[] getPackagesForUid(int uid) {
+        return new String[0];
+    }
+
+    @Override
+    public String getNameForUid(int uid) {
+        return null;
+    }
+
+    @Override
+    public int getUidForSharedUser(String sharedUserName) throws NameNotFoundException {
+        return 0;
+    }
+
+    @Override
+    public List<ApplicationInfo> getInstalledApplications(int flags) {
+        return null;
+    }
+
+    @Override
+    public String[] getSystemSharedLibraryNames() {
+        return new String[0];
+    }
+
+    @Override
+    public FeatureInfo[] getSystemAvailableFeatures() {
+        return new FeatureInfo[0];
+    }
+
+    @Override
+    public boolean hasSystemFeature(String name) {
+        return false;
+    }
+
+    @Override
+    public ResolveInfo resolveActivity(Intent intent, int flags) {
+        return null;
+    }
+
+    @Override
+    public ResolveInfo resolveActivityAsUser(Intent intent, int flags, int userId) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentActivities(Intent intent, int flags) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int flags, int userId) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentActivityOptions(ComponentName caller, Intent[] specifics,
+            Intent intent, int flags) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags, int userId) {
+        return null;
+    }
+
+    @Override
+    public ResolveInfo resolveService(Intent intent, int flags) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentServices(Intent intent, int flags) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int flags, int userId) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentContentProvidersAsUser(Intent intent, int flags,
+            int userId) {
+        return null;
+    }
+
+    @Override
+    public List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags) {
+        return null;
+    }
+
+    @Override
+    public ProviderInfo resolveContentProvider(String name, int flags) {
+        return null;
+    }
+
+    @Override
+    public ProviderInfo resolveContentProviderAsUser(String name, int flags, int userId) {
+        return null;
+    }
+
+    @Override
+    public List<ProviderInfo> queryContentProviders(String processName, int uid, int flags) {
+        return null;
+    }
+
+    @Override
+    public InstrumentationInfo getInstrumentationInfo(ComponentName className, int flags)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public List<InstrumentationInfo> queryInstrumentation(String targetPackage, int flags) {
+        return null;
+    }
+
+    @Override
+    public Drawable getDrawable(String packageName, int resid, ApplicationInfo appInfo) {
+        return null;
+    }
+
+    @Override
+    public Drawable getActivityIcon(ComponentName activityName) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getActivityIcon(Intent intent) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getActivityBanner(ComponentName activityName) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getActivityBanner(Intent intent) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getDefaultActivityIcon() {
+        return null;
+    }
+
+    @Override
+    public Drawable getApplicationIcon(ApplicationInfo info) {
+        return null;
+    }
+
+    @Override
+    public Drawable getApplicationIcon(String packageName) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getApplicationBanner(ApplicationInfo info) {
+        return null;
+    }
+
+    @Override
+    public Drawable getApplicationBanner(String packageName) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getActivityLogo(ComponentName activityName) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getActivityLogo(Intent intent) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getApplicationLogo(ApplicationInfo info) {
+        return null;
+    }
+
+    @Override
+    public Drawable getApplicationLogo(String packageName) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Drawable getUserBadgedIcon(Drawable icon, UserHandle user) {
+        return null;
+    }
+
+    @Override
+    public Drawable getUserBadgedDrawableForDensity(Drawable drawable, UserHandle user,
+            Rect badgeLocation, int badgeDensity) {
+        return null;
+    }
+
+    @Override
+    public Drawable getUserBadgeForDensity(UserHandle user, int density) {
+        return null;
+    }
+
+    @Override
+    public CharSequence getUserBadgedLabel(CharSequence label, UserHandle user) {
+        return null;
+    }
+
+    @Override
+    public CharSequence getText(String packageName, int resid, ApplicationInfo appInfo) {
+        return null;
+    }
+
+    @Override
+    public XmlResourceParser getXml(String packageName, int resid, ApplicationInfo appInfo) {
+        return null;
+    }
+
+    @Override
+    public CharSequence getApplicationLabel(ApplicationInfo info) {
+        return null;
+    }
+
+    @Override
+    public Resources getResourcesForActivity(ComponentName activityName)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Resources getResourcesForApplication(ApplicationInfo app) throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Resources getResourcesForApplication(String appPackageName)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public Resources getResourcesForApplicationAsUser(String appPackageName, int userId)
+            throws NameNotFoundException {
+        return null;
+    }
+
+    @Override
+    public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags,
+            String installerPackageName) {
+    }
+
+    @Override
+    public void installPackageWithVerification(Uri packageURI, IPackageInstallObserver observer,
+            int flags, String installerPackageName, Uri verificationURI,
+            ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
+    }
+
+    @Override
+    public void installPackageWithVerificationAndEncryption(Uri packageURI,
+            IPackageInstallObserver observer, int flags, String installerPackageName,
+            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
+    }
+
+    @Override
+    public void installPackage(Uri packageURI, PackageInstallObserver observer, int flags,
+            String installerPackageName) {
+    }
+
+    @Override
+    public void installPackageWithVerification(Uri packageURI, PackageInstallObserver observer,
+            int flags, String installerPackageName, Uri verificationURI,
+            ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
+    }
+
+    @Override
+    public void installPackageWithVerificationAndEncryption(Uri packageURI,
+            PackageInstallObserver observer, int flags, String installerPackageName,
+            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
+    }
+
+    @Override
+    public int installExistingPackage(String packageName) throws NameNotFoundException {
+        return 0;
+    }
+
+    @Override
+    public void verifyPendingInstall(int id, int verificationCode) {
+    }
+
+    @Override
+    public void extendVerificationTimeout(int id, int verificationCodeAtTimeout,
+            long millisecondsToDelay) {
+    }
+
+    @Override
+    public void verifyIntentFilter(int verificationId, int verificationCode,
+            List<String> outFailedDomains) {
+    }
+
+    @Override
+    public int getIntentVerificationStatus(String packageName, int userId) {
+        return 0;
+    }
+
+    @Override
+    public boolean updateIntentVerificationStatus(String packageName, int status, int userId) {
+        return false;
+    }
+
+    @Override
+    public List<IntentFilterVerificationInfo> getIntentFilterVerifications(String packageName) {
+        return null;
+    }
+
+    @Override
+    public List<IntentFilter> getAllIntentFilters(String packageName) {
+        return null;
+    }
+
+    @Override
+    public String getDefaultBrowserPackageName(int userId) {
+        return null;
+    }
+
+    @Override
+    public boolean setDefaultBrowserPackageName(String packageName, int userId) {
+        return false;
+    }
+
+    @Override
+    public void setInstallerPackageName(String targetPackage, String installerPackageName) {
+    }
+
+    @Override
+    public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
+    }
+
+    @Override
+    public String getInstallerPackageName(String packageName) {
+        return null;
+    }
+
+    @Override
+    public void clearApplicationUserData(String packageName, IPackageDataObserver observer) {
+    }
+
+    @Override
+    public void deleteApplicationCacheFiles(String packageName, IPackageDataObserver observer) {
+    }
+
+    @Override
+    public void freeStorageAndNotify(String volumeUuid, long freeStorageSize,
+            IPackageDataObserver observer) {
+    }
+
+    @Override
+    public void freeStorage(String volumeUuid, long freeStorageSize, IntentSender pi) {
+    }
+
+    @Override
+    public void getPackageSizeInfo(String packageName, int userHandle,
+            IPackageStatsObserver observer) {
+    }
+
+    @Override
+    public void addPackageToPreferred(String packageName) {
+    }
+
+    @Override
+    public void removePackageFromPreferred(String packageName) {
+    }
+
+    @Override
+    public List<PackageInfo> getPreferredPackages(int flags) {
+        return null;
+    }
+
+    @Override
+    public void addPreferredActivity(IntentFilter filter, int match, ComponentName[] set,
+            ComponentName activity) {
+    }
+
+    @Override
+    public void replacePreferredActivity(IntentFilter filter, int match, ComponentName[] set,
+            ComponentName activity) {
+    }
+
+    @Override
+    public void clearPackagePreferredActivities(String packageName) {
+    }
+
+    @Override
+    public int getPreferredActivities(List<IntentFilter> outFilters,
+            List<ComponentName> outActivities, String packageName) {
+        return 0;
+    }
+
+    @Override
+    public ComponentName getHomeActivities(List<ResolveInfo> outActivities) {
+        return null;
+    }
+
+    @Override
+    public void setComponentEnabledSetting(ComponentName componentName, int newState, int flags) {
+    }
+
+    @Override
+    public int getComponentEnabledSetting(ComponentName componentName) {
+        return 0;
+    }
+
+    @Override
+    public void setApplicationEnabledSetting(String packageName, int newState, int flags) {
+    }
+
+    @Override
+    public int getApplicationEnabledSetting(String packageName) {
+        return 0;
+    }
+
+    @Override
+    public boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
+            UserHandle userHandle) {
+        return false;
+    }
+
+    @Override
+    public boolean getApplicationHiddenSettingAsUser(String packageName, UserHandle userHandle) {
+        return false;
+    }
+
+    @Override
+    public boolean isSafeMode() {
+        return false;
+    }
+
+    @Override
+    public void addOnPermissionsChangeListener(OnPermissionsChangedListener listener) {
+    }
+
+    @Override
+    public void removeOnPermissionsChangeListener(OnPermissionsChangedListener listener) {
+    }
+
+    @Override
+    public KeySet getKeySetByAlias(String packageName, String alias) {
+        return null;
+    }
+
+    @Override
+    public KeySet getSigningKeySet(String packageName) {
+        return null;
+    }
+
+    @Override
+    public boolean isSignedBy(String packageName, KeySet ks) {
+        return false;
+    }
+
+    @Override
+    public boolean isSignedByExactly(String packageName, KeySet ks) {
+        return false;
+    }
+
+    @Override
+    public int getMoveStatus(int moveId) {
+        return 0;
+    }
+
+    @Override
+    public void registerMoveCallback(MoveCallback callback, Handler handler) {
+    }
+
+    @Override
+    public void unregisterMoveCallback(MoveCallback callback) {
+    }
+
+    @Override
+    public int movePackage(String packageName, VolumeInfo vol) {
+        return 0;
+    }
+
+    @Override
+    public VolumeInfo getPackageCurrentVolume(ApplicationInfo app) {
+        return null;
+    }
+
+    @Override
+    public List<VolumeInfo> getPackageCandidateVolumes(ApplicationInfo app) {
+        return null;
+    }
+
+    @Override
+    public int movePrimaryStorage(VolumeInfo vol) {
+        return 0;
+    }
+
+    @Override
+    public VolumeInfo getPrimaryStorageCurrentVolume() {
+        return null;
+    }
+
+    @Override
+    public List<VolumeInfo> getPrimaryStorageCandidateVolumes() {
+        return null;
+    }
+
+    @Override
+    public VerifierDeviceIdentity getVerifierDeviceIdentity() {
+        return null;
+    }
+
+    @Override
+    public boolean isUpgrade() {
+        return false;
+    }
+
+    @Override
+    public PackageInstaller getPackageInstaller() {
+        return null;
+    }
+
+    @Override
+    public void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId, int targetUserId,
+            int flags) {
+    }
+
+    @Override
+    public void clearCrossProfileIntentFilters(int sourceUserId) {
+    }
+
+    @Override
+    public Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo) {
+        return null;
+    }
+
+    @Override
+    public Drawable loadUnbadgedItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo) {
+        return null;
+    }
+
+    @Override
+    public boolean isPackageAvailable(String packageName) {
+        return false;
+    }
+}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/support/RecyclerViewUtil.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/support/RecyclerViewUtil.java
index 5e5b3c9..4182cd9 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/support/RecyclerViewUtil.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/support/RecyclerViewUtil.java
@@ -18,7 +18,6 @@
 
 import com.android.ide.common.rendering.api.LayoutLog;
 import com.android.ide.common.rendering.api.LayoutlibCallback;
-import com.android.ide.common.rendering.api.SessionParams;
 import com.android.layoutlib.bridge.Bridge;
 import com.android.layoutlib.bridge.android.BridgeContext;
 import com.android.layoutlib.bridge.android.RenderParamsFlags;
@@ -37,7 +36,6 @@
 /**
  * Utility class for working with android.support.v7.widget.RecyclerView
  */
-@SuppressWarnings("SpellCheckingInspection")  // for "recycler".
 public class RecyclerViewUtil {
 
     private static final String RV_PKG_PREFIX = "android.support.v7.widget.";
@@ -57,23 +55,34 @@
      * Any exceptions thrown during the process are logged in {@link Bridge#getLog()}
      */
     public static void setAdapter(@NonNull View recyclerView, @NonNull BridgeContext context,
-            @NonNull SessionParams params) {
+            @NonNull LayoutlibCallback layoutlibCallback, int adapterLayout) {
         try {
-            setLayoutManager(recyclerView, context, params.getLayoutlibCallback());
-            Object adapter = createAdapter(params);
-            setProperty(recyclerView, CN_ADAPTER, adapter, "setAdapter");
+            setLayoutManager(recyclerView, context, layoutlibCallback);
+            Object adapter = createAdapter(layoutlibCallback);
+            if (adapter != null) {
+                setProperty(recyclerView, CN_ADAPTER, adapter, "setAdapter");
+                setProperty(adapter, int.class, adapterLayout, "setLayoutId");
+            }
         } catch (ReflectionException e) {
+            Throwable cause = getCause(e);
             Bridge.getLog().error(LayoutLog.TAG_BROKEN,
-                    "Error occured while trying to setup RecyclerView.", e, null);
+                    "Error occurred while trying to setup RecyclerView.", cause, null);
         }
     }
 
+    private static Throwable getCause(Throwable throwable) {
+        Throwable cause = throwable.getCause();
+        return cause == null ? throwable : cause;
+    }
+
     private static void setLayoutManager(@NonNull View recyclerView, @NonNull BridgeContext context,
             @NonNull LayoutlibCallback callback) throws ReflectionException {
         if (getLayoutManager(recyclerView) == null) {
             // Only set the layout manager if not already set by the recycler view.
             Object layoutManager = createLayoutManager(context, callback);
-            setProperty(recyclerView, CN_LAYOUT_MANAGER, layoutManager, "setLayoutManager");
+            if (layoutManager != null) {
+                setProperty(recyclerView, CN_LAYOUT_MANAGER, layoutManager, "setLayoutManager");
+            }
         }
     }
 
@@ -84,41 +93,46 @@
             throws ReflectionException {
         try {
             return callback.loadView(CN_LINEAR_LAYOUT_MANAGER, LLM_CONSTRUCTOR_SIGNATURE,
-                    new Object[]{ context});
+                    new Object[]{context});
         } catch (Exception e) {
             throw new ReflectionException(e);
         }
     }
 
     @Nullable
-    private static Object getLayoutManager(View recyclerview) throws ReflectionException {
-        Method getLayoutManager = getMethod(recyclerview.getClass(), "getLayoutManager");
-        return getLayoutManager != null ? invoke(getLayoutManager, recyclerview) : null;
+    private static Object getLayoutManager(View recyclerView) throws ReflectionException {
+        Method getLayoutManager = getMethod(recyclerView.getClass(), "getLayoutManager");
+        return getLayoutManager != null ? invoke(getLayoutManager, recyclerView) : null;
     }
 
     @Nullable
-    private static Object createAdapter(@NonNull SessionParams params) throws ReflectionException {
-        Boolean ideSupport = params.getFlag(RenderParamsFlags.FLAG_KEY_RECYCLER_VIEW_SUPPORT);
+    private static Object createAdapter(@NonNull LayoutlibCallback layoutlibCallback)
+            throws ReflectionException {
+        Boolean ideSupport =
+                layoutlibCallback.getFlag(RenderParamsFlags.FLAG_KEY_RECYCLER_VIEW_SUPPORT);
         if (ideSupport != Boolean.TRUE) {
             return null;
         }
         try {
-            return params.getLayoutlibCallback().loadView(CN_ADAPTER, new Class[0], new Object[0]);
+            return layoutlibCallback.loadClass(CN_ADAPTER, new Class[0], new Object[0]);
         } catch (Exception e) {
             throw new ReflectionException(e);
         }
     }
 
-    private static void setProperty(@NonNull View recyclerView, @NonNull String propertyClassName,
+    private static void setProperty(@NonNull Object object, @NonNull String propertyClassName,
+      @NonNull Object propertyValue, @NonNull String propertySetter)
+            throws ReflectionException {
+        Class<?> propertyClass = getClassInstance(propertyValue, propertyClassName);
+        setProperty(object, propertyClass, propertyValue, propertySetter);
+    }
+
+    private static void setProperty(@NonNull Object object, @NonNull Class<?> propertyClass,
             @Nullable Object propertyValue, @NonNull String propertySetter)
             throws ReflectionException {
-        if (propertyValue != null) {
-            Class<?> layoutManagerClass = getClassInstance(propertyValue, propertyClassName);
-            Method setLayoutManager = getMethod(recyclerView.getClass(),
-                    propertySetter, layoutManagerClass);
-            if (setLayoutManager != null) {
-                invoke(setLayoutManager, recyclerView, propertyValue);
-            }
+        Method setter = getMethod(object.getClass(), propertySetter, propertyClass);
+        if (setter != null) {
+            invoke(setter, object, propertyValue);
         }
     }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
index de77d57..9380ca7 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
@@ -27,6 +27,7 @@
 import com.android.resources.Density;
 import com.android.resources.ResourceType;
 import com.android.resources.ScreenOrientation;
+import com.android.resources.ScreenRound;
 import com.android.resources.ScreenSize;
 
 import android.content.res.Configuration;
@@ -378,6 +379,25 @@
             config.orientation = Configuration.ORIENTATION_UNDEFINED;
         }
 
+        try {
+            ScreenRound roundness = hardwareConfig.getScreenRoundness();
+            if (roundness != null) {
+                switch (roundness) {
+                    case ROUND:
+                        config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_YES;
+                        break;
+                    case NOTROUND:
+                        config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_NO;
+                }
+            } else {
+                config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_UNDEFINED;
+            }
+        } catch (NoSuchMethodError ignored) {
+            // getScreenRoundness was added in later stages of API 15. So, it's not present on some
+            // preview releases of API 15.
+            // TODO: Remove the try catch around Oct 2015.
+        }
+
         // TODO: fill in more config info.
 
         return config;
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index d571d35..72e97ad 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -45,7 +45,6 @@
 import com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
 import com.android.layoutlib.bridge.android.RenderParamsFlags;
 import com.android.layoutlib.bridge.android.support.DesignLibUtil;
-import com.android.layoutlib.bridge.android.support.RecyclerViewUtil;
 import com.android.layoutlib.bridge.bars.AppCompatActionBar;
 import com.android.layoutlib.bridge.bars.BridgeActionBar;
 import com.android.layoutlib.bridge.bars.Config;
@@ -116,6 +115,7 @@
 import static com.android.ide.common.rendering.api.Result.Status.ERROR_UNKNOWN;
 import static com.android.ide.common.rendering.api.Result.Status.ERROR_VIEWGROUP_NO_CHILDREN;
 import static com.android.ide.common.rendering.api.Result.Status.SUCCESS;
+import static com.android.layoutlib.bridge.util.ReflectionUtils.isInstanceOf;
 
 /**
  * Class implementing the render session.
@@ -1341,8 +1341,6 @@
                     }
                 }
             }
-        } else if (isInstanceOf(view, RecyclerViewUtil.CN_RECYCLER_VIEW)) {
-            RecyclerViewUtil.setAdapter(view, getContext(), getParams());
         } else if (view instanceof ViewGroup) {
             ViewGroup group = (ViewGroup) view;
             final int count = group.getChildCount();
@@ -1447,22 +1445,6 @@
     }
 
     /**
-     * Check if the object is an instance of a class named {@code className}. This doesn't work
-     * for interfaces.
-     */
-    public static boolean isInstanceOf(Object object, String className) {
-        Class superClass = object.getClass();
-        while (superClass != null) {
-            String name = superClass.getName();
-            if (name.equals(className)) {
-                return true;
-            }
-            superClass = superClass.getSuperclass();
-        }
-        return false;
-    }
-
-    /**
      * Sets up a {@link TabHost} object.
      * @param tabHost the TabHost to setup.
      * @param layoutlibCallback The project callback object to access the project R class.
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/ReflectionUtils.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/ReflectionUtils.java
index b324451..b78b613 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/ReflectionUtils.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/ReflectionUtils.java
@@ -52,6 +52,22 @@
     }
 
     /**
+     * Check if the object is an instance of a class named {@code className}. This doesn't work
+     * for interfaces.
+     */
+    public static boolean isInstanceOf(Object object, String className) {
+        Class superClass = object.getClass();
+        while (superClass != null) {
+            String name = superClass.getName();
+            if (name.equals(className)) {
+                return true;
+            }
+            superClass = superClass.getSuperclass();
+        }
+        return false;
+    }
+
+    /**
      * Wraps all reflection related exceptions. Created since ReflectiveOperationException was
      * introduced in 1.7 and we are still on 1.6
      */
diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
index 8964c45..8e0cec6 100644
--- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
+++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java
@@ -181,7 +181,7 @@
 
     public HardwareConfig getHardwareConfig() {
         return new HardwareConfig(mScreenWidth, mScreenHeight, mDensity, mXdpi, mYdpi, mSize,
-                mOrientation, mSoftButtons);
+                mOrientation, null, mSoftButtons);
     }
 
     public static Map<String, String> loadProperties(File path) {
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java
index dae5509..f6c2626 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AsmGenerator.java
@@ -94,8 +94,14 @@
         ListIterator<Class<?>> iter = injectedClasses.listIterator();
         while (iter.hasNext()) {
             Class<?> clazz = iter.next();
-            for (Class<?> aClass : clazz.getDeclaredClasses()) {
-                iter.add(aClass);
+            try {
+                int i = 1;
+                while(i < 100) {
+                    iter.add(Class.forName(clazz.getName() + "$" + i));
+                    i++;
+                }
+            } catch (ClassNotFoundException ignored) {
+                // Expected.
             }
         }
         mInjectClasses = injectedClasses.toArray(new Class<?>[0]);
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index d00c654..e5a1d02 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -1276,7 +1276,10 @@
 
     /**
      * Return the results of the latest access point scan.
-     * @return the list of access points found in the most recent scan.
+     * @return the list of access points found in the most recent scan. An app must hold
+     * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_COARSE_LOCATION} or
+     * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION} permission
+     * in order to get valid results.
      */
     public List<ScanResult> getScanResults() {
         try {