Merge "Fallback to Cellular if WiFi fails to validate" into mnc-dev
diff --git a/Android.mk b/Android.mk
index e96a932..1de3625 100644
--- a/Android.mk
+++ b/Android.mk
@@ -181,6 +181,7 @@
 	core/java/android/hardware/location/IGeofenceHardwareMonitorCallback.aidl \
 	core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl \
 	core/java/android/hardware/usb/IUsbManager.aidl \
+	core/java/android/net/ICaptivePortal.aidl \
 	core/java/android/net/IConnectivityManager.aidl \
 	core/java/android/net/IEthernetManager.aidl \
 	core/java/android/net/IEthernetServiceListener.aidl \
diff --git a/api/current.txt b/api/current.txt
index 8a82ed0..b173638 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -192,16 +192,6 @@
 
   public static final class R.attr {
     ctor public R.attr();
-    field public static final int __removeBeforeMRelease_leftIndents = 16844016; // 0x10104f0
-    field public static final int __removeBeforeMRelease_rightIndents = 16844017; // 0x10104f1
-    field public static final int __reserved0 = 16844020; // 0x10104f4
-    field public static final int __reserved1 = 16844019; // 0x10104f3
-    field public static final int __reserved2 = 16843999; // 0x10104df
-    field public static final int __reserved3 = 16844000; // 0x10104e0
-    field public static final int __reserved4 = 16844001; // 0x10104e1
-    field public static final int __reserved5 = 16844002; // 0x10104e2
-    field public static final int __reserved6 = 16844003; // 0x10104e3
-    field public static final int __reserved7 = 16844004; // 0x10104e4
     field public static final int absListViewStyle = 16842858; // 0x101006a
     field public static final int accessibilityEventTypes = 16843648; // 0x1010380
     field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -264,7 +254,7 @@
     field public static final int allowParallelSyncs = 16843570; // 0x1010332
     field public static final int allowSingleTap = 16843353; // 0x1010259
     field public static final int allowTaskReparenting = 16843268; // 0x1010204
-    field public static final int allowUndo = 16844006; // 0x10104e6
+    field public static final int allowUndo = 16843999; // 0x10104df
     field public static final int alpha = 16843551; // 0x101031f
     field public static final int alphabeticShortcut = 16843235; // 0x10101e3
     field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
@@ -295,7 +285,7 @@
     field public static final int autoStart = 16843445; // 0x10102b5
     field public static final deprecated int autoText = 16843114; // 0x101016a
     field public static final int autoUrlDetect = 16843404; // 0x101028c
-    field public static final int autoVerify = 16844010; // 0x10104ea
+    field public static final int autoVerify = 16844014; // 0x10104ee
     field public static final int background = 16842964; // 0x10100d4
     field public static final int backgroundDimAmount = 16842802; // 0x1010032
     field public static final int backgroundDimEnabled = 16843295; // 0x101021f
@@ -319,7 +309,7 @@
     field public static final int bottomRightRadius = 16843180; // 0x10101ac
     field public static final int breadCrumbShortTitle = 16843524; // 0x1010304
     field public static final int breadCrumbTitle = 16843523; // 0x1010303
-    field public static final int breakStrategy = 16844011; // 0x10104eb
+    field public static final int breakStrategy = 16843997; // 0x10104dd
     field public static final int bufferType = 16843086; // 0x101014e
     field public static final int button = 16843015; // 0x1010107
     field public static final int buttonBarButtonStyle = 16843567; // 0x101032f
@@ -381,7 +371,7 @@
     field public static final int colorActivatedHighlight = 16843664; // 0x1010390
     field public static final int colorBackground = 16842801; // 0x1010031
     field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
-    field public static final int colorBackgroundFloating = 16844007; // 0x10104e7
+    field public static final int colorBackgroundFloating = 16844002; // 0x10104e2
     field public static final int colorButtonNormal = 16843819; // 0x101042b
     field public static final int colorControlActivated = 16843818; // 0x101042a
     field public static final int colorControlHighlight = 16843820; // 0x101042c
@@ -415,7 +405,7 @@
     field public static final int contentInsetLeft = 16843861; // 0x1010455
     field public static final int contentInsetRight = 16843862; // 0x1010456
     field public static final int contentInsetStart = 16843859; // 0x1010453
-    field public static final int contextClickable = 16844021; // 0x10104f5
+    field public static final int contextClickable = 16844007; // 0x10104e7
     field public static final int controlX1 = 16843772; // 0x10103fc
     field public static final int controlX2 = 16843774; // 0x10103fe
     field public static final int controlY1 = 16843773; // 0x10103fd
@@ -524,7 +514,7 @@
     field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6
     field public static final int exported = 16842768; // 0x1010010
     field public static final int extraTension = 16843371; // 0x101026b
-    field public static final int extractNativeLibs = 16844008; // 0x10104e8
+    field public static final int extractNativeLibs = 16844010; // 0x10104ea
     field public static final int factor = 16843219; // 0x10101d3
     field public static final int fadeDuration = 16843384; // 0x1010278
     field public static final int fadeEnabled = 16843390; // 0x101027e
@@ -550,7 +540,7 @@
     field public static final int fillViewport = 16843130; // 0x101017a
     field public static final int filter = 16843035; // 0x101011b
     field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4
-    field public static final int fingerprintAuthDrawable = 16844025; // 0x10104f9
+    field public static final int fingerprintAuthDrawable = 16844008; // 0x10104e8
     field public static final int finishOnCloseSystemDialogs = 16843431; // 0x10102a7
     field public static final int finishOnTaskLaunch = 16842772; // 0x1010014
     field public static final int firstDayOfWeek = 16843581; // 0x101033d
@@ -594,7 +584,7 @@
     field public static final int fromXScale = 16843202; // 0x10101c2
     field public static final int fromYDelta = 16843208; // 0x10101c8
     field public static final int fromYScale = 16843204; // 0x10101c4
-    field public static final int fullBackupContent = 16844005; // 0x10104e5
+    field public static final int fullBackupContent = 16844011; // 0x10104eb
     field public static final int fullBackupOnly = 16843891; // 0x1010473
     field public static final int fullBright = 16842954; // 0x10100ca
     field public static final int fullDark = 16842950; // 0x10100c6
@@ -638,7 +628,7 @@
     field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
     field public static final int horizontalSpacing = 16843028; // 0x1010114
     field public static final int host = 16842792; // 0x1010028
-    field public static final int hyphenationFrequency = 16844024; // 0x10104f8
+    field public static final int hyphenationFrequency = 16843998; // 0x10104de
     field public static final int icon = 16842754; // 0x1010002
     field public static final int iconPreview = 16843337; // 0x1010249
     field public static final int iconifiedByDefault = 16843514; // 0x10102fa
@@ -802,9 +792,9 @@
     field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208
     field public static final int listViewStyle = 16842868; // 0x1010074
     field public static final int listViewWhiteStyle = 16842869; // 0x1010075
-    field public static final int lockTaskMode = 16844015; // 0x10104ef
+    field public static final int lockTaskMode = 16844013; // 0x10104ed
     field public static final int logo = 16843454; // 0x10102be
-    field public static final int logoDescription = 16844026; // 0x10104fa
+    field public static final int logoDescription = 16844009; // 0x10104e9
     field public static final int longClickable = 16842982; // 0x10100e6
     field public static final int loopViews = 16843527; // 0x1010307
     field public static final int manageSpaceActivity = 16842756; // 0x1010004
@@ -865,7 +855,7 @@
     field public static final int numColumns = 16843032; // 0x1010118
     field public static final int numStars = 16843076; // 0x1010144
     field public static final int numbersBackgroundColor = 16843938; // 0x10104a2
-    field public static final int numbersInnerTextColor = 16843998; // 0x10104de
+    field public static final int numbersInnerTextColor = 16844001; // 0x10104e1
     field public static final int numbersSelectorColor = 16843939; // 0x10104a3
     field public static final int numbersTextColor = 16843937; // 0x10104a1
     field public static final deprecated int numeric = 16843109; // 0x1010165
@@ -977,7 +967,6 @@
     field public static final int readPermission = 16842759; // 0x1010007
     field public static final int recognitionService = 16843932; // 0x101049c
     field public static final int relinquishTaskIdentity = 16843894; // 0x1010476
-    field public static final int removeBeforeMRelease = 16844014; // 0x10104ee
     field public static final int reparent = 16843964; // 0x10104bc
     field public static final int reparentWithOverlay = 16843965; // 0x10104bd
     field public static final int repeatCount = 16843199; // 0x10101bf
@@ -1027,7 +1016,7 @@
     field public static final int screenOrientation = 16842782; // 0x101001e
     field public static final int screenSize = 16843466; // 0x10102ca
     field public static final int scrollHorizontally = 16843099; // 0x101015b
-    field public static final int scrollIndicators = 16844023; // 0x10104f7
+    field public static final int scrollIndicators = 16844006; // 0x10104e6
     field public static final int scrollViewStyle = 16842880; // 0x1010080
     field public static final int scrollX = 16842962; // 0x10100d2
     field public static final int scrollY = 16842963; // 0x10100d3
@@ -1081,7 +1070,7 @@
     field public static final int showAsAction = 16843481; // 0x10102d9
     field public static final int showDefault = 16843258; // 0x10101fa
     field public static final int showDividers = 16843561; // 0x1010329
-    field public static final int showForAllUsers = 16844018; // 0x10104f2
+    field public static final int showForAllUsers = 16844015; // 0x10104ef
     field public static final deprecated int showOnLockScreen = 16843721; // 0x10103c9
     field public static final int showSilent = 16843259; // 0x10101fb
     field public static final int showText = 16843949; // 0x10104ad
@@ -1156,7 +1145,7 @@
     field public static final int submitBackground = 16843912; // 0x1010488
     field public static final int subtitle = 16843473; // 0x10102d1
     field public static final int subtitleTextAppearance = 16843823; // 0x101042f
-    field public static final int subtitleTextColor = 16844028; // 0x10104fc
+    field public static final int subtitleTextColor = 16844004; // 0x10104e4
     field public static final int subtitleTextStyle = 16843513; // 0x10102f9
     field public static final int subtypeExtraValue = 16843674; // 0x101039a
     field public static final int subtypeId = 16843713; // 0x10103c1
@@ -1168,8 +1157,8 @@
     field public static final int summaryColumn = 16843426; // 0x10102a2
     field public static final int summaryOff = 16843248; // 0x10101f0
     field public static final int summaryOn = 16843247; // 0x10101ef
-    field public static final int supportsAssist = 16844012; // 0x10104ec
-    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844022; // 0x10104f6
+    field public static final int supportsAssist = 16844016; // 0x10104f0
+    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1
     field public static final int supportsRtl = 16843695; // 0x10103af
     field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
     field public static final int supportsUploading = 16843419; // 0x101029b
@@ -1270,7 +1259,7 @@
     field public static final int thicknessRatio = 16843164; // 0x101019c
     field public static final int thumb = 16843074; // 0x1010142
     field public static final int thumbOffset = 16843075; // 0x1010143
-    field public static final int thumbPosition = 16844013; // 0x10104ed
+    field public static final int thumbPosition = 16844005; // 0x10104e5
     field public static final int thumbTextPadding = 16843634; // 0x1010372
     field public static final int thumbTint = 16843889; // 0x1010471
     field public static final int thumbTintMode = 16843890; // 0x1010472
@@ -1287,7 +1276,7 @@
     field public static final int title = 16843233; // 0x10101e1
     field public static final int titleCondensed = 16843234; // 0x10101e2
     field public static final int titleTextAppearance = 16843822; // 0x101042e
-    field public static final int titleTextColor = 16844027; // 0x10104fb
+    field public static final int titleTextColor = 16844003; // 0x10104e3
     field public static final int titleTextStyle = 16843512; // 0x10102f8
     field public static final int toAlpha = 16843211; // 0x10101cb
     field public static final int toDegrees = 16843188; // 0x10101b4
@@ -1335,7 +1324,7 @@
     field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
     field public static final int useLevel = 16843167; // 0x101019f
     field public static final int userVisible = 16843409; // 0x1010291
-    field public static final int usesCleartextTraffic = 16844009; // 0x10104e9
+    field public static final int usesCleartextTraffic = 16844012; // 0x10104ec
     field public static final int value = 16842788; // 0x1010024
     field public static final int valueFrom = 16843486; // 0x10102de
     field public static final int valueTo = 16843487; // 0x10102df
@@ -1403,7 +1392,7 @@
     field public static final int windowHideAnimation = 16842935; // 0x10100b7
     field public static final int windowIsFloating = 16842839; // 0x1010057
     field public static final int windowIsTranslucent = 16842840; // 0x1010058
-    field public static final int windowLightStatusBar = 16843997; // 0x10104dd
+    field public static final int windowLightStatusBar = 16844000; // 0x10104e0
     field public static final int windowMinWidthMajor = 16843606; // 0x1010356
     field public static final int windowMinWidthMinor = 16843607; // 0x1010357
     field public static final int windowNoDisplay = 16843294; // 0x101021e
@@ -1668,12 +1657,12 @@
   public static final class R.id {
     ctor public R.id();
     field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
-    field public static final int accessibilityActionScrollDown = 16908345; // 0x1020039
-    field public static final int accessibilityActionScrollLeft = 16908344; // 0x1020038
-    field public static final int accessibilityActionScrollRight = 16908346; // 0x102003a
-    field public static final int accessibilityActionScrollToPosition = 16908342; // 0x1020036
-    field public static final int accessibilityActionScrollUp = 16908343; // 0x1020037
-    field public static final int accessibilityActionShowOnScreen = 16908341; // 0x1020035
+    field public static final int accessibilityActionScrollDown = 16908346; // 0x102003a
+    field public static final int accessibilityActionScrollLeft = 16908345; // 0x1020039
+    field public static final int accessibilityActionScrollRight = 16908347; // 0x102003b
+    field public static final int accessibilityActionScrollToPosition = 16908343; // 0x1020037
+    field public static final int accessibilityActionScrollUp = 16908344; // 0x1020038
+    field public static final int accessibilityActionShowOnScreen = 16908342; // 0x1020036
     field public static final int addToDictionary = 16908330; // 0x102002a
     field public static final int background = 16908288; // 0x1020000
     field public static final int button1 = 16908313; // 0x1020019
@@ -1713,7 +1702,7 @@
     field public static final int selectAll = 16908319; // 0x102001f
     field public static final int selectTextMode = 16908333; // 0x102002d
     field public static final int selectedIcon = 16908302; // 0x102000e
-    field public static final int shareText = 16908347; // 0x102003b
+    field public static final int shareText = 16908341; // 0x1020035
     field public static final int startSelectingText = 16908328; // 0x1020028
     field public static final int statusBarBackground = 16908335; // 0x102002f
     field public static final int stopSelectingText = 16908329; // 0x1020029
@@ -1971,7 +1960,7 @@
     field public static final int TextAppearance_Material_Widget_ActionMode_Title = 16974355; // 0x1030213
     field public static final int TextAppearance_Material_Widget_ActionMode_Title_Inverse = 16974356; // 0x1030214
     field public static final int TextAppearance_Material_Widget_Button = 16974357; // 0x1030215
-    field public static final int TextAppearance_Material_Widget_Button_Inverse = 16974565; // 0x10302e5
+    field public static final int TextAppearance_Material_Widget_Button_Inverse = 16974548; // 0x10302d4
     field public static final int TextAppearance_Material_Widget_DropDownHint = 16974358; // 0x1030216
     field public static final int TextAppearance_Material_Widget_DropDownItem = 16974359; // 0x1030217
     field public static final int TextAppearance_Material_Widget_EditText = 16974360; // 0x1030218
@@ -2016,8 +2005,8 @@
     field public static final int ThemeOverlay_Material_ActionBar = 16974409; // 0x1030249
     field public static final int ThemeOverlay_Material_Dark = 16974411; // 0x103024b
     field public static final int ThemeOverlay_Material_Dark_ActionBar = 16974412; // 0x103024c
-    field public static final int ThemeOverlay_Material_Dialog = 16974564; // 0x10302e4
-    field public static final int ThemeOverlay_Material_Dialog_Alert = 16974566; // 0x10302e6
+    field public static final int ThemeOverlay_Material_Dialog = 16974550; // 0x10302d6
+    field public static final int ThemeOverlay_Material_Dialog_Alert = 16974551; // 0x10302d7
     field public static final int ThemeOverlay_Material_Light = 16974410; // 0x103024a
     field public static final int Theme_Black = 16973832; // 0x1030008
     field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009
@@ -2108,7 +2097,7 @@
     field public static final int Theme_Material_Light_Dialog_NoActionBar = 16974396; // 0x103023c
     field public static final int Theme_Material_Light_Dialog_NoActionBar_MinWidth = 16974397; // 0x103023d
     field public static final int Theme_Material_Light_Dialog_Presentation = 16974398; // 0x103023e
-    field public static final int Theme_Material_Light_LightStatusBar = 16974563; // 0x10302e3
+    field public static final int Theme_Material_Light_LightStatusBar = 16974549; // 0x10302d5
     field public static final int Theme_Material_Light_NoActionBar = 16974401; // 0x1030241
     field public static final int Theme_Material_Light_NoActionBar_Fullscreen = 16974402; // 0x1030242
     field public static final int Theme_Material_Light_NoActionBar_Overscan = 16974403; // 0x1030243
@@ -2557,21 +2546,6 @@
     field public static final int Widget_Toolbar = 16974311; // 0x10301e7
     field public static final int Widget_Toolbar_Button_Navigation = 16974312; // 0x10301e8
     field public static final int Widget_WebView = 16973875; // 0x1030033
-    field public static final int __reserved10 = 16974550; // 0x10302d6
-    field public static final int __reserved11 = 16974551; // 0x10302d7
-    field public static final int __reserved12 = 16974552; // 0x10302d8
-    field public static final int __reserved13 = 16974553; // 0x10302d9
-    field public static final int __reserved14 = 16974554; // 0x10302da
-    field public static final int __reserved15 = 16974555; // 0x10302db
-    field public static final int __reserved16 = 16974556; // 0x10302dc
-    field public static final int __reserved17 = 16974557; // 0x10302dd
-    field public static final int __reserved18 = 16974558; // 0x10302de
-    field public static final int __reserved19 = 16974559; // 0x10302df
-    field public static final int __reserved20 = 16974560; // 0x10302e0
-    field public static final int __reserved21 = 16974561; // 0x10302e1
-    field public static final int __reserved22 = 16974562; // 0x10302e2
-    field public static final int __reserved8 = 16974548; // 0x10302d4
-    field public static final int __reserved9 = 16974549; // 0x10302d5
   }
 
   public static final class R.transition {
@@ -3855,6 +3829,8 @@
     method public void finishOp(java.lang.String, int, java.lang.String);
     method public int noteOp(java.lang.String, int, java.lang.String);
     method public int noteOpNoThrow(java.lang.String, int, java.lang.String);
+    method public int noteProxyOp(java.lang.String, java.lang.String);
+    method public int noteProxyOpNoThrow(java.lang.String, java.lang.String);
     method public static java.lang.String permissionToOp(java.lang.String);
     method public int startOp(java.lang.String, int, java.lang.String);
     method public int startOpNoThrow(java.lang.String, int, java.lang.String);
@@ -5428,7 +5404,6 @@
 
   public static class VoiceInteractor.AbortVoiceRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.AbortVoiceRequest(android.app.VoiceInteractor.Prompt, android.os.Bundle);
-    ctor public deprecated VoiceInteractor.AbortVoiceRequest(java.lang.CharSequence, android.os.Bundle);
     method public void onAbortResult(android.os.Bundle);
   }
 
@@ -5439,24 +5414,20 @@
 
   public static class VoiceInteractor.CompleteVoiceRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.CompleteVoiceRequest(android.app.VoiceInteractor.Prompt, android.os.Bundle);
-    ctor public deprecated VoiceInteractor.CompleteVoiceRequest(java.lang.CharSequence, android.os.Bundle);
     method public void onCompleteResult(android.os.Bundle);
   }
 
   public static class VoiceInteractor.ConfirmationRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.ConfirmationRequest(android.app.VoiceInteractor.Prompt, android.os.Bundle);
-    ctor public deprecated VoiceInteractor.ConfirmationRequest(java.lang.CharSequence, android.os.Bundle);
     method public void onConfirmationResult(boolean, android.os.Bundle);
   }
 
   public static class VoiceInteractor.PickOptionRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.PickOptionRequest(android.app.VoiceInteractor.Prompt, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
-    ctor public deprecated VoiceInteractor.PickOptionRequest(java.lang.CharSequence, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
     method public void onPickOptionResult(boolean, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
   }
 
   public static final class VoiceInteractor.PickOptionRequest.Option implements android.os.Parcelable {
-    ctor public VoiceInteractor.PickOptionRequest.Option(java.lang.CharSequence);
     ctor public VoiceInteractor.PickOptionRequest.Option(java.lang.CharSequence, int);
     method public android.app.VoiceInteractor.PickOptionRequest.Option addSynonym(java.lang.CharSequence);
     method public int countSynonyms();
@@ -5851,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();
@@ -9283,6 +9256,7 @@
     method public abstract java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle);
     method public abstract android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
     method public abstract boolean hasSystemFeature(java.lang.String);
+    method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
     method public abstract boolean isSafeMode();
     method public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
     method public abstract java.util.List<android.content.pm.ProviderInfo> queryContentProviders(java.lang.String, int, int);
@@ -9468,12 +9442,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_SYSTEM = 16; // 0x10
+    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_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;
@@ -13198,7 +13177,6 @@
     method public abstract void close();
     method public abstract android.hardware.camera2.CameraDevice getDevice();
     method public abstract android.view.Surface getInputSurface();
-    method public abstract boolean isConstrainedHighSpeed();
     method public abstract boolean isReprocessable();
     method public abstract void prepare(android.view.Surface) throws android.hardware.camera2.CameraAccessException;
     method public abstract int setRepeatingBurst(java.util.List<android.hardware.camera2.CaptureRequest>, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
@@ -13316,12 +13294,16 @@
     method public final int hashCode();
   }
 
+  public abstract class CameraConstrainedHighSpeedCaptureSession extends android.hardware.camera2.CameraCaptureSession {
+    ctor public CameraConstrainedHighSpeedCaptureSession();
+    method public abstract java.util.List<android.hardware.camera2.CaptureRequest> createHighSpeedRequestList(android.hardware.camera2.CaptureRequest) throws android.hardware.camera2.CameraAccessException;
+  }
+
   public abstract class CameraDevice implements java.lang.AutoCloseable {
     method public abstract void close();
     method public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
     method public abstract void createCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
     method public abstract void createConstrainedHighSpeedCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
-    method public abstract java.util.List<android.hardware.camera2.CaptureRequest> createConstrainedHighSpeedRequestList(android.hardware.camera2.CaptureRequest) throws android.hardware.camera2.CameraAccessException;
     method public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
     method public abstract void createReprocessableCaptureSession(android.hardware.camera2.params.InputConfiguration, java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
     method public abstract java.lang.String getId();
@@ -13468,6 +13450,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
@@ -13496,6 +13479,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
@@ -13936,7 +13920,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();
   }
 
@@ -14742,6 +14726,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
@@ -15429,6 +15414,7 @@
     field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
     field public static final int ERROR_NO_KEY = 1; // 0x1
     field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+    field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
   }
 
   public static final class MediaCodec.CryptoInfo {
@@ -18115,6 +18101,14 @@
 
 package android.net {
 
+  public class CaptivePortal implements android.os.Parcelable {
+    method public int describeContents();
+    method public void ignoreNetwork();
+    method public void reportCaptivePortalDismissed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.net.CaptivePortal> CREATOR;
+  }
+
   public class ConnectivityManager {
     method public void addDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
     method public boolean bindProcessToNetwork(android.net.Network);
@@ -18131,7 +18125,6 @@
     method public android.net.NetworkInfo getNetworkInfo(android.net.Network);
     method public deprecated int getNetworkPreference();
     method public static deprecated android.net.Network getProcessDefaultNetwork();
-    method public void ignoreNetworkWithCaptivePortal(android.net.Network, java.lang.String);
     method public boolean isActiveNetworkMetered();
     method public boolean isDefaultNetworkActive();
     method public static deprecated boolean isNetworkTypeValid(int);
@@ -18140,7 +18133,6 @@
     method public void releaseNetworkRequest(android.app.PendingIntent);
     method public void removeDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
     method public deprecated void reportBadNetwork(android.net.Network);
-    method public void reportCaptivePortalDismissed(android.net.Network, java.lang.String);
     method public void reportNetworkConnectivity(android.net.Network, boolean);
     method public boolean requestBandwidthUpdate(android.net.Network);
     method public void requestNetwork(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback);
@@ -18148,11 +18140,12 @@
     method public deprecated void setNetworkPreference(int);
     method public static deprecated boolean setProcessDefaultNetwork(android.net.Network);
     method public void unregisterNetworkCallback(android.net.ConnectivityManager.NetworkCallback);
+    method public void unregisterNetworkCallback(android.app.PendingIntent);
     field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
     field public static final java.lang.String ACTION_CAPTIVE_PORTAL_SIGN_IN = "android.net.conn.CAPTIVE_PORTAL";
     field public static final java.lang.String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
     field public static final deprecated int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1
-    field public static final java.lang.String EXTRA_CAPTIVE_PORTAL_TOKEN = "captivePortalToken";
+    field public static final java.lang.String EXTRA_CAPTIVE_PORTAL = "android.net.extra.CAPTIVE_PORTAL";
     field public static final java.lang.String EXTRA_EXTRA_INFO = "extraInfo";
     field public static final java.lang.String EXTRA_IS_FAILOVER = "isFailover";
     field public static final java.lang.String EXTRA_NETWORK = "android.net.extra.NETWORK";
@@ -19070,14 +19063,11 @@
     field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1
     field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2
     field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4
-    field public static final long FLAG_80211mc_RESPONDER = 2L; // 0x2L
-    field public static final long FLAG_PASSPOINT_NETWORK = 1L; // 0x1L
     field public java.lang.String SSID;
     field public java.lang.String capabilities;
     field public int centerFreq0;
     field public int centerFreq1;
     field public int channelWidth;
-    field public long flags;
     field public int frequency;
     field public int level;
     field public java.lang.CharSequence operatorFriendlyName;
@@ -19125,7 +19115,7 @@
     field public java.lang.String preSharedKey;
     field public int priority;
     field public java.lang.String providerFriendlyName;
-    field public java.lang.Long[] roamingConsortiumIds;
+    field public long[] roamingConsortiumIds;
     field public int status;
     field public java.lang.String[] wepKeys;
     field public int wepTxKeyIndex;
@@ -28806,11 +28796,13 @@
   public class VoiceInteractionSession implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback {
     ctor public VoiceInteractionSession(android.content.Context);
     ctor public VoiceInteractionSession(android.content.Context, android.os.Handler);
+    method public void closeSystemDialogs();
     method public void finish();
     method public android.content.Context getContext();
     method public android.view.LayoutInflater getLayoutInflater();
     method public android.app.Dialog getWindow();
     method public void hide();
+    method public void onAssistStructureFailure(java.lang.Throwable);
     method public void onBackPressed();
     method public void onCancelRequest(android.service.voice.VoiceInteractionSession.Request);
     method public void onCloseSystemDialogs();
@@ -30693,6 +30685,11 @@
     method public abstract int getDbm();
     method public abstract int getLevel();
     method public abstract int hashCode();
+    field public static final int SIGNAL_STRENGTH_GOOD = 3; // 0x3
+    field public static final int SIGNAL_STRENGTH_GREAT = 4; // 0x4
+    field public static final int SIGNAL_STRENGTH_MODERATE = 2; // 0x2
+    field public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0; // 0x0
+    field public static final int SIGNAL_STRENGTH_POOR = 1; // 0x1
   }
 
   public final class CellSignalStrengthCdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
@@ -31819,6 +31816,7 @@
     method public java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle);
     method public android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
     method public boolean hasSystemFeature(java.lang.String);
+    method public boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
     method public boolean isSafeMode();
     method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
     method public java.util.List<android.content.pm.ProviderInfo> queryContentProviders(java.lang.String, int, int);
@@ -36972,6 +36970,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);
@@ -38728,6 +38727,7 @@
     method public abstract java.lang.String[] getResources();
     method public abstract void grant(java.lang.String[]);
     field public static final java.lang.String RESOURCE_AUDIO_CAPTURE = "android.webkit.resource.AUDIO_CAPTURE";
+    field public static final java.lang.String RESOURCE_MIDI_SYSEX = "android.webkit.resource.MIDI_SYSEX";
     field public static final java.lang.String RESOURCE_PROTECTED_MEDIA_ID = "android.webkit.resource.PROTECTED_MEDIA_ID";
     field public static final java.lang.String RESOURCE_VIDEO_CAPTURE = "android.webkit.resource.VIDEO_CAPTURE";
   }
diff --git a/api/system-current.txt b/api/system-current.txt
index a382fb0..14fff8a 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -282,16 +282,6 @@
 
   public static final class R.attr {
     ctor public R.attr();
-    field public static final int __removeBeforeMRelease_leftIndents = 16844016; // 0x10104f0
-    field public static final int __removeBeforeMRelease_rightIndents = 16844017; // 0x10104f1
-    field public static final int __reserved0 = 16844020; // 0x10104f4
-    field public static final int __reserved1 = 16844019; // 0x10104f3
-    field public static final int __reserved2 = 16843999; // 0x10104df
-    field public static final int __reserved3 = 16844000; // 0x10104e0
-    field public static final int __reserved4 = 16844001; // 0x10104e1
-    field public static final int __reserved5 = 16844002; // 0x10104e2
-    field public static final int __reserved6 = 16844003; // 0x10104e3
-    field public static final int __reserved7 = 16844004; // 0x10104e4
     field public static final int absListViewStyle = 16842858; // 0x101006a
     field public static final int accessibilityEventTypes = 16843648; // 0x1010380
     field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -354,7 +344,7 @@
     field public static final int allowParallelSyncs = 16843570; // 0x1010332
     field public static final int allowSingleTap = 16843353; // 0x1010259
     field public static final int allowTaskReparenting = 16843268; // 0x1010204
-    field public static final int allowUndo = 16844006; // 0x10104e6
+    field public static final int allowUndo = 16843999; // 0x10104df
     field public static final int alpha = 16843551; // 0x101031f
     field public static final int alphabeticShortcut = 16843235; // 0x10101e3
     field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
@@ -385,7 +375,7 @@
     field public static final int autoStart = 16843445; // 0x10102b5
     field public static final deprecated int autoText = 16843114; // 0x101016a
     field public static final int autoUrlDetect = 16843404; // 0x101028c
-    field public static final int autoVerify = 16844010; // 0x10104ea
+    field public static final int autoVerify = 16844014; // 0x10104ee
     field public static final int background = 16842964; // 0x10100d4
     field public static final int backgroundDimAmount = 16842802; // 0x1010032
     field public static final int backgroundDimEnabled = 16843295; // 0x101021f
@@ -409,7 +399,7 @@
     field public static final int bottomRightRadius = 16843180; // 0x10101ac
     field public static final int breadCrumbShortTitle = 16843524; // 0x1010304
     field public static final int breadCrumbTitle = 16843523; // 0x1010303
-    field public static final int breakStrategy = 16844011; // 0x10104eb
+    field public static final int breakStrategy = 16843997; // 0x10104dd
     field public static final int bufferType = 16843086; // 0x101014e
     field public static final int button = 16843015; // 0x1010107
     field public static final int buttonBarButtonStyle = 16843567; // 0x101032f
@@ -471,7 +461,7 @@
     field public static final int colorActivatedHighlight = 16843664; // 0x1010390
     field public static final int colorBackground = 16842801; // 0x1010031
     field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
-    field public static final int colorBackgroundFloating = 16844007; // 0x10104e7
+    field public static final int colorBackgroundFloating = 16844002; // 0x10104e2
     field public static final int colorButtonNormal = 16843819; // 0x101042b
     field public static final int colorControlActivated = 16843818; // 0x101042a
     field public static final int colorControlHighlight = 16843820; // 0x101042c
@@ -505,7 +495,7 @@
     field public static final int contentInsetLeft = 16843861; // 0x1010455
     field public static final int contentInsetRight = 16843862; // 0x1010456
     field public static final int contentInsetStart = 16843859; // 0x1010453
-    field public static final int contextClickable = 16844021; // 0x10104f5
+    field public static final int contextClickable = 16844007; // 0x10104e7
     field public static final int controlX1 = 16843772; // 0x10103fc
     field public static final int controlX2 = 16843774; // 0x10103fe
     field public static final int controlY1 = 16843773; // 0x10103fd
@@ -614,7 +604,7 @@
     field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6
     field public static final int exported = 16842768; // 0x1010010
     field public static final int extraTension = 16843371; // 0x101026b
-    field public static final int extractNativeLibs = 16844008; // 0x10104e8
+    field public static final int extractNativeLibs = 16844010; // 0x10104ea
     field public static final int factor = 16843219; // 0x10101d3
     field public static final int fadeDuration = 16843384; // 0x1010278
     field public static final int fadeEnabled = 16843390; // 0x101027e
@@ -640,7 +630,7 @@
     field public static final int fillViewport = 16843130; // 0x101017a
     field public static final int filter = 16843035; // 0x101011b
     field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4
-    field public static final int fingerprintAuthDrawable = 16844025; // 0x10104f9
+    field public static final int fingerprintAuthDrawable = 16844008; // 0x10104e8
     field public static final int finishOnCloseSystemDialogs = 16843431; // 0x10102a7
     field public static final int finishOnTaskLaunch = 16842772; // 0x1010014
     field public static final int firstDayOfWeek = 16843581; // 0x101033d
@@ -684,7 +674,7 @@
     field public static final int fromXScale = 16843202; // 0x10101c2
     field public static final int fromYDelta = 16843208; // 0x10101c8
     field public static final int fromYScale = 16843204; // 0x10101c4
-    field public static final int fullBackupContent = 16844005; // 0x10104e5
+    field public static final int fullBackupContent = 16844011; // 0x10104eb
     field public static final int fullBackupOnly = 16843891; // 0x1010473
     field public static final int fullBright = 16842954; // 0x10100ca
     field public static final int fullDark = 16842950; // 0x10100c6
@@ -728,7 +718,7 @@
     field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
     field public static final int horizontalSpacing = 16843028; // 0x1010114
     field public static final int host = 16842792; // 0x1010028
-    field public static final int hyphenationFrequency = 16844024; // 0x10104f8
+    field public static final int hyphenationFrequency = 16843998; // 0x10104de
     field public static final int icon = 16842754; // 0x1010002
     field public static final int iconPreview = 16843337; // 0x1010249
     field public static final int iconifiedByDefault = 16843514; // 0x10102fa
@@ -892,9 +882,9 @@
     field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208
     field public static final int listViewStyle = 16842868; // 0x1010074
     field public static final int listViewWhiteStyle = 16842869; // 0x1010075
-    field public static final int lockTaskMode = 16844015; // 0x10104ef
+    field public static final int lockTaskMode = 16844013; // 0x10104ed
     field public static final int logo = 16843454; // 0x10102be
-    field public static final int logoDescription = 16844026; // 0x10104fa
+    field public static final int logoDescription = 16844009; // 0x10104e9
     field public static final int longClickable = 16842982; // 0x10100e6
     field public static final int loopViews = 16843527; // 0x1010307
     field public static final int manageSpaceActivity = 16842756; // 0x1010004
@@ -955,7 +945,7 @@
     field public static final int numColumns = 16843032; // 0x1010118
     field public static final int numStars = 16843076; // 0x1010144
     field public static final int numbersBackgroundColor = 16843938; // 0x10104a2
-    field public static final int numbersInnerTextColor = 16843998; // 0x10104de
+    field public static final int numbersInnerTextColor = 16844001; // 0x10104e1
     field public static final int numbersSelectorColor = 16843939; // 0x10104a3
     field public static final int numbersTextColor = 16843937; // 0x10104a1
     field public static final deprecated int numeric = 16843109; // 0x1010165
@@ -1067,7 +1057,6 @@
     field public static final int readPermission = 16842759; // 0x1010007
     field public static final int recognitionService = 16843932; // 0x101049c
     field public static final int relinquishTaskIdentity = 16843894; // 0x1010476
-    field public static final int removeBeforeMRelease = 16844014; // 0x10104ee
     field public static final int reparent = 16843964; // 0x10104bc
     field public static final int reparentWithOverlay = 16843965; // 0x10104bd
     field public static final int repeatCount = 16843199; // 0x10101bf
@@ -1117,7 +1106,7 @@
     field public static final int screenOrientation = 16842782; // 0x101001e
     field public static final int screenSize = 16843466; // 0x10102ca
     field public static final int scrollHorizontally = 16843099; // 0x101015b
-    field public static final int scrollIndicators = 16844023; // 0x10104f7
+    field public static final int scrollIndicators = 16844006; // 0x10104e6
     field public static final int scrollViewStyle = 16842880; // 0x1010080
     field public static final int scrollX = 16842962; // 0x10100d2
     field public static final int scrollY = 16842963; // 0x10100d3
@@ -1175,7 +1164,7 @@
     field public static final int showAsAction = 16843481; // 0x10102d9
     field public static final int showDefault = 16843258; // 0x10101fa
     field public static final int showDividers = 16843561; // 0x1010329
-    field public static final int showForAllUsers = 16844018; // 0x10104f2
+    field public static final int showForAllUsers = 16844015; // 0x10104ef
     field public static final deprecated int showOnLockScreen = 16843721; // 0x10103c9
     field public static final int showSilent = 16843259; // 0x10101fb
     field public static final int showText = 16843949; // 0x10104ad
@@ -1250,7 +1239,7 @@
     field public static final int submitBackground = 16843912; // 0x1010488
     field public static final int subtitle = 16843473; // 0x10102d1
     field public static final int subtitleTextAppearance = 16843823; // 0x101042f
-    field public static final int subtitleTextColor = 16844028; // 0x10104fc
+    field public static final int subtitleTextColor = 16844004; // 0x10104e4
     field public static final int subtitleTextStyle = 16843513; // 0x10102f9
     field public static final int subtypeExtraValue = 16843674; // 0x101039a
     field public static final int subtypeId = 16843713; // 0x10103c1
@@ -1262,8 +1251,8 @@
     field public static final int summaryColumn = 16843426; // 0x10102a2
     field public static final int summaryOff = 16843248; // 0x10101f0
     field public static final int summaryOn = 16843247; // 0x10101ef
-    field public static final int supportsAssist = 16844012; // 0x10104ec
-    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844022; // 0x10104f6
+    field public static final int supportsAssist = 16844016; // 0x10104f0
+    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1
     field public static final int supportsRtl = 16843695; // 0x10103af
     field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
     field public static final int supportsUploading = 16843419; // 0x101029b
@@ -1364,7 +1353,7 @@
     field public static final int thicknessRatio = 16843164; // 0x101019c
     field public static final int thumb = 16843074; // 0x1010142
     field public static final int thumbOffset = 16843075; // 0x1010143
-    field public static final int thumbPosition = 16844013; // 0x10104ed
+    field public static final int thumbPosition = 16844005; // 0x10104e5
     field public static final int thumbTextPadding = 16843634; // 0x1010372
     field public static final int thumbTint = 16843889; // 0x1010471
     field public static final int thumbTintMode = 16843890; // 0x1010472
@@ -1381,7 +1370,7 @@
     field public static final int title = 16843233; // 0x10101e1
     field public static final int titleCondensed = 16843234; // 0x10101e2
     field public static final int titleTextAppearance = 16843822; // 0x101042e
-    field public static final int titleTextColor = 16844027; // 0x10104fb
+    field public static final int titleTextColor = 16844003; // 0x10104e3
     field public static final int titleTextStyle = 16843512; // 0x10102f8
     field public static final int toAlpha = 16843211; // 0x10101cb
     field public static final int toDegrees = 16843188; // 0x10101b4
@@ -1429,7 +1418,7 @@
     field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
     field public static final int useLevel = 16843167; // 0x101019f
     field public static final int userVisible = 16843409; // 0x1010291
-    field public static final int usesCleartextTraffic = 16844009; // 0x10104e9
+    field public static final int usesCleartextTraffic = 16844012; // 0x10104ec
     field public static final int value = 16842788; // 0x1010024
     field public static final int valueFrom = 16843486; // 0x10102de
     field public static final int valueTo = 16843487; // 0x10102df
@@ -1497,7 +1486,7 @@
     field public static final int windowHideAnimation = 16842935; // 0x10100b7
     field public static final int windowIsFloating = 16842839; // 0x1010057
     field public static final int windowIsTranslucent = 16842840; // 0x1010058
-    field public static final int windowLightStatusBar = 16843997; // 0x10104dd
+    field public static final int windowLightStatusBar = 16844000; // 0x10104e0
     field public static final int windowMinWidthMajor = 16843606; // 0x1010356
     field public static final int windowMinWidthMinor = 16843607; // 0x1010357
     field public static final int windowNoDisplay = 16843294; // 0x101021e
@@ -1762,12 +1751,12 @@
   public static final class R.id {
     ctor public R.id();
     field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
-    field public static final int accessibilityActionScrollDown = 16908345; // 0x1020039
-    field public static final int accessibilityActionScrollLeft = 16908344; // 0x1020038
-    field public static final int accessibilityActionScrollRight = 16908346; // 0x102003a
-    field public static final int accessibilityActionScrollToPosition = 16908342; // 0x1020036
-    field public static final int accessibilityActionScrollUp = 16908343; // 0x1020037
-    field public static final int accessibilityActionShowOnScreen = 16908341; // 0x1020035
+    field public static final int accessibilityActionScrollDown = 16908346; // 0x102003a
+    field public static final int accessibilityActionScrollLeft = 16908345; // 0x1020039
+    field public static final int accessibilityActionScrollRight = 16908347; // 0x102003b
+    field public static final int accessibilityActionScrollToPosition = 16908343; // 0x1020037
+    field public static final int accessibilityActionScrollUp = 16908344; // 0x1020038
+    field public static final int accessibilityActionShowOnScreen = 16908342; // 0x1020036
     field public static final int addToDictionary = 16908330; // 0x102002a
     field public static final int background = 16908288; // 0x1020000
     field public static final int button1 = 16908313; // 0x1020019
@@ -1807,7 +1796,7 @@
     field public static final int selectAll = 16908319; // 0x102001f
     field public static final int selectTextMode = 16908333; // 0x102002d
     field public static final int selectedIcon = 16908302; // 0x102000e
-    field public static final int shareText = 16908347; // 0x102003b
+    field public static final int shareText = 16908341; // 0x1020035
     field public static final int startSelectingText = 16908328; // 0x1020028
     field public static final int statusBarBackground = 16908335; // 0x102002f
     field public static final int stopSelectingText = 16908329; // 0x1020029
@@ -2067,7 +2056,7 @@
     field public static final int TextAppearance_Material_Widget_ActionMode_Title = 16974355; // 0x1030213
     field public static final int TextAppearance_Material_Widget_ActionMode_Title_Inverse = 16974356; // 0x1030214
     field public static final int TextAppearance_Material_Widget_Button = 16974357; // 0x1030215
-    field public static final int TextAppearance_Material_Widget_Button_Inverse = 16974565; // 0x10302e5
+    field public static final int TextAppearance_Material_Widget_Button_Inverse = 16974548; // 0x10302d4
     field public static final int TextAppearance_Material_Widget_DropDownHint = 16974358; // 0x1030216
     field public static final int TextAppearance_Material_Widget_DropDownItem = 16974359; // 0x1030217
     field public static final int TextAppearance_Material_Widget_EditText = 16974360; // 0x1030218
@@ -2112,8 +2101,8 @@
     field public static final int ThemeOverlay_Material_ActionBar = 16974409; // 0x1030249
     field public static final int ThemeOverlay_Material_Dark = 16974411; // 0x103024b
     field public static final int ThemeOverlay_Material_Dark_ActionBar = 16974412; // 0x103024c
-    field public static final int ThemeOverlay_Material_Dialog = 16974564; // 0x10302e4
-    field public static final int ThemeOverlay_Material_Dialog_Alert = 16974566; // 0x10302e6
+    field public static final int ThemeOverlay_Material_Dialog = 16974550; // 0x10302d6
+    field public static final int ThemeOverlay_Material_Dialog_Alert = 16974551; // 0x10302d7
     field public static final int ThemeOverlay_Material_Light = 16974410; // 0x103024a
     field public static final int Theme_Black = 16973832; // 0x1030008
     field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009
@@ -2205,7 +2194,7 @@
     field public static final int Theme_Material_Light_Dialog_NoActionBar = 16974396; // 0x103023c
     field public static final int Theme_Material_Light_Dialog_NoActionBar_MinWidth = 16974397; // 0x103023d
     field public static final int Theme_Material_Light_Dialog_Presentation = 16974398; // 0x103023e
-    field public static final int Theme_Material_Light_LightStatusBar = 16974563; // 0x10302e3
+    field public static final int Theme_Material_Light_LightStatusBar = 16974549; // 0x10302d5
     field public static final int Theme_Material_Light_NoActionBar = 16974401; // 0x1030241
     field public static final int Theme_Material_Light_NoActionBar_Fullscreen = 16974402; // 0x1030242
     field public static final int Theme_Material_Light_NoActionBar_Overscan = 16974403; // 0x1030243
@@ -2654,21 +2643,6 @@
     field public static final int Widget_Toolbar = 16974311; // 0x10301e7
     field public static final int Widget_Toolbar_Button_Navigation = 16974312; // 0x10301e8
     field public static final int Widget_WebView = 16973875; // 0x1030033
-    field public static final int __reserved10 = 16974550; // 0x10302d6
-    field public static final int __reserved11 = 16974551; // 0x10302d7
-    field public static final int __reserved12 = 16974552; // 0x10302d8
-    field public static final int __reserved13 = 16974553; // 0x10302d9
-    field public static final int __reserved14 = 16974554; // 0x10302da
-    field public static final int __reserved15 = 16974555; // 0x10302db
-    field public static final int __reserved16 = 16974556; // 0x10302dc
-    field public static final int __reserved17 = 16974557; // 0x10302dd
-    field public static final int __reserved18 = 16974558; // 0x10302de
-    field public static final int __reserved19 = 16974559; // 0x10302df
-    field public static final int __reserved20 = 16974560; // 0x10302e0
-    field public static final int __reserved21 = 16974561; // 0x10302e1
-    field public static final int __reserved22 = 16974562; // 0x10302e2
-    field public static final int __reserved8 = 16974548; // 0x10302d4
-    field public static final int __reserved9 = 16974549; // 0x10302d5
   }
 
   public static final class R.transition {
@@ -3964,6 +3938,8 @@
     method public void finishOp(java.lang.String, int, java.lang.String);
     method public int noteOp(java.lang.String, int, java.lang.String);
     method public int noteOpNoThrow(java.lang.String, int, java.lang.String);
+    method public int noteProxyOp(java.lang.String, java.lang.String);
+    method public int noteProxyOpNoThrow(java.lang.String, java.lang.String);
     method public static java.lang.String permissionToOp(java.lang.String);
     method public int startOp(java.lang.String, int, java.lang.String);
     method public int startOpNoThrow(java.lang.String, int, java.lang.String);
@@ -5544,7 +5520,6 @@
 
   public static class VoiceInteractor.AbortVoiceRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.AbortVoiceRequest(android.app.VoiceInteractor.Prompt, android.os.Bundle);
-    ctor public deprecated VoiceInteractor.AbortVoiceRequest(java.lang.CharSequence, android.os.Bundle);
     method public void onAbortResult(android.os.Bundle);
   }
 
@@ -5555,24 +5530,20 @@
 
   public static class VoiceInteractor.CompleteVoiceRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.CompleteVoiceRequest(android.app.VoiceInteractor.Prompt, android.os.Bundle);
-    ctor public deprecated VoiceInteractor.CompleteVoiceRequest(java.lang.CharSequence, android.os.Bundle);
     method public void onCompleteResult(android.os.Bundle);
   }
 
   public static class VoiceInteractor.ConfirmationRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.ConfirmationRequest(android.app.VoiceInteractor.Prompt, android.os.Bundle);
-    ctor public deprecated VoiceInteractor.ConfirmationRequest(java.lang.CharSequence, android.os.Bundle);
     method public void onConfirmationResult(boolean, android.os.Bundle);
   }
 
   public static class VoiceInteractor.PickOptionRequest extends android.app.VoiceInteractor.Request {
     ctor public VoiceInteractor.PickOptionRequest(android.app.VoiceInteractor.Prompt, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
-    ctor public deprecated VoiceInteractor.PickOptionRequest(java.lang.CharSequence, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
     method public void onPickOptionResult(boolean, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
   }
 
   public static final class VoiceInteractor.PickOptionRequest.Option implements android.os.Parcelable {
-    ctor public VoiceInteractor.PickOptionRequest.Option(java.lang.CharSequence);
     ctor public VoiceInteractor.PickOptionRequest.Option(java.lang.CharSequence, int);
     method public android.app.VoiceInteractor.PickOptionRequest.Option addSynonym(java.lang.CharSequence);
     method public int countSynonyms();
@@ -5983,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();
@@ -9567,6 +9540,7 @@
     method public abstract android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
     method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
     method public abstract boolean hasSystemFeature(java.lang.String);
+    method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
     method public abstract boolean isSafeMode();
     method public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
     method public abstract java.util.List<android.content.pm.ProviderInfo> queryContentProviders(java.lang.String, int, int);
@@ -9673,11 +9647,6 @@
     field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview";
     field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
     field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
-    field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
-    field public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 8; // 0x8
-    field public static final int FLAG_PERMISSION_SYSTEM_FIXED = 16; // 0x10
-    field public static final int FLAG_PERMISSION_USER_FIXED = 2; // 0x2
-    field public static final int FLAG_PERMISSION_USER_SET = 1; // 0x1
     field public static final int GET_ACTIVITIES = 1; // 0x1
     field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
     field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
@@ -9808,12 +9777,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_SYSTEM = 16; // 0x10
+    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_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;
@@ -13421,7 +13395,6 @@
 
   public abstract class SensorManager {
     method public boolean cancelTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor);
-    method public boolean enableDataInjectionMode(boolean);
     method public boolean flush(android.hardware.SensorEventListener);
     method public static float getAltitude(float, float);
     method public static void getAngleChange(float[], float[], float[]);
@@ -13434,6 +13407,7 @@
     method public static void getRotationMatrixFromVector(float[], float[]);
     method public java.util.List<android.hardware.Sensor> getSensorList(int);
     method public deprecated int getSensors();
+    method public boolean initDataInjection(boolean);
     method public boolean injectSensorData(android.hardware.Sensor, float[], int, long);
     method public deprecated boolean registerListener(android.hardware.SensorListener, int);
     method public deprecated boolean registerListener(android.hardware.SensorListener, int, int);
@@ -13543,7 +13517,6 @@
     method public abstract void close();
     method public abstract android.hardware.camera2.CameraDevice getDevice();
     method public abstract android.view.Surface getInputSurface();
-    method public abstract boolean isConstrainedHighSpeed();
     method public abstract boolean isReprocessable();
     method public abstract void prepare(android.view.Surface) throws android.hardware.camera2.CameraAccessException;
     method public abstract int setRepeatingBurst(java.util.List<android.hardware.camera2.CaptureRequest>, android.hardware.camera2.CameraCaptureSession.CaptureCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
@@ -13661,12 +13634,16 @@
     method public final int hashCode();
   }
 
+  public abstract class CameraConstrainedHighSpeedCaptureSession extends android.hardware.camera2.CameraCaptureSession {
+    ctor public CameraConstrainedHighSpeedCaptureSession();
+    method public abstract java.util.List<android.hardware.camera2.CaptureRequest> createHighSpeedRequestList(android.hardware.camera2.CaptureRequest) throws android.hardware.camera2.CameraAccessException;
+  }
+
   public abstract class CameraDevice implements java.lang.AutoCloseable {
     method public abstract void close();
     method public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
     method public abstract void createCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
     method public abstract void createConstrainedHighSpeedCaptureSession(java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
-    method public abstract java.util.List<android.hardware.camera2.CaptureRequest> createConstrainedHighSpeedRequestList(android.hardware.camera2.CaptureRequest) throws android.hardware.camera2.CameraAccessException;
     method public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
     method public abstract void createReprocessableCaptureSession(android.hardware.camera2.params.InputConfiguration, java.util.List<android.view.Surface>, android.hardware.camera2.CameraCaptureSession.StateCallback, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
     method public abstract java.lang.String getId();
@@ -13813,6 +13790,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
@@ -13841,6 +13819,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
@@ -14281,7 +14260,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();
   }
 
@@ -15986,6 +15965,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
@@ -16697,6 +16677,7 @@
     field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
     field public static final int ERROR_NO_KEY = 1; // 0x1
     field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+    field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
   }
 
   public static final class MediaCodec.CryptoInfo {
@@ -19630,6 +19611,14 @@
 
 package android.net {
 
+  public class CaptivePortal implements android.os.Parcelable {
+    method public int describeContents();
+    method public void ignoreNetwork();
+    method public void reportCaptivePortalDismissed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.net.CaptivePortal> CREATOR;
+  }
+
   public class ConnectivityManager {
     method public void addDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
     method public boolean bindProcessToNetwork(android.net.Network);
@@ -19646,7 +19635,6 @@
     method public android.net.NetworkInfo getNetworkInfo(android.net.Network);
     method public deprecated int getNetworkPreference();
     method public static deprecated android.net.Network getProcessDefaultNetwork();
-    method public void ignoreNetworkWithCaptivePortal(android.net.Network, java.lang.String);
     method public boolean isActiveNetworkMetered();
     method public boolean isDefaultNetworkActive();
     method public static deprecated boolean isNetworkTypeValid(int);
@@ -19655,7 +19643,6 @@
     method public void releaseNetworkRequest(android.app.PendingIntent);
     method public void removeDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
     method public deprecated void reportBadNetwork(android.net.Network);
-    method public void reportCaptivePortalDismissed(android.net.Network, java.lang.String);
     method public void reportNetworkConnectivity(android.net.Network, boolean);
     method public boolean requestBandwidthUpdate(android.net.Network);
     method public void requestNetwork(android.net.NetworkRequest, android.net.ConnectivityManager.NetworkCallback);
@@ -19663,11 +19650,12 @@
     method public deprecated void setNetworkPreference(int);
     method public static deprecated boolean setProcessDefaultNetwork(android.net.Network);
     method public void unregisterNetworkCallback(android.net.ConnectivityManager.NetworkCallback);
+    method public void unregisterNetworkCallback(android.app.PendingIntent);
     field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
     field public static final java.lang.String ACTION_CAPTIVE_PORTAL_SIGN_IN = "android.net.conn.CAPTIVE_PORTAL";
     field public static final java.lang.String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
     field public static final deprecated int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1
-    field public static final java.lang.String EXTRA_CAPTIVE_PORTAL_TOKEN = "captivePortalToken";
+    field public static final java.lang.String EXTRA_CAPTIVE_PORTAL = "android.net.extra.CAPTIVE_PORTAL";
     field public static final java.lang.String EXTRA_EXTRA_INFO = "extraInfo";
     field public static final java.lang.String EXTRA_IS_FAILOVER = "isFailover";
     field public static final java.lang.String EXTRA_NETWORK = "android.net.extra.NETWORK";
@@ -20826,14 +20814,11 @@
     field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1
     field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2
     field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4
-    field public static final long FLAG_80211mc_RESPONDER = 2L; // 0x2L
-    field public static final long FLAG_PASSPOINT_NETWORK = 1L; // 0x1L
     field public java.lang.String SSID;
     field public java.lang.String capabilities;
     field public int centerFreq0;
     field public int centerFreq1;
     field public int channelWidth;
-    field public long flags;
     field public int frequency;
     field public int level;
     field public java.lang.CharSequence operatorFriendlyName;
@@ -20888,7 +20873,7 @@
     field public java.lang.String preSharedKey;
     field public int priority;
     field public java.lang.String providerFriendlyName;
-    field public java.lang.Long[] roamingConsortiumIds;
+    field public long[] roamingConsortiumIds;
     field public int status;
     field public java.lang.String[] wepKeys;
     field public int wepTxKeyIndex;
@@ -30960,11 +30945,13 @@
   public class VoiceInteractionSession implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback {
     ctor public VoiceInteractionSession(android.content.Context);
     ctor public VoiceInteractionSession(android.content.Context, android.os.Handler);
+    method public void closeSystemDialogs();
     method public void finish();
     method public android.content.Context getContext();
     method public android.view.LayoutInflater getLayoutInflater();
     method public android.app.Dialog getWindow();
     method public void hide();
+    method public void onAssistStructureFailure(java.lang.Throwable);
     method public void onBackPressed();
     method public void onCancelRequest(android.service.voice.VoiceInteractionSession.Request);
     method public void onCloseSystemDialogs();
@@ -32930,6 +32917,11 @@
     method public abstract int getDbm();
     method public abstract int getLevel();
     method public abstract int hashCode();
+    field public static final int SIGNAL_STRENGTH_GOOD = 3; // 0x3
+    field public static final int SIGNAL_STRENGTH_GREAT = 4; // 0x4
+    field public static final int SIGNAL_STRENGTH_MODERATE = 2; // 0x2
+    field public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0; // 0x0
+    field public static final int SIGNAL_STRENGTH_POOR = 1; // 0x1
   }
 
   public final class CellSignalStrengthCdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
@@ -34110,6 +34102,7 @@
     method public android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
     method public void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
     method public boolean hasSystemFeature(java.lang.String);
+    method public boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
     method public boolean isSafeMode();
     method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
     method public java.util.List<android.content.pm.ProviderInfo> queryContentProviders(java.lang.String, int, int);
@@ -39267,6 +39260,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);
@@ -41080,6 +41074,7 @@
     method public abstract java.lang.String[] getResources();
     method public abstract void grant(java.lang.String[]);
     field public static final java.lang.String RESOURCE_AUDIO_CAPTURE = "android.webkit.resource.AUDIO_CAPTURE";
+    field public static final java.lang.String RESOURCE_MIDI_SYSEX = "android.webkit.resource.MIDI_SYSEX";
     field public static final java.lang.String RESOURCE_PROTECTED_MEDIA_ID = "android.webkit.resource.PROTECTED_MEDIA_ID";
     field public static final java.lang.String RESOURCE_VIDEO_CAPTURE = "android.webkit.resource.VIDEO_CAPTURE";
   }
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index 13fda59..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(), 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/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 3001c2c..aa7692b 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -489,7 +489,8 @@
      * <p>It is safe to call this method from the main thread.
      *
      * <p>This method requires the caller to hold the permission
-     * {@link android.Manifest.permission#GET_ACCOUNTS}.
+     * {@link android.Manifest.permission#GET_ACCOUNTS} or share a uid with the
+     * authenticator that owns the account type.
      *
      * @param type The type of accounts to return, null to retrieve all accounts
      * @return An array of {@link Account}, one per matching account.  Empty
@@ -615,7 +616,8 @@
      * {@link AccountManagerFuture} must not be used on the main thread.
      *
      * <p>This method requires the caller to hold the permission
-     * {@link android.Manifest.permission#GET_ACCOUNTS}.
+     * {@link android.Manifest.permission#GET_ACCOUNTS} or share a uid with the
+     * authenticator that owns the account type.
      *
      * @param type The type of accounts to return, must not be null
      * @param features An array of the account features to require,
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 9c2e208..d07238a 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -3723,6 +3723,12 @@
      * #checkSelfPermission(String)}.
      * </p>
      * <p>
+     * You cannot request a permission if your activity sets {@link
+     * android.R.styleable#AndroidManifestActivity_noHistory noHistory} to
+     * <code>true</code> because in this case the activity would not receive
+     * result callbacks including {@link #onRequestPermissionsResult(int, String[], int[])}.
+     * </p>
+     * <p>
      * A sample permissions request looks like this:
      * </p>
      * <code><pre><p>
@@ -3749,6 +3755,7 @@
      * @param permissions The requested permissions.
      * @param requestCode Application specific request code to match with a result
      *    reported to {@link #onRequestPermissionsResult(int, String[], int[])}.
+     *    Should be >= 0.
      *
      * @see #onRequestPermissionsResult(int, String[], int[])
      * @see #checkSelfPermission(String)
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 2bb4e76..cc93ac9 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -921,8 +921,9 @@
             IApplicationThread app = ApplicationThreadNative.asInterface(b);
             Intent service = Intent.CREATOR.createFromParcel(data);
             String resolvedType = data.readString();
+            String callingPackage = data.readString();
             int userId = data.readInt();
-            ComponentName cn = startService(app, service, resolvedType, userId);
+            ComponentName cn = startService(app, service, resolvedType, callingPackage, userId);
             reply.writeNoException();
             ComponentName.writeToParcel(cn, reply);
             return true;
@@ -976,9 +977,11 @@
             String resolvedType = data.readString();
             b = data.readStrongBinder();
             int fl = data.readInt();
+            String callingPackage = data.readString();
             int userId = data.readInt();
             IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
-            int res = bindService(app, token, service, resolvedType, conn, fl, userId);
+            int res = bindService(app, token, service, resolvedType, conn, fl,
+                    callingPackage, userId);
             reply.writeNoException();
             reply.writeInt(res);
             return true;
@@ -1568,7 +1571,8 @@
             data.enforceInterface(IActivityManager.descriptor);
             Intent service = Intent.CREATOR.createFromParcel(data);
             String resolvedType = data.readString();
-            IBinder binder = peekService(service, resolvedType);
+            String callingPackage = data.readString();
+            IBinder binder = peekService(service, resolvedType, callingPackage);
             reply.writeNoException();
             reply.writeStrongBinder(binder);
             return true;
@@ -3638,7 +3642,7 @@
     }
 
     public ComponentName startService(IApplicationThread caller, Intent service,
-            String resolvedType, int userId) throws RemoteException
+            String resolvedType, String callingPackage, int userId) throws RemoteException
     {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
@@ -3646,6 +3650,7 @@
         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
         service.writeToParcel(data, 0);
         data.writeString(resolvedType);
+        data.writeString(callingPackage);
         data.writeInt(userId);
         mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
         reply.readException();
@@ -3708,7 +3713,7 @@
     }
     public int bindService(IApplicationThread caller, IBinder token,
             Intent service, String resolvedType, IServiceConnection connection,
-            int flags, int userId) throws RemoteException {
+            int flags,  String callingPackage, int userId) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
@@ -3718,6 +3723,7 @@
         data.writeString(resolvedType);
         data.writeStrongBinder(connection.asBinder());
         data.writeInt(flags);
+        data.writeString(callingPackage);
         data.writeInt(userId);
         mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
         reply.readException();
@@ -3783,12 +3789,14 @@
         reply.recycle();
     }
 
-    public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
+    public IBinder peekService(Intent service, String resolvedType, String callingPackage)
+            throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
         data.writeInterfaceToken(IActivityManager.descriptor);
         service.writeToParcel(data, 0);
         data.writeString(resolvedType);
+        data.writeString(callingPackage);
         mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
         reply.readException();
         IBinder binder = reply.readStrongBinder();
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 828dc0a..2b4d03b 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -180,15 +180,14 @@
     final ApplicationThread mAppThread = new ApplicationThread();
     final Looper mLooper = Looper.myLooper();
     final H mH = new H();
-    final ArrayMap<IBinder, ActivityClientRecord> mActivities
-            = new ArrayMap<IBinder, ActivityClientRecord>();
+    final ArrayMap<IBinder, ActivityClientRecord> mActivities = new ArrayMap<>();
     // List of new activities (via ActivityRecord.nextIdle) that should
     // be reported when next we idle.
     ActivityClientRecord mNewActivities = null;
     // Number of activities that are currently visible on-screen.
     int mNumVisibleActivities = 0;
-    final ArrayMap<IBinder, Service> mServices
-            = new ArrayMap<IBinder, Service>();
+    WeakReference<AssistStructure> mLastAssistStructure;
+    final ArrayMap<IBinder, Service> mServices = new ArrayMap<>();
     AppBindData mBoundApplication;
     Profiler mProfiler;
     int mCurDefaultDisplayDpi;
@@ -2568,6 +2567,12 @@
     }
 
     public void handleRequestAssistContextExtras(RequestAssistContextExtras cmd) {
+        if (mLastAssistStructure != null) {
+            AssistStructure structure = mLastAssistStructure.get();
+            if (structure != null) {
+                structure.clearSendChannel();
+            }
+        }
         Bundle data = new Bundle();
         AssistStructure structure = null;
         AssistContent content = new AssistContent();
@@ -2597,6 +2602,7 @@
         if (structure == null) {
             structure = new AssistStructure();
         }
+        mLastAssistStructure = new WeakReference<>(structure);
         IActivityManager mgr = ActivityManagerNative.getDefault();
         try {
             mgr.reportAssistContextExtras(cmd.requestToken, data, structure, content, referrer);
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index 9ea1606..dc83a01 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -570,12 +570,15 @@
      * even when the system is in low-power idle modes.  This type of alarm must <b>only</b>
      * be used for situations where it is actually required that the alarm go off while in
      * idle -- a reasonable example would be for a calendar notification that should make a
-     * sound so the user is aware of it.  These alarms can significantly impact the power use
-     * of the device when idle (and thus cause significant battery blame to the app scheduling
-     * them), so they should be used with care.
+     * sound so the user is aware of it.  When the alarm is dispatched, the app will also be
+     * added to the system's temporary whitelist for approximately 10 seconds to allow that
+     * application to acquire further wake locks in which to complete its work.</p>
      *
-     * <p>To reduce abuse, there are restrictions on how frequently these alarms will go off
-     * for a particular application.  Under normal system operation, it will not dispatch these
+     * <p>These alarms can significantly impact the power use
+     * of the device when idle (and thus cause significant battery blame to the app scheduling
+     * them), so they should be used with care.  To reduce abuse, there are restrictions on how
+     * frequently these alarms will go off for a particular application.
+     * Under normal system operation, it will not dispatch these
      * alarms more than about every minute (at which point every such pending alarm is
      * dispatched); when in low-power idle modes this duration may be significantly longer,
      * such as 15 minutes.</p>
@@ -619,12 +622,15 @@
      * {@link #setAndAllowWhileIdle}.  This type of alarm must <b>only</b>
      * be used for situations where it is actually required that the alarm go off while in
      * idle -- a reasonable example would be for a calendar notification that should make a
-     * sound so the user is aware of it.  These alarms can significantly impact the power use
-     * of the device when idle (and thus cause significant battery blame to the app scheduling
-     * them), so they should be used with care.
+     * sound so the user is aware of it.  When the alarm is dispatched, the app will also be
+     * added to the system's temporary whitelist for approximately 10 seconds to allow that
+     * application to acquire further wake locks in which to complete its work.</p>
      *
-     * <p>To reduce abuse, there are restrictions on how frequently these alarms will go off
-     * for a particular application.  Under normal system operation, it will not dispatch these
+     * <p>These alarms can significantly impact the power use
+     * of the device when idle (and thus cause significant battery blame to the app scheduling
+     * them), so they should be used with care.  To reduce abuse, there are restrictions on how
+     * frequently these alarms will go off for a particular application.
+     * Under normal system operation, it will not dispatch these
      * alarms more than about every minute (at which point every such pending alarm is
      * dispatched); when in low-power idle modes this duration may be significantly longer,
      * such as 15 minutes.</p>
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 9faadd3..bf3bfae 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1082,13 +1082,18 @@
         private final long mTime;
         private final long mRejectTime;
         private final int mDuration;
+        private final int mProxyUid;
+        private final String mProxyPackageName;
 
-        public OpEntry(int op, int mode, long time, long rejectTime, int duration) {
+        public OpEntry(int op, int mode, long time, long rejectTime, int duration,
+                int proxyUid, String proxyPackage) {
             mOp = op;
             mMode = mode;
             mTime = time;
             mRejectTime = rejectTime;
             mDuration = duration;
+            mProxyUid = proxyUid;
+            mProxyPackageName = proxyPackage;
         }
 
         public int getOp() {
@@ -1115,6 +1120,14 @@
             return mDuration == -1 ? (int)(System.currentTimeMillis()-mTime) : mDuration;
         }
 
+        public int getProxyUid() {
+            return  mProxyUid;
+        }
+
+        public String getProxyPackageName() {
+            return mProxyPackageName;
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -1127,6 +1140,8 @@
             dest.writeLong(mTime);
             dest.writeLong(mRejectTime);
             dest.writeInt(mDuration);
+            dest.writeInt(mProxyUid);
+            dest.writeString(mProxyPackageName);
         }
 
         OpEntry(Parcel source) {
@@ -1135,6 +1150,8 @@
             mTime = source.readLong();
             mRejectTime = source.readLong();
             mDuration = source.readInt();
+            mProxyUid = source.readInt();
+            mProxyPackageName = source.readString();
         }
 
         public static final Creator<OpEntry> CREATOR = new Creator<OpEntry>() {
@@ -1379,6 +1396,33 @@
     }
 
     /**
+     * Make note of an application performing an operation on behalf of another
+     * application when handling an IPC. Note that you must pass the package name
+     * of the application that is being proxied while its UID will be inferred from
+     * the IPC state; this function will verify that the calling uid and proxied
+     * package name match, and if not, return {@link #MODE_IGNORED}. If this call
+     * succeeds, the last execution time of the operation for the proxied app and
+     * your app will be updated to the current time.
+     * @param op The operation to note.  One of the OPSTR_* constants.
+     * @param proxiedPackageName The name of the application calling into the proxy application.
+     * @return Returns {@link #MODE_ALLOWED} if the operation is allowed, or
+     * {@link #MODE_IGNORED} if it is not allowed and should be silently ignored (without
+     * causing the app to crash).
+     * @throws SecurityException If the app has been configured to crash on this op.
+     */
+    public int noteProxyOp(String op, String proxiedPackageName) {
+        return noteProxyOp(strOpToOp(op), proxiedPackageName);
+    }
+
+    /**
+     * Like {@link #noteProxyOp(String, String)} but instead
+     * of throwing a {@link SecurityException} it returns {@link #MODE_ERRORED}.
+     */
+    public int noteProxyOpNoThrow(String op, String proxiedPackageName) {
+        return noteProxyOpNoThrow(strOpToOp(op), proxiedPackageName);
+    }
+
+    /**
      * Report that an application has started executing a long-running operation.  Note that you
      * must pass in both the uid and name of the application to be checked; this function will
      * verify that these two match, and if not, return {@link #MODE_IGNORED}.  If this call
@@ -1455,7 +1499,7 @@
             return mService.checkOperation(op, uid, packageName);
         } catch (RemoteException e) {
         }
-        return MODE_IGNORED;
+        return MODE_ERRORED;
     }
 
     /**
@@ -1501,7 +1545,7 @@
             return mService.checkAudioOperation(op, stream, uid, packageName);
         } catch (RemoteException e) {
         }
-        return MODE_IGNORED;
+        return MODE_ERRORED;
     }
 
     /**
@@ -1532,6 +1576,49 @@
     }
 
     /**
+     * Make note of an application performing an operation on behalf of another
+     * application when handling an IPC. Note that you must pass the package name
+     * of the application that is being proxied while its UID will be inferred from
+     * the IPC state; this function will verify that the calling uid and proxied
+     * package name match, and if not, return {@link #MODE_IGNORED}. If this call
+     * succeeds, the last execution time of the operation for the proxied app and
+     * your app will be updated to the current time.
+     * @param op The operation to note. One of the OPSTR_* constants.
+     * @param proxiedPackageName The name of the application calling into the proxy application.
+     * @return Returns {@link #MODE_ALLOWED} if the operation is allowed, or
+     * {@link #MODE_IGNORED} if it is not allowed and should be silently ignored (without
+     * causing the app to crash).
+     * @throws SecurityException If the proxy or proxied app has been configured to
+     * crash on this op.
+     *
+     * @hide
+     */
+    public int noteProxyOp(int op, String proxiedPackageName) {
+        int mode = noteProxyOpNoThrow(op, proxiedPackageName);
+        if (mode == MODE_ERRORED) {
+            throw new SecurityException("Proxy package " + mContext.getOpPackageName()
+                    + " from uid " + Process.myUid() + " or calling package "
+                    + proxiedPackageName + " from uid " + Binder.getCallingUid()
+                    + " not allowed to perform " + sOpNames[op]);
+        }
+        return mode;
+    }
+
+    /**
+     * Like {@link #noteProxyOp(int, String)} but instead
+     * of throwing a {@link SecurityException} it returns {@link #MODE_ERRORED}.
+     * @hide
+     */
+    public int noteProxyOpNoThrow(int op, String proxiedPackageName) {
+        try {
+            return mService.noteProxyOperation(op, mContext.getOpPackageName(),
+                    Binder.getCallingUid(), proxiedPackageName);
+        } catch (RemoteException e) {
+        }
+        return MODE_ERRORED;
+    }
+
+    /**
      * Like {@link #noteOp} but instead of throwing a {@link SecurityException} it
      * returns {@link #MODE_ERRORED}.
      * @hide
@@ -1541,7 +1628,7 @@
             return mService.noteOperation(op, uid, packageName);
         } catch (RemoteException e) {
         }
-        return MODE_IGNORED;
+        return MODE_ERRORED;
     }
 
     /** @hide */
@@ -1603,7 +1690,7 @@
             return mService.startOperation(getToken(mService), op, uid, packageName);
         } catch (RemoteException e) {
         }
-        return MODE_IGNORED;
+        return MODE_ERRORED;
     }
 
     /** @hide */
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index cb1e7aa..1fb0b2a 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -421,6 +421,15 @@
     }
 
     @Override
+    public boolean isPermissionRevokedByPolicy(String permName, String pkgName) {
+        try {
+            return mPM.isPermissionRevokedByPolicy(permName, pkgName, mContext.getUserId());
+        } catch (RemoteException e) {
+            throw new RuntimeException("Package manager has died", e);
+        }
+    }
+
+    @Override
     public boolean addPermission(PermissionInfo info) {
         try {
             return mPM.addPermission(info);
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 0420fb6..6639486 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1202,8 +1202,8 @@
             validateServiceIntent(service);
             service.prepareToLeaveProcess();
             ComponentName cn = ActivityManagerNative.getDefault().startService(
-                mMainThread.getApplicationThread(), service,
-                service.resolveTypeIfNeeded(getContentResolver()), user.getIdentifier());
+                mMainThread.getApplicationThread(), service, service.resolveTypeIfNeeded(
+                            getContentResolver()), getOpPackageName(), user.getIdentifier());
             if (cn != null) {
                 if (cn.getPackageName().equals("!")) {
                     throw new SecurityException(
@@ -1279,9 +1279,9 @@
             }
             service.prepareToLeaveProcess();
             int res = ActivityManagerNative.getDefault().bindService(
-                mMainThread.getApplicationThread(), getActivityToken(),
-                service, service.resolveTypeIfNeeded(getContentResolver()),
-                sd, flags, user.getIdentifier());
+                mMainThread.getApplicationThread(), getActivityToken(), service,
+                service.resolveTypeIfNeeded(getContentResolver()),
+                sd, flags, getOpPackageName(), user.getIdentifier());
             if (res < 0) {
                 throw new SecurityException(
                         "Not allowed to bind to service " + service);
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 95b3b8e..5490fe7 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -1166,6 +1166,12 @@
      * android.content.Context#checkSelfPermission(String)}.
      * </p>
      * <p>
+     * You cannot request a permission if your activity sets {@link
+     * android.R.styleable#AndroidManifestActivity_noHistory noHistory} to
+     * <code>true</code> because in this case the activity would not receive
+     * result callbacks including {@link #onRequestPermissionsResult(int, String[], int[])}.
+     * </p>
+     * <p>
      * A sample permissions request looks like this:
      * </p>
      * <code><pre><p>
@@ -1192,6 +1198,7 @@
      * @param permissions The requested permissions.
      * @param requestCode Application specific request code to match with a result
      *    reported to {@link #onRequestPermissionsResult(int, String[], int[])}.
+     *    Should be >= 0.
      *
      * @see #onRequestPermissionsResult(int, String[], int[])
      * @see android.content.Context#checkSelfPermission(String)
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 1423e4b..acce81c 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -160,16 +160,16 @@
     public PendingIntent getRunningServiceControlPanel(ComponentName service)
             throws RemoteException;
     public ComponentName startService(IApplicationThread caller, Intent service,
-            String resolvedType, int userId) throws RemoteException;
+            String resolvedType, String callingPackage, int userId) throws RemoteException;
     public int stopService(IApplicationThread caller, Intent service,
             String resolvedType, int userId) throws RemoteException;
     public boolean stopServiceToken(ComponentName className, IBinder token,
             int startId) throws RemoteException;
     public void setServiceForeground(ComponentName className, IBinder token,
             int id, Notification notification, boolean keepNotification) throws RemoteException;
-    public int bindService(IApplicationThread caller, IBinder token,
-            Intent service, String resolvedType,
-            IServiceConnection connection, int flags, int userId) throws RemoteException;
+    public int bindService(IApplicationThread caller, IBinder token, Intent service,
+            String resolvedType, IServiceConnection connection, int flags,
+            String callingPackage, int userId) throws RemoteException;
     public boolean unbindService(IServiceConnection connection) throws RemoteException;
     public void publishService(IBinder token,
             Intent intent, IBinder service) throws RemoteException;
@@ -178,7 +178,8 @@
     /* oneway */
     public void serviceDoneExecuting(IBinder token, int type, int startId,
             int res) throws RemoteException;
-    public IBinder peekService(Intent service, String resolvedType) throws RemoteException;
+    public IBinder peekService(Intent service, String resolvedType, String callingPackage)
+            throws RemoteException;
 
     public boolean bindBackupAgent(ApplicationInfo appInfo, int backupRestoreMode)
             throws RemoteException;
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/VoiceInteractor.java b/core/java/android/app/VoiceInteractor.java
index abb8244..bf7458c 100644
--- a/core/java/android/app/VoiceInteractor.java
+++ b/core/java/android/app/VoiceInteractor.java
@@ -253,7 +253,8 @@
 
         /**
          * Report from voice interaction service: this operation has been canceled, typically
-         * as a completion of a previous call to {@link #cancel}.
+         * as a completion of a previous call to {@link #cancel} or when the user explicitly
+         * cancelled.
          */
         public void onCancel() {
         }
@@ -288,7 +289,8 @@
      * would require the user to touch the screen when voice interaction mode is not enabled.
      * The result of the confirmation will be returned through an asynchronous call to
      * either {@link #onConfirmationResult(boolean, android.os.Bundle)} or
-     * {@link #onCancel()}.
+     * {@link #onCancel()} - these methods should be overridden to define the application specific
+     *  behavior.
      *
      * <p>In some cases this may be a simple yes / no confirmation or the confirmation could
      * include context information about how the action will be completed
@@ -315,13 +317,19 @@
          * @param prompt Optional confirmation to speak to the user or null if nothing
          *     should be spoken.
          * @param extras Additional optional information or null.
-         * @deprecated Prefer the version that takes a {@link Prompt}.
+         * @hide
          */
         public ConfirmationRequest(CharSequence prompt, Bundle extras) {
             mPrompt = (prompt != null ? new Prompt(prompt) : null);
             mExtras = extras;
         }
 
+        /**
+         * Handle the confirmation result. Override this method to define
+         * the behavior when the user confirms or rejects the operation.
+         * @param confirmed Whether the user confirmed or rejected the operation.
+         * @param result Additional result information or null.
+         */
         public void onConfirmationResult(boolean confirmed, Bundle result) {
         }
 
@@ -336,7 +344,8 @@
      * VoiceInteractionService. Typically, the application would present this visually as
      * a list view to allow selecting the option by touch.
      * The result of the confirmation will be returned through an asynchronous call to
-     * either {@link #onPickOptionResult} or {@link #onCancel()}.
+     * either {@link #onPickOptionResult} or {@link #onCancel()} - these methods should
+     * be overridden to define the application specific behavior.
      */
     public static class PickOptionRequest extends Request {
         final Prompt mPrompt;
@@ -344,7 +353,9 @@
         final Bundle mExtras;
 
         /**
-         * Represents a single option that the user may select using their voice.
+         * Represents a single option that the user may select using their voice. The 
+         * {@link #getIndex()} method should be used as a unique ID to identify the option
+         * when it is returned from the voice interactor.
          */
         public static final class Option implements Parcelable {
             final CharSequence mLabel;
@@ -357,6 +368,7 @@
              * or one of several synonyms.
              * @param label The label that will both be matched against what the user speaks
              *     and displayed visually.
+             * @hide
              */
             public Option(CharSequence label) {
                 mLabel = label;
@@ -481,7 +493,7 @@
          *     presented or null if nothing should be asked.
          * @param options The set of {@link Option}s the user is selecting from.
          * @param extras Additional optional information or null.
-         * @deprecated Prefer the version that takes a {@link Prompt}.
+         * @hide
          */
         public PickOptionRequest(CharSequence prompt, Option[] options, Bundle extras) {
             mPrompt = (prompt != null ? new Prompt(prompt) : null);
@@ -490,7 +502,9 @@
         }
 
         /**
-         * Called when a single option is confirmed or narrowed to one of several options.
+         * Called when a single option is confirmed or narrowed to one of several options. Override
+         * this method to define the behavior when the user selects an option or narrows down the
+         * set of options.
          * @param finished True if the voice interaction has finished making a selection, in
          *     which case {@code selections} contains the final result.  If false, this request is
          *     still active and you will continue to get calls on it.
@@ -536,7 +550,7 @@
          * @param message Optional message to speak to the user about the completion status of
          *     the task or null if nothing should be spoken.
          * @param extras Additional optional information or null.
-         * @deprecated Prefer the version that takes a {@link Prompt}.
+         * @hide
          */
         public CompleteVoiceRequest(CharSequence message, Bundle extras) {
             mPrompt = (message != null ? new Prompt(message) : null);
@@ -583,7 +597,7 @@
          * @param message Optional message to speak to the user indicating why the task could
          *     not be completed by voice or null if nothing should be spoken.
          * @param extras Additional optional information or null.
-         * @deprecated Prefer the version that takes a {@link Prompt}.
+         * @hide
          */
         public AbortVoiceRequest(CharSequence message, Bundle extras) {
             mPrompt = (message != null ? new Prompt(message) : null);
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index d28ff51..33cbc9d 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -3975,6 +3975,8 @@
      *   This setting is only available from {@link android.os.Build.VERSION_CODES#MNC} onwards
      *   and can only be set if {@link #setMaximumTimeToLock} is not used to set a timeout.</li>
      * <li>{@link Settings.Global#WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN}</li>
+     *   This setting is only available from {@link android.os.Build.VERSION_CODES#MNC} onwards.
+     *   </li>
      * </ul>
      * <p>Changing the following settings has no effect as of
      * {@link android.os.Build.VERSION_CODES#MNC}:
@@ -4328,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..9673c98 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -30,6 +30,9 @@
 public class AssistStructure implements Parcelable {
     static final String TAG = "AssistStructure";
 
+    static final boolean DEBUG_PARCEL = false;
+    static final boolean DEBUG_PARCEL_TREE = false;
+
     boolean mHaveData;
 
     ComponentName mActivityComponent;
@@ -46,12 +49,40 @@
     static final int TRANSACTION_XFER = Binder.FIRST_CALL_TRANSACTION+1;
     static final String DESCRIPTOR = "android.app.AssistStructure";
 
-    final class SendChannel extends Binder {
+    final static class SendChannel extends Binder {
+        volatile AssistStructure mAssistStructure;
+
+        SendChannel(AssistStructure as) {
+            mAssistStructure = as;
+        }
+
         @Override protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
                 throws RemoteException {
             if (code == TRANSACTION_XFER) {
+                AssistStructure as = mAssistStructure;
+                if (as == null) {
+                    return true;
+                }
+
                 data.enforceInterface(DESCRIPTOR);
-                writeContentToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+                IBinder token = data.readStrongBinder();
+                if (DEBUG_PARCEL) Log.d(TAG, "Request for data on " + as
+                        + " using token " + token);
+                if (token != null) {
+                    if (DEBUG_PARCEL) Log.d(TAG, "Resuming partial write of " + token);
+                    if (token instanceof ParcelTransferWriter) {
+                        ParcelTransferWriter xfer = (ParcelTransferWriter)token;
+                        xfer.writeToParcel(as, reply);
+                        return true;
+                    }
+                    Log.w(TAG, "Caller supplied bad token type: " + token);
+                    // Don't write anything; this is the end of the data.
+                    return true;
+                }
+                //long start = SystemClock.uptimeMillis();
+                ParcelTransferWriter xfer = new ParcelTransferWriter(as, reply);
+                xfer.writeToParcel(as, reply);
+                //Log.i(TAG, "Time to parcel: " + (SystemClock.uptimeMillis()-start) + "ms");
                 return true;
             } else {
                 return super.onTransact(code, data, reply, flags);
@@ -59,39 +90,284 @@
         }
     }
 
+    final static class ViewStackEntry {
+        ViewNode node;
+        int curChild;
+        int numChildren;
+    }
+
+    final static class ParcelTransferWriter extends Binder {
+        final boolean mWriteStructure;
+        int mCurWindow;
+        int mNumWindows;
+        final ArrayList<ViewStackEntry> mViewStack = new ArrayList<>();
+        ViewStackEntry mCurViewStackEntry;
+        int mCurViewStackPos;
+        int mNumWrittenWindows;
+        int mNumWrittenViews;
+        final float[] mTmpMatrix = new float[9];
+
+        ParcelTransferWriter(AssistStructure as, Parcel out) {
+            mWriteStructure = as.waitForReady();
+            ComponentName.writeToParcel(as.mActivityComponent, out);
+            mNumWindows = as.mWindowNodes.size();
+            if (mWriteStructure && mNumWindows > 0) {
+                out.writeInt(mNumWindows);
+            } else {
+                out.writeInt(0);
+            }
+        }
+
+        void writeToParcel(AssistStructure as, Parcel out) {
+            int start = out.dataPosition();
+            mNumWrittenWindows = 0;
+            mNumWrittenViews = 0;
+            boolean more = writeToParcelInner(as, out);
+            Log.i(TAG, "Flattened " + (more ? "partial" : "final") + " assist data: "
+                    + (out.dataPosition() - start)
+                    + " bytes, containing " + mNumWrittenWindows + " windows, "
+                    + mNumWrittenViews + " views");
+        }
+
+        boolean writeToParcelInner(AssistStructure as, Parcel out) {
+            if (mNumWindows == 0) {
+                return false;
+            }
+            if (DEBUG_PARCEL) Log.d(TAG, "Creating PooledStringWriter @ " + out.dataPosition());
+            PooledStringWriter pwriter = new PooledStringWriter(out);
+            while (writeNextEntryToParcel(as, out, pwriter)) {
+                // If the parcel contains more than 100K of data, then we are getting too
+                // large for a single IPC so stop here and let the caller come back when it
+                // is ready for more.
+                if (out.dataSize() > 1024*1024) {
+                    if (DEBUG_PARCEL) Log.d(TAG, "Assist data size is " + out.dataSize()
+                            + " @ pos " + out.dataPosition() + "; returning partial result");
+                    out.writeInt(0);
+                    out.writeStrongBinder(this);
+                    if (DEBUG_PARCEL) Log.d(TAG, "Finishing PooledStringWriter @ "
+                            + out.dataPosition() + ", size " + pwriter.getStringCount());
+                    pwriter.finish();
+                    return true;
+                }
+            }
+            if (DEBUG_PARCEL) Log.d(TAG, "Finishing PooledStringWriter @ "
+                    + out.dataPosition() + ", size " + pwriter.getStringCount());
+            pwriter.finish();
+            mViewStack.clear();
+            return false;
+        }
+
+        void pushViewStackEntry(ViewNode node, int pos) {
+            ViewStackEntry entry;
+            if (pos >= mViewStack.size()) {
+                entry = new ViewStackEntry();
+                mViewStack.add(entry);
+                if (DEBUG_PARCEL_TREE) Log.d(TAG, "New stack entry at " + pos + ": " + entry);
+            } else {
+                entry = mViewStack.get(pos);
+                if (DEBUG_PARCEL_TREE) Log.d(TAG, "Existing stack entry at " + pos + ": " + entry);
+            }
+            entry.node = node;
+            entry.numChildren = node.getChildCount();
+            entry.curChild = 0;
+            mCurViewStackEntry = entry;
+        }
+
+        boolean writeNextEntryToParcel(AssistStructure as, Parcel out, PooledStringWriter pwriter) {
+            // Write next view node if appropriate.
+            if (mCurViewStackEntry != null) {
+                if (mCurViewStackEntry.curChild < mCurViewStackEntry.numChildren) {
+                    // Write the next child in the current view.
+                    if (DEBUG_PARCEL_TREE) Log.d(TAG, "Writing child #"
+                            + mCurViewStackEntry.curChild + " in " + mCurViewStackEntry.node);
+                    ViewNode child = mCurViewStackEntry.node.mChildren[mCurViewStackEntry.curChild];
+                    mCurViewStackEntry.curChild++;
+                    if (DEBUG_PARCEL) Log.d(TAG, "write view: at " + out.dataPosition()
+                            + ", windows=" + mNumWrittenWindows
+                            + ", views=" + mNumWrittenViews);
+                    out.writeInt(1);
+                    int flags = child.writeSelfToParcel(out, pwriter, mTmpMatrix);
+                    mNumWrittenViews++;
+                    // If the child has children, push it on the stack to write them next.
+                    if ((flags&ViewNode.FLAGS_HAS_CHILDREN) != 0) {
+                        if (DEBUG_PARCEL_TREE) Log.d(TAG, "Preparing to write "
+                                + child.mChildren.length + " children under " + child);
+                        out.writeInt(child.mChildren.length);
+                        int pos = ++mCurViewStackPos;
+                        pushViewStackEntry(child, pos);
+                    }
+                    return true;
+                }
+
+                // We are done writing children of the current view; pop off the stack.
+                do {
+                    int pos = --mCurViewStackPos;
+                    if (DEBUG_PARCEL_TREE) Log.d(TAG, "Done with " + mCurViewStackEntry.node
+                            + "; popping up to " + pos);
+                    if (pos < 0) {
+                        // Reached the last view; step to next window.
+                        if (DEBUG_PARCEL_TREE) Log.d(TAG, "Done with view hierarchy!");
+                        mCurViewStackEntry = null;
+                        break;
+                    }
+                    mCurViewStackEntry = mViewStack.get(pos);
+                } while (mCurViewStackEntry.curChild >= mCurViewStackEntry.numChildren);
+                return true;
+            }
+
+            // Write the next window if appropriate.
+            int pos = mCurWindow;
+            if (pos < mNumWindows) {
+                WindowNode win = as.mWindowNodes.get(pos);
+                mCurWindow++;
+                if (DEBUG_PARCEL) Log.d(TAG, "write window #" + pos + ": at " + out.dataPosition()
+                        + ", windows=" + mNumWrittenWindows
+                        + ", views=" + mNumWrittenViews);
+                out.writeInt(1);
+                win.writeSelfToParcel(out, pwriter, mTmpMatrix);
+                mNumWrittenWindows++;
+                ViewNode root = win.mRoot;
+                mCurViewStackPos = 0;
+                if (DEBUG_PARCEL_TREE) Log.d(TAG, "Pushing initial root view " + root);
+                pushViewStackEntry(root, 0);
+                return true;
+            }
+
+            return false;
+        }
+    }
+
+    final class ParcelTransferReader {
+        final float[] mTmpMatrix = new float[9];
+        PooledStringReader mStringReader;
+
+        int mNumReadWindows;
+        int mNumReadViews;
+
+        private final IBinder mChannel;
+        private IBinder mTransferToken;
+        private Parcel mCurParcel;
+
+        ParcelTransferReader(IBinder channel) {
+            mChannel = channel;
+        }
+
+        void go() {
+            fetchData();
+            mActivityComponent = ComponentName.readFromParcel(mCurParcel);
+            final int N = mCurParcel.readInt();
+            if (N > 0) {
+                if (DEBUG_PARCEL) Log.d(TAG, "Creating PooledStringReader @ "
+                        + mCurParcel.dataPosition());
+                mStringReader = new PooledStringReader(mCurParcel);
+                if (DEBUG_PARCEL) Log.d(TAG, "PooledStringReader size = "
+                        + mStringReader.getStringCount());
+                for (int i=0; i<N; i++) {
+                    mWindowNodes.add(new WindowNode(this));
+                }
+            }
+            if (DEBUG_PARCEL) Log.d(TAG, "Finished reading: at " + mCurParcel.dataPosition()
+                    + ", avail=" + mCurParcel.dataAvail() + ", windows=" + mNumReadWindows
+                    + ", views=" + mNumReadViews);
+        }
+
+        Parcel readParcel() {
+            if (DEBUG_PARCEL) Log.d(TAG, "readParcel: at " + mCurParcel.dataPosition()
+                    + ", avail=" + mCurParcel.dataAvail() + ", windows=" + mNumReadWindows
+                    + ", views=" + mNumReadViews);
+            if (mCurParcel.readInt() != 0) {
+                return mCurParcel;
+            }
+            // We have run out of partial data, need to read another batch.
+            mTransferToken = mCurParcel.readStrongBinder();
+            if (mTransferToken == null) {
+                throw new IllegalStateException(
+                        "Reached end of partial data without transfer token");
+            }
+            if (DEBUG_PARCEL) Log.d(TAG, "Ran out of partial data at "
+                    + mCurParcel.dataPosition() + ", token " + mTransferToken);
+            fetchData();
+            if (DEBUG_PARCEL) Log.d(TAG, "Creating PooledStringReader @ "
+                    + mCurParcel.dataPosition());
+            mStringReader = new PooledStringReader(mCurParcel);
+            if (DEBUG_PARCEL) Log.d(TAG, "PooledStringReader size = "
+                    + mStringReader.getStringCount());
+            if (DEBUG_PARCEL) Log.d(TAG, "readParcel: at " + mCurParcel.dataPosition()
+                    + ", avail=" + mCurParcel.dataAvail() + ", windows=" + mNumReadWindows
+                    + ", views=" + mNumReadViews);
+            mCurParcel.readInt();
+            return mCurParcel;
+        }
+
+        private void fetchData() {
+            Parcel data = Parcel.obtain();
+            data.writeInterfaceToken(DESCRIPTOR);
+            data.writeStrongBinder(mTransferToken);
+            if (DEBUG_PARCEL) Log.d(TAG, "Requesting data with token " + mTransferToken);
+            if (mCurParcel != null) {
+                mCurParcel.recycle();
+            }
+            mCurParcel = Parcel.obtain();
+            try {
+                mChannel.transact(TRANSACTION_XFER, data, mCurParcel, 0);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failure reading AssistStructure data", e);
+                throw new IllegalStateException("Failure reading AssistStructure data: " + e);
+            }
+            data.recycle();
+            mNumReadWindows = mNumReadViews = 0;
+        }
+    }
+
     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);
+            }
         }
     }
 
@@ -129,24 +405,25 @@
             view.dispatchProvideStructure(builder);
         }
 
-        WindowNode(Parcel in, PooledStringReader preader, float[] tmpMatrix) {
+        WindowNode(ParcelTransferReader reader) {
+            Parcel in = reader.readParcel();
+            reader.mNumReadWindows++;
             mX = in.readInt();
             mY = in.readInt();
             mWidth = in.readInt();
             mHeight = in.readInt();
             mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
             mDisplayId = in.readInt();
-            mRoot = new ViewNode(in, preader, tmpMatrix);
+            mRoot = new ViewNode(reader);
         }
 
-        int writeToParcel(Parcel out, PooledStringWriter pwriter, float[] tmpMatrix) {
+        void writeSelfToParcel(Parcel out, PooledStringWriter pwriter, float[] tmpMatrix) {
             out.writeInt(mX);
             out.writeInt(mY);
             out.writeInt(mWidth);
             out.writeInt(mHeight);
             TextUtils.writeToParcel(mTitle, out, 0);
             out.writeInt(mDisplayId);
-            return mRoot.writeToParcel(out, pwriter, tmpMatrix);
         }
 
         /**
@@ -252,9 +529,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;
@@ -270,7 +548,10 @@
         ViewNode() {
         }
 
-        ViewNode(Parcel in, PooledStringReader preader, float[] tmpMatrix) {
+        ViewNode(ParcelTransferReader reader) {
+            final Parcel in = reader.readParcel();
+            reader.mNumReadViews++;
+            final PooledStringReader preader = reader.mStringReader;
             mClassName = preader.readString();
             mFlags = in.readInt();
             final int flags = mFlags;
@@ -303,8 +584,8 @@
             }
             if ((flags&FLAGS_HAS_MATRIX) != 0) {
                 mMatrix = new Matrix();
-                in.readFloatArray(tmpMatrix);
-                mMatrix.setValues(tmpMatrix);
+                in.readFloatArray(reader.mTmpMatrix);
+                mMatrix.setValues(reader.mTmpMatrix);
             }
             if ((flags&FLAGS_HAS_ELEVATION) != 0) {
                 mElevation = in.readFloat();
@@ -316,7 +597,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();
@@ -325,12 +606,12 @@
                 final int NCHILDREN = in.readInt();
                 mChildren = new ViewNode[NCHILDREN];
                 for (int i=0; i<NCHILDREN; i++) {
-                    mChildren[i] = new ViewNode(in, preader, tmpMatrix);
+                    mChildren[i] = new ViewNode(reader);
                 }
             }
         }
 
-        int writeToParcel(Parcel out, PooledStringWriter pwriter, float[] tmpMatrix) {
+        int writeSelfToParcel(Parcel out, PooledStringWriter pwriter, float[] tmpMatrix) {
             int flags = mFlags & ~FLAGS_ALL_CONTROL;
             if (mId != View.NO_ID) {
                 flags |= FLAGS_HAS_ID;
@@ -356,6 +637,9 @@
             }
             if (mText != null) {
                 flags |= FLAGS_HAS_TEXT;
+                if (!mText.isSimple()) {
+                    flags |= FLAGS_HAS_COMPLEX_TEXT;
+                }
             }
             if (mExtras != null) {
                 flags |= FLAGS_HAS_EXTRAS;
@@ -403,20 +687,12 @@
                 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);
             }
-            int N = 1;
-            if ((flags&FLAGS_HAS_CHILDREN) != 0) {
-                final int NCHILDREN = mChildren.length;
-                out.writeInt(NCHILDREN);
-                for (int i=0; i<NCHILDREN; i++) {
-                    N += mChildren[i].writeToParcel(out, pwriter, tmpMatrix);
-                }
-            }
-            return N;
+            return flags;
         }
 
         /**
@@ -703,6 +979,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 +1197,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;
         }
@@ -1130,22 +1433,11 @@
             return;
         }
         mHaveData = true;
-        Parcel data = Parcel.obtain();
-        Parcel reply = Parcel.obtain();
-        data.writeInterfaceToken(DESCRIPTOR);
-        try {
-            mReceiveChannel.transact(TRANSACTION_XFER, data, reply, 0);
-        } catch (RemoteException e) {
-            Log.w(TAG, "Failure reading AssistStructure data", e);
-            return;
-        }
-        readContentFromParcel(reply);
-        data.recycle();
-        reply.recycle();
+        ParcelTransferReader reader = new ParcelTransferReader(mReceiveChannel);
+        reader.go();
     }
 
-    void writeContentToParcel(Parcel out, int flags) {
-        // First make sure all content has been created.
+    boolean waitForReady() {
         boolean skipStructure = false;
         synchronized (this) {
             long endTime = SystemClock.uptimeMillis() + 5000;
@@ -1163,30 +1455,14 @@
                 skipStructure = true;
             }
         }
-        int start = out.dataPosition();
-        PooledStringWriter pwriter = new PooledStringWriter(out);
-        float[] tmpMatrix = new float[9];
-        ComponentName.writeToParcel(mActivityComponent, out);
-        final int N = skipStructure ? 0 : mWindowNodes.size();
-        out.writeInt(N);
-        int NV = 0;
-        for (int i=0; i<N; i++) {
-            NV += mWindowNodes.get(i).writeToParcel(out, pwriter, tmpMatrix);
-        }
-        pwriter.finish();
-        Log.i(TAG, "Flattened assist data: " + (out.dataPosition() - start) + " bytes, containing "
-                + N + " windows, " + NV + " views");
+        return !skipStructure;
     }
 
-    void readContentFromParcel(Parcel in) {
-        PooledStringReader preader = new PooledStringReader(in);
-        float[] tmpMatrix = new float[9];
-        mActivityComponent = ComponentName.readFromParcel(in);
-        final int N = in.readInt();
-        for (int i=0; i<N; i++) {
-            mWindowNodes.add(new WindowNode(in, preader, tmpMatrix));
+    /** @hide */
+    public void clearSendChannel() {
+        if (mSendChannel != null) {
+            mSendChannel.mAssistStructure = null;
         }
-        //dump();
     }
 
     public int describeContents() {
@@ -1198,7 +1474,7 @@
             // This object holds its data.  We want to write a send channel that the
             // other side can use to retrieve that data.
             if (mSendChannel == null) {
-                mSendChannel = new SendChannel();
+                mSendChannel = new SendChannel(this);
             }
             out.writeStrongBinder(mSendChannel);
         } else {
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/bluetooth/IBluetoothGatt.aidl b/core/java/android/bluetooth/IBluetoothGatt.aidl
index 72abeaf..3660be7 100644
--- a/core/java/android/bluetooth/IBluetoothGatt.aidl
+++ b/core/java/android/bluetooth/IBluetoothGatt.aidl
@@ -36,7 +36,7 @@
 
     void startScan(in int appIf, in boolean isServer, in ScanSettings settings,
                    in List<ScanFilter> filters,
-                   in List scanStorages);
+                   in List scanStorages, in String callingPackage);
     void stopScan(in int appIf, in boolean isServer);
     void flushPendingBatchResults(in int appIf, in boolean isServer);
     void startMultiAdvertising(in int appIf,
diff --git a/core/java/android/bluetooth/le/BluetoothLeScanner.java b/core/java/android/bluetooth/le/BluetoothLeScanner.java
index 2e6c4f0..e09ab56 100644
--- a/core/java/android/bluetooth/le/BluetoothLeScanner.java
+++ b/core/java/android/bluetooth/le/BluetoothLeScanner.java
@@ -19,6 +19,7 @@
 import android.Manifest;
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
+import android.app.ActivityThread;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothGatt;
 import android.bluetooth.BluetoothGattCallbackWrapper;
@@ -313,7 +314,7 @@
                     mClientIf = clientIf;
                     try {
                         mBluetoothGatt.startScan(mClientIf, false, mSettings, mFilters,
-                                mResultStorages);
+                                mResultStorages, ActivityThread.currentOpPackageName());
                     } catch (RemoteException e) {
                         Log.e(TAG, "fail to start le scan: " + e);
                         mClientIf = -1;
diff --git a/core/java/android/content/BroadcastReceiver.java b/core/java/android/content/BroadcastReceiver.java
index af74e73..2260d7e 100644
--- a/core/java/android/content/BroadcastReceiver.java
+++ b/core/java/android/content/BroadcastReceiver.java
@@ -524,7 +524,7 @@
         try {
             service.prepareToLeaveProcess();
             binder = am.peekService(service, service.resolveTypeIfNeeded(
-                    myContext.getContentResolver()));
+                    myContext.getContentResolver()), myContext.getOpPackageName());
         } catch (RemoteException e) {
         }
         return binder;
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index d4c4437..3cc7684 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -475,18 +475,38 @@
         private int enforceReadPermission(String callingPkg, Uri uri, IBinder callerToken)
                 throws SecurityException {
             enforceReadPermissionInner(uri, callerToken);
-            if (mReadOp != AppOpsManager.OP_NONE) {
-                return mAppOpsManager.noteOp(mReadOp, Binder.getCallingUid(), callingPkg);
+
+            final int permOp = AppOpsManager.permissionToOpCode(mReadPermission);
+            if (permOp != AppOpsManager.OP_NONE) {
+                final int mode = mAppOpsManager.noteProxyOp(permOp, callingPkg);
+                if (mode != AppOpsManager.MODE_ALLOWED) {
+                    return mode;
+                }
             }
+
+            if (mReadOp != AppOpsManager.OP_NONE) {
+                return mAppOpsManager.noteProxyOp(mReadOp, callingPkg);
+            }
+
             return AppOpsManager.MODE_ALLOWED;
         }
 
         private int enforceWritePermission(String callingPkg, Uri uri, IBinder callerToken)
                 throws SecurityException {
             enforceWritePermissionInner(uri, callerToken);
-            if (mWriteOp != AppOpsManager.OP_NONE) {
-                return mAppOpsManager.noteOp(mWriteOp, Binder.getCallingUid(), callingPkg);
+
+            final int permOp = AppOpsManager.permissionToOpCode(mWritePermission);
+            if (permOp != AppOpsManager.OP_NONE) {
+                final int mode = mAppOpsManager.noteProxyOp(permOp, callingPkg);
+                if (mode != AppOpsManager.MODE_ALLOWED) {
+                    return mode;
+                }
             }
+
+            if (mWriteOp != AppOpsManager.OP_NONE) {
+                return mAppOpsManager.noteProxyOp(mWriteOp, callingPkg);
+            }
+
             return AppOpsManager.MODE_ALLOWED;
         }
     }
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index b1d80f0..c9f9b56 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -6181,8 +6181,12 @@
      * who sent the intent.
      * @hide
      */
-    public void setContentUserHint(int contentUserHint) {
-        mContentUserHint = contentUserHint;
+    public void prepareToLeaveUser(int userId) {
+        // If mContentUserHint is not UserHandle.USER_CURRENT, the intent has already left a user.
+        // We want mContentUserHint to refer to the original user, so don't do anything.
+        if (mContentUserHint == UserHandle.USER_CURRENT) {
+            mContentUserHint = userId;
+        }
     }
 
     /**
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 2b83d86..103ee29 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -506,4 +506,6 @@
     int getMountExternalMode(int uid);
 
     void grantDefaultPermissionsToEnabledCarrierApps(in String[] packageNames, int userId);
+
+    boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId);
 }
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index dd1c5c2..6533bbc 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1924,7 +1924,6 @@
     *
     * @hide
     */
-    @SystemApi
     public static final int FLAG_PERMISSION_USER_SET = 1 << 0;
 
     /**
@@ -1934,7 +1933,6 @@
      *
      * @hide
      */
-    @SystemApi
     public static final int FLAG_PERMISSION_USER_FIXED =  1 << 1;
 
     /**
@@ -1944,7 +1942,6 @@
      *
      * @hide
      */
-    @SystemApi
     public static final int FLAG_PERMISSION_POLICY_FIXED =  1 << 2;
 
     /**
@@ -1957,7 +1954,6 @@
      *
      * @hide
      */
-    @SystemApi
     public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE =  1 << 3;
 
     /**
@@ -1966,9 +1962,19 @@
      *
      * @hide
      */
-    @SystemApi
     public static final int FLAG_PERMISSION_SYSTEM_FIXED =  1 << 4;
 
+
+    /**
+     * Permission flag: The permission is granted by default because it
+     * enables app functionality that is expected to work out-of-the-box
+     * for providing a smooth user experience. For example, the phone app
+     * is expected to have the phone permission.
+     *
+     * @hide
+     */
+    public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT =  1 << 5;
+
     /**
      * Mask for all permission flags.
      *
@@ -2392,7 +2398,7 @@
      * Check whether a particular package has been granted a particular
      * permission.
      *
-     * @param permName The name of the permission you are checking for,
+     * @param permName The name of the permission you are checking for.
      * @param pkgName The name of the package you are checking against.
      *
      * @return If the package has the permission, PERMISSION_GRANTED is
@@ -2406,6 +2412,21 @@
     public abstract int checkPermission(String permName, String pkgName);
 
     /**
+     * Checks whether a particular permissions has been revoked for a
+     * package by policy. Typically the device owner or the profile owner
+     * may apply such a policy. The user cannot grant policy revoked
+     * permissions, hence the only way for an app to get such a permission
+     * is by a policy change.
+     *
+     * @param permName The name of the permission you are checking for.
+     * @param pkgName The name of the package you are checking against.
+     *
+     * @return Whether the permission is restricted by policy.
+     */
+    @CheckResult
+    public abstract boolean isPermissionRevokedByPolicy(String permName, String pkgName);
+
+    /**
      * Add a new dynamic permission to the system.  For this to work, your
      * package must have defined a permission tree through the
      * {@link android.R.styleable#AndroidManifestPermissionTree
@@ -2474,7 +2495,8 @@
             FLAG_PERMISSION_USER_FIXED,
             FLAG_PERMISSION_POLICY_FIXED,
             FLAG_PERMISSION_REVOKE_ON_UPGRADE,
-            FLAG_PERMISSION_SYSTEM_FIXED})
+            FLAG_PERMISSION_SYSTEM_FIXED,
+            FLAG_PERMISSION_GRANTED_BY_DEFAULT})
     @Retention(RetentionPolicy.SOURCE)
     public @interface PermissionFlags {}
 
@@ -4441,22 +4463,6 @@
     public abstract @NonNull PackageInstaller getPackageInstaller();
 
     /**
-     * Returns the data directory for a particular package and user.
-     *
-     * @hide
-     */
-    public static File getDataDirForUser(String volumeUuid, String packageName, int userId) {
-        // TODO: This should be shared with Installer's knowledge of user directory
-        final File base;
-        if (TextUtils.isEmpty(volumeUuid)) {
-            base = Environment.getDataDirectory();
-        } else {
-            base = new File("/mnt/expand/" + volumeUuid);
-        }
-        return new File(base, "user/" + userId + "/" + packageName);
-    }
-
-    /**
      * Adds a {@link CrossProfileIntentFilter}. After calling this method all intents sent from the
      * user with id sourceUserId can also be be resolved by activities in the user with id
      * targetUserId if they match the specified intent filter.
@@ -4634,6 +4640,19 @@
     }
 
     /** {@hide} */
+    public static String permissionFlagToString(int flag) {
+        switch (flag) {
+            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);
+        }
+    }
+
+    /** {@hide} */
     public static class LegacyPackageInstallObserver extends PackageInstallObserver {
         private final IPackageInstallObserver mLegacy;
 
diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java
index dbaba49..ea08956 100644
--- a/core/java/android/content/pm/PackageManagerInternal.java
+++ b/core/java/android/content/pm/PackageManagerInternal.java
@@ -39,6 +39,20 @@
     }
 
     /**
+     * Provider for package names.
+     */
+    public interface SyncAdapterPackagesProvider {
+
+        /**
+         * Gets the sync adapter packages for given authority and user.
+         * @param authority The authority.
+         * @param userId The user id.
+         * @return The package names.
+         */
+        public String[] getPackages(String authority, int userId);
+    }
+
+    /**
      * Sets the location provider packages provider.
      * @param provider The packages provider.
      */
@@ -69,6 +83,12 @@
     public abstract void setDialerAppPackagesProvider(PackagesProvider provider);
 
     /**
+     * Sets the sync adapter packages provider.
+     * @param provider The provider.
+     */
+    public abstract void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider);
+
+    /**
      * Requests granting of the default permissions to the current default SMS app.
      * @param packageName The default SMS package name.
      * @param userId The user for which to grant the permissions.
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 64376c1..ed7a2a3 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -36,6 +36,7 @@
 import android.content.res.XmlResourceParser;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
 import android.os.FileUtils;
 import android.os.PatternMatcher;
 import android.os.UserHandle;
@@ -2834,7 +2835,6 @@
                 if (!aii.hasAction(Intent.ACTION_DEFAULT)) continue;
                 if (aii.hasDataScheme(IntentFilter.SCHEME_HTTP) ||
                         aii.hasDataScheme(IntentFilter.SCHEME_HTTPS)) {
-                    Slog.d(TAG, "hasDomainURLs:true for package:" + pkg.packageName);
                     return true;
                 }
             }
@@ -4785,7 +4785,7 @@
         // Make shallow copy so we can store the metadata/libraries safely
         ApplicationInfo ai = new ApplicationInfo(p.applicationInfo);
         ai.uid = UserHandle.getUid(userId, ai.uid);
-        ai.dataDir = PackageManager.getDataDirForUser(ai.volumeUuid, ai.packageName, userId)
+        ai.dataDir = Environment.getDataUserPackageDirectory(ai.volumeUuid, userId, ai.packageName)
                 .getAbsolutePath();
         if ((flags & PackageManager.GET_META_DATA) != 0) {
             ai.metaData = p.mAppMetaData;
@@ -4812,7 +4812,7 @@
         // make a copy.
         ai = new ApplicationInfo(ai);
         ai.uid = UserHandle.getUid(userId, ai.uid);
-        ai.dataDir = PackageManager.getDataDirForUser(ai.volumeUuid, ai.packageName, userId)
+        ai.dataDir = Environment.getDataUserPackageDirectory(ai.volumeUuid, userId, ai.packageName)
                 .getAbsolutePath();
         if (state.stopped) {
             ai.flags |= ApplicationInfo.FLAG_STOPPED;
diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java
index 04dbff2..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;
 
     /**
@@ -76,6 +84,34 @@
     public static final int PROTECTION_FLAG_APPOP = 0x40;
 
     /**
+     * Additional flag for {@link #protectionLevel}, corresponding
+     * to the <code>pre23</code> value of
+     * {@link android.R.attr#protectionLevel}.
+     */
+    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;
@@ -83,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
@@ -140,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;
     }
@@ -162,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";
@@ -171,6 +207,9 @@
         if ((level&PermissionInfo.PROTECTION_FLAG_APPOP) != 0) {
             protLevel += "|appop";
         }
+        if ((level&PermissionInfo.PROTECTION_FLAG_PRE23) != 0) {
+            protLevel += "|pre23";
+        }
         return protLevel;
     }
 
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index d6b1142..d456b5e 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -1568,47 +1568,41 @@
     /**
      * For testing purposes only. Not for third party applications.
      *
-     * Enable data injection mode in sensor service. This mode is
-     * expected to be used only for testing purposes. If the HAL is
-     * set to data injection mode, it will ignore the input from
-     * physical sensors and read sensor data that is injected from
-     * the test application. This mode is used for testing vendor
-     * implementations for various algorithms like Rotation Vector,
-     * Significant Motion, Step Counter etc.
+     * Initialize data injection mode and create a client for data injection. SensorService should
+     * already be operating in DATA_INJECTION mode for this call succeed. To set SensorService into
+     * DATA_INJECTION mode "adb shell dumpsys sensorservice data_injection" needs to be called
+     * through adb. Typically this is done using a host side test.  This mode is expected to be used
+     * only for testing purposes. If the HAL is set to data injection mode, it will ignore the input
+     * from physical sensors and read sensor data that is injected from the test application. This
+     * mode is used for testing vendor implementations for various algorithms like Rotation Vector,
+     * Significant Motion, Step Counter etc. Not all HALs support DATA_INJECTION. This method will
+     * fail in those cases. Once this method succeeds, the test can call
+     * {@link injectSensorData(Sensor, float[], int, long)} to inject sensor data into the HAL.
      *
-     * The tests which call this API need to have {@code
-     * android.permission.LOCATION_HADWARE} permission which isn't
-     * available for third party applications.
-     *
-     * @param enable True to set the HAL in DATA_INJECTION mode.
-     *               False to reset the HAL back to NORMAL mode.
+     * @param enable True to initialize a client in DATA_INJECTION mode.
+     *               False to clean up the native resources.
      *
      * @return true if the HAL supports data injection and false
      *         otherwise.
      * @hide
      */
     @SystemApi
-    public boolean enableDataInjectionMode(boolean enable) {
-          return enableDataInjectionImpl(enable);
+    public boolean initDataInjection(boolean enable) {
+          return initDataInjectionImpl(enable);
     }
 
     /**
      * @hide
      */
-    protected abstract boolean enableDataInjectionImpl(boolean enable);
+    protected abstract boolean initDataInjectionImpl(boolean enable);
 
     /**
      * For testing purposes only. Not for third party applications.
      *
-     * This method is used to inject raw sensor data into the HAL.
-     * Call enableDataInjection before this method to set the HAL in
-     * data injection mode. This method should be called only if a
-     * previous call to enableDataInjection has been successful and
-     * the HAL is already in data injection mode.
-     *
-     * The tests which call this API need to have {@code
-     * android.permission.LOCATION_HARDWARE} permission which isn't
-     * available for third party applications.
+     * This method is used to inject raw sensor data into the HAL.  Call {@link
+     * initDataInjection(boolean)} before this method to set the HAL in data injection mode. This
+     * method should be called only if a previous call to initDataInjection has been successful and
+     * the HAL and SensorService are already opreating in data injection mode.
      *
      * @param sensor The sensor to inject.
      * @param values Sensor values to inject. The length of this
@@ -1650,9 +1644,6 @@
         if (timestamp <= 0) {
             throw new IllegalArgumentException("Negative or zero sensor timestamp");
         }
-        if (timestamp > SystemClock.elapsedRealtimeNanos()) {
-            throw new IllegalArgumentException("Sensor timestamp into the future");
-        }
         return injectSensorDataImpl(sensor, values, accuracy, timestamp);
     }
 
diff --git a/core/java/android/hardware/SystemSensorManager.java b/core/java/android/hardware/SystemSensorManager.java
index d7960af..e7deae8 100644
--- a/core/java/android/hardware/SystemSensorManager.java
+++ b/core/java/android/hardware/SystemSensorManager.java
@@ -42,12 +42,12 @@
 public class SystemSensorManager extends SensorManager {
     private static native void nativeClassInit();
     private static native long nativeCreate(String opPackageName);
-    private static native int nativeGetNextSensor(long nativeInstance, Sensor sensor, int next);
-    private static native int nativeEnableDataInjection(long nativeInstance, boolean enable);
+    private static native boolean nativeGetSensorAtIndex(long nativeInstance,
+            Sensor sensor, int index);
+    private static native boolean nativeIsDataInjectionEnabled(long nativeInstance);
 
     private static boolean sSensorModuleInitialized = false;
     private static InjectEventQueue mInjectEventQueue = null;
-    private static boolean mDataInjectionMode = false;
 
     private final Object mLock = new Object();
 
@@ -64,7 +64,6 @@
     private final Looper mMainLooper;
     private final int mTargetSdkLevel;
     private final Context mContext;
-    private final boolean mHasDataInjectionPermissions;
     private final long mNativeInstance;
 
     /** {@hide} */
@@ -79,18 +78,12 @@
                 sSensorModuleInitialized = true;
                 nativeClassInit();
             }
-            mHasDataInjectionPermissions = context.checkSelfPermission(
-                    Manifest.permission.LOCATION_HARDWARE) == PackageManager.PERMISSION_GRANTED;
         }
 
         // initialize the sensor list
-        int i = 0;
-        while(true) {
+        for (int index = 0;;++index) {
             Sensor sensor = new Sensor();
-            i = nativeGetNextSensor(mNativeInstance, sensor, i);
-            if (i <= 0) {
-                break;
-            }
+            if (!nativeGetSensorAtIndex(mNativeInstance, sensor, index)) break;
             mFullSensorsList.add(sensor);
             mHandleToSensor.append(sensor.getHandle(), sensor);
         }
@@ -230,23 +223,25 @@
         }
     }
 
-    protected boolean enableDataInjectionImpl(boolean enable) {
-        if (!mHasDataInjectionPermissions) {
-            throw new SecurityException("Permission denial. Calling enableDataInjection without "
-                    + Manifest.permission.LOCATION_HARDWARE);
-        }
+    protected boolean initDataInjectionImpl(boolean enable) {
         synchronized (mLock) {
-            int ret = nativeEnableDataInjection(mNativeInstance, enable);
-            // The HAL does not support injection. Ignore.
-            if (ret != 0) {
-                Log.e(TAG, "HAL does not support data injection");
-                return false;
-            }
-            mDataInjectionMode = enable;
-            // If data injection is being disabled clean up the native resources.
-            if (!enable && mInjectEventQueue != null) {
-                mInjectEventQueue.dispose();
-                mInjectEventQueue = null;
+            if (enable) {
+                boolean isDataInjectionModeEnabled = nativeIsDataInjectionEnabled(mNativeInstance);
+                // The HAL does not support injection OR SensorService hasn't been set in DI mode.
+                if (!isDataInjectionModeEnabled) {
+                    Log.e(TAG, "Data Injection mode not enabled");
+                    return false;
+                }
+                // Initialize a client for data_injection.
+                if (mInjectEventQueue == null) {
+                    mInjectEventQueue = new InjectEventQueue(mMainLooper, this);
+                }
+            } else {
+                // If data injection is being disabled clean up the native resources.
+                if (mInjectEventQueue != null) {
+                    mInjectEventQueue.dispose();
+                    mInjectEventQueue = null;
+                }
             }
             return true;
         }
@@ -254,25 +249,17 @@
 
     protected boolean injectSensorDataImpl(Sensor sensor, float[] values, int accuracy,
             long timestamp) {
-        if (!mHasDataInjectionPermissions) {
-            throw new SecurityException("Permission denial. Calling injectSensorData without "
-                    + Manifest.permission.LOCATION_HARDWARE);
-        }
         synchronized (mLock) {
-            if (!mDataInjectionMode) {
+            if (mInjectEventQueue == null) {
                 Log.e(TAG, "Data injection mode not activated before calling injectSensorData");
                 return false;
             }
-            if (mInjectEventQueue == null) {
-                mInjectEventQueue = new InjectEventQueue(mMainLooper, this);
-            }
             int ret = mInjectEventQueue.injectSensorData(sensor.getHandle(), values, accuracy,
                                                          timestamp);
             // If there are any errors in data injection clean up the native resources.
             if (ret != 0) {
                 mInjectEventQueue.dispose();
                 mInjectEventQueue = null;
-                mDataInjectionMode = false;
             }
             return ret == 0;
         }
diff --git a/core/java/android/hardware/camera2/CameraCaptureSession.java b/core/java/android/hardware/camera2/CameraCaptureSession.java
index c547b06..46cafad 100644
--- a/core/java/android/hardware/camera2/CameraCaptureSession.java
+++ b/core/java/android/hardware/camera2/CameraCaptureSession.java
@@ -482,23 +482,13 @@
     public abstract boolean isReprocessable();
 
     /**
-     * Return if this capture session is constrained high speed session that is created by
-     * {@link CameraDevice#createConstrainedHighSpeedCaptureSession}.
-     *
-     * @return {@code true} if this session is constrained high speed capture session,
-     *         {@code false} otherwise.
-     *
-     * @see CameraDevice#createConstrainedHighSpeedCaptureSession
-     */
-    public abstract boolean isConstrainedHighSpeed();
-
-    /**
      * Get the input Surface associated with a reprocessable capture session.
      *
      * <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 c47498d..30aa2d5 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.
@@ -650,7 +664,7 @@
      * the max possible number of frames the camera device will group together for this high
      * speed stream configuration. This max batch size will be used to generate a high speed
      * recording request list by
-     * {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedRequestList }.
+     * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList }.
      * The max batch size for each configuration will satisfy below conditions:</p>
      * <ul>
      * <li>Each max batch size will be a divisor of its corresponding fps_max / 30. For example,
@@ -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>
@@ -1954,8 +1972,7 @@
      * <p>Camera devices that support FREEFORM cropping will support any crop region that
      * is inside of the active array. The camera device will apply the same crop region and
      * return the final used crop region in capture result metadata {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}.</p>
-     * <p>FULL capability devices ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} <code>==</code> FULL) will support
-     * FREEFORM cropping. LEGACY capability devices will only support CENTER_ONLY cropping.</p>
+     * <p>LEGACY capability devices will only support CENTER_ONLY cropping.</p>
      * <p><b>Possible values:</b>
      * <ul>
      *   <li>{@link #SCALER_CROPPING_TYPE_CENTER_ONLY CENTER_ONLY}</li>
@@ -1963,7 +1980,6 @@
      * </ul></p>
      * <p>This key is available on all devices.</p>
      *
-     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
      * @see CaptureRequest#SCALER_CROP_REGION
      * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      * @see #SCALER_CROPPING_TYPE_CENTER_ONLY
@@ -2000,70 +2016,6 @@
             new Key<android.graphics.Rect>("android.sensor.info.activeArraySize", android.graphics.Rect.class);
 
     /**
-     * <p>The area of the image sensor which corresponds to active pixels prior to the
-     * application of any geometric distortion correction.</p>
-     * <p>This is the rectangle representing the size of the active region of the sensor (i.e.
-     * the region that actually receives light from the scene) before any geometric correction
-     * has been applied, and should be treated as the active region rectangle for any of the
-     * raw formats.  All metadata associated with raw processing (e.g. the lens shading
-     * correction map, and radial distortion fields) treats the top, left of this rectangle as
-     * the origin, (0,0).</p>
-     * <p>The size of this region determines the maximum field of view and the maximum number of
-     * pixels that an image from this sensor can contain, prior to the application of
-     * geometric distortion correction. The effective maximum pixel dimensions of a
-     * post-distortion-corrected image is given by the {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}
-     * field, and the effective maximum field of view for a post-distortion-corrected image
-     * can be calculated by applying the geometric distortion correction fields to this
-     * rectangle, and cropping to the rectangle given in {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p>
-     * <p>E.g. to calculate position of a pixel, (x,y), in a processed YUV output image with the
-     * dimensions in {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} given the position of a pixel,
-     * (x', y'), in the raw pixel array with dimensions give in
-     * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}:</p>
-     * <ol>
-     * <li>Choose a pixel (x', y') within the active array region of the raw buffer given in
-     * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}, otherwise this pixel is considered
-     * to be outside of the FOV, and will not be shown in the processed output image.</li>
-     * <li>Apply geometric distortion correction to get the post-distortion pixel coordinate,
-     * (x_i, y_i). When applying geometric correction metadata, note that metadata for raw
-     * buffers is defined relative to the top, left of the
-     * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} rectangle.</li>
-     * <li>If the resulting corrected pixel coordinate is within the region given in
-     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}, then the position of this pixel in the
-     * processed output image buffer is <code>(x_i - activeArray.left, y_i - activeArray.top)</code>,
-     * when the top, left coordinate of that buffer is treated as (0, 0).</li>
-     * </ol>
-     * <p>Thus, for pixel x',y' = (25, 25) on a sensor where {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}
-     * is (100,100), {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} is (10, 10, 100, 100),
-     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} is (20, 20, 80, 80), and the geometric distortion
-     * correction doesn't change the pixel coordinate, the resulting pixel selected in
-     * pixel coordinates would be x,y = (25, 25) relative to the top,left of the raw buffer
-     * with dimensions given in {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}, and would be (5, 5)
-     * relative to the top,left of post-processed YUV output buffer with dimensions given in
-     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p>
-     * <p>The currently supported fields that correct for geometric distortion are:</p>
-     * <ol>
-     * <li>android.lens.radialDistortion.</li>
-     * </ol>
-     * <p>If all of the geometric distortion fields are no-ops, this rectangle will be the same
-     * as the post-distortion-corrected rectangle given in
-     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p>
-     * <p>This rectangle is defined relative to the full pixel array; (0,0) is the top-left of
-     * the full pixel array, and the size of the full pixel array is given by
-     * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.</p>
-     * <p>The pre-correction active array may be smaller than the full pixel array, since the
-     * full array may include black calibration pixels or other inactive regions.</p>
-     * <p><b>Units</b>: Pixel coordinates on the image sensor</p>
-     * <p>This key is available on all devices.</p>
-     *
-     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-     * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
-     * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-     */
-    @PublicKey
-    public static final Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE =
-            new Key<android.graphics.Rect>("android.sensor.info.preCorrectionActiveArraySize", android.graphics.Rect.class);
-
-    /**
      * <p>Range of sensitivities for {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} supported by this
      * camera device.</p>
      * <p>The values are the standard ISO sensitivity values,
@@ -2252,6 +2204,70 @@
             new Key<Boolean>("android.sensor.info.lensShadingApplied", boolean.class);
 
     /**
+     * <p>The area of the image sensor which corresponds to active pixels prior to the
+     * application of any geometric distortion correction.</p>
+     * <p>This is the rectangle representing the size of the active region of the sensor (i.e.
+     * the region that actually receives light from the scene) before any geometric correction
+     * has been applied, and should be treated as the active region rectangle for any of the
+     * raw formats.  All metadata associated with raw processing (e.g. the lens shading
+     * correction map, and radial distortion fields) treats the top, left of this rectangle as
+     * the origin, (0,0).</p>
+     * <p>The size of this region determines the maximum field of view and the maximum number of
+     * pixels that an image from this sensor can contain, prior to the application of
+     * geometric distortion correction. The effective maximum pixel dimensions of a
+     * post-distortion-corrected image is given by the {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}
+     * field, and the effective maximum field of view for a post-distortion-corrected image
+     * can be calculated by applying the geometric distortion correction fields to this
+     * rectangle, and cropping to the rectangle given in {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p>
+     * <p>E.g. to calculate position of a pixel, (x,y), in a processed YUV output image with the
+     * dimensions in {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} given the position of a pixel,
+     * (x', y'), in the raw pixel array with dimensions give in
+     * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}:</p>
+     * <ol>
+     * <li>Choose a pixel (x', y') within the active array region of the raw buffer given in
+     * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize}, otherwise this pixel is considered
+     * to be outside of the FOV, and will not be shown in the processed output image.</li>
+     * <li>Apply geometric distortion correction to get the post-distortion pixel coordinate,
+     * (x_i, y_i). When applying geometric correction metadata, note that metadata for raw
+     * buffers is defined relative to the top, left of the
+     * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} rectangle.</li>
+     * <li>If the resulting corrected pixel coordinate is within the region given in
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}, then the position of this pixel in the
+     * processed output image buffer is <code>(x_i - activeArray.left, y_i - activeArray.top)</code>,
+     * when the top, left coordinate of that buffer is treated as (0, 0).</li>
+     * </ol>
+     * <p>Thus, for pixel x',y' = (25, 25) on a sensor where {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}
+     * is (100,100), {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} is (10, 10, 100, 100),
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} is (20, 20, 80, 80), and the geometric distortion
+     * correction doesn't change the pixel coordinate, the resulting pixel selected in
+     * pixel coordinates would be x,y = (25, 25) relative to the top,left of the raw buffer
+     * with dimensions given in {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}, and would be (5, 5)
+     * relative to the top,left of post-processed YUV output buffer with dimensions given in
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p>
+     * <p>The currently supported fields that correct for geometric distortion are:</p>
+     * <ol>
+     * <li>android.lens.radialDistortion.</li>
+     * </ol>
+     * <p>If all of the geometric distortion fields are no-ops, this rectangle will be the same
+     * as the post-distortion-corrected rectangle given in
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p>
+     * <p>This rectangle is defined relative to the full pixel array; (0,0) is the top-left of
+     * the full pixel array, and the size of the full pixel array is given by
+     * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.</p>
+     * <p>The pre-correction active array may be smaller than the full pixel array, since the
+     * full array may include black calibration pixels or other inactive regions.</p>
+     * <p><b>Units</b>: Pixel coordinates on the image sensor</p>
+     * <p>This key is available on all devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
+     * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
+     */
+    @PublicKey
+    public static final Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE =
+            new Key<android.graphics.Rect>("android.sensor.info.preCorrectionActiveArraySize", android.graphics.Rect.class);
+
+    /**
      * <p>The standard reference illuminant used as the scene light source when
      * calculating the {@link CameraCharacteristics#SENSOR_COLOR_TRANSFORM1 android.sensor.colorTransform1},
      * {@link CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM1 android.sensor.calibrationTransform1}, and
@@ -2685,7 +2701,6 @@
      * <li>Manual sensor control ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} contains MANUAL_SENSOR)</li>
      * <li>Manual post-processing control ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} contains
      *   MANUAL_POST_PROCESSING)</li>
-     * <li>Arbitrary cropping region ({@link CameraCharacteristics#SCALER_CROPPING_TYPE android.scaler.croppingType} <code>==</code> FREEFORM)</li>
      * <li>At least 3 processed (but not stalling) format output streams
      *   ({@link CameraCharacteristics#REQUEST_MAX_NUM_OUTPUT_PROC android.request.maxNumOutputProc} <code>&gt;=</code> 3)</li>
      * <li>The required stream configurations defined in android.scaler.availableStreamConfigurations</li>
@@ -2708,6 +2723,10 @@
      * post-processing, arbitrary cropping regions, and has relaxed performance constraints.</p>
      * <p>Each higher level supports everything the lower level supports
      * in this order: FULL <code>&gt;</code> LIMITED <code>&gt;</code> LEGACY.</p>
+     * <p>Note:
+     * Pre-API level 23, FULL devices also supported arbitrary cropping region
+     * ({@link CameraCharacteristics#SCALER_CROPPING_TYPE android.scaler.croppingType} <code>==</code> FREEFORM); this requirement was relaxed in API level 23,
+     * and FULL devices may only support CENTERED cropping.</p>
      * <p><b>Possible values:</b>
      * <ul>
      *   <li>{@link #INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED}</li>
diff --git a/core/java/android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession.java b/core/java/android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession.java
new file mode 100644
index 0000000..07d2443
--- /dev/null
+++ b/core/java/android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 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 android.hardware.camera2;
+
+import android.annotation.NonNull;
+import android.hardware.camera2.params.StreamConfigurationMap;
+
+import java.util.List;
+
+/**
+ * A constrained high speed capture session for a {@link CameraDevice}, used for capturing high
+ * speed images from the {@link CameraDevice} for high speed video recording use case.
+ * <p>
+ * A CameraHighSpeedCaptureSession is created by providing a set of target output surfaces to
+ * {@link CameraDevice#createConstrainedHighSpeedCaptureSession}, Once created, the session is
+ * active until a new session is created by the camera device, or the camera device is closed.
+ * </p>
+ * <p>
+ * An active high speed capture session is a specialized capture session that is only targeted at
+ * high speed video recording (>=120fps) use case if the camera device supports high speed video
+ * capability (i.e., {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} contains
+ * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO}). It only
+ * accepts request lists created via {@link #createHighSpeedRequestList}, and the request list can
+ * only be submitted to this session via {@link CameraCaptureSession#captureBurst captureBurst}, or
+ * {@link CameraCaptureSession#setRepeatingBurst setRepeatingBurst}. See
+ * {@link CameraDevice#createConstrainedHighSpeedCaptureSession} for more details of the
+ * limitations.
+ * </p>
+ * <p>
+ * Creating a session is an expensive operation and can take several hundred milliseconds, since it
+ * requires configuring the camera device's internal pipelines and allocating memory buffers for
+ * sending images to the desired targets. Therefore the setup is done asynchronously, and
+ * {@link CameraDevice#createConstrainedHighSpeedCaptureSession} will send the ready-to-use
+ * CameraCaptureSession to the provided listener's
+ * {@link CameraCaptureSession.StateCallback#onConfigured} callback. If configuration cannot be
+ * completed, then the {@link CameraCaptureSession.StateCallback#onConfigureFailed} is called, and
+ * the session will not become active.
+ * </p>
+ * <!--
+ * <p>
+ * Any capture requests (repeating or non-repeating) submitted before the session is ready will be
+ * queued up and will begin capture once the session becomes ready. In case the session cannot be
+ * configured and {@link CameraCaptureSession.StateCallback#onConfigureFailed onConfigureFailed} is
+ * called, all queued capture requests are discarded.  </p>
+ * -->
+ * <p>
+ * If a new session is created by the camera device, then the previous session is closed, and its
+ * associated {@link CameraCaptureSession.StateCallback#onClosed onClosed} callback will be
+ * invoked. All of the session methods will throw an IllegalStateException if called once the
+ * session is closed.
+ * </p>
+ * <p>
+ * A closed session clears any repeating requests (as if {@link #stopRepeating} had been called),
+ * but will still complete all of its in-progress capture requests as normal, before a newly created
+ * session takes over and reconfigures the camera device.
+ * </p>
+ */
+public abstract class CameraConstrainedHighSpeedCaptureSession extends CameraCaptureSession {
+
+    /**
+     * <p>Create a unmodifiable list of requests that is suitable for constrained high speed capture
+     * session streaming.</p>
+     *
+     * <p>High speed video streaming creates significant performance pressure on the camera device,
+     * so to achieve efficient high speed streaming, the camera device may have to aggregate
+     * multiple frames together. This means requests must be sent in batched groups, with all
+     * requests sharing the same settings. This method takes the list of output target
+     * Surfaces (subject to the output Surface requirements specified by the constrained high speed
+     * session) and a {@link CaptureRequest request}, and generates a request list that has the same
+     * controls for each request. The input {@link CaptureRequest request} must contain the target
+     * output Surfaces and target high speed FPS range that is one of the
+     * {@link StreamConfigurationMap#getHighSpeedVideoFpsRangesFor} for the Surface size.</p>
+     *
+     * <p>If both preview and recording Surfaces are specified in the {@code request}, the
+     * {@link CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE target FPS range} in the input
+     * {@link CaptureRequest request} must be a fixed frame rate FPS range, where the
+     * {@link android.util.Range#getLower minimal FPS} ==
+     * {@link android.util.Range#getUpper() maximum FPS}. The created request list will contain
+     * a interleaved request pattern such that the preview output FPS is at least 30fps, the
+     * recording output FPS is {@link android.util.Range#getUpper() maximum FPS} of the requested
+     * FPS range. The application can submit this request list directly to an active high speed
+     * capture session to achieve high speed video recording. When only preview or recording
+     * Surface is specified, this method will return a list of request that have the same controls
+     * and output targets for all requests.</p>
+     *
+     * <p>Submitting a request list created by this method to a normal capture session will result
+     * in an {@link IllegalArgumentException} if the high speed
+     * {@link CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE FPS range} is not supported by
+     * {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES}.</p>
+     *
+     * @param request The high speed capture request that will be used to generate the high speed
+     *                request list.
+     * @return A unmodifiable CaptureRequest list that is suitable for constrained high speed
+     *         capture.
+     *
+     * @throws IllegalArgumentException if the set of output Surfaces in the request do not meet the
+     *                                  high speed video capability requirements, or the camera
+     *                                  device doesn't support high speed video capability, or the
+     *                                  request doesn't meet the high speed video capability
+     *                                  requirements, or the request doesn't contain the required
+     *                                  controls for high speed capture.
+     * @throws CameraAccessException if the camera device is no longer connected or has
+     *                               encountered a fatal error
+     * @throws IllegalStateException if the camera device has been closed
+     *
+     * @see CameraDevice#createConstrainedHighSpeedCaptureSession
+     * @see CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
+     * @see android.hardware.camera2.params.StreamConfigurationMap#getHighSpeedVideoSizes
+     * @see android.hardware.camera2.params.StreamConfigurationMap#getHighSpeedVideoFpsRangesFor
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     * @see CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO
+     */
+    @NonNull
+    public abstract List<CaptureRequest> createHighSpeedRequestList(
+            @NonNull CaptureRequest request) throws CameraAccessException;
+
+}
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index 639c8b1..4a71aa0 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -613,8 +613,9 @@
      *   When multiple Surfaces are configured, their size must be same.</li>
      *
      * <li>An active high speed capture session only accepts request lists created via
-     *   {@link #createConstrainedHighSpeedRequestList}, and the request list can only be submitted
-     *   to this session via {@link CameraCaptureSession#captureBurst captureBurst}, or
+     *   {@link CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}, and the
+     *   request list can only be submitted to this session via
+     *   {@link CameraCaptureSession#captureBurst captureBurst}, or
      *   {@link CameraCaptureSession#setRepeatingBurst setRepeatingBurst}.</li>
      *
      * <li>The FPS ranges being requested to this session must be selected from
@@ -661,71 +662,13 @@
      * @see CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO
      * @see CameraCaptureSession#captureBurst
      * @see CameraCaptureSession#setRepeatingBurst
-     * @see #createConstrainedHighSpeedRequestList
+     * @see CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList
      */
     public abstract void createConstrainedHighSpeedCaptureSession(@NonNull List<Surface> outputs,
             @NonNull CameraCaptureSession.StateCallback callback,
             @Nullable Handler handler)
             throws CameraAccessException;
 
-
-    /**
-     * <p>Create a unmodifiable list of requests that is suitable for constrained high speed capture
-     * session streaming.</p>
-     *
-     * <p>High speed video streaming creates significant performance pressue on the camera device,
-     * so to achieve efficient high speed streaming, the camera device may have to aggregate
-     * multiple frames together. This means requests must be sent in batched groups, with all
-     * requests sharing the same settings. This method takes the list of output target
-     * Surfaces (subject to the output Surface requirements specified by the contrained high speed
-     * session) and a {@link CaptureRequest request}, and generates a request list that has the same
-     * controls for each request. The input {@link CaptureRequest request} must contain the target
-     * output Surfaces and target high speed FPS range that is one of the
-     * {@link StreamConfigurationMap#getHighSpeedVideoFpsRangesFor} for the Surface size.</p>
-     *
-     * <p>If both preview and recording Surfaces are specified in the {@code request}, the
-     * {@link CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE target FPS range} in the input
-     * {@link CaptureRequest request} must be a fixed framerate FPS range, where the
-     * {@link android.util.Range#getLower minimal FPS} ==
-     * {@link android.util.Range#getUpper() maximum FPS}. The created request list will contain
-     * a interleaved request pattern such that the preview output FPS is at least 30fps, the
-     * recording output FPS is {@link android.util.Range#getUpper() maximum FPS} of the requested
-     * FPS range. The application can submit this request list directly to an active high speed
-     * capture session to achieve high speed video recording. When only preview or recording
-     * Surface is specified, this method will return a list of request that have the same controls
-     * and output targets for all requests.</p>
-     *
-     * <p>Submitting a request list created by this method to a normal capture session will result
-     * in an {@link IllegalArgumentException} if the high speed
-     * {@link CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE FPS range} is not supported by
-     * {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES}.</p>
-     *
-     * @param request The high speed capture request that will be used to generate the high speed
-     *                request list.
-     * @return A unmodifiable CaptureRequest list that is suitable for constrained high speed
-     *         capture.
-     *
-     * @throws IllegalArgumentException if the set of output Surfaces in the request do not meet the
-     *                                  high speed video capability requirements, or the camera
-     *                                  device doesn't support high speed video capability, or the
-     *                                  request doesn't meet the high speed video capability
-     *                                  requirements, or the request doesn't contain the required
-     *                                  controls for high speed capture.
-     * @throws CameraAccessException if the camera device is no longer connected or has
-     *                               encountered a fatal error
-     * @throws IllegalStateException if the camera device has been closed
-     *
-     * @see #createConstrainedHighSpeedCaptureSession
-     * @see CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-     * @see StreamConfigurationMap#getHighSpeedVideoSizes
-     * @see StreamConfigurationMap#getHighSpeedVideoFpsRangesFor
-     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
-     * @see CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO
-     */
-    @NonNull
-    public abstract List<CaptureRequest> createConstrainedHighSpeedRequestList(
-            @NonNull CaptureRequest request)throws CameraAccessException;
-
     /**
      * <p>Create a {@link CaptureRequest.Builder} for new capture requests,
      * initialized with template for a target use case. The settings are chosen
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index e8dbc5b..c8ae5d4 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
@@ -647,8 +655,8 @@
      * <p>The device supports constrained high speed video recording (frame rate &gt;=120fps)
      * use case. The camera device will support high speed capture session created by
      * {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedCaptureSession }, which
-     * only accepts high speed request list created by
-     * {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedRequestList }.</p>
+     * only accepts high speed request lists created by
+     * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList }.</p>
      * <p>A camera device can still support high speed video streaming by advertising the high speed
      * FPS ranges in {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES android.control.aeAvailableTargetFpsRanges}. For this case, all normal
      * capture request per frame control and synchronization requirements will apply to
@@ -709,9 +717,9 @@
      * <li>The FPS ranges are selected from
      * {@link android.hardware.camera2.params.StreamConfigurationMap#getHighSpeedVideoFpsRanges }.</li>
      * </ul>
-     * <p>When above conditions are NOT satistied, the
+     * <p>When above conditions are NOT satistied,
      * {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedCaptureSession }
-     * and {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedRequestList } will fail.</p>
+     * will fail.</p>
      * <p>Switching to a FPS range that has different maximum FPS may trigger some camera device
      * reconfigurations, which may introduce extra latency. It is recommended that
      * the application avoids unnecessary maximum target FPS changes as much as possible
@@ -1805,9 +1813,8 @@
     public static final int CONTROL_SCENE_MODE_BARCODE = 16;
 
     /**
-     * <p>This is deprecated, please use
-     * {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedCaptureSession }
-     * and {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedRequestList }
+     * <p>This is deprecated, please use {@link android.hardware.camera2.CameraDevice#createConstrainedHighSpeedCaptureSession }
+     * and {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList }
      * for high speed video recording.</p>
      * <p>Optimized for high speed video recording (frame rate &gt;=60fps) use case.</p>
      * <p>The supported high speed video sizes and fps ranges are specified in
@@ -1999,6 +2006,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 +2136,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..a136d0f 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.
@@ -170,7 +184,7 @@
     private final CameraMetadataNative mSettings;
     private boolean mIsReprocess;
     // If this request is part of constrained high speed request list that was created by
-    // {@link CameraDevice#createConstrainedHighSpeedRequestList}.
+    // {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}
     private boolean mIsPartOfCHSRequestList = false;
     // Each reprocess request must be tied to a reprocessable session ID.
     // Valid only for reprocess requests (mIsReprocess == true).
@@ -326,14 +340,14 @@
 
     /**
      * <p>Determine if this request is part of a constrained high speed request list that was
-     * created by {@link CameraDevice#createConstrainedHighSpeedRequestList}. A constrained high
-     * speed request list contains some constrained high speed capture requests with certain
-     * interleaved pattern that is suitable for high speed preview/video streaming. An active
-     * constrained high speed capture session only accepts constrained high speed request lists.
-     * This method can be used to do the sanity check when a constrained high speed capture session
-     * receives a request list via {@link CameraCaptureSession#setRepeatingBurst} or
-     * {@link CameraCaptureSession#captureBurst}.
-     * </p>
+     * created by
+     * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}.
+     * A constrained high speed request list contains some constrained high speed capture requests
+     * with certain interleaved pattern that is suitable for high speed preview/video streaming. An
+     * active constrained high speed capture session only accepts constrained high speed request
+     * lists.  This method can be used to do the sanity check when a constrained high speed capture
+     * session receives a request list via {@link CameraCaptureSession#setRepeatingBurst} or
+     * {@link CameraCaptureSession#captureBurst}.  </p>
      *
      *
      * @return {@code true} if this request is part of a constrained high speed request list,
@@ -581,9 +595,10 @@
 
         /**
          * <p>Mark this request as part of a constrained high speed request list created by
-         * {@link CameraDevice#createConstrainedHighSpeedRequestList}. A constrained high speed
-         * request list contains some constrained high speed capture requests with certain
-         * interleaved pattern that is suitable for high speed preview/video streaming.</p>
+         * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}.
+         * A constrained high speed request list contains some constrained high speed capture
+         * requests with certain interleaved pattern that is suitable for high speed preview/video
+         * streaming.</p>
          *
          * @hide
          */
@@ -1569,7 +1584,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 +1601,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 +1616,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 +2003,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 +2021,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 +2037,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/camera2/impl/CameraCaptureSessionCore.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionCore.java
new file mode 100644
index 0000000..116f0f1
--- /dev/null
+++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionCore.java
@@ -0,0 +1,64 @@
+/*
+ * 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 android.hardware.camera2.impl;
+
+/**
+ * Internal interface for CameraDeviceImpl to CameraCaptureSessionImpl(s) communication
+ */
+public interface CameraCaptureSessionCore {
+
+    /**
+     * Replace this session with another session.
+     *
+     * <p>This is an optimization to avoid unconfiguring and then immediately having to
+     * reconfigure again.</p>
+     *
+     * <p>The semantics are identical to {@link #close}, except that unconfiguring will be skipped.
+     * </p>
+     *
+     * <p>After this call completes, the session will not call any further methods on the camera
+     * device.</p>
+     *
+     * @see CameraCaptureSession#close
+     */
+    void replaceSessionClose();
+
+    /**
+     *
+     * Create an internal state callback, to be invoked on the mDeviceHandler
+     *
+     * <p>It has a few behaviors:
+     * <ul>
+     * <li>Convert device state changes into session state changes.
+     * <li>Keep track of async tasks that the session began (idle, abort).
+     * </ul>
+     * </p>
+     * */
+    CameraDeviceImpl.StateCallbackKK getDeviceStateCallback();
+
+    /**
+     * Whether currently in mid-abort.
+     *
+     * <p>This is used by the implementation to set the capture failure
+     * reason, in lieu of more accurate error codes from the camera service.
+     * Unsynchronized to avoid deadlocks between simultaneous session->device,
+     * device->session calls.</p>
+     *
+     */
+    boolean isAborting();
+
+}
diff --git a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
index 3d261dd..3c19cd2 100644
--- a/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraCaptureSessionImpl.java
@@ -36,7 +36,8 @@
 import static android.hardware.camera2.impl.CameraDeviceImpl.checkHandler;
 import static com.android.internal.util.Preconditions.*;
 
-public class CameraCaptureSessionImpl extends CameraCaptureSession {
+public class CameraCaptureSessionImpl extends CameraCaptureSession
+        implements CameraCaptureSessionCore {
     private static final String TAG = "CameraCaptureSession";
     private static final boolean DEBUG = false;
 
@@ -60,7 +61,6 @@
     private final android.hardware.camera2.impl.CameraDeviceImpl mDeviceImpl;
     /** Internal handler; used for all incoming events to preserve total order */
     private final Handler mDeviceHandler;
-    private final boolean mIsConstrainedHighSpeedSession;
 
     /** Drain Sequence IDs which have been queued but not yet finished with aborted/completed */
     private final TaskDrainer<Integer> mSequenceDrainer;
@@ -89,14 +89,13 @@
     CameraCaptureSessionImpl(int id, Surface input, List<Surface> outputs,
             CameraCaptureSession.StateCallback callback, Handler stateHandler,
             android.hardware.camera2.impl.CameraDeviceImpl deviceImpl,
-            Handler deviceStateHandler, boolean configureSuccess, boolean isConstrainedHighSpeed) {
+            Handler deviceStateHandler, boolean configureSuccess) {
         if (outputs == null || outputs.isEmpty()) {
             throw new IllegalArgumentException("outputs must be a non-null, non-empty list");
         } else if (callback == null) {
             throw new IllegalArgumentException("callback must not be null");
         }
 
-        mIsConstrainedHighSpeedSession = isConstrainedHighSpeed;
         mId = id;
         mIdString = String.format("Session %d: ", mId);
 
@@ -136,30 +135,6 @@
         }
     }
 
-
-    private boolean isConstrainedHighSpeedRequestList(List<CaptureRequest> requestList) {
-        checkCollectionNotEmpty(requestList, "High speed request list");
-        for (CaptureRequest request : requestList) {
-            if (!request.isPartOfCRequestList()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * If the session is constrained high speed session, it only accept constrained high speed
-     * request list.
-     */
-    private void checkConstrainedHighSpeedRequestSanity(List<CaptureRequest> requestList) {
-        if (mIsConstrainedHighSpeedSession) {
-            if (!isConstrainedHighSpeedRequestList(requestList)) {
-                throw new IllegalArgumentException("It is only allowed to submit a constrained "
-                        + "high speed request list to a constrained high speed session!!!");
-            }
-        }
-    }
-
     @Override
     public CameraDevice getDevice() {
         return mDeviceImpl;
@@ -181,10 +156,6 @@
         } else if (request.isReprocess() && request.getReprocessableSessionId() != mId) {
             throw new IllegalArgumentException("capture request was created for another session");
         }
-        if (mIsConstrainedHighSpeedSession) {
-            throw new UnsupportedOperationException("Constrained high speed session doesn't support"
-                    + " this method");
-        }
 
         checkNotClosed();
 
@@ -208,8 +179,6 @@
             throw new IllegalArgumentException("Requests must have at least one element");
         }
 
-        checkConstrainedHighSpeedRequestSanity(requests);
-
         for (CaptureRequest request : requests) {
             if (request.isReprocess()) {
                 if (!isReprocessable()) {
@@ -244,10 +213,6 @@
         } else if (request.isReprocess()) {
             throw new IllegalArgumentException("repeating reprocess requests are not supported");
         }
-        if (mIsConstrainedHighSpeedSession) {
-            throw new UnsupportedOperationException("Constrained high speed session doesn't support"
-                    + " this method");
-        }
 
         checkNotClosed();
 
@@ -271,8 +236,6 @@
             throw new IllegalArgumentException("requests must have at least one element");
         }
 
-        checkConstrainedHighSpeedRequestSanity(requests);
-
         for (CaptureRequest r : requests) {
             if (r.isReprocess()) {
                 throw new IllegalArgumentException("repeating reprocess burst requests are not " +
@@ -349,7 +312,8 @@
      *
      * @see CameraCaptureSession#close
      */
-    synchronized void replaceSessionClose() {
+    @Override
+    public synchronized void replaceSessionClose() {
         /*
          * In order for creating new sessions to be fast, the new session should be created
          * before the old session is closed.
@@ -431,9 +395,9 @@
      * Unsynchronized to avoid deadlocks between simultaneous session->device,
      * device->session calls.</p>
      *
-     * <p>Package-private.</p>
      */
-    boolean isAborting() {
+    @Override
+    public boolean isAborting() {
         return mAborting;
     }
 
@@ -521,7 +485,8 @@
      * </ul>
      * </p>
      * */
-    CameraDeviceImpl.StateCallbackKK getDeviceStateCallback() {
+    @Override
+    public CameraDeviceImpl.StateCallbackKK getDeviceStateCallback() {
         final CameraCaptureSession session = this;
 
         return new CameraDeviceImpl.StateCallbackKK() {
@@ -759,9 +724,4 @@
         }
     }
 
-    @Override
-    public boolean isConstrainedHighSpeed() {
-        return mIsConstrainedHighSpeedSession;
-    }
-
 }
diff --git a/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java
new file mode 100644
index 0000000..d732535
--- /dev/null
+++ b/core/java/android/hardware/camera2/impl/CameraConstrainedHighSpeedCaptureSessionImpl.java
@@ -0,0 +1,283 @@
+/*
+ * 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 android.hardware.camera2.impl;
+
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraCaptureSession;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession;
+import android.hardware.camera2.CameraDevice;
+import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.params.StreamConfigurationMap;
+import android.hardware.camera2.utils.SurfaceUtils;
+import android.os.Handler;
+import android.util.Range;
+import android.view.Surface;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import static com.android.internal.util.Preconditions.*;
+
+/**
+ * Standard implementation of CameraConstrainedHighSpeedCaptureSession.
+ *
+ * <p>
+ * Mostly just forwards calls to an instance of CameraCaptureSessionImpl,
+ * but implements the few necessary behavior changes and additional methods required
+ * for the constrained high speed speed mode.
+ * </p>
+ */
+
+public class CameraConstrainedHighSpeedCaptureSessionImpl
+        extends CameraConstrainedHighSpeedCaptureSession implements CameraCaptureSessionCore {
+    private final CameraCharacteristics mCharacteristics;
+    private final CameraCaptureSessionImpl mSessionImpl;
+
+    /**
+     * Create a new CameraCaptureSession.
+     *
+     * <p>The camera device must already be in the {@code IDLE} state when this is invoked.
+     * There must be no pending actions
+     * (e.g. no pending captures, no repeating requests, no flush).</p>
+     */
+    CameraConstrainedHighSpeedCaptureSessionImpl(int id, List<Surface> outputs,
+            CameraCaptureSession.StateCallback callback, Handler stateHandler,
+            android.hardware.camera2.impl.CameraDeviceImpl deviceImpl,
+            Handler deviceStateHandler, boolean configureSuccess,
+            CameraCharacteristics characteristics) {
+        mCharacteristics = characteristics;
+        CameraCaptureSession.StateCallback wrapperCallback = new WrapperCallback(callback);
+        mSessionImpl = new CameraCaptureSessionImpl(id, /*input*/null, outputs, wrapperCallback,
+                stateHandler, deviceImpl, deviceStateHandler, configureSuccess);
+    }
+
+    @Override
+    public List<CaptureRequest> createHighSpeedRequestList(CaptureRequest request)
+            throws CameraAccessException {
+        if (request == null) {
+            throw new IllegalArgumentException("Input capture request must not be null");
+        }
+        Collection<Surface> outputSurfaces = request.getTargets();
+        Range<Integer> fpsRange = request.get(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE);
+
+        StreamConfigurationMap config =
+                mCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
+        SurfaceUtils.checkConstrainedHighSpeedSurfaces(outputSurfaces, fpsRange, config);
+
+        // Request list size: to limit the preview to 30fps, need use maxFps/30; to maximize
+        // the preview frame rate, should use maxBatch size for that high speed stream
+        // configuration. We choose the former for now.
+        int requestListSize = fpsRange.getUpper() / 30;
+        List<CaptureRequest> requestList = new ArrayList<CaptureRequest>();
+
+        // Prepare the Request builders: need carry over the request controls.
+        // First, create a request builder that will only include preview or recording target.
+        CameraMetadataNative requestMetadata = new CameraMetadataNative(request.getNativeCopy());
+        // Note that after this step, the requestMetadata is mutated (swapped) and can not be used
+        // for next request builder creation.
+        CaptureRequest.Builder singleTargetRequestBuilder = new CaptureRequest.Builder(
+                requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE);
+
+        // Overwrite the capture intent to make sure a good value is set.
+        Iterator<Surface> iterator = outputSurfaces.iterator();
+        Surface firstSurface = iterator.next();
+        Surface secondSurface = null;
+        if (outputSurfaces.size() == 1 && SurfaceUtils.isSurfaceForHwVideoEncoder(firstSurface)) {
+            singleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
+                    CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW);
+        } else {
+            // Video only, or preview + video
+            singleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
+                    CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
+        }
+        singleTargetRequestBuilder.setPartOfCHSRequestList(/*partOfCHSList*/true);
+
+        // Second, Create a request builder that will include both preview and recording targets.
+        CaptureRequest.Builder doubleTargetRequestBuilder = null;
+        if (outputSurfaces.size() == 2) {
+            // Have to create a new copy, the original one was mutated after a new
+            // CaptureRequest.Builder creation.
+            requestMetadata = new CameraMetadataNative(request.getNativeCopy());
+            doubleTargetRequestBuilder = new CaptureRequest.Builder(
+                    requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE);
+            doubleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
+                    CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
+            doubleTargetRequestBuilder.addTarget(firstSurface);
+            secondSurface = iterator.next();
+            doubleTargetRequestBuilder.addTarget(secondSurface);
+            doubleTargetRequestBuilder.setPartOfCHSRequestList(/*partOfCHSList*/true);
+            // Make sure singleTargetRequestBuilder contains only recording surface for
+            // preview + recording case.
+            Surface recordingSurface = firstSurface;
+            if (!SurfaceUtils.isSurfaceForHwVideoEncoder(recordingSurface)) {
+                recordingSurface = secondSurface;
+            }
+            singleTargetRequestBuilder.addTarget(recordingSurface);
+        } else {
+            // Single output case: either recording or preview.
+            singleTargetRequestBuilder.addTarget(firstSurface);
+        }
+
+        // Generate the final request list.
+        for (int i = 0; i < requestListSize; i++) {
+            if (i == 0 && doubleTargetRequestBuilder != null) {
+                // First request should be recording + preview request
+                requestList.add(doubleTargetRequestBuilder.build());
+            } else {
+                requestList.add(singleTargetRequestBuilder.build());
+            }
+        }
+
+        return Collections.unmodifiableList(requestList);
+    }
+
+    private boolean isConstrainedHighSpeedRequestList(List<CaptureRequest> requestList) {
+        checkCollectionNotEmpty(requestList, "High speed request list");
+        for (CaptureRequest request : requestList) {
+            if (!request.isPartOfCRequestList()) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public CameraDevice getDevice() {
+        return mSessionImpl.getDevice();
+    }
+
+    @Override
+    public void prepare(Surface surface) throws CameraAccessException {
+        mSessionImpl.prepare(surface);
+    }
+
+    @Override
+    public int capture(CaptureRequest request, CaptureCallback listener, Handler handler)
+            throws CameraAccessException {
+        throw new UnsupportedOperationException("Constrained high speed session doesn't support"
+                + " this method");
+    }
+
+    @Override
+    public int captureBurst(List<CaptureRequest> requests, CaptureCallback listener,
+            Handler handler) throws CameraAccessException {
+        if (!isConstrainedHighSpeedRequestList(requests)) {
+            throw new IllegalArgumentException(
+                "Only request lists created by createHighSpeedRequestList() can be submitted to " +
+                "a constrained high speed capture session");
+        }
+        return mSessionImpl.captureBurst(requests, listener, handler);
+    }
+
+    @Override
+    public int setRepeatingRequest(CaptureRequest request, CaptureCallback listener,
+            Handler handler) throws CameraAccessException {
+        throw new UnsupportedOperationException("Constrained high speed session doesn't support"
+                + " this method");
+    }
+
+    @Override
+    public int setRepeatingBurst(List<CaptureRequest> requests, CaptureCallback listener,
+            Handler handler) throws CameraAccessException {
+        if (!isConstrainedHighSpeedRequestList(requests)) {
+            throw new IllegalArgumentException(
+                "Only request lists created by createHighSpeedRequestList() can be submitted to " +
+                "a constrained high speed capture session");
+        }
+        return mSessionImpl.setRepeatingBurst(requests, listener, handler);
+    }
+
+    @Override
+    public void stopRepeating() throws CameraAccessException {
+        mSessionImpl.stopRepeating();
+    }
+
+    @Override
+    public void abortCaptures() throws CameraAccessException {
+        mSessionImpl.abortCaptures();
+    }
+
+    @Override
+    public Surface getInputSurface() {
+        return null;
+    }
+
+    @Override
+    public void close() {
+        mSessionImpl.close();
+    }
+
+    @Override
+    public boolean isReprocessable() {
+        return false;
+    }
+
+    // Implementation of CameraCaptureSessionCore methods
+
+    @Override
+    public void replaceSessionClose() {
+        mSessionImpl.replaceSessionClose();
+    }
+
+    @Override
+    public CameraDeviceImpl.StateCallbackKK getDeviceStateCallback() {
+        return mSessionImpl.getDeviceStateCallback();
+    }
+
+    @Override
+    public boolean isAborting() {
+        return mSessionImpl.isAborting();
+    }
+
+    private class WrapperCallback extends StateCallback {
+        private final StateCallback mCallback;
+
+        public WrapperCallback(StateCallback callback) {
+            mCallback = callback;
+        }
+
+        public void onConfigured(CameraCaptureSession session) {
+            mCallback.onConfigured(CameraConstrainedHighSpeedCaptureSessionImpl.this);
+        }
+
+        public void onConfigureFailed(CameraCaptureSession session) {
+            mCallback.onConfigureFailed(CameraConstrainedHighSpeedCaptureSessionImpl.this);
+        }
+
+        public void onReady(CameraCaptureSession session) {
+            mCallback.onReady(CameraConstrainedHighSpeedCaptureSessionImpl.this);
+        }
+
+        public void onActive(CameraCaptureSession session) {
+            mCallback.onActive(CameraConstrainedHighSpeedCaptureSessionImpl.this);
+        }
+
+        public void onClosed(CameraCaptureSession session) {
+            mCallback.onClosed(CameraConstrainedHighSpeedCaptureSessionImpl.this);
+        }
+
+        public void onSurfacePrepared(CameraCaptureSession session, Surface surface) {
+            mCallback.onSurfacePrepared(CameraConstrainedHighSpeedCaptureSessionImpl.this,
+                    surface);
+        }
+
+
+    }
+}
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 83128c3..c594228 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -113,7 +113,7 @@
      */
     private final FrameNumberTracker mFrameNumberTracker = new FrameNumberTracker();
 
-    private CameraCaptureSessionImpl mCurrentSession;
+    private CameraCaptureSessionCore mCurrentSession;
     private int mNextSessionId = 0;
 
     // Runnables for all state transitions, except error, which needs the
@@ -510,6 +510,26 @@
                 /*isConstrainedHighSpeed*/false);
     }
 
+    @Override
+    public void createConstrainedHighSpeedCaptureSession(List<Surface> outputs,
+            android.hardware.camera2.CameraCaptureSession.StateCallback callback, Handler handler)
+            throws CameraAccessException {
+        if (outputs == null || outputs.size() == 0 || outputs.size() > 2) {
+            throw new IllegalArgumentException(
+                    "Output surface list must not be null and the size must be no more than 2");
+        }
+        StreamConfigurationMap config =
+                getCharacteristics().get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
+        SurfaceUtils.checkConstrainedHighSpeedSurfaces(outputs, /*fpsRange*/null, config);
+
+        List<OutputConfiguration> outConfigurations = new ArrayList<>(outputs.size());
+        for (Surface surface : outputs) {
+            outConfigurations.add(new OutputConfiguration(surface));
+        }
+        createCaptureSessionInternal(null, outConfigurations, callback, handler,
+                /*isConstrainedHighSpeed*/true);
+    }
+
     private void createCaptureSessionInternal(InputConfiguration inputConfig,
             List<OutputConfiguration> outputConfigurations,
             CameraCaptureSession.StateCallback callback, Handler handler,
@@ -565,10 +585,16 @@
                 outSurfaces.add(config.getSurface());
             }
             // Fire onConfigured if configureOutputs succeeded, fire onConfigureFailed otherwise.
-            CameraCaptureSessionImpl newSession =
-                    new CameraCaptureSessionImpl(mNextSessionId++, input,
-                            outSurfaces, callback, handler, this, mDeviceHandler,
-                            configureSuccess, isConstrainedHighSpeed);
+            CameraCaptureSessionCore newSession = null;
+            if (isConstrainedHighSpeed) {
+                newSession = new CameraConstrainedHighSpeedCaptureSessionImpl(mNextSessionId++,
+                        outSurfaces, callback, handler, this, mDeviceHandler, configureSuccess,
+                        mCharacteristics);
+            } else {
+                newSession = new CameraCaptureSessionImpl(mNextSessionId++, input,
+                        outSurfaces, callback, handler, this, mDeviceHandler,
+                        configureSuccess);
+            }
 
             // TODO: wait until current session closes, then create the new session
             mCurrentSession = newSession;
@@ -1933,181 +1959,4 @@
         return mCharacteristics;
     }
 
-    /**
-     * A high speed output surface can only be preview or hardware encoder surface.
-     *
-     * @param surface The high speed output surface to be checked.
-     */
-    private void checkHighSpeedSurfaceFormat(Surface surface) {
-        // TODO: remove this override since the default format should be
-        // ImageFormat.PRIVATE. b/9487482
-        final int HAL_FORMAT_RGB_START = 1; // HAL_PIXEL_FORMAT_RGBA_8888 from graphics.h
-        final int HAL_FORMAT_RGB_END = 5; // HAL_PIXEL_FORMAT_BGRA_8888 from graphics.h
-        int surfaceFormat = SurfaceUtils.getSurfaceFormat(surface);
-        if (surfaceFormat >= HAL_FORMAT_RGB_START &&
-                surfaceFormat <= HAL_FORMAT_RGB_END) {
-            surfaceFormat = ImageFormat.PRIVATE;
-        }
-
-        if (surfaceFormat != ImageFormat.PRIVATE) {
-            throw new IllegalArgumentException("Surface format(" + surfaceFormat + ") is not"
-                    + " for preview or hardware video encoding!");
-        }
-    }
-
-    private void checkConstrainedHighSpeedSurfaces(Collection<Surface> surfaces,
-            Range<Integer> fpsRange) {
-        if (surfaces == null || surfaces.size() == 0 || surfaces.size() > 2) {
-            throw new IllegalArgumentException("Output target surface list must not be null and"
-                    + " the size must be 1 or 2");
-        }
-
-        StreamConfigurationMap config =
-                getCharacteristics().get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
-        List<Size> highSpeedSizes = null;
-        if (fpsRange == null) {
-            highSpeedSizes = Arrays.asList(config.getHighSpeedVideoSizes());
-        } else {
-            // Check the FPS range first if provided
-            Range<Integer>[] highSpeedFpsRanges = config.getHighSpeedVideoFpsRanges();
-            if(!Arrays.asList(highSpeedFpsRanges).contains(fpsRange)) {
-                throw new IllegalArgumentException("Fps range " + fpsRange.toString() + " in the"
-                        + " request is not a supported high speed fps range " +
-                        Arrays.toString(highSpeedFpsRanges));
-            }
-            highSpeedSizes = Arrays.asList(config.getHighSpeedVideoSizesFor(fpsRange));
-        }
-
-        for (Surface surface : surfaces) {
-            checkHighSpeedSurfaceFormat(surface);
-
-            // Surface size must be supported high speed sizes.
-            Size surfaceSize = SurfaceUtils.getSurfaceSize(surface);
-            if (!highSpeedSizes.contains(surfaceSize)) {
-                throw new IllegalArgumentException("Surface size " + surfaceSize.toString() + " is"
-                        + " not part of the high speed supported size list " +
-                        Arrays.toString(highSpeedSizes.toArray()));
-            }
-            // Each output surface must be either preview surface or recording surface.
-            if (!SurfaceUtils.isSurfaceForPreview(surface) &&
-                    !SurfaceUtils.isSurfaceForHwVideoEncoder(surface)) {
-                throw new IllegalArgumentException("This output surface is neither preview nor "
-                        + "hardware video encoding surface");
-            }
-            if (SurfaceUtils.isSurfaceForPreview(surface) &&
-                    SurfaceUtils.isSurfaceForHwVideoEncoder(surface)) {
-                throw new IllegalArgumentException("This output surface can not be both preview"
-                        + " and hardware video encoding surface");
-            }
-        }
-
-        // For 2 output surface case, they shouldn't be same type.
-        if (surfaces.size() == 2) {
-            // Up to here, each surface can only be either preview or recording.
-            Iterator<Surface> iterator = surfaces.iterator();
-            boolean isFirstSurfacePreview =
-                    SurfaceUtils.isSurfaceForPreview(iterator.next());
-            boolean isSecondSurfacePreview =
-                    SurfaceUtils.isSurfaceForPreview(iterator.next());
-            if (isFirstSurfacePreview == isSecondSurfacePreview) {
-                throw new IllegalArgumentException("The 2 output surfaces must have different"
-                        + " type");
-            }
-        }
-    }
-
-    @Override
-    public void createConstrainedHighSpeedCaptureSession(List<Surface> outputs,
-            android.hardware.camera2.CameraCaptureSession.StateCallback callback, Handler handler)
-            throws CameraAccessException {
-        if (outputs == null || outputs.size() == 0 || outputs.size() > 2) {
-            throw new IllegalArgumentException(
-                    "Output surface list must not be null and the size must be no more than 2");
-        }
-        checkConstrainedHighSpeedSurfaces(outputs, /*fpsRange*/null);
-
-        List<OutputConfiguration> outConfigurations = new ArrayList<>(outputs.size());
-        for (Surface surface : outputs) {
-            outConfigurations.add(new OutputConfiguration(surface));
-        }
-        createCaptureSessionInternal(null, outConfigurations, callback, handler,
-                /*isConstrainedHighSpeed*/true);
-    }
-
-    @Override
-    public List<CaptureRequest> createConstrainedHighSpeedRequestList(CaptureRequest request)
-            throws CameraAccessException {
-        if (request == null) {
-            throw new IllegalArgumentException("Input capture request must not be null");
-        }
-        Collection<Surface> outputSurfaces = request.getTargets();
-        Range<Integer> fpsRange = request.get(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE);
-        checkConstrainedHighSpeedSurfaces(outputSurfaces, fpsRange);
-
-        // Request list size: to limit the preview to 30fps, need use maxFps/30; to maximize
-        // the preview frame rate, should use maxBatch size for that high speed stream
-        // configuration. We choose the former for now.
-        int requestListSize = fpsRange.getUpper() / 30;
-        List<CaptureRequest> requestList = new ArrayList<CaptureRequest>();
-
-        // Prepare the Request builders: need carry over the request controls.
-        // First, create a request builder that will only include preview or recording target.
-        CameraMetadataNative requestMetadata = new CameraMetadataNative(request.getNativeCopy());
-        // Note that after this step, the requestMetadata is mutated (swapped) and can not be used
-        // for next request builder creation.
-        CaptureRequest.Builder singleTargetRequestBuilder = new CaptureRequest.Builder(
-                requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE);
-
-        // Overwrite the capture intent to make sure a good value is set.
-        Iterator<Surface> iterator = outputSurfaces.iterator();
-        Surface firstSurface = iterator.next();
-        Surface secondSurface = null;
-        if (outputSurfaces.size() == 1 && SurfaceUtils.isSurfaceForHwVideoEncoder(firstSurface)) {
-            singleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
-                    CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW);
-        } else {
-            // Video only, or preview + video
-            singleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
-                    CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
-        }
-        singleTargetRequestBuilder.setPartOfCHSRequestList(/*partOfCHSList*/true);
-
-        // Second, Create a request builder that will include both preview and recording targets.
-        CaptureRequest.Builder doubleTargetRequestBuilder = null;
-        if (outputSurfaces.size() == 2) {
-            // Have to create a new copy, the original one was mutated after a new
-            // CaptureRequest.Builder creation.
-            requestMetadata = new CameraMetadataNative(request.getNativeCopy());
-            doubleTargetRequestBuilder = new CaptureRequest.Builder(
-                    requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE);
-            doubleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
-                    CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
-            doubleTargetRequestBuilder.addTarget(firstSurface);
-            secondSurface = iterator.next();
-            doubleTargetRequestBuilder.addTarget(secondSurface);
-            doubleTargetRequestBuilder.setPartOfCHSRequestList(/*partOfCHSList*/true);
-            // Make sure singleTargetRequestBuilder contains only recording surface for
-            // preview + recording case.
-            Surface recordingSurface = firstSurface;
-            if (!SurfaceUtils.isSurfaceForHwVideoEncoder(recordingSurface)) {
-                recordingSurface = secondSurface;
-            }
-            singleTargetRequestBuilder.addTarget(recordingSurface);
-        } else {
-            // Single output case: either recording or preview.
-            singleTargetRequestBuilder.addTarget(firstSurface);
-        }
-
-        // Generate the final request list.
-        for (int i = 0; i < requestListSize; i++) {
-            if (i == 0 && doubleTargetRequestBuilder != null) {
-                // First request should be recording + preview request
-                requestList.add(doubleTargetRequestBuilder.build());
-            } else {
-                requestList.add(singleTargetRequestBuilder.build());
-            }
-        }
-
-        return Collections.unmodifiableList(requestList);
-    }
 }
diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
index 639ad60..8e0eab2 100644
--- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
+++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
@@ -495,7 +495,8 @@
      * <p>
      * To enable high speed video recording, application must create a constrained create high speed
      * capture session via {@link CameraDevice#createConstrainedHighSpeedCaptureSession}, and submit
-     * a CaptureRequest list created by {@link CameraDevice#createConstrainedHighSpeedRequestList}
+     * a CaptureRequest list created by
+     * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}
      * to this session. The application must select the video size from this method and
      * {@link CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE FPS range} from
      * {@link #getHighSpeedVideoFpsRangesFor} to configure the constrained high speed session and
@@ -506,14 +507,15 @@
      * the same size). Otherwise, the high speed session creation will fail. Once the size is
      * selected, application can get the supported FPS ranges by
      * {@link #getHighSpeedVideoFpsRangesFor}, and use these FPS ranges to setup the recording
-     * request lists via {@link CameraDevice#createConstrainedHighSpeedRequestList}.
+     * request lists via
+     * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}.
      * </p>
      *
      * @return an array of supported high speed video recording sizes
      * @see #getHighSpeedVideoFpsRangesFor(Size)
      * @see CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO
      * @see CameraDevice#createConstrainedHighSpeedCaptureSession
-     * @see CameraDevice#createConstrainedHighSpeedRequestList
+     * @see android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList
      */
     public Size[] getHighSpeedVideoSizes() {
         Set<Size> keySet = mHighSpeedVideoSizeMap.keySet();
@@ -571,7 +573,8 @@
      * <p>
      * To enable high speed video recording, application must create a constrained create high speed
      * capture session via {@link CameraDevice#createConstrainedHighSpeedCaptureSession}, and submit
-     * a CaptureRequest list created by {@link CameraDevice#createConstrainedHighSpeedRequestList}
+     * a CaptureRequest list created by
+     * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}
      * to this session. The application must select the video size from this method and
      * {@link CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE FPS range} from
      * {@link #getHighSpeedVideoFpsRangesFor} to configure the constrained high speed session and
@@ -583,7 +586,7 @@
      * recording streams must have the same size). Otherwise, the high speed session creation will
      * fail. Once the high speed capture session is created, the application can set the FPS range
      * in the recording request lists via
-     * {@link CameraDevice#createConstrainedHighSpeedRequestList}.
+     * {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}.
      * </p>
      * <p>
      * The FPS ranges reported by this method will have below characteristics:
@@ -601,7 +604,7 @@
      * @see #getHighSpeedVideoSizesFor
      * @see CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO
      * @see CameraDevice#createConstrainedHighSpeedCaptureSession
-     * @see CameraDevice#createConstrainedHighSpeedRequestList
+     * @see CameraDevice#createHighSpeedRequestList
      */
     @SuppressWarnings("unchecked")
     public Range<Integer>[] getHighSpeedVideoFpsRanges() {
diff --git a/core/java/android/hardware/camera2/utils/SurfaceUtils.java b/core/java/android/hardware/camera2/utils/SurfaceUtils.java
index 064b21a..4b958df 100644
--- a/core/java/android/hardware/camera2/utils/SurfaceUtils.java
+++ b/core/java/android/hardware/camera2/utils/SurfaceUtils.java
@@ -19,9 +19,16 @@
 import android.graphics.ImageFormat;
 import android.hardware.camera2.legacy.LegacyCameraDevice;
 import android.hardware.camera2.legacy.LegacyExceptionUtils.BufferQueueAbandonedException;
+import android.hardware.camera2.params.StreamConfigurationMap;
+import android.util.Range;
 import android.util.Size;
 import android.view.Surface;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
 /**
  * Various Surface utilities.
  */
@@ -105,4 +112,93 @@
         return LegacyCameraDevice.isFlexibleConsumer(output);
     }
 
+    /**
+     * A high speed output surface can only be preview or hardware encoder surface.
+     *
+     * @param surface The high speed output surface to be checked.
+     */
+    private static void checkHighSpeedSurfaceFormat(Surface surface) {
+        // TODO: remove this override since the default format should be
+        // ImageFormat.PRIVATE. b/9487482
+        final int HAL_FORMAT_RGB_START = 1; // HAL_PIXEL_FORMAT_RGBA_8888 from graphics.h
+        final int HAL_FORMAT_RGB_END = 5; // HAL_PIXEL_FORMAT_BGRA_8888 from graphics.h
+        int surfaceFormat = SurfaceUtils.getSurfaceFormat(surface);
+        if (surfaceFormat >= HAL_FORMAT_RGB_START &&
+                surfaceFormat <= HAL_FORMAT_RGB_END) {
+            surfaceFormat = ImageFormat.PRIVATE;
+        }
+
+        if (surfaceFormat != ImageFormat.PRIVATE) {
+            throw new IllegalArgumentException("Surface format(" + surfaceFormat + ") is not"
+                    + " for preview or hardware video encoding!");
+        }
+    }
+
+    /**
+     * Verify that that the surfaces are valid for high-speed recording mode,
+     * and that the FPS range is supported
+     *
+     * @param surfaces the surfaces to verify as valid in terms of size and format
+     * @param fpsRange the target high-speed FPS range to validate
+     * @param config The stream configuration map for the device in question
+     */
+    public static void checkConstrainedHighSpeedSurfaces(Collection<Surface> surfaces,
+            Range<Integer> fpsRange, StreamConfigurationMap config) {
+        if (surfaces == null || surfaces.size() == 0 || surfaces.size() > 2) {
+            throw new IllegalArgumentException("Output target surface list must not be null and"
+                    + " the size must be 1 or 2");
+        }
+
+        List<Size> highSpeedSizes = null;
+        if (fpsRange == null) {
+            highSpeedSizes = Arrays.asList(config.getHighSpeedVideoSizes());
+        } else {
+            // Check the FPS range first if provided
+            Range<Integer>[] highSpeedFpsRanges = config.getHighSpeedVideoFpsRanges();
+            if(!Arrays.asList(highSpeedFpsRanges).contains(fpsRange)) {
+                throw new IllegalArgumentException("Fps range " + fpsRange.toString() + " in the"
+                        + " request is not a supported high speed fps range " +
+                        Arrays.toString(highSpeedFpsRanges));
+            }
+            highSpeedSizes = Arrays.asList(config.getHighSpeedVideoSizesFor(fpsRange));
+        }
+
+        for (Surface surface : surfaces) {
+            checkHighSpeedSurfaceFormat(surface);
+
+            // Surface size must be supported high speed sizes.
+            Size surfaceSize = SurfaceUtils.getSurfaceSize(surface);
+            if (!highSpeedSizes.contains(surfaceSize)) {
+                throw new IllegalArgumentException("Surface size " + surfaceSize.toString() + " is"
+                        + " not part of the high speed supported size list " +
+                        Arrays.toString(highSpeedSizes.toArray()));
+            }
+            // Each output surface must be either preview surface or recording surface.
+            if (!SurfaceUtils.isSurfaceForPreview(surface) &&
+                    !SurfaceUtils.isSurfaceForHwVideoEncoder(surface)) {
+                throw new IllegalArgumentException("This output surface is neither preview nor "
+                        + "hardware video encoding surface");
+            }
+            if (SurfaceUtils.isSurfaceForPreview(surface) &&
+                    SurfaceUtils.isSurfaceForHwVideoEncoder(surface)) {
+                throw new IllegalArgumentException("This output surface can not be both preview"
+                        + " and hardware video encoding surface");
+            }
+        }
+
+        // For 2 output surface case, they shouldn't be same type.
+        if (surfaces.size() == 2) {
+            // Up to here, each surface can only be either preview or recording.
+            Iterator<Surface> iterator = surfaces.iterator();
+            boolean isFirstSurfacePreview =
+                    SurfaceUtils.isSurfaceForPreview(iterator.next());
+            boolean isSecondSurfacePreview =
+                    SurfaceUtils.isSurfaceForPreview(iterator.next());
+            if (isFirstSurfacePreview == isSecondSurfacePreview) {
+                throw new IllegalArgumentException("The 2 output surfaces must have different"
+                        + " type");
+            }
+        }
+    }
+
 }
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/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl
index 31a6a962..0fe112c 100644
--- a/core/java/android/hardware/usb/IUsbManager.aidl
+++ b/core/java/android/hardware/usb/IUsbManager.aidl
@@ -82,6 +82,9 @@
     /* Clears default preferences and permissions for the package */
     void clearDefaults(String packageName, int userId);
 
+    /* Returns true if the specified USB function is enabled. */
+    boolean isFunctionEnabled(String function);
+
     /* Sets the current USB function. */
     void setCurrentFunction(String function);
 
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index c83f466..f58b9d6 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -22,7 +22,6 @@
 import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
-import android.os.SystemProperties;
 import android.util.Log;
 
 import java.util.HashMap;
@@ -54,8 +53,6 @@
      * <li> {@link #USB_CONNECTED} boolean indicating whether USB is connected or disconnected.
      * <li> {@link #USB_CONFIGURED} boolean indicating whether USB is configured.
      * currently zero if not configured, one for configured.
-     * <li> {@link #USB_FUNCTION_MASS_STORAGE} boolean extra indicating whether the
-     * mass storage function is enabled
      * <li> {@link #USB_FUNCTION_ADB} boolean extra indicating whether the
      * adb function is enabled
      * <li> {@link #USB_FUNCTION_RNDIS} boolean extra indicating whether the
@@ -152,12 +149,13 @@
     public static final String USB_DATA_UNLOCKED = "unlocked";
 
     /**
-     * Name of the USB mass storage USB function.
-     * Used in extras for the {@link #ACTION_USB_STATE} broadcast
+     * A placeholder indicating that no USB function is being specified.
+     * Used to distinguish between selecting no function vs. the default function in
+     * {@link #setCurrentFunction(String)}.
      *
      * {@hide}
      */
-    public static final String USB_FUNCTION_MASS_STORAGE = "mass_storage";
+    public static final String USB_FUNCTION_NONE = "none";
 
     /**
      * Name of the adb USB function.
@@ -218,15 +216,14 @@
     /**
      * Name of extra for {@link #ACTION_USB_DEVICE_ATTACHED} and
      * {@link #ACTION_USB_DEVICE_DETACHED} broadcasts
-     * containing the UsbDevice object for the device.
+     * containing the {@link UsbDevice} object for the device.
      */
-
     public static final String EXTRA_DEVICE = "device";
 
     /**
      * Name of extra for {@link #ACTION_USB_ACCESSORY_ATTACHED} and
      * {@link #ACTION_USB_ACCESSORY_DETACHED} broadcasts
-     * containing the UsbAccessory object for the accessory.
+     * containing the {@link UsbAccessory} object for the accessory.
      */
     public static final String EXTRA_ACCESSORY = "accessory";
 
@@ -238,23 +235,6 @@
      */
     public static final String EXTRA_PERMISSION_GRANTED = "permission";
 
-    /**
-     * The persistent property which stores whether adb is enabled or not. Other values are ignored.
-     * Previously this value stored non-adb settings, but not anymore.
-     * TODO: rename this to something adb specific, rather than using usb.
-     *
-     * {@hide}
-     */
-    public static final String ADB_PERSISTENT_PROPERTY = "persist.sys.usb.config";
-
-    /**
-     * The non-persistent property which stores the current USB settings.
-     *
-     * {@hide}
-     */
-    public static final String USB_SETTINGS_PROPERTY = "sys.usb.config";
-
-
     private final Context mContext;
     private final IUsbManager mService;
 
@@ -437,31 +417,44 @@
         }
     }
 
-    private static boolean propertyContainsFunction(String property, String function) {
-        String functions = SystemProperties.get(property, "");
-        int index = functions.indexOf(function);
-        if (index < 0) return false;
-        if (index > 0 && functions.charAt(index - 1) != ',') return false;
-        int charAfter = index + function.length();
-        if (charAfter < functions.length() && functions.charAt(charAfter) != ',') return false;
-        return true;
-    }
-
     /**
-     * Returns true if the specified USB function is currently enabled.
+     * Returns true if the specified USB function is currently enabled when in device mode.
+     * <p>
+     * USB functions represent interfaces which are published to the host to access
+     * services offered by the device.
+     * </p>
      *
      * @param function name of the USB function
-     * @return true if the USB function is enabled.
+     * @return true if the USB function is enabled
      *
      * {@hide}
      */
     public boolean isFunctionEnabled(String function) {
-        return propertyContainsFunction(USB_SETTINGS_PROPERTY, function);
+        try {
+            return mService.isFunctionEnabled(function);
+        } catch (RemoteException e) {
+            Log.e(TAG, "RemoteException in setCurrentFunction", e);
+            return false;
+        }
     }
 
     /**
-     * Sets the current USB function.
-     * If function is null, then the current function is set to the default function.
+     * Sets the current USB function when in device mode.
+     * <p>
+     * USB functions represent interfaces which are published to the host to access
+     * services offered by the device.
+     * </p><p>
+     * This method is intended to select among primary USB functions.  The system may
+     * automatically activate additional functions such as {@link #USB_FUNCTION_ADB}
+     * or {@link #USB_FUNCTION_ACCESSORY} based on other settings and states.
+     * </p><p>
+     * The allowed values are: {@link #USB_FUNCTION_NONE}, {@link #USB_FUNCTION_AUDIO_SOURCE},
+     * {@link #USB_FUNCTION_MIDI}, {@link #USB_FUNCTION_MTP}, {@link #USB_FUNCTION_PTP},
+     * or {@link #USB_FUNCTION_RNDIS}.
+     * </p><p>
+     * Note: This function is asynchronous and may fail silently without applying
+     * the requested changes.
+     * </p>
      *
      * @param function name of the USB function, or null to restore the default function
      *
@@ -477,8 +470,9 @@
 
     /**
      * Sets whether USB data (for example, MTP exposed pictures) should be made available
-     * on the USB connection. Unlocking usb data should only be done with user involvement,
-     * since exposing pictures or other data could leak sensitive user information.
+     * on the USB connection when in device mode. Unlocking usb data should only be done with
+     * user involvement, since exposing pictures or other data could leak sensitive
+     * user information.
      *
      * {@hide}
      */
@@ -491,7 +485,8 @@
     }
 
     /**
-     * Returns {@code true} iff access to sensitive USB data is currently allowed.
+     * Returns {@code true} iff access to sensitive USB data is currently allowed when
+     * in device mode.
      *
      * {@hide}
      */
@@ -504,4 +499,51 @@
         return false;
     }
 
+    /** @hide */
+    public static String addFunction(String functions, String function) {
+        if ("none".equals(functions)) {
+            return function;
+        }
+        if (!containsFunction(functions, function)) {
+            if (functions.length() > 0) {
+                functions += ",";
+            }
+            functions += function;
+        }
+        return functions;
+    }
+
+    /** @hide */
+    public static String removeFunction(String functions, String function) {
+        String[] split = functions.split(",");
+        for (int i = 0; i < split.length; i++) {
+            if (function.equals(split[i])) {
+                split[i] = null;
+            }
+        }
+        if (split.length == 1 && split[0] == null) {
+            return "none";
+        }
+        StringBuilder builder = new StringBuilder();
+        for (int i = 0; i < split.length; i++) {
+            String s = split[i];
+            if (s != null) {
+                if (builder.length() > 0) {
+                    builder.append(",");
+                }
+                builder.append(s);
+            }
+        }
+        return builder.toString();
+    }
+
+    /** @hide */
+    public static boolean containsFunction(String functions, String function) {
+        int index = functions.indexOf(function);
+        if (index < 0) return false;
+        if (index > 0 && functions.charAt(index - 1) != ',') return false;
+        int charAfter = index + function.length();
+        if (charAfter < functions.length() && functions.charAt(charAfter) != ',') return false;
+        return true;
+    }
 }
diff --git a/core/java/android/net/CaptivePortal.java b/core/java/android/net/CaptivePortal.java
new file mode 100644
index 0000000..ee05f28
--- /dev/null
+++ b/core/java/android/net/CaptivePortal.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed urnder the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.net;
+
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.RemoteException;
+
+/**
+ * A class allowing apps handling the {@link ConnectivityManager#ACTION_CAPTIVE_PORTAL_SIGN_IN}
+ * activity to indicate to the system different outcomes of captive portal sign in.  This class is
+ * passed as an extra named {@link ConnectivityManager#EXTRA_CAPTIVE_PORTAL} with the
+ * {@code ACTION_CAPTIVE_PORTAL_SIGN_IN} activity.
+ */
+public class CaptivePortal implements Parcelable {
+    /** @hide */
+    public static final int APP_RETURN_DISMISSED    = 0;
+    /** @hide */
+    public static final int APP_RETURN_UNWANTED     = 1;
+    /** @hide */
+    public static final int APP_RETURN_WANTED_AS_IS = 2;
+
+    private final IBinder mBinder;
+
+    /** @hide */
+    public CaptivePortal(IBinder binder) {
+        mBinder = binder;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeStrongBinder(mBinder);
+    }
+
+    public static final Parcelable.Creator<CaptivePortal> CREATOR
+            = new Parcelable.Creator<CaptivePortal>() {
+        @Override
+        public CaptivePortal createFromParcel(Parcel in) {
+            return new CaptivePortal(in.readStrongBinder());
+        }
+
+        @Override
+        public CaptivePortal[] newArray(int size) {
+            return new CaptivePortal[size];
+        }
+    };
+
+    /**
+     * Indicate to the system that the captive portal has been
+     * dismissed.  In response the framework will re-evaluate the network's
+     * connectivity and might take further action thereafter.
+     */
+    public void reportCaptivePortalDismissed() {
+        try {
+            ICaptivePortal.Stub.asInterface(mBinder).appResponse(APP_RETURN_DISMISSED);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Indicate to the system that the user does not want to pursue signing in to the
+     * captive portal and the system should continue to prefer other networks
+     * without captive portals for use as the default active data network.  The
+     * system will not retest the network for a captive portal so as to avoid
+     * disturbing the user with further sign in to network notifications.
+     */
+    public void ignoreNetwork() {
+        try {
+            ICaptivePortal.Stub.asInterface(mBinder).appResponse(APP_RETURN_UNWANTED);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Indicate to the system the user wants to use this network as is, even though
+     * the captive portal is still in place.  The system will treat the network
+     * as if it did not have a captive portal when selecting the network to use
+     * as the default active data network. This may result in this network
+     * becoming the default active data network, which could disrupt network
+     * connectivity for apps because the captive portal is still in place.
+     * @hide
+     */
+    public void useNetwork() {
+        try {
+            ICaptivePortal.Stub.asInterface(mBinder).appResponse(APP_RETURN_WANTED_AS_IS);
+        } catch (RemoteException e) {
+        }
+    }
+}
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 80476ea..de7ca0c 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -102,26 +102,26 @@
      * portal, which is blocking Internet connectivity. The user was presented
      * with a notification that network sign in is required,
      * and the user invoked the notification's action indicating they
-     * desire to sign in to the network. Apps handling this action should
+     * desire to sign in to the network. Apps handling this activity should
      * facilitate signing in to the network. This action includes a
      * {@link Network} typed extra called {@link #EXTRA_NETWORK} that represents
      * the network presenting the captive portal; all communication with the
      * captive portal must be done using this {@code Network} object.
      * <p/>
-     * When the app handling this action believes the user has signed in to
-     * the network and the captive portal has been dismissed, the app should call
-     * {@link #reportCaptivePortalDismissed} so the system can reevaluate the network.
-     * If reevaluation finds the network no longer subject to a captive portal,
-     * the network may become the default active data network.
-     * <p/>
-     * When the app handling this action believes the user explicitly wants
+     * This activity includes a {@link CaptivePortal} extra named
+     * {@link #EXTRA_CAPTIVE_PORTAL} that can be used to indicate different
+     * outcomes of the captive portal sign in to the system:
+     * <ul>
+     * <li> When the app handling this action believes the user has signed in to
+     * the network and the captive portal has been dismissed, the app should
+     * call {@link CaptivePortal#reportCaptivePortalDismissed} so the system can
+     * reevaluate the network. If reevaluation finds the network no longer
+     * subject to a captive portal, the network may become the default active
+     * data network. </li>
+     * <li> When the app handling this action believes the user explicitly wants
      * to ignore the captive portal and the network, the app should call
-     * {@link #ignoreNetworkWithCaptivePortal}.
-     * <p/>
-     * Note that this action includes a {@code String} extra named
-     * {@link #EXTRA_CAPTIVE_PORTAL_TOKEN} that must
-     * be passed in to {@link #reportCaptivePortalDismissed} and
-     * {@link #ignoreNetworkWithCaptivePortal}.
+     * {@link CaptivePortal#ignoreNetwork}. </li>
+     * </ul>
      */
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_CAPTIVE_PORTAL_SIGN_IN = "android.net.conn.CAPTIVE_PORTAL";
@@ -187,16 +187,15 @@
      * {@hide}
      */
     public static final String EXTRA_INET_CONDITION = "inetCondition";
-
     /**
-     * The lookup key for a string that is sent out with
-     * {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN}. This string must be
-     * passed in to {@link #reportCaptivePortalDismissed} and
-     * {@link #ignoreNetworkWithCaptivePortal}. Retrieve it with
-     * {@link android.content.Intent#getStringExtra(String)}.
+     * The lookup key for a {@link CaptivePortal} object included with the
+     * {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN} intent.  The {@code CaptivePortal}
+     * object can be used to either indicate to the system that the captive
+     * portal has been dismissed or that the user does not want to pursue
+     * signing in to captive portal.  Retrieve it with
+     * {@link android.content.Intent#getParcelableExtra(String)}.
      */
-    public static final String EXTRA_CAPTIVE_PORTAL_TOKEN = "captivePortalToken";
-
+    public static final String EXTRA_CAPTIVE_PORTAL = "android.net.extra.CAPTIVE_PORTAL";
     /**
      * Broadcast action to indicate the change of data activity status
      * (idle or active) on a network in a recent period.
@@ -1779,82 +1778,6 @@
         }
     }
 
-    /** {@hide} */
-    public static final int CAPTIVE_PORTAL_APP_RETURN_DISMISSED    = 0;
-    /** {@hide} */
-    public static final int CAPTIVE_PORTAL_APP_RETURN_UNWANTED     = 1;
-    /** {@hide} */
-    public static final int CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS = 2;
-
-    /**
-     * Called by an app handling the {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN}
-     * action to indicate to the system that the captive portal has been
-     * dismissed.  In response the framework will re-evaluate the network's
-     * connectivity and might take further action thereafter.
-     *
-     * @param network The {@link Network} object passed via
-     *                {@link #EXTRA_NETWORK} with the
-     *                {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN} action.
-     * @param actionToken The {@code String} passed via
-     *                    {@link #EXTRA_CAPTIVE_PORTAL_TOKEN} with the
-     *                    {@code ACTION_CAPTIVE_PORTAL_SIGN_IN} action.
-     */
-    public void reportCaptivePortalDismissed(Network network, String actionToken) {
-        try {
-            mService.captivePortalAppResponse(network, CAPTIVE_PORTAL_APP_RETURN_DISMISSED,
-                    actionToken);
-        } catch (RemoteException e) {
-        }
-    }
-
-    /**
-     * Called by an app handling the {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN}
-     * action to indicate that the user does not want to pursue signing in to
-     * captive portal and the system should continue to prefer other networks
-     * without captive portals for use as the default active data network.  The
-     * system will not retest the network for a captive portal so as to avoid
-     * disturbing the user with further sign in to network notifications.
-     *
-     * @param network The {@link Network} object passed via
-     *                {@link #EXTRA_NETWORK} with the
-     *                {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN} action.
-     * @param actionToken The {@code String} passed via
-     *                    {@link #EXTRA_CAPTIVE_PORTAL_TOKEN} with the
-     *                    {@code ACTION_CAPTIVE_PORTAL_SIGN_IN} action.
-     */
-    public void ignoreNetworkWithCaptivePortal(Network network, String actionToken) {
-        try {
-            mService.captivePortalAppResponse(network, CAPTIVE_PORTAL_APP_RETURN_UNWANTED,
-                    actionToken);
-        } catch (RemoteException e) {
-        }
-    }
-
-    /**
-     * Called by an app handling the {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN}
-     * action to indicate the user wants to use this network as is, even though
-     * the captive portal is still in place.  The system will treat the network
-     * as if it did not have a captive portal when selecting the network to use
-     * as the default active data network. This may result in this network
-     * becoming the default active data network, which could disrupt network
-     * connectivity for apps because the captive portal is still in place.
-     *
-     * @param network The {@link Network} object passed via
-     *                {@link #EXTRA_NETWORK} with the
-     *                {@link #ACTION_CAPTIVE_PORTAL_SIGN_IN} action.
-     * @param actionToken The {@code String} passed via
-     *                    {@link #EXTRA_CAPTIVE_PORTAL_TOKEN} with the
-     *                    {@code ACTION_CAPTIVE_PORTAL_SIGN_IN} action.
-     * @hide
-     */
-    public void useNetworkWithCaptivePortal(Network network, String actionToken) {
-        try {
-            mService.captivePortalAppResponse(network, CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS,
-                    actionToken);
-        } catch (RemoteException e) {
-        }
-    }
-
     /**
      * Set a network-independent global http proxy.  This is not normally what you want
      * for typical HTTP proxies - they are general network dependent.  However if you're
@@ -2081,23 +2004,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 +2080,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 +2204,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) {
@@ -2565,7 +2509,7 @@
      * replaced by this one, effectively releasing the previous {@link NetworkRequest}.
      * <p>
      * The request may be released normally by calling
-     * {@link #releaseNetworkRequest(android.app.PendingIntent)}.
+     * {@link #unregisterNetworkCallback(android.app.PendingIntent)}.
      * <p>This method requires the caller to hold the permission
      * {@link android.Manifest.permission#ACCESS_NETWORK_STATE}.
      * @param request {@link NetworkRequest} describing this request.
@@ -2619,6 +2563,19 @@
     }
 
     /**
+     * Unregisters a callback previously registered via
+     * {@link #registerNetworkCallback(NetworkRequest, android.app.PendingIntent)}.
+     *
+     * @param operation A PendingIntent equal (as defined by {@link Intent#filterEquals}) to the
+     *                  PendingIntent passed to
+     *                  {@link #registerNetworkCallback(NetworkRequest, android.app.PendingIntent)}.
+     *                  Cannot be null.
+     */
+    public void unregisterNetworkCallback(PendingIntent operation) {
+        releaseNetworkRequest(operation);
+    }
+
+    /**
      * Informs the system whether it should switch to {@code network} regardless of whether it is
      * validated or not. If {@code accept} is true, and the network was explicitly selected by the
      * user (e.g., by selecting a Wi-Fi network in the Settings app), then the network will become
diff --git a/core/java/android/net/ICaptivePortal.aidl b/core/java/android/net/ICaptivePortal.aidl
new file mode 100644
index 0000000..a013e79
--- /dev/null
+++ b/core/java/android/net/ICaptivePortal.aidl
@@ -0,0 +1,26 @@
+/**
+ * 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 android.net;
+
+/**
+ * Interface to inform NetworkMonitor of decisions of app handling captive portal.
+ * @hide
+ */
+interface ICaptivePortal
+{
+    oneway void appResponse(int response);
+}
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 29557bb..78f8b95 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -96,8 +96,6 @@
 
     void reportNetworkConnectivity(in Network network, boolean hasConnectivity);
 
-    void captivePortalAppResponse(in Network network, int response, String actionToken);
-
     ProxyInfo getGlobalProxy();
 
     void setGlobalProxy(in ProxyInfo p);
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/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
index 76bd0ec..d619c0a 100644
--- a/core/java/android/nfc/NfcActivityManager.java
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -406,7 +406,7 @@
                         Intent.FLAG_GRANT_READ_URI_PERMISSION);
             }
         }
-        return new BeamShareData(message, uris, UserHandle.CURRENT, flags);
+        return new BeamShareData(message, uris, new UserHandle(UserHandle.myUserId()), flags);
     }
 
     /** Callback from NFC service, usually on binder thread */
diff --git a/core/java/android/nfc/cardemulation/CardEmulation.java b/core/java/android/nfc/cardemulation/CardEmulation.java
index 64c2bc2..23d05bd 100644
--- a/core/java/android/nfc/cardemulation/CardEmulation.java
+++ b/core/java/android/nfc/cardemulation/CardEmulation.java
@@ -40,7 +40,7 @@
  * NFC card emulation services.
  *
  * For a general introduction into NFC card emulation,
- * please read the <a href="{@docRoot}guide/topics/nfc/ce.html">
+ * please read the <a href="{@docRoot}guide/topics/connectivity/nfc/hce.html">
  * NFC card emulation developer guide</a>.</p>
  *
  * <p class="note">Use of this class requires the
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/Environment.java b/core/java/android/os/Environment.java
index 8e0584a..2080856 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -244,14 +244,36 @@
     }
 
     /** {@hide} */
-    public static File getDataAppDirectory(String volumeUuid) {
+    public static File getDataDirectory(String volumeUuid) {
         if (TextUtils.isEmpty(volumeUuid)) {
-            return new File("/data/app");
+            return new File("/data");
         } else {
-            return new File("/mnt/expand/" + volumeUuid + "/app");
+            return new File("/mnt/expand/" + volumeUuid);
         }
     }
 
+    /** {@hide} */
+    public static File getDataAppDirectory(String volumeUuid) {
+        return new File(getDataDirectory(volumeUuid), "app");
+    }
+
+    /** {@hide} */
+    public static File getDataUserDirectory(String volumeUuid) {
+        return new File(getDataDirectory(volumeUuid), "user");
+    }
+
+    /** {@hide} */
+    public static File getDataUserDirectory(String volumeUuid, int userId) {
+        return new File(getDataUserDirectory(volumeUuid), String.valueOf(userId));
+    }
+
+    /** {@hide} */
+    public static File getDataUserPackageDirectory(String volumeUuid, int userId,
+            String packageName) {
+        // TODO: keep consistent with installd
+        return new File(getDataUserDirectory(volumeUuid, userId), packageName);
+    }
+
     /**
      * Return the primary external storage directory. This directory may not
      * currently be accessible if it has been mounted by the user on their
diff --git a/core/java/android/os/PooledStringReader.java b/core/java/android/os/PooledStringReader.java
index 7795957..6fc71c7 100644
--- a/core/java/android/os/PooledStringReader.java
+++ b/core/java/android/os/PooledStringReader.java
@@ -36,6 +36,10 @@
         mPool = new String[size];
     }
 
+    public int getStringCount() {
+        return mPool.length;
+    }
+
     public String readString() {
         int idx = mIn.readInt();
         if (idx >= 0) {
diff --git a/core/java/android/os/PooledStringWriter.java b/core/java/android/os/PooledStringWriter.java
index eac297d..ee592d9 100644
--- a/core/java/android/os/PooledStringWriter.java
+++ b/core/java/android/os/PooledStringWriter.java
@@ -67,6 +67,10 @@
         }
     }
 
+    public int getStringCount() {
+        return mPool.size();
+    }
+
     public void finish() {
         final int pos = mOut.dataPosition();
         mOut.setDataPosition(mStart);
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index 511bd5f..20bcf62 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -221,6 +221,17 @@
      * components -- user, app, isolated, etc.
      * @hide
      */
+    public static String formatUid(int uid) {
+        StringBuilder sb = new StringBuilder();
+        formatUid(sb, uid);
+        return sb.toString();
+    }
+
+    /**
+     * Generate a text representation of the uid, breaking out its individual
+     * components -- user, app, isolated, etc.
+     * @hide
+     */
     public static void formatUid(PrintWriter pw, int uid) {
         if (uid < Process.FIRST_APPLICATION_UID) {
             pw.print(uid);
diff --git a/core/java/android/os/storage/DiskInfo.java b/core/java/android/os/storage/DiskInfo.java
index 397d87e..9114107 100644
--- a/core/java/android/os/storage/DiskInfo.java
+++ b/core/java/android/os/storage/DiskInfo.java
@@ -54,6 +54,7 @@
     public String label;
     /** Hacky; don't rely on this count */
     public int volumeCount;
+    public String sysPath;
 
     public DiskInfo(String id, int flags) {
         this.id = Preconditions.checkNotNull(id);
@@ -66,6 +67,7 @@
         size = parcel.readLong();
         label = parcel.readString();
         volumeCount = parcel.readInt();
+        sysPath = parcel.readString();
     }
 
     public @NonNull String getId() {
@@ -139,6 +141,8 @@
         pw.printPair("flags", DebugUtils.flagsToString(getClass(), "FLAG_", flags));
         pw.printPair("size", size);
         pw.printPair("label", label);
+        pw.println();
+        pw.printPair("sysPath", sysPath);
         pw.decreaseIndent();
         pw.println();
     }
@@ -193,5 +197,6 @@
         parcel.writeLong(size);
         parcel.writeString(label);
         parcel.writeInt(volumeCount);
+        parcel.writeString(sysPath);
     }
 }
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index aab68e9..f03e04e 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -557,12 +557,20 @@
 
     /** {@hide} */
     public @Nullable VolumeInfo findPrivateForEmulated(VolumeInfo emulatedVol) {
-        return findVolumeById(emulatedVol.getId().replace("emulated", "private"));
+        if (emulatedVol != null) {
+            return findVolumeById(emulatedVol.getId().replace("emulated", "private"));
+        } else {
+            return null;
+        }
     }
 
     /** {@hide} */
     public @Nullable VolumeInfo findEmulatedForPrivate(VolumeInfo privateVol) {
-        return findVolumeById(privateVol.getId().replace("private", "emulated"));
+        if (privateVol != null) {
+            return findVolumeById(privateVol.getId().replace("private", "emulated"));
+        } else {
+            return null;
+        }
     }
 
     /** {@hide} */
@@ -586,6 +594,21 @@
     }
 
     /** {@hide} */
+    public @NonNull List<VolumeInfo> getWritablePrivateVolumes() {
+        try {
+            final ArrayList<VolumeInfo> res = new ArrayList<>();
+            for (VolumeInfo vol : mMountService.getVolumes(0)) {
+                if (vol.getType() == VolumeInfo.TYPE_PRIVATE && vol.isMountedWritable()) {
+                    res.add(vol);
+                }
+            }
+            return res;
+        } catch (RemoteException e) {
+            throw e.rethrowAsRuntimeException();
+        }
+    }
+
+    /** {@hide} */
     public @NonNull List<VolumeRecord> getVolumeRecords() {
         try {
             return Arrays.asList(mMountService.getVolumeRecords(0));
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/os/storage/VolumeRecord.java b/core/java/android/os/storage/VolumeRecord.java
index cb16305..7b20223 100644
--- a/core/java/android/os/storage/VolumeRecord.java
+++ b/core/java/android/os/storage/VolumeRecord.java
@@ -19,6 +19,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.DebugUtils;
+import android.util.TimeUtils;
 
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.Preconditions;
@@ -42,6 +43,9 @@
     public String partGuid;
     public String nickname;
     public int userFlags;
+    public long createdMillis;
+    public long lastTrimMillis;
+    public long lastBenchMillis;
 
     public VolumeRecord(int type, String fsUuid) {
         this.type = type;
@@ -54,6 +58,9 @@
         partGuid = parcel.readString();
         nickname = parcel.readString();
         userFlags = parcel.readInt();
+        createdMillis = parcel.readLong();
+        lastTrimMillis = parcel.readLong();
+        lastBenchMillis = parcel.readLong();
     }
 
     public int getType() {
@@ -86,6 +93,10 @@
         pw.printPair("nickname", nickname);
         pw.printPair("userFlags",
                 DebugUtils.flagsToString(VolumeRecord.class, "USER_FLAG_", userFlags));
+        pw.println();
+        pw.printPair("createdMillis", TimeUtils.formatForLogging(createdMillis));
+        pw.printPair("lastTrimMillis", TimeUtils.formatForLogging(lastTrimMillis));
+        pw.printPair("lastBenchMillis", TimeUtils.formatForLogging(lastBenchMillis));
         pw.decreaseIndent();
         pw.println();
     }
@@ -140,5 +151,8 @@
         parcel.writeString(partGuid);
         parcel.writeString(nickname);
         parcel.writeInt(userFlags);
+        parcel.writeLong(createdMillis);
+        parcel.writeLong(lastTrimMillis);
+        parcel.writeLong(lastBenchMillis);
     }
 }
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/provider/Settings.java b/core/java/android/provider/Settings.java
index e5afdde..4e13758 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -6324,6 +6324,9 @@
        /** Timeout in milliseconds to wait for NTP server. {@hide} */
        public static final String NTP_TIMEOUT = "ntp_timeout";
 
+       /** {@hide} */
+       public static final String STORAGE_BENCHMARK_INTERVAL = "storage_benchmark_interval";
+
        /**
         * Whether the package manager should send package verification broadcasts for verifiers to
         * review apps prior to installation.
diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java
index 7eb936a..e408b36 100644
--- a/core/java/android/service/voice/VoiceInteractionSession.java
+++ b/core/java/android/service/voice/VoiceInteractionSession.java
@@ -209,16 +209,30 @@
         }
 
         @Override
-        public void handleAssist(Bundle data, AssistStructure structure,
-                AssistContent content) {
+        public void handleAssist(final Bundle data, final AssistStructure structure,
+                final AssistContent content) {
             // We want to pre-warm the AssistStructure before handing it off to the main
-            // thread.  There is a strong argument to be made that it should be handed
-            // through as a separate param rather than part of the assistBundle.
-            if (structure != null) {
-                structure.ensureData();
-            }
-            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageOOO(MSG_HANDLE_ASSIST,
-                    data, structure, content));
+            // thread.  We also want to do this on a separate thread, so that if the app
+            // is for some reason slow (due to slow filling in of async children in the
+            // structure), we don't block other incoming IPCs (such as the screenshot) to
+            // us (since we are a oneway interface, they get serialized).  (Okay?)
+            Thread retriever = new Thread("AssistStructure retriever") {
+                @Override
+                public void run() {
+                    Throwable failure = null;
+                    if (structure != null) {
+                        try {
+                            structure.ensureData();
+                        } catch (Throwable e) {
+                            Log.w(TAG, "Failure retrieving AssistStructure", e);
+                            failure = e;
+                        }
+                    }
+                    mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageOOOO(MSG_HANDLE_ASSIST,
+                            data, failure == null ? structure : null, failure, content));
+                }
+            };
+            retriever.start();
         }
 
         @Override
@@ -689,8 +703,8 @@
                     args = (SomeArgs)msg.obj;
                     if (DEBUG) Log.d(TAG, "onHandleAssist: data=" + args.arg1
                             + " structure=" + args.arg2 + " content=" + args.arg3);
-                    onHandleAssist((Bundle) args.arg1, (AssistStructure) args.arg2,
-                            (AssistContent) args.arg3);
+                    doOnHandleAssist((Bundle) args.arg1, (AssistStructure) args.arg2,
+                            (Throwable) args.arg3, (AssistContent) args.arg4);
                     break;
                 case MSG_HANDLE_SCREENSHOT:
                     if (DEBUG) Log.d(TAG, "onHandleScreenshot: " + msg.obj);
@@ -1001,6 +1015,21 @@
     }
 
     /**
+     * Request that all system dialogs (and status bar shade etc) be closed, allowing
+     * access to the session's UI.  This will <em>not</em> cause the lock screen to be
+     * dismissed.
+     */
+    public void closeSystemDialogs() {
+        if (mToken == null) {
+            throw new IllegalStateException("Can't call before onCreate()");
+        }
+        try {
+            mSystemService.closeSystemDialogs(mToken);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
      * Convenience for inflating views.
      */
     public LayoutInflater getLayoutInflater() {
@@ -1096,9 +1125,45 @@
         mContentFrame.requestApplyInsets();
     }
 
+    void doOnHandleAssist(Bundle data, AssistStructure structure, Throwable failure,
+            AssistContent content) {
+        if (failure != null) {
+            onAssistStructureFailure(failure);
+        }
+        onHandleAssist(data, structure, content);
+    }
+
+    /**
+     * Called when there has been a failure transferring the {@link AssistStructure} to
+     * the assistant.  This may happen, for example, if the data is too large and results
+     * in an out of memory exception, or the client has provided corrupt data.  This will
+     * be called immediately before {@link #onHandleAssist} and the AssistStructure supplied
+     * there afterwards will be null.
+     *
+     * @param failure The failure exception that was thrown when building the
+     * {@link AssistStructure}.
+     */
+    public void onAssistStructureFailure(Throwable failure) {
+    }
+
+    /**
+     * Called to receive data from the application that the user was currently viewing when
+     * an assist session is started.
+     *
+     * @param data Arbitrary data supplied by the app through
+     * {@link android.app.Activity#onProvideAssistData Activity.onProvideAssistData}.
+     * @param structure If available, the structure definition of all windows currently
+     * displayed by the app; if structure has been turned off by the user, will be null.
+     * @param content Additional content data supplied by the app through
+     * {@link android.app.Activity#onProvideAssistContent Activity.onProvideAssistContent}.
+     */
     public void onHandleAssist(Bundle data, AssistStructure structure, AssistContent content) {
     }
 
+    /**
+     * Called to receive a screenshot of what the user was currently viewing when an assist
+     * session is started.  Will be null if screenshots are disabled by the user.
+     */
     public void onHandleScreenshot(Bitmap screenshot) {
     }
 
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 8952807..d598291 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -271,8 +271,8 @@
             public void resized(Rect frame, Rect overscanInsets, Rect contentInsets,
                     Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw,
                     Configuration newConfig) {
-                Message msg = mCaller.obtainMessageI(MSG_WINDOW_RESIZED,
-                        reportDraw ? 1 : 0);
+                Message msg = mCaller.obtainMessageIO(MSG_WINDOW_RESIZED,
+                        reportDraw ? 1 : 0, outsets);
                 mCaller.sendMessage(msg);
             }
 
@@ -649,7 +649,7 @@
                                 com.android.internal.R.style.Animation_Wallpaper;
                         mInputChannel = new InputChannel();
                         if (mSession.addToDisplay(mWindow, mWindow.mSeq, mLayout, View.VISIBLE,
-                            Display.DEFAULT_DISPLAY, mContentInsets, mStableInsets,
+                            Display.DEFAULT_DISPLAY, mContentInsets, mStableInsets, mOutsets,
                                 mInputChannel) < 0) {
                             Log.w(TAG, "Failed to add window while updating wallpaper surface.");
                             return;
@@ -1192,6 +1192,7 @@
                 } break;
                 case MSG_WINDOW_RESIZED: {
                     final boolean reportDraw = message.arg1 != 0;
+                    mEngine.mOutsets.set((Rect) message.obj);
                     mEngine.updateSurface(true, false, reportDraw);
                     mEngine.doOffsetsChanged(true);
                 } break;
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/text/Hyphenator.java b/core/java/android/text/Hyphenator.java
index 67c36e3..1ee3827 100644
--- a/core/java/android/text/Hyphenator.java
+++ b/core/java/android/text/Hyphenator.java
@@ -21,9 +21,10 @@
 import android.annotation.Nullable;
 import android.util.Log;
 
+import libcore.io.IoUtils;
+
 import java.io.File;
 import java.io.IOException;
-import java.io.RandomAccessFile;
 import java.util.HashMap;
 import java.util.Locale;
 
@@ -42,9 +43,9 @@
     private final static Object sLock = new Object();
 
     @GuardedBy("sLock")
-    static HashMap<Locale, Hyphenator> sMap = new HashMap<Locale, Hyphenator>();
+    final static HashMap<Locale, Hyphenator> sMap = new HashMap<Locale, Hyphenator>();
 
-    private long mNativePtr;
+    final private long mNativePtr;
 
     private Hyphenator(long nativePtr) {
         mNativePtr = nativePtr;
@@ -90,17 +91,13 @@
         String patternFilename = "hyph-"+languageTag.toLowerCase(Locale.US)+".pat.txt";
         File patternFile = new File(getSystemHyphenatorLocation(), patternFilename);
         try {
-            RandomAccessFile rf = new RandomAccessFile(patternFile, "r");
-            byte[] buf = new byte[(int)rf.length()];
-            rf.read(buf);
-            rf.close();
-            String patternData = new String(buf);
+            String patternData = IoUtils.readFileAsString(patternFile.getAbsolutePath());
             long nativePtr = StaticLayout.nLoadHyphenator(patternData);
             return new Hyphenator(nativePtr);
         } catch (IOException e) {
             Log.e(TAG, "error loading hyphenation " + patternFile, e);
+            return null;
         }
-        return null;
     }
 
     private static File getSystemHyphenatorLocation() {
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index f7027f9..fa347b9 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -206,7 +206,6 @@
 
         mText = text;
         mPaint = paint;
-        mWorkPaint = new TextPaint();
         mWidth = width;
         mAlignment = align;
         mSpacingMult = spacingMult;
@@ -385,21 +384,22 @@
             int x;
             if (align == Alignment.ALIGN_NORMAL) {
                 if (dir == DIR_LEFT_TO_RIGHT) {
-                    x = left;
+                    x = left + getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
                 } else {
-                    x = right;
+                    x = right + getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
                 }
             } else {
                 int max = (int)getLineExtent(lineNum, tabStops, false);
                 if (align == Alignment.ALIGN_OPPOSITE) {
                     if (dir == DIR_LEFT_TO_RIGHT) {
-                        x = right - max;
+                        x = right - max + getIndentAdjust(lineNum, Alignment.ALIGN_RIGHT);
                     } else {
-                        x = left - max;
+                        x = left - max + getIndentAdjust(lineNum, Alignment.ALIGN_LEFT);
                     }
                 } else { // Alignment.ALIGN_CENTER
                     max = max & ~1;
-                    x = (right + left - max) >> 1;
+                    x = ((right + left - max) >> 1) +
+                            getIndentAdjust(lineNum, Alignment.ALIGN_CENTER);
                 }
             }
 
@@ -545,9 +545,9 @@
         int x;
         if (align == Alignment.ALIGN_NORMAL) {
             if (dir == DIR_LEFT_TO_RIGHT) {
-                x = left;
+                x = left + getIndentAdjust(line, Alignment.ALIGN_LEFT);
             } else {
-                x = right;
+                x = right + getIndentAdjust(line, Alignment.ALIGN_RIGHT);
             }
         } else {
             TabStops tabStops = null;
@@ -565,14 +565,14 @@
             int max = (int)getLineExtent(line, tabStops, false);
             if (align == Alignment.ALIGN_OPPOSITE) {
                 if (dir == DIR_LEFT_TO_RIGHT) {
-                    x = right - max;
+                    x = right - max + getIndentAdjust(line, Alignment.ALIGN_RIGHT);
                 } else {
                     // max is negative here
-                    x = left - max;
+                    x = left - max + getIndentAdjust(line, Alignment.ALIGN_LEFT);
                 }
             } else { // Alignment.ALIGN_CENTER
                 max = max & ~1;
-                x = (left + right - max) >> 1;
+                x = (left + right - max) >> 1 + getIndentAdjust(line, Alignment.ALIGN_CENTER);
             }
         }
         return x;
@@ -745,6 +745,14 @@
         return 0;
     }
 
+    /**
+     * Returns the left indent for a line.
+     *
+     * @hide
+     */
+    public int getIndentAdjust(int line, Alignment alignment) {
+        return 0;
+    }
 
     /**
      * Returns true if the character at offset and the preceding character
@@ -1984,7 +1992,6 @@
 
     private CharSequence mText;
     private TextPaint mPaint;
-    /* package */ TextPaint mWorkPaint;
     private int mWidth;
     private Alignment mAlignment = Alignment.ALIGN_NORMAL;
     private float mSpacingMult;
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index b6fa4e4c..cdff395 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -103,6 +103,8 @@
             b.mText = null;
             MeasuredText.recycle(b.mMeasuredText);
             b.mMeasuredText = null;
+            b.mLeftIndents = null;
+            b.mRightIndents = null;
             nFinishBuilder(b.mNativePtr);
             sPool.release(b);
         }
@@ -296,9 +298,10 @@
          * @param leftIndents array of indent values for left margin, in pixels
          * @param rightIndents array of indent values for right margin, in pixels
          * @return this builder, useful for chaining
-         * @see android.widget.TextView#setIndents
          */
         public Builder setIndents(int[] leftIndents, int[] rightIndents) {
+            mLeftIndents = leftIndents;
+            mRightIndents = rightIndents;
             int leftLen = leftIndents == null ? 0 : leftIndents.length;
             int rightLen = rightIndents == null ? 0 : rightIndents.length;
             int[] indents = new int[Math.max(leftLen, rightLen)];
@@ -393,6 +396,8 @@
         int mMaxLines;
         int mBreakStrategy;
         int mHyphenationFrequency;
+        int[] mLeftIndents;
+        int[] mRightIndents;
 
         Paint.FontMetricsInt mFontMetricsInt = new Paint.FontMetricsInt();
 
@@ -544,6 +549,9 @@
         mLines = new int[mLineDirections.length];
         mMaximumVisibleLineCount = b.mMaxLines;
 
+        mLeftIndents = b.mLeftIndents;
+        mRightIndents = b.mRightIndents;
+
         generate(b, b.mIncludePad, b.mIncludePad);
     }
 
@@ -661,6 +669,23 @@
             nSetupParagraph(b.mNativePtr, chs, paraEnd - paraStart,
                     firstWidth, firstWidthLineCount, restWidth,
                     variableTabStops, TAB_INCREMENT, b.mBreakStrategy, b.mHyphenationFrequency);
+            if (mLeftIndents != null || mRightIndents != null) {
+                // TODO(raph) performance: it would be better to do this once per layout rather
+                // than once per paragraph, but that would require a change to the native
+                // interface.
+                int leftLen = mLeftIndents == null ? 0 : mLeftIndents.length;
+                int rightLen = mRightIndents == null ? 0 : mRightIndents.length;
+                int indentsLen = Math.max(1, Math.min(leftLen, rightLen) - mLineCount);
+                int[] indents = new int[indentsLen];
+                for (int i = 0; i < indentsLen; i++) {
+                    int leftMargin = mLeftIndents == null ? 0 :
+                            mLeftIndents[Math.min(i + mLineCount, leftLen - 1)];
+                    int rightMargin = mRightIndents == null ? 0 :
+                            mRightIndents[Math.min(i + mLineCount, rightLen - 1)];
+                    indents[i] = leftMargin + rightMargin;
+                }
+                nSetIndents(b.mNativePtr, indents);
+            }
 
             // measurement has to be done before performing line breaking
             // but we don't want to recompute fontmetrics or span ranges the
@@ -1154,6 +1179,38 @@
         return mLines[mColumns * line + HYPHEN] & 0xff;
     }
 
+    /**
+     * @hide
+     */
+    @Override
+    public int getIndentAdjust(int line, Alignment align) {
+        if (align == Alignment.ALIGN_LEFT) {
+            if (mLeftIndents == null) {
+                return 0;
+            } else {
+                return mLeftIndents[Math.min(line, mLeftIndents.length - 1)];
+            }
+        } else if (align == Alignment.ALIGN_RIGHT) {
+            if (mRightIndents == null) {
+                return 0;
+            } else {
+                return -mRightIndents[Math.min(line, mRightIndents.length - 1)];
+            }
+        } else if (align == Alignment.ALIGN_CENTER) {
+            int left = 0;
+            if (mLeftIndents != null) {
+                left = mLeftIndents[Math.min(line, mLeftIndents.length - 1)];
+            }
+            int right = 0;
+            if (mRightIndents != null) {
+                right = mRightIndents[Math.min(line, mRightIndents.length - 1)];
+            }
+            return (left - right) >> 1;
+        } else {
+            throw new AssertionError("unhandled alignment " + align);
+        }
+    }
+
     @Override
     public int getEllipsisCount(int line) {
         if (mColumns < COLUMNS_ELLIPSIZE) {
@@ -1250,4 +1307,6 @@
         // breaks, widths, and flags should all have the same length
     }
 
+    private int[] mLeftIndents;
+    private int[] mRightIndents;
 }
diff --git a/core/java/android/transition/Visibility.java b/core/java/android/transition/Visibility.java
index 585fc4e..e711812 100644
--- a/core/java/android/transition/Visibility.java
+++ b/core/java/android/transition/Visibility.java
@@ -21,14 +21,11 @@
 import android.animation.Animator;
 import android.animation.Animator.AnimatorListener;
 import android.animation.Animator.AnimatorPauseListener;
-import android.animation.AnimatorListenerAdapter;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
 
 /**
  * This transition tracks changes to the visibility of target views in the
@@ -452,6 +449,7 @@
                 DisappearListener disappearListener = new DisappearListener(viewToKeep,
                         finalVisibility, isForcedVisibility);
                 animator.addListener(disappearListener);
+                animator.addPauseListener(disappearListener);
                 addListener(disappearListener);
             } else if (!isForcedVisibility) {
                 viewToKeep.setTransitionVisibility(originalVisibility);
@@ -506,7 +504,8 @@
         private final int mFinalVisibility;
         private final ViewGroup mParent;
 
-        private boolean mEnded;
+        private boolean mLayoutSuppressed;
+        private boolean mFinalVisibilitySet = false;
         boolean mCanceled = false;
 
         public DisappearListener(View view, int finalVisibility, boolean isForcedVisibility) {
@@ -514,10 +513,8 @@
             this.mIsForcedVisibility = isForcedVisibility;
             this.mFinalVisibility = finalVisibility;
             this.mParent = (ViewGroup) view.getParent();
-            if (!isForcedVisibility && mParent != null) {
-                // Prevent a layout from including mView in its calculation.
-                mParent.suppressLayout(true);
-            }
+            // Prevent a layout from including mView in its calculation.
+            suppressLayout(true);
         }
 
         @Override
@@ -541,12 +538,10 @@
 
         @Override
         public void onAnimationRepeat(Animator animation) {
-
         }
 
         @Override
         public void onAnimationStart(Animator animation) {
-
         }
 
         @Override
@@ -561,37 +556,35 @@
 
         @Override
         public void onTransitionPause(Transition transition) {
-            if (mParent != null && !mIsForcedVisibility) {
-                mParent.suppressLayout(false);
-            }
+            suppressLayout(false);
         }
 
         @Override
         public void onTransitionResume(Transition transition) {
-            if (mParent != null && !mIsForcedVisibility) {
-                mParent.suppressLayout(true);
-            }
+            suppressLayout(true);
         }
 
         private void hideViewWhenNotCanceled() {
-            if (!mEnded) {
-                if (!mCanceled) {
-                    if (mIsForcedVisibility) {
-                        mView.setTransitionAlpha(0);
-                    } else {
-                        // Recreate the parent's display list in case it includes mView.
-                        mView.setTransitionVisibility(mFinalVisibility);
-                        if (mParent != null) {
-                            mParent.invalidate();
-                        }
+            if (!mCanceled) {
+                if (mIsForcedVisibility) {
+                    mView.setTransitionAlpha(0);
+                } else if (!mFinalVisibilitySet) {
+                    // Recreate the parent's display list in case it includes mView.
+                    mView.setTransitionVisibility(mFinalVisibility);
+                    if (mParent != null) {
+                        mParent.invalidate();
                     }
+                    mFinalVisibilitySet = true;
                 }
-                if (!mIsForcedVisibility && mParent != null) {
-                    // Layout is allowed now that the View is in its final state
-                    mParent.suppressLayout(false);
-                }
-                // Do this only once
-                mEnded = true;
+            }
+            // Layout is allowed now that the View is in its final state
+            suppressLayout(false);
+        }
+
+        private void suppressLayout(boolean suppress) {
+            if (mLayoutSuppressed != suppress && mParent != null && !mIsForcedVisibility) {
+                mLayoutSuppressed = suppress;
+                mParent.suppressLayout(suppress);
             }
         }
     }
diff --git a/core/java/android/util/TimeUtils.java b/core/java/android/util/TimeUtils.java
index 353388d..c1eb80d 100644
--- a/core/java/android/util/TimeUtils.java
+++ b/core/java/android/util/TimeUtils.java
@@ -28,6 +28,7 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
@@ -54,6 +55,8 @@
     private static ArrayList<TimeZone> sLastUniqueZoneOffsets = null;
     private static String sLastUniqueCountry = null;
 
+    /** {@hide} */
+    private static SimpleDateFormat sLoggingFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     /**
      * Tries to return a time zone that would have had the specified offset
@@ -441,4 +444,13 @@
             return Long.toString(millis);
         }
     }
+
+    /** {@hide} */
+    public static String formatForLogging(long millis) {
+        if (millis <= 0) {
+            return "unknown";
+        } else {
+            return sLoggingFormat.format(new Date(millis));
+        }
+    }
 }
diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl
index 9cf3759..acad496 100644
--- a/core/java/android/view/IWindow.aidl
+++ b/core/java/android/view/IWindow.aidl
@@ -83,7 +83,8 @@
      * The window is beginning to animate. The application should stop drawing frames until the
      * window is not animating anymore, indicated by being called {@link #windowEndAnimating}.
      *
-     * @param remainingFrameCount how many frames the app might still draw before stopping drawing
+     * @param remainingFrameCount how many frames the app might still draw before stopping drawing;
+     *                            pass -1 to let it continue drawing
      */
     void onAnimationStarted(int remainingFrameCount);
 
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index 19253dd..73b4a6e 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -40,7 +40,7 @@
             out InputChannel outInputChannel);
     int addToDisplay(IWindow window, int seq, in WindowManager.LayoutParams attrs,
             in int viewVisibility, in int layerStackId, out Rect outContentInsets,
-            out Rect outStableInsets, out InputChannel outInputChannel);
+            out Rect outStableInsets, out Rect outOutsets, out InputChannel outInputChannel);
     int addWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs,
             in int viewVisibility, out Rect outContentInsets, out Rect outStableInsets);
     int addToDisplayWithoutInputChannel(IWindow window, int seq, in WindowManager.LayoutParams attrs,
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index e044f1e..f6119e2 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -434,7 +434,6 @@
 
     private static class ProcessInitializer {
         static ProcessInitializer sInstance = new ProcessInitializer();
-        static IGraphicsStats sGraphicsStatsService;
         private static IBinder sProcToken;
 
         private boolean mInitialized = false;
@@ -449,19 +448,19 @@
         }
 
         private static void initGraphicsStats(Context context, long renderProxy) {
-            IBinder binder = ServiceManager.getService("graphicsstats");
-            if (binder == null) return;
-
-            sGraphicsStatsService = IGraphicsStats.Stub.asInterface(binder);
-            sProcToken = new Binder();
             try {
+                IBinder binder = ServiceManager.getService("graphicsstats");
+                if (binder == null) return;
+                IGraphicsStats graphicsStatsService = IGraphicsStats.Stub
+                        .asInterface(binder);
+                sProcToken = new Binder();
                 final String pkg = context.getApplicationInfo().packageName;
-                ParcelFileDescriptor pfd = sGraphicsStatsService.
+                ParcelFileDescriptor pfd = graphicsStatsService.
                         requestBufferForProcess(pkg, sProcToken);
                 nSetProcessStatsBuffer(renderProxy, pfd.getFd());
                 pfd.close();
-            } catch (Exception e) {
-                Log.w(LOG_TAG, "Could not acquire gfx stats buffer", e);
+            } catch (Throwable t) {
+                Log.w(LOG_TAG, "Could not acquire gfx stats buffer", t);
             }
         }
 
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 63dd492..de61c31 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -15366,7 +15366,8 @@
                 ViewConfiguration.get(mContext).getScaledMaximumDrawingCacheSize();
         if (width <= 0 || height <= 0 || projectedBitmapSize > drawingCacheSize) {
             if (width > 0 && height > 0) {
-                Log.w(VIEW_LOG_TAG, "View too large to fit into drawing cache, needs "
+                Log.w(VIEW_LOG_TAG, getClass().getSimpleName() + " not displayed because it is"
+                        + " too large to fit into a software layer (or drawing cache), needs "
                         + projectedBitmapSize + " bytes, only "
                         + drawingCacheSize + " available");
             }
diff --git a/core/java/android/view/ViewAnimationUtils.java b/core/java/android/view/ViewAnimationUtils.java
index d44df31..4c75935 100644
--- a/core/java/android/view/ViewAnimationUtils.java
+++ b/core/java/android/view/ViewAnimationUtils.java
@@ -43,8 +43,10 @@
      * on thread responsiveness.
      *
      * @param view The View will be clipped to the animating circle.
-     * @param centerX The x coordinate of the center of the animating circle.
-     * @param centerY The y coordinate of the center of the animating circle.
+     * @param centerX The x coordinate of the center of the animating circle, relative to
+     *                <code>view</code>.
+     * @param centerY The y coordinate of the center of the animating circle, relative to
+     *                <code>view</code>.
      * @param startRadius The starting radius of the animating circle.
      * @param endRadius The ending radius of the animating circle.
      */
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 8b57d96..9b1db57 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -531,7 +531,8 @@
                     collectViewAttributes();
                     res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes,
                             getHostVisibility(), mDisplay.getDisplayId(),
-                            mAttachInfo.mContentInsets, mAttachInfo.mStableInsets, mInputChannel);
+                            mAttachInfo.mContentInsets, mAttachInfo.mStableInsets,
+                            mAttachInfo.mOutsets, mInputChannel);
                 } catch (RemoteException e) {
                     mAdded = false;
                     mView = null;
@@ -1590,6 +1591,7 @@
                         + " content=" + mPendingContentInsets.toShortString()
                         + " visible=" + mPendingVisibleInsets.toShortString()
                         + " visible=" + mPendingStableInsets.toShortString()
+                        + " outsets=" + mPendingOutsets.toShortString()
                         + " surface=" + mSurface);
 
                 if (mPendingConfiguration.seq != 0) {
@@ -2365,8 +2367,7 @@
      * @hide
      */
     void outputDisplayList(View view) {
-        RenderNode renderNode = view.updateDisplayListIfDirty();
-        renderNode.output();
+        view.mRenderNode.output();
     }
 
     /**
@@ -5325,7 +5326,7 @@
     }
 
     public void handleDispatchWindowAnimationStarted(int remainingFrameCount) {
-        if (!mDrawDuringWindowsAnimating) {
+        if (!mDrawDuringWindowsAnimating && remainingFrameCount != -1) {
             mRemainingFrameCount = remainingFrameCount;
             mWindowsAnimating = true;
         }
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/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index dd6d3ca..be564f8 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -342,6 +342,14 @@
         boolean isGoneForLayoutLw();
 
         /**
+         * Returns true if the window has a surface that it has drawn a
+         * complete UI in to. Note that this is different from {@link #hasDrawnLw()}
+         * in that it also returns true if the window is READY_TO_SHOW, but was not yet
+         * promoted to HAS_DRAWN.
+         */
+        boolean isDrawnLw();
+
+        /**
          * Returns true if this window has been shown on screen at some time in 
          * the past.  Must be called with the window manager lock held.
          */
@@ -879,13 +887,15 @@
      * be correct.
      *
      * @param attrs The LayoutParams of the window.
+     * @param rotation Rotation of the display.
      * @param outContentInsets The areas covered by system windows, expressed as positive insets.
      * @param outStableInsets The areas covered by stable system windows irrespective of their
      *                        current visibility. Expressed as positive insets.
+     * @param outOutsets The areas that are not real display, but we would like to treat as such.
      *
      */
-    public void getInsetHintLw(WindowManager.LayoutParams attrs, Rect outContentInsets,
-            Rect outStableInsets);
+    public void getInsetHintLw(WindowManager.LayoutParams attrs, int rotation,
+            Rect outContentInsets, Rect outStableInsets, Rect outOutsets);
 
     /**
      * Called when layout of the windows is finished.  After this function has
diff --git a/core/java/android/view/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/PermissionRequest.java b/core/java/android/webkit/PermissionRequest.java
index 6ad639c..18ec334 100644
--- a/core/java/android/webkit/PermissionRequest.java
+++ b/core/java/android/webkit/PermissionRequest.java
@@ -26,6 +26,16 @@
  *
  * Either {@link #grant(String[]) grant()} or {@link #deny()} must be called in UI
  * thread to respond to the request.
+ *
+ * New protected resources whose names are not defined here may be requested in
+ * future versions of WebView, even when running on an older Android release. To
+ * avoid unintentionally granting requests for new permissions, you should pass the
+ * specific permissions you intend to grant to {@link #grant(String[]) grant()},
+ * and avoid writing code like this example:
+ * <pre>
+ * permissionRequest.grant(permissionRequest.getResources())  // This is wrong!!!
+ * </pre>
+ * See the WebView's release notes for information about new protected resources.
  */
 public abstract class PermissionRequest {
     /**
@@ -43,6 +53,15 @@
      */
     public final static String RESOURCE_PROTECTED_MEDIA_ID =
             "android.webkit.resource.PROTECTED_MEDIA_ID";
+    /**
+     * Resource will allow sysex messages to be sent to or received from MIDI devices. These
+     * messages are privileged operations, e.g. modifying sound libraries and sampling data, or
+     * even updating the MIDI device's firmware.
+     *
+     * Permission may be requested for this resource in API levels 21 and above, if the Android
+     * device has been updated to WebView 45 or above.
+     */
+    public final static String RESOURCE_MIDI_SYSEX = "android.webkit.resource.MIDI_SYSEX";
 
     /**
      * Call this method to get the origin of the web page which is trying to access
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/AbsListView.java b/core/java/android/widget/AbsListView.java
index 8bf6992..b2b98db 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -6605,8 +6605,8 @@
         void addScrapView(View scrap, int position) {
             final AbsListView.LayoutParams lp = (AbsListView.LayoutParams) scrap.getLayoutParams();
             if (lp == null) {
-                // Can't recycle, skip the scrap heap.
-                getSkippedScrap().add(scrap);
+                // Can't recycle, but we don't know anything about the view.
+                // Ignore it completely.
                 return;
             }
 
@@ -6616,8 +6616,12 @@
             // should otherwise not be recycled.
             final int viewType = lp.viewType;
             if (!shouldRecycleViewType(viewType)) {
-                // Can't recycle, skip the scrap heap.
-                getSkippedScrap().add(scrap);
+                // Can't recycle. If it's not a header or footer, which have
+                // special handling and should be ignored, then skip the scrap
+                // heap and we'll fully detach the view later.
+                if (viewType != ITEM_VIEW_TYPE_HEADER_OR_FOOTER) {
+                    getSkippedScrap().add(scrap);
+                }
                 return;
             }
 
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index bb4a948..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);
@@ -553,7 +547,8 @@
             int existingReqFlags) {
         final int base = pInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
         final boolean isNormal = (base == PermissionInfo.PROTECTION_NORMAL);
-        final boolean isDangerous = (base == PermissionInfo.PROTECTION_DANGEROUS);
+        final boolean isDangerous = (base == PermissionInfo.PROTECTION_DANGEROUS)
+                || ((pInfo.protectionLevel&PermissionInfo.PROTECTION_FLAG_PRE23) != 0);
         final boolean isRequired =
                 ((newReqFlags&PackageInfo.REQUESTED_PERMISSION_REQUIRED) != 0);
         final boolean isDevelopment =
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 84e7db4..96e033a 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -38,7 +38,6 @@
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.drawable.Drawable;
-import android.inputmethodservice.ExtractEditText;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Parcel;
@@ -70,6 +69,7 @@
 import android.text.style.URLSpan;
 import android.util.DisplayMetrics;
 import android.util.Log;
+import android.util.SparseArray;
 import android.view.ActionMode;
 import android.view.ActionMode.Callback;
 import android.view.DisplayListCanvas;
@@ -89,6 +89,7 @@
 import android.view.ViewParent;
 import android.view.ViewTreeObserver;
 import android.view.WindowManager;
+import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.inputmethod.CorrectionInfo;
 import android.view.inputmethod.CursorAnchorInfo;
 import android.view.inputmethod.EditorInfo;
@@ -102,6 +103,7 @@
 
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.GrowingArrayUtils;
+import com.android.internal.util.Preconditions;
 import com.android.internal.widget.EditableInputConnection;
 
 import java.text.BreakIterator;
@@ -110,6 +112,7 @@
 import java.util.HashMap;
 import java.util.List;
 
+
 /**
  * Helper class used by TextView to handle editable text views.
  *
@@ -244,6 +247,8 @@
 
     private TextView mTextView;
 
+    final ProcessTextIntentActionsHandler mProcessTextIntentActionsHandler;
+
     final CursorAnchorInfoNotifier mCursorAnchorInfoNotifier = new CursorAnchorInfoNotifier();
 
     private final Runnable mShowFloatingToolbar = new Runnable() {
@@ -261,6 +266,7 @@
         mTextView = textView;
         // Synchronize the filter list, which places the undo input filter at the end.
         mTextView.setFilters(mTextView.getFilters());
+        mProcessTextIntentActionsHandler = new ProcessTextIntentActionsHandler(this);
     }
 
     ParcelableParcel saveInstanceState() {
@@ -1115,7 +1121,6 @@
                 if (mTemporaryDetach) mPreserveDetachedSelection = false;
                 downgradeEasyCorrectionSpans();
             }
-
             // No need to create the controller
             if (mSelectionModifierCursorController != null) {
                 mSelectionModifierCursorController.resetTouchOffsets();
@@ -1186,7 +1191,7 @@
             final InputMethodManager imm = InputMethodManager.peekInstance();
             final boolean immFullScreen = (imm != null && imm.isFullscreenMode());
             if (mSelectionModifierCursorController != null && mTextView.hasSelection()
-                    && !immFullScreen) {
+                    && !immFullScreen && mTextActionMode != null) {
                 mSelectionModifierCursorController.show();
             }
         } else {
@@ -1678,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);
@@ -1694,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,
@@ -1703,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.
      */
@@ -1787,7 +1779,7 @@
      *
      * @return true if there already was a selection or if the current word was selected.
      */
-    private boolean checkFieldAndSelectCurrentWord() {
+    boolean checkFieldAndSelectCurrentWord() {
         if (!mTextView.canSelectText() || !mTextView.requestFocus()) {
             Log.w(TextView.LOG_TAG,
                     "TextView does not support text selection. Selection cancelled.");
@@ -1834,7 +1826,7 @@
         return selectionStarted;
     }
 
-    private boolean extractedTextModeWillBeStarted() {
+    boolean extractedTextModeWillBeStarted() {
         if (!(mTextView.isInExtractedMode())) {
             final InputMethodManager imm = InputMethodManager.peekInstance();
             return  imm != null && imm.isFullscreenMode();
@@ -3157,7 +3149,9 @@
                 }
             }
 
-            addIntentMenuItemsForTextProcessing(menu);
+            if (mTextView.canProcessText()) {
+                mProcessTextIntentActionsHandler.onInitializeMenu(menu);
+            }
 
             if (menu.hasVisibleItems() || mode.getCustomView() != null) {
                 mTextView.setHasTransientState(true);
@@ -3205,34 +3199,6 @@
             updateReplaceItem(menu);
         }
 
-        private void addIntentMenuItemsForTextProcessing(Menu menu) {
-            if (mTextView.canProcessText()) {
-                PackageManager packageManager = mTextView.getContext().getPackageManager();
-                List<ResolveInfo> supportedActivities =
-                        packageManager.queryIntentActivities(createProcessTextIntent(), 0);
-                for (int i = 0; i < supportedActivities.size(); ++i) {
-                    ResolveInfo info = supportedActivities.get(i);
-                    menu.add(Menu.NONE, Menu.NONE,
-                            MENU_ITEM_ORDER_PROCESS_TEXT_INTENT_ACTIONS_START + i,
-                            info.loadLabel(packageManager))
-                        .setIntent(createProcessTextIntentForResolveInfo(info))
-                        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-                }
-            }
-        }
-
-        private Intent createProcessTextIntent() {
-            return new Intent()
-                .setAction(Intent.ACTION_PROCESS_TEXT)
-                .setType("text/plain");
-        }
-
-        private Intent createProcessTextIntentForResolveInfo(ResolveInfo info) {
-            return createProcessTextIntent()
-                    .putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, !mTextView.isTextEditable())
-                    .setClassName(info.activityInfo.packageName, info.activityInfo.name);
-        }
-
         @Override
         public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
             updateSelectAllItem(menu);
@@ -3271,12 +3237,7 @@
 
         @Override
         public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
-            if (item.getIntent() != null
-                    && item.getIntent().getAction().equals(Intent.ACTION_PROCESS_TEXT)) {
-                item.getIntent().putExtra(Intent.EXTRA_PROCESS_TEXT, mTextView.getSelectedText());
-                mPreserveDetachedSelection = true;
-                mTextView.startActivityForResult(
-                        item.getIntent(), TextView.PROCESS_TEXT_REQUEST_CODE);
+            if (mProcessTextIntentActionsHandler.performMenuItemAction(item)) {
                 return true;
             }
             Callback customCallback = getCustomCallback();
@@ -3337,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();
@@ -3710,6 +3672,7 @@
                 prepareCursorControllers();
                 return;
             }
+            layout = getActiveLayout();
 
             boolean offsetChanged = offset != mPreviousOffset;
             if (offsetChanged || parentScrolled) {
@@ -3889,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
@@ -5466,4 +5442,119 @@
             }
         };
     }
+
+    /**
+     * A helper for enabling and handling "PROCESS_TEXT" menu actions.
+     * These allow external applications to plug into currently selected text.
+     */
+    static final class ProcessTextIntentActionsHandler {
+
+        private final Editor mEditor;
+        private final TextView mTextView;
+        private final PackageManager mPackageManager;
+        private final SparseArray<Intent> mAccessibilityIntents = new SparseArray<Intent>();
+        private final SparseArray<AccessibilityNodeInfo.AccessibilityAction> mAccessibilityActions
+                = new SparseArray<AccessibilityNodeInfo.AccessibilityAction>();
+
+        private ProcessTextIntentActionsHandler(Editor editor) {
+            mEditor = Preconditions.checkNotNull(editor);
+            mTextView = Preconditions.checkNotNull(mEditor.mTextView);
+            mPackageManager = Preconditions.checkNotNull(
+                    mTextView.getContext().getPackageManager());
+        }
+
+        /**
+         * Adds "PROCESS_TEXT" menu items to the specified menu.
+         */
+        public void onInitializeMenu(Menu menu) {
+            int i = 0;
+            for (ResolveInfo resolveInfo : getSupportedActivities()) {
+                menu.add(Menu.NONE, Menu.NONE,
+                        Editor.MENU_ITEM_ORDER_PROCESS_TEXT_INTENT_ACTIONS_START + i++,
+                        getLabel(resolveInfo))
+                        .setIntent(createProcessTextIntentForResolveInfo(resolveInfo))
+                        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+            }
+        }
+
+        /**
+         * Performs a "PROCESS_TEXT" action if there is one associated with the specified
+         * menu item.
+         *
+         * @return True if the action was performed, false otherwise.
+         */
+        public boolean performMenuItemAction(MenuItem item) {
+            return fireIntent(item.getIntent());
+        }
+
+        /**
+         * Initializes and caches "PROCESS_TEXT" accessibility actions.
+         */
+        public void initializeAccessibilityActions() {
+            mAccessibilityIntents.clear();
+            mAccessibilityActions.clear();
+            int i = 0;
+            for (ResolveInfo resolveInfo : getSupportedActivities()) {
+                int actionId = TextView.ACCESSIBILITY_ACTION_PROCESS_TEXT_START_ID + i++;
+                mAccessibilityActions.put(
+                        actionId,
+                        new AccessibilityNodeInfo.AccessibilityAction(
+                                actionId, getLabel(resolveInfo)));
+                mAccessibilityIntents.put(
+                        actionId, createProcessTextIntentForResolveInfo(resolveInfo));
+            }
+        }
+
+        /**
+         * Adds "PROCESS_TEXT" accessibility actions to the specified accessibility node info.
+         * NOTE: This needs a prior call to {@link #initializeAccessibilityActions()} to make the
+         * latest accessibility actions available for this call.
+         */
+        public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo nodeInfo) {
+            for (int i = 0; i < mAccessibilityActions.size(); i++) {
+                nodeInfo.addAction(mAccessibilityActions.valueAt(i));
+            }
+        }
+
+        /**
+         * Performs a "PROCESS_TEXT" action if there is one associated with the specified
+         * accessibility action id.
+         *
+         * @return True if the action was performed, false otherwise.
+         */
+        public boolean performAccessibilityAction(int actionId) {
+            return fireIntent(mAccessibilityIntents.get(actionId));
+        }
+
+        private boolean fireIntent(Intent intent) {
+            if (intent != null && Intent.ACTION_PROCESS_TEXT.equals(intent.getAction())) {
+                intent.putExtra(Intent.EXTRA_PROCESS_TEXT, mTextView.getSelectedText());
+                mEditor.mPreserveDetachedSelection = true;
+                mTextView.startActivityForResult(intent, TextView.PROCESS_TEXT_REQUEST_CODE);
+                return true;
+            }
+            return false;
+        }
+
+        private List<ResolveInfo> getSupportedActivities() {
+            PackageManager packageManager = mTextView.getContext().getPackageManager();
+            return packageManager.queryIntentActivities(createProcessTextIntent(), 0);
+        }
+
+        private Intent createProcessTextIntentForResolveInfo(ResolveInfo info) {
+            return createProcessTextIntent()
+                    .putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, !mTextView.isTextEditable())
+                    .setClassName(info.activityInfo.packageName, info.activityInfo.name);
+        }
+
+        private Intent createProcessTextIntent() {
+            return new Intent()
+                    .setAction(Intent.ACTION_PROCESS_TEXT)
+                    .setType("text/plain");
+        }
+
+        private CharSequence getLabel(ResolveInfo resolveInfo) {
+            return resolveInfo.loadLabel(mPackageManager);
+        }
+    }
 }
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index a1582f2..a1e6cc8 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -570,6 +570,17 @@
         }
     }
 
+    private static class ImageViewBitmapDrawable extends BitmapDrawable {
+        public ImageViewBitmapDrawable(Resources res, Bitmap bitmap) {
+            super(res, bitmap);
+        }
+
+        @Override
+        public void setBitmap(Bitmap bitmap) {
+            super.setBitmap(bitmap);
+        }
+    };
+
     /**
      * Sets a Bitmap as the content of this ImageView.
      * 
@@ -579,7 +590,16 @@
     public void setImageBitmap(Bitmap bm) {
         // if this is used frequently, may handle bitmaps explicitly
         // to reduce the intermediate drawable object
-        setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
+        if (mDrawable instanceof ImageViewBitmapDrawable) {
+            ImageViewBitmapDrawable recycledDrawable = (ImageViewBitmapDrawable) mDrawable;
+            // Hacky fix to force setImageDrawable to do a full setImageDrawable
+            // instead of doing an object reference comparison
+            mDrawable = null;
+            recycledDrawable.setBitmap(bm);
+            setImageDrawable(recycledDrawable);
+        } else {
+            setImageDrawable(new ImageViewBitmapDrawable(mContext.getResources(), bm));
+        }
     }
 
     public void setImageState(int[] state, boolean merge) {
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 422511f..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;
@@ -295,14 +295,20 @@
     // Accessibility action to share selected text.
     private static final int ACCESSIBILITY_ACTION_SHARE = 0x10000000;
 
-    // System wide time for last cut, copy or text changed action.
-    static long sLastCutCopyOrTextChangedTime;
+    /**
+     * @hide
+     */
+    // Accessibility action start id for "process text" actions.
+    static final int ACCESSIBILITY_ACTION_PROCESS_TEXT_START_ID = 0x10000100;
 
     /**
      * @hide
      */
     static final int PROCESS_TEXT_REQUEST_CODE = 100;
 
+    // System wide time for last cut, copy or text changed action.
+    static long sLastCutCopyOrTextChangedTime;
+
     private ColorStateList mTextColor;
     private ColorStateList mHintTextColor;
     private ColorStateList mLinkTextColor;
@@ -5226,7 +5232,11 @@
         // - onFocusChanged cannot start it when focus is given to a view with selected text (after
         //   a screen rotation) since layout is not yet initialized at that point.
         if (mEditor != null && mEditor.mCreatedWithASelection) {
-            mEditor.startSelectionActionMode();
+            if (mEditor.extractedTextModeWillBeStarted()) {
+                mEditor.checkFieldAndSelectCurrentWord();
+            } else {
+                mEditor.startSelectionActionMode();
+            }
             mEditor.mCreatedWithASelection = false;
         }
 
@@ -5813,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);
@@ -5822,7 +5836,7 @@
             voffset -= getOpticalInsets().top;
         }
 
-        return getExtendedPaddingTop() + voffset + mLayout.getLineBaseline(0);
+        return getExtendedPaddingTop() + voffset;
     }
 
     /**
@@ -8757,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;
@@ -8855,6 +8941,9 @@
                         ACCESSIBILITY_ACTION_SHARE,
                         getResources().getString(com.android.internal.R.string.share)));
             }
+            if (canProcessText()) {  // also implies mEditor is not null.
+                mEditor.mProcessTextIntentActionsHandler.onInitializeAccessibilityNodeInfo(info);
+            }
         }
 
         // Check for known input filter types.
@@ -8879,6 +8968,10 @@
      */
     @Override
     public boolean performAccessibilityActionInternal(int action, Bundle arguments) {
+        if (mEditor != null
+                && mEditor.mProcessTextIntentActionsHandler.performAccessibilityAction(action)) {
+            return true;
+        }
         switch (action) {
             case AccessibilityNodeInfo.ACTION_CLICK: {
                 boolean handled = false;
@@ -8975,6 +9068,10 @@
     /** @hide */
     @Override
     public void sendAccessibilityEventInternal(int eventType) {
+        if (eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED && mEditor != null) {
+            mEditor.mProcessTextIntentActionsHandler.initializeAccessibilityActions();
+        }
+
         // Do not send scroll events since first they are not interesting for
         // accessibility and second such events a generated too frequently.
         // For details see the implementation of bringTextIntoView().
@@ -9179,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.
      */
@@ -9427,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/ExternalMediaFormatActivity.java b/core/java/com/android/internal/app/ExternalMediaFormatActivity.java
deleted file mode 100644
index fc213c5..0000000
--- a/core/java/com/android/internal/app/ExternalMediaFormatActivity.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.app;
-
-import com.android.internal.os.storage.ExternalStorageFormatter;
-
-import android.app.AlertDialog;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Bundle;
-import android.os.storage.StorageVolume;
-import android.util.Log;
-
-/**
- * This activity is shown to the user to confirm formatting of external media.
- * It uses the alert dialog style. It will be launched from a notification, or from settings
- */
-public class ExternalMediaFormatActivity extends AlertActivity implements DialogInterface.OnClickListener {
-
-    private static final int POSITIVE_BUTTON = AlertDialog.BUTTON_POSITIVE;
-
-    /** Used to detect when the media state changes, in case we need to call finish() */
-    private BroadcastReceiver mStorageReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            Log.d("ExternalMediaFormatActivity", "got action " + action);
-
-            if (action == Intent.ACTION_MEDIA_REMOVED ||
-                action == Intent.ACTION_MEDIA_CHECKING ||
-                action == Intent.ACTION_MEDIA_MOUNTED ||
-                action == Intent.ACTION_MEDIA_SHARED) {
-                finish();
-            }
-        }
-    };
-    
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        Log.d("ExternalMediaFormatActivity", "onCreate!");
-        // Set up the "dialog"
-        final AlertController.AlertParams p = mAlertParams;
-        p.mTitle = getString(com.android.internal.R.string.extmedia_format_title);
-        p.mMessage = getString(com.android.internal.R.string.extmedia_format_message);
-        p.mPositiveButtonText = getString(com.android.internal.R.string.extmedia_format_button_format);
-        p.mPositiveButtonListener = this;
-        p.mNegativeButtonText = getString(com.android.internal.R.string.cancel);
-        p.mNegativeButtonListener = this;
-        setupAlert();
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(Intent.ACTION_MEDIA_REMOVED);
-        filter.addAction(Intent.ACTION_MEDIA_CHECKING);
-        filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
-        filter.addAction(Intent.ACTION_MEDIA_SHARED);
-        registerReceiver(mStorageReceiver, filter);
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        
-        unregisterReceiver(mStorageReceiver);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void onClick(DialogInterface dialog, int which) {
-
-        if (which == POSITIVE_BUTTON) {
-            Intent intent = new Intent(ExternalStorageFormatter.FORMAT_ONLY);
-            intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
-            // Transfer the storage volume to the new intent
-            final StorageVolume storageVolume = getIntent().getParcelableExtra(
-                    StorageVolume.EXTRA_STORAGE_VOLUME);
-            intent.putExtra(StorageVolume.EXTRA_STORAGE_VOLUME, storageVolume);
-            startService(intent);
-        }
-
-        // No matter what, finish the activity
-        finish();
-    }
-}
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index 86c1b2f..73c4833 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -31,6 +31,8 @@
     void stopWatchingMode(IAppOpsCallback callback);
     IBinder getToken(IBinder clientToken);
     int permissionToOpCode(String permission);
+    int noteProxyOperation(int code, String proxyPackageName,
+                int callingUid, String callingPackageName);
 
     // Remaining methods are only used in Java.
     int checkPackage(int uid, String packageName);
diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
index a2bd700..7f54f50 100644
--- a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
+++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
@@ -35,6 +35,7 @@
     boolean hideSessionFromSession(IBinder token);
     int startVoiceActivity(IBinder token, in Intent intent, String resolvedType);
     void setKeepAwake(IBinder token, boolean keepAwake);
+    void closeSystemDialogs(IBinder token);
     void finish(IBinder token);
 
     /**
@@ -92,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/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java
index f598828..233bee3 100644
--- a/core/java/com/android/internal/app/IntentForwarderActivity.java
+++ b/core/java/com/android/internal/app/IntentForwarderActivity.java
@@ -87,9 +87,9 @@
         if (canForward(newIntent, targetUserId)) {
             if (newIntent.getAction().equals(Intent.ACTION_CHOOSER)) {
                 Intent innerIntent = (Intent) newIntent.getParcelableExtra(Intent.EXTRA_INTENT);
-                innerIntent.setContentUserHint(callingUserId);
+                innerIntent.prepareToLeaveUser(callingUserId);
             } else {
-                newIntent.setContentUserHint(callingUserId);
+                newIntent.prepareToLeaveUser(callingUserId);
             }
 
             final android.content.pm.ResolveInfo ri = getPackageManager().resolveActivityAsUser(
diff --git a/core/java/com/android/internal/app/MediaRouteControllerDialog.java b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
index 4a468be..b0e0373 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerDialog.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
@@ -18,7 +18,7 @@
 
 import com.android.internal.R;
 
-import android.app.AlertDialog;
+import android.app.Dialog;
 import android.app.MediaRouteActionProvider;
 import android.app.MediaRouteButton;
 import android.content.Context;
@@ -46,7 +46,7 @@
  *
  * TODO: Move this back into the API, as in the support library media router.
  */
-public class MediaRouteControllerDialog extends AlertDialog {
+public class MediaRouteControllerDialog extends Dialog {
     // Time to wait before updating the volume when the user lets go of the seek bar
     // to allow the route provider time to propagate the change and publish a new
     // route descriptor.
@@ -134,6 +134,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        getWindow().requestFeature(Window.FEATURE_LEFT_ICON);
+
         setContentView(R.layout.media_route_controller_dialog);
 
         mVolumeLayout = (LinearLayout)findViewById(R.id.media_route_volume_layout);
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/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java
index 263e522..66fa8fc 100644
--- a/core/java/com/android/internal/logging/MetricsLogger.java
+++ b/core/java/com/android/internal/logging/MetricsLogger.java
@@ -43,7 +43,7 @@
     public static final int SYSTEM_ALERT_WINDOW_APPS = 221;
     public static final int DREAMING = 222;
     public static final int DOZING = 223;
-
+    public static final int OVERVIEW_ACTIVITY = 224;
     // Temporary constants go here, to await migration to MetricsConstants.
 
     public static void visible(Context context, int category) throws IllegalArgumentException {
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 8b4b994..84c2417 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -183,6 +183,7 @@
     public interface ExternalStatsSync {
         void scheduleSync(String reason);
         void scheduleWifiSync(String reason);
+        void scheduleCpuSyncDueToRemovedUid(int uid);
     }
 
     public final MyHandler mHandler;
@@ -2522,13 +2523,28 @@
         mIsolatedUids.put(isolatedUid, appUid);
     }
 
-    public void removeIsolatedUidLocked(int isolatedUid, int appUid) {
+    /**
+     * Schedules a read of the latest cpu times before removing the isolated UID.
+     * @see #removeIsolatedUidLocked(int)
+     */
+    public void scheduleRemoveIsolatedUidLocked(int isolatedUid, int appUid) {
         int curUid = mIsolatedUids.get(isolatedUid, -1);
         if (curUid == appUid) {
-            mIsolatedUids.delete(isolatedUid);
+            if (mExternalSync != null) {
+                mExternalSync.scheduleCpuSyncDueToRemovedUid(isolatedUid);
+            }
         }
     }
 
+    /**
+     * This should only be called after the cpu times have been read.
+     * @see #scheduleRemoveIsolatedUidLocked(int, int)
+     */
+    public void removeIsolatedUidLocked(int isolatedUid) {
+        mIsolatedUids.delete(isolatedUid);
+        mKernelUidCpuTimeReader.removeUid(isolatedUid);
+    }
+
     public int mapUid(int uid) {
         int isolated = mIsolatedUids.get(uid, -1);
         return isolated > 0 ? isolated : uid;
@@ -6021,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();
@@ -6041,7 +6057,6 @@
                     ew.usedTime = in.readLong();
                     mExcessivePower.add(ew);
                 }
-                return true;
             }
 
             void writeToParcelLocked(Parcel out) {
@@ -8877,6 +8892,7 @@
             readSummaryFromParcel(in);
         } catch(Exception e) {
             Slog.e("BatteryStats", "Error reading battery statistics", e);
+            resetAllStatsLocked();
         }
 
         mEndPlatformVersion = Build.ID;
@@ -8899,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);
@@ -8912,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;
@@ -8927,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);
@@ -9025,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
@@ -9133,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) {
@@ -9145,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) {
@@ -9157,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();
@@ -9246,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];
@@ -9260,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();
@@ -9270,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();
@@ -9280,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();
@@ -9290,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();
@@ -9303,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();
@@ -9315,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++) {
@@ -9342,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/os/KernelUidCpuTimeReader.java b/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
index e2d366a..45cc8b2 100644
--- a/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
+++ b/core/java/com/android/internal/os/KernelUidCpuTimeReader.java
@@ -77,7 +77,12 @@
                 final int uid = Integer.parseInt(uidStr.substring(0, uidStr.length() - 1), 10);
                 final long userTimeUs = Long.parseLong(splitter.next(), 10);
                 final long systemTimeUs = Long.parseLong(splitter.next(), 10);
-                final long powerMaUs = Long.parseLong(splitter.next(), 10) / 1000;
+                final long powerMaUs;
+                if (splitter.hasNext()) {
+                    powerMaUs = Long.parseLong(splitter.next(), 10) / 1000;
+                } else {
+                    powerMaUs = 0;
+                }
 
                 if (callback != null) {
                     long userTimeDeltaUs = userTimeUs;
diff --git a/core/java/com/android/internal/os/WakelockPowerCalculator.java b/core/java/com/android/internal/os/WakelockPowerCalculator.java
index 7575010f..c7897b2 100644
--- a/core/java/com/android/internal/os/WakelockPowerCalculator.java
+++ b/core/java/com/android/internal/os/WakelockPowerCalculator.java
@@ -30,8 +30,8 @@
     }
 
     @Override
-    public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawUptimeUs,
-                             long rawRealtimeUs, int statsType) {
+    public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
+                             long rawUptimeUs, int statsType) {
         long wakeLockTimeUs = 0;
         final ArrayMap<String, ? extends BatteryStats.Uid.Wakelock> wakelockStats =
                 u.getWakelockStats();
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 aea1585..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
@@ -44,7 +46,7 @@
     // You need the STATUS_BAR_SERVICE permission
     void registerStatusBar(IStatusBar callbacks, out StatusBarIconList iconList,
             out int[] switches, out List<IBinder> binders);
-    void onPanelRevealed(boolean clearNotificationEffects);
+    void onPanelRevealed(boolean clearNotificationEffects, int numItems);
     void onPanelHidden();
     // Mark current notifications as "seen" and stop ringing, vibrating, blinking.
     void clearNotificationEffects();
@@ -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/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java
index b2699f8..ef2fef0 100644
--- a/core/java/com/android/internal/view/FloatingActionMode.java
+++ b/core/java/com/android/internal/view/FloatingActionMode.java
@@ -45,6 +45,7 @@
     private final Rect mPreviousContentRectOnWindow;
     private final int[] mViewPosition;
     private final int[] mPreviousViewPosition;
+    private final int[] mRootViewPosition;
     private final Rect mViewRect;
     private final Rect mPreviousViewRect;
     private final Rect mScreenRect;
@@ -80,6 +81,7 @@
         mPreviousContentRectOnWindow = new Rect();
         mViewPosition = new int[2];
         mPreviousViewPosition = new int[2];
+        mRootViewPosition = new int[2];
         mViewRect = new Rect();
         mPreviousViewRect = new Rect();
         mScreenRect = new Rect();
@@ -137,7 +139,9 @@
         checkToolbarInitialized();
 
         mOriginatingView.getLocationInWindow(mViewPosition);
+        mOriginatingView.getRootView().getLocationInWindow(mRootViewPosition);
         mOriginatingView.getGlobalVisibleRect(mViewRect);
+        mViewRect.offset(mRootViewPosition[0], mRootViewPosition[1]);
 
         if (!Arrays.equals(mViewPosition, mPreviousViewPosition)
                 || !mViewRect.equals(mPreviousViewRect)) {
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/jni/android/graphics/MinikinUtils.cpp b/core/jni/android/graphics/MinikinUtils.cpp
index 8bdbff4..d1780d6 100644
--- a/core/jni/android/graphics/MinikinUtils.cpp
+++ b/core/jni/android/graphics/MinikinUtils.cpp
@@ -33,7 +33,7 @@
     FontStyle resolved = resolvedFace->fStyle;
 
     /* Prepare minikin FontStyle */
-    std::string lang = paint->getTextLocale();
+    const std::string& lang = paint->getTextLocale();
     FontLanguage minikinLang(lang.c_str(), lang.size());
     FontVariant minikinVariant = (paint->getFontVariant() == VARIANT_ELEGANT) ? VARIANT_ELEGANT
             : VARIANT_COMPACT;
diff --git a/core/jni/android/graphics/Paint.h b/core/jni/android/graphics/Paint.h
index 1f82836..6df22ff 100644
--- a/core/jni/android/graphics/Paint.h
+++ b/core/jni/android/graphics/Paint.h
@@ -57,7 +57,7 @@
         mTextLocale = textLocale;
     }
 
-    std::string getTextLocale() const {
+    const std::string& getTextLocale() const {
         return mTextLocale;
     }
 
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index c9d609c..ec56507 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -130,7 +130,6 @@
         internedStrings.insert(std::make_pair(string, internedString));
         env->DeleteLocalRef(localString);
     }
-
     return internedString;
 }
 
@@ -142,18 +141,18 @@
     return (jlong) new SensorManager(String16(opPackageNameUtf.c_str()));
 }
 
-static jint
-nativeGetNextSensor(JNIEnv *env, jclass clazz, jlong sensorManager, jobject sensor, jint next)
+static jboolean
+nativeGetSensorAtIndex(JNIEnv *env, jclass clazz, jlong sensorManager, jobject sensor, jint index)
 {
     SensorManager* mgr = reinterpret_cast<SensorManager*>(sensorManager);
 
     Sensor const* const* sensorList;
     size_t count = mgr->getSensorList(&sensorList);
-    if (size_t(next) >= count) {
-        return -1;
+    if (size_t(index) >= count) {
+        return false;
     }
 
-    Sensor const* const list = sensorList[next];
+    Sensor const* const list = sensorList[index];
     const SensorOffsets& sensorOffsets(gSensorOffsets);
     jstring name = getInternedString(env, &list->getName());
     jstring vendor = getInternedString(env, &list->getVendor());
@@ -178,14 +177,12 @@
         jstring stringType = getInternedString(env, &list->getStringType());
         env->SetObjectField(sensor, sensorOffsets.stringType, stringType);
     }
-    next++;
-    return size_t(next) < count ? next : 0;
+    return true;
 }
 
-static int nativeEnableDataInjection(JNIEnv *_env, jclass _this, jlong sensorManager,
-        jboolean enable) {
+static jboolean nativeIsDataInjectionEnabled(JNIEnv *_env, jclass _this, jlong sensorManager) {
     SensorManager* mgr = reinterpret_cast<SensorManager*>(sensorManager);
-    return mgr->enableDataInjection(enable);
+    return mgr->isDataInjectionEnabled();
 }
 
 //----------------------------------------------------------------------------
@@ -354,13 +351,13 @@
              "(Ljava/lang/String;)J",
              (void*)nativeCreate },
 
-    {"nativeGetNextSensor",
-            "(JLandroid/hardware/Sensor;I)I",
-            (void*)nativeGetNextSensor },
+    {"nativeGetSensorAtIndex",
+            "(JLandroid/hardware/Sensor;I)Z",
+            (void*)nativeGetSensorAtIndex },
 
-    {"nativeEnableDataInjection",
-            "(JZ)I",
-            (void*)nativeEnableDataInjection },
+    {"nativeIsDataInjectionEnabled",
+            "(J)Z",
+            (void*)nativeIsDataInjectionEnabled},
 };
 
 static JNINativeMethod gBaseEventQueueMethods[] = {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 7f61a04..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" />
+        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
@@ -1517,14 +1529,10 @@
     <permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
         android:protectionLevel="signature" />
 
-    <!-- Allows an application to access all multi-user external storage @hide -->
-    <permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE"
-        android:protectionLevel="signature" />
-
     <!-- @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"
@@ -1535,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. -->
@@ -1641,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
@@ -1656,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 -->
@@ -1687,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 -->
@@ -1697,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                  -->
@@ -1746,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 -->
@@ -1764,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.
@@ -1835,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
@@ -1843,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.
@@ -1920,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.
@@ -1933,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.
@@ -1946,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.
@@ -1971,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.
@@ -2013,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.
@@ -2062,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 -->
@@ -2085,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.
@@ -2130,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.
@@ -2142,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"
@@ -2177,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.
@@ -2231,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.
@@ -2248,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
@@ -2257,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.
@@ -2286,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
@@ -2301,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
@@ -2336,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 -->
@@ -2352,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.
@@ -2365,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.
@@ -2378,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.
@@ -2390,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,
@@ -2405,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
@@ -2443,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},
@@ -2491,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). -->
@@ -2518,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}.
@@ -2544,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.
@@ -2556,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 d3e1275..525ca34 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Laat die program toe om MMS-boodskappe te ontvang en te verwerk. Dit beteken dat die program boodskappe wat na jou toestel gestuur is kan monitor of uitvee, sonder dat jy dit gesien het."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lees seluitsending-boodskappe"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Laat die program toe om seluitsending-boodskappe te lees wat deur jou toestel ontvang word. Seluitsending-waarskuwings word in sommige plekke afgelewer om jou van noodsituasies te waarsku. Kwaadwillige programme mag inmeng met die prestasie of die werking van jou toestel wanneer \'n noodgeval se seluitsending ontvang word."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Jou rekeninge"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kry toegang tot beskikbare rekeninge."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lees ingetekende nuus"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Laat die program toe om details oor die tans gesinkroniseerde strome te kry."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"stuur en bekyk SMS-boodskappe"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Gekoppel as \'n installeerder"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Gekoppel aan \'n USB-toebehoorsel"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Raak vir meer opsies."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formateer USB-geheue?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formateer SD-kaart?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Alle lêers wat op jou  USB-geheue gestoor is, sal uitgevee word. Hierdie handeling kan nie omgekeer word nie!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Alle data op jou kaart sal verlore gaan."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formaat"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-ontfouter gekoppel"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Raak om USB-ontfouting te deaktiveer."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Verander sleutelbord"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 3ab18fa..533ef91 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"ስዕሎች ያንሱ እና ቪዲዮ ይቅረጹ"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"ስልክ"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"የስልክ ጥሪዎች ያድርጉ እና ያስተዳድሩ"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"የሰውነት ዳሳሾች"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"ስለአስፈላጊ ምልክቶችዎ ያሉ የዳሳሽ ውሂብ ይድረሱ"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"የመስኮት ይዘት ሰርስረው ያውጡ"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"መስተጋበር የሚፈጥሩት የመስኮት ይዘት ይመርምሩ።"</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"መተግበሪያው የኤም.ኤም.ኤስ. መልዕክቶችን እንዲያነብ እና እንዲያካሂድ ይፈቅዳል። ይህ ማለት መተግበሪያው ወደ መሳሪያህ የተላኩ መልዕክቶችን ላንተ ሳያሳይህ ሊቆጣጠር ወይም ሊሰርዝ ይችላል።"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"የህዋስ ስርጭት መልዕክቶችን አንብብ"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"መሣሪያህ የህዋስ ስርጭት መልዕክቶች ሲቀበል መተግበሪያው እንዲያነበው ይፈቅድለታል። የህዋስ ስርጭት ማንቂያዎች አስቸኳይ ሁኔታዎች ሲያጋጥሙ አንዳንድ አካባቢዎች ላይ የሚላኩ ናቸው። የህዋስ ስርጭት ሲደርስ ተንኮል አዘል መተግበሪያዎች በመሣሪያህ አፈጻጸም ወይም አሰራር ላይ ጣልቃ ሊገቡ ይችላሉ።"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"መለያዎችዎ"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">" ለተገኙት መለያዎች ድረስ"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"የምዝገባ መግቦች አንበብ"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ስለ አሁኑ ጊዜ አስምር ምላሾች ዝርዝሮች ለማግኘት ለመተግበሪያው ይፈቅዳሉ።"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"የኤስኤምኤስ መልዕክቶችን ይላኩና ይመልከቱ"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"እንደ ጫኝ ተያይዟል"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"ለUSB ተቀጥላ ተያይዟል"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"ለተጨማሪ አማራጮች ነካ ያድርጉ።"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"የUSB ማከማቻ ቅረፅ"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD ካርድ ቅረፅ"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"በUSB ማህደረ ትውስታህ ውስጥ የተከማቹ ሁሉም ፋይሎች ይጠፋሉ፡፡ ይህ እርምጃ አይቀለበስም!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"በካርድ ውስጥ ያለው ሁሉም ውሂብ ይጠፋል፡፡"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ቅርጸት"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB አድስ ተያይዟል"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ማረሚያ ላለማንቃት ዳስስ።"</string>
     <string name="select_input_method" msgid="8547250819326693584">"ቁልፍ ሰሌዳ ይቀይሩ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 23f802b..c7cbc71 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -274,8 +274,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"للسماح للتطبيق بتلقي ومعالجة رسائل الوسائط المتعددة. وهذا يعني أنه يمكن للتطبيق مراقبة الرسائل التي يتم إرسالها لجهازك أو حذفها بدون عرضها لك."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"قراءة رسائل بث الخلية"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"السماح للتطبيق بقراءة رسائل بث الخلية التي يتلقاها هذا الجهاز. يتم تسليم اشعارات بث الخلية في بعض المواقع لتحذيرك من حالات طارئة. يمكن أن تتداخل التطبيقات الضارة مع أداء أو تشغيل الجهاز عندما يتم تلقي بث خلية طارئ."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"حساباتك"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"الوصول إلى الحسابات المتاحة."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"قراءة الخلاصات المشتركة"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"للسماح للتطبيق بالحصول على تفاصيل حول الخلاصات المتزامنة في الوقت الحالي."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"‏إرسال رسائل قصيرة SMS وعرضها"</string>
@@ -360,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>
@@ -535,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>
@@ -578,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>
@@ -1070,11 +1072,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"التوصيل كأداة تثبيت"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‏الاتصال بجهاز USB ملحق"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"المس للحصول على مزيد من الخيارات."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"‏تهيئة وحدة تخزين USB؟"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"‏هل تريد تنسيق بطاقة SD؟"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"‏سيتم مسح جميع الملفات المخزنة على وحدة تخزين USB. لا يمكن عكس هذا الإجراء!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ستفقد جميع البيانات على بطاقتك."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"تنسيق"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"‏تم توصيل تصحيح أخطاء USB"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"‏المس لتعطيل تصحيح أخطاء USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"تغيير لوحة المفاتيح"</string>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
index 2871b9c..c21a4d8 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Tətbiqə MMS mesajlarını qəbul və emal üçün imkan verir. Bu o deməkdir ki, bu tətbiq sizə göstərmədən cihazınıza göndərilən mesajları silə bilər."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"mobil yayım mesajlarını oxuyur"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Tətbiqə sizin telefonunuz tərəfindən alınmış yayım mesajlarını oxuma icazəsi verir. Telefon yayımı bəzi məkanlarda olan fövqəladə hadisələrlə bağlı sizi xəbərdar etmək üçün qəbul edilir. Zərərli tətbiqlər fövqəladə mobil yayım qəbul edildiyi zaman telefonunun performansına və əməliyyatına müdaxilə edə bilər."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Hesablarınız"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Əlçatımlı hesablara daxil olun."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"abunə olunmuş xəbərləri oxuyur"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Tətbiqə hazırda sinxron lentlər haqqında ətraflı məlumat almaq üçün imkan verir."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"göndərin və SMS mesajlarına baxın"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Quraşdırıcı kimi qoşulub"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB aksesuara qoşuldu"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Əlavə seçimlər üçün toxunun."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB yaddaşına format atılsın?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD kart format edilsin?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB yaddaşınızda yerləşdirilmiş bütün fayllar silinəcək. Bu addım geri dönülməzdir."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kartınızdakı bütün məlumatlar itəcək."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB sazlama qoşuludur"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB debaqı deaktivasiya etmək üçün toxunun."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Klaviaturanı dəyişin"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 0f39944..46316ad 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -227,23 +227,22 @@
     <string name="user_owner_label" msgid="2804351898001038951">"Личен"</string>
     <string name="managed_profile_label" msgid="6260850669674791528">"Служебен"</string>
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Контакти"</string>
-    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"достъп до контактите ви"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"има достъп до контактите ви"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Местоположение"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"достъп до местоположението на това устройство"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"получи достъп до местоположението на това устройство"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календар"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"достъп до календара ви"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"има достъп до календара ви"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"изпращане и преглед на SMS съобщения"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"изпраща и преглежда SMS съобщения"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Съхранение"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"достъп до снимките, мултимедията и файловете на устройството ви"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"има достъп до снимките, мултимедията и файловете на устройството ви"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"запис на звук"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"правене на снимки и запис на видеоклипове"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"извършване и управление на телефонни обаждания"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"извършва телефонни обаждания и да ги управлява"</string>
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Телесни сензори"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"достъп до сензорните данни за жизнените ви показатели"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Извличане на съдържанието от прозореца"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Инспектиране на съдържанието на прозорец, с който взаимодействате."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Разрешава на приложението да получава и обработва MMS съобщения. Това означава, че то може да наблюдава или изтрива изпратените до устройството ви, без да ви ги покаже."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"четене на съобщения с клетъчно излъчване"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Разрешава на приложението да чете съобщения с клетъчно излъчване, получени от устройството ви. Сигналите с клетъчно излъчване се получават на някои местоположения, за да ви предупредят за спешни ситуации. Злонамерените приложения могат да възпрепятстват изпълнението или работата на устройството ви при получаване на такова спешно излъчване."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашите профили"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Достъп до наличните профили."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"четене на емисиите с абонамент"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Разрешава на приложението да получи подробности за текущо синхронизираните емисии."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"изпращане и преглед на SMS съобщения"</string>
@@ -357,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>
@@ -1043,12 +1044,7 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Свързан като инсталационна програма"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Установена е връзка с аксесоар за USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Докоснете за още опции."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Да се форматира ли USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Да се форматира ли SD картата?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Всички файлове, съхранявани в USB хранилището ви, ще бъдат изтрити. Това действие не може да бъде отменено!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Всички данни на картата ви ще бъдат заличени."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Форматиране"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"Активно отстраняване на грешки през USB"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"Отстраняване на грешки през USB"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Докоснете за деактивиране"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Промяна на клавиатурата"</string>
     <string name="configure_input_methods" msgid="4769971288371946846">"Избиране на клавиатури"</string>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index 3b82a6c..5113414 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -53,10 +53,10 @@
     <string name="serviceErased" msgid="1288584695297200972">"মুছে ফেলা সফল হয়েছে৷"</string>
     <string name="passwordIncorrect" msgid="7612208839450128715">"ভুল পাসওয়ার্ড৷"</string>
     <string name="mmiComplete" msgid="8232527495411698359">"MMI সম্পূর্ণ হয়েছে৷"</string>
-    <string name="badPin" msgid="9015277645546710014">"আপনার দ্বারা টাইপ করা পুরানো PIN সঠিক নয়৷"</string>
+    <string name="badPin" msgid="9015277645546710014">"আপনার দ্বারা টাইপ করা পুরানো পিন সঠিক নয়৷"</string>
     <string name="badPuk" msgid="5487257647081132201">"আপনার দ্বারা টাইপ করা PUK সঠিক নয়৷"</string>
     <string name="mismatchPin" msgid="609379054496863419">"আপনার টাইপ করা PINগুলি মিলছে না৷"</string>
-    <string name="invalidPin" msgid="3850018445187475377">"একটি PIN লিখুন যাতে ৪ থেকে ৮ নম্বর রয়েছে৷"</string>
+    <string name="invalidPin" msgid="3850018445187475377">"একটি পিন লিখুন যাতে ৪ থেকে ৮ নম্বর রয়েছে৷"</string>
     <string name="invalidPuk" msgid="8761456210898036513">"৮ বা তার থেকে বেশি নম্বরেরে একটি PUK লিখুন৷"</string>
     <string name="needPuk" msgid="919668385956251611">"আপনার সিম কার্ডটি PUK-কোড দিয়ে লক করা রয়েছে৷ এটিকে আনলক করতে PUK কোডটি লিখুন৷"</string>
     <string name="needPuk2" msgid="4526033371987193070">"সিম কার্ড অবরোধ মুক্ত করতে PUK2 লিখুন৷"</string>
@@ -75,7 +75,7 @@
     <string name="CwMmi" msgid="9129678056795016867">"কল অপেক্ষমান"</string>
     <string name="BaMmi" msgid="455193067926770581">"কল নিষিদ্ধ করা"</string>
     <string name="PwdMmi" msgid="7043715687905254199">"পাসওয়ার্ড পরিবর্তন"</string>
-    <string name="PinMmi" msgid="3113117780361190304">"PIN পরিবর্তন"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"পিন পরিবর্তন"</string>
     <string name="CnipMmi" msgid="3110534680557857162">"কল করার নম্বর উপস্থিত"</string>
     <string name="CnirMmi" msgid="3062102121430548731">"যে নম্বরটি থেকে কল করা হয় সেটি না পাঠানো"</string>
     <string name="ThreeWCMmi" msgid="9051047170321190368">"তিনটি পথে কল করা"</string>
@@ -209,7 +209,7 @@
     <string name="global_action_lock" msgid="2844945191792119712">"স্ক্রীণ লক"</string>
     <string name="global_action_power_off" msgid="4471879440839879722">"পাওয়ার বন্ধ করুন"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"ত্রুটির প্রতিবেদন"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"ত্রুটির প্রতিবেদন গ্রহণ করুন"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"ত্রুটির প্রতিবেদন করুন"</string>
     <string name="bugreport_message" msgid="398447048750350456">"এটি একটি ই-মেল বার্তা পাঠানোর জন্য আপনার ডিভাইসের বর্তমান অবস্থা সম্পর্কে তথ্য সংগ্রহ করবে৷ ত্রুটির প্রতিবেদন শুরুর সময় থেকে এটি পাঠানোর জন্য প্রস্তুত হতে কিছুটা সময় নেবে; দয়া করে ধৈর্য রাখুন৷"</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"নীরব মোড"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"শব্দ বন্ধ করা আছে"</string>
@@ -229,19 +229,19 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"পরিচিতি"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"আপনার পরিচিতিগুলিতে অ্যাক্সেস করুন"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"অবস্থান"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"এই ডিভাইসের অবস্থানে অ্যাক্সেস করুন"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"এই ডিভাইসের অবস্থান অ্যাক্সেস"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"ক্যালেন্ডার"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"আপনার ক্যালেন্ডারে অ্যাক্সেস করুন"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"আপনার ক্যালেন্ডারে অ্যাক্সেস"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS বার্তাগুলি পাঠান এবং দেখুন"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS বার্তাগুলি পাঠাতে এবং দেখতে"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"সঞ্চয়স্থান"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"আপনার ডিভাইসে ফটো, মিডিয়া এবং ফাইলগুলিতে অ্যাক্সেস করুন"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"আপনার ডিভাইসে ফটো, মিডিয়া এবং ফাইলগুলিতে অ্যাক্সেস"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"মাইক্রোফোন"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"অডিও রেকর্ড করুন"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"ক্যামেরা"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"ছবি তুলুন এবং ভিডিও রেকর্ড করুন"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"ফোন"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"ফোন কলগুলি করুন এবং পরিচালনা করুন"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"ফোন কলগুলি এবং পরিচালনা"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"বডি সেন্সরগুলি"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"আপনার অত্যাবশ্যক লক্ষণগুলির সম্পর্কে সেন্সর ডেটা অ্যাক্সেস করে"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"উইন্ডোর সামগ্রী পুনরুদ্ধার করে"</string>
@@ -270,11 +270,9 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"অ্যাপ্লিকেশানটিকে MMS বার্তা প্রাপ্ত করার এবং প্রক্রিয়া করার অনুমতি দেয়৷ এর মানে হল অ্যাপ্লিকেশানটি আপনার ডিভাইস থেকে পাঠানো বার্তাগুলিকে পর্যবেক্ষণ করতে পারে এবং মুছতে পারে সেগুলিকে আপনাকে না দেখিয়ে৷"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"সেল সম্প্রচার বার্তা পড়ুন"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"আপনার ডিভাইস দ্বারা প্রাপ্ত সেল সম্প্রচার পড়তে অ্যাপ্লিকেশানটিকে অনুমতি দেয়৷ কয়েকটি স্থানে আপনাকে জরুরি অবস্থার জন্য সতর্ক করতে জরুরি সতর্কতাগুলি বিতরণ করা হয়৷ যখন একটি জরুরি সেল সম্প্রচার প্রাপ্ত হয় তখন ক্ষতিকারক অ্যাপ্লিকেশানগুলি আপনার ডিভাইসের কার্য সম্পাদনা বা কার্যকলাপে প্রতিবন্ধকতার সৃষ্টি করতে পারে৷"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"আপনার অ্যাকাউন্টগুলি"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"উপলব্ধ অ্যাকাউন্টগুলি অ্যাক্সেস করে৷"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"গ্রাহক হিসাবে নেওয়া ফিডগুলি পড়ে"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"অ্যাপ্লিকেশানকে বর্তমানে সিঙ্ক করা ফিডগুলির সম্পর্কে বিবরণ পেতে দেয়৷"</string>
-    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS বার্তাগুলি পাঠান এবং দেখুন"</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS বার্তাগুলি পাঠাতে এবং দেখতে"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"অ্যাপ্লিকেশানটিকে SMS বার্তাগুলি পাঠাতে অনুমতি দেয়৷ এর জন্য অপ্রত্যাশিত চার্জ কাটা হতে পারে৷ ক্ষতিকারক অ্যাপ্লিকেশানগুলি আপনার নিশ্চিতকরণ ছাড়া বার্তা পাঠানোর মাধ্যমে আপনাকে অর্থ চার্জ করতে পারে৷"</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"আপনার পাঠ্য বার্তা পড়ুন (SMS বা MMS)"</string>
     <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"অ্যাপ্লিকেশানটিকে আপনার ট্যাবলেটে বা আপনার সিম কার্ডে সংরক্ষিত SMS বার্তাগুলি পড়ার অনুমতি দেয়৷ এটি অ্যাপ্লিকেশানটিকে সামগ্রী বা গোপনীয়তার সমস্ত SMS বার্তা নির্বিশেষে পড়ার অনুমতি দেয়৷"</string>
@@ -356,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>
@@ -639,14 +641,14 @@
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"কর্মক্ষেত্র"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"অন্যান্য"</string>
     <string name="quick_contacts_not_available" msgid="746098007828579688">"এই পরিচিতিটি দেখার জন্য কোনো অ্যাপ্লিকেশান খুঁজে পাওয়া যায়নি৷"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN কোড লিখুন"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK এবং নতুন PIN কোড লিখুন"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"পিন কোড লিখুন"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK এবং নতুন পিন কোড লিখুন"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK কোড"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"নতুন PIN কোড"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"নতুন পিন কোড"</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_label_text" msgid="861796461028298424">"আনলক করতে, মেনু টিপুন তারপর ০ টিপুন৷"</string>
     <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"জরুরী নম্বর"</string>
     <string name="lockscreen_carrier_default" msgid="8963839242565653192">"কোনো পরিষেবা নেই৷"</string>
@@ -983,7 +985,7 @@
     <string name="wifi_p2p_from_message" msgid="570389174731951769">"থেকে:"</string>
     <string name="wifi_p2p_to_message" msgid="248968974522044099">"প্রাপক:"</string>
     <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"প্রয়োজনীয় PINটি লিখুন:"</string>
-    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"পিন:"</string>
     <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"ট্যাবলেটটি যখন <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এ সংযুক্ত হবে তখন এটি Wi-Fi থেকে সাময়িকভাবে সংযোগ বিচ্ছিন্ন হবে"</string>
     <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="3087858235069421128">"আপনার টিভি <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এ সংযুক্ত থাকার সময় Wi-Fi থেকে সাময়িকভাবে সংযোগ বিচ্ছিন্ন হবে৷"</string>
     <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"ফোনটি যখন <xliff:g id="DEVICE_NAME">%1$s</xliff:g> এ সংযুক্ত হবে তখন এটি Wi-Fi থেকে সাময়িকভাবে সংযোগ বিচ্ছিন্ন হবে"</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"একটি ইনস্টলার হিসাবে সংযুক্ত হয়েছে"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"একটি USB যন্ত্রাংশতে সংযুক্ত হয়েছে"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"আরো বিকল্পের জন্য স্পর্শ করুন৷"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB সঞ্চয়স্থান ফরম্যাট করবেন?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD ফরম্যাট করবেন?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"আপনার USB সঞ্চয়স্থানে সংরক্ষিত সমস্ত ফাইল মুছে ফেলা হবে৷ এই ক্রিয়াটিকে পূর্বাবস্থায় ফেরানো যাবে না!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"আপনার কার্ডের সমস্ত ডেটা হারিয়ে যাবে৷"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ফর্ম্যাট করুন"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ডিবাগিং সংযুক্ত হয়েছে"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ডিবাগিং অক্ষম করতে স্পর্শ করুন৷"</string>
     <string name="select_input_method" msgid="8547250819326693584">"কীবোর্ড পরিবর্তন করুন"</string>
@@ -1061,7 +1058,7 @@
     <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"<xliff:g id="NAME">%s</xliff:g> প্রস্তুত করা হচ্ছে"</string>
     <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"ত্রুটি রয়েছে কিনা পরীক্ষা করা হচ্ছে"</string>
     <string name="ext_media_new_notification_message" msgid="7589986898808506239">"নতুন <xliff:g id="NAME">%s</xliff:g> সনাক্ত করা হয়েছে"</string>
-    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"ফটোগুলি এবং মিডিয়া স্থানান্তর করার জন্য"</string>
+    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"ফটো এবং মিডিয়া ট্রান্সফার"</string>
     <string name="ext_media_unmountable_notification_title" msgid="8295123366236989588">"<xliff:g id="NAME">%s</xliff:g> ত্রুটিপূর্ণ"</string>
     <string name="ext_media_unmountable_notification_message" msgid="1586311304430052169">"<xliff:g id="NAME">%s</xliff:g> হল ত্রুটিপূর্ণ। ঠিক করতে স্পর্শ করুন।"</string>
     <string name="ext_media_unsupported_notification_title" msgid="3797642322958803257">"<xliff:g id="NAME">%s</xliff:g> অসমর্থিত"</string>
@@ -1295,21 +1292,21 @@
     <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">%1$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_pin_instructions" msgid="2377242233495111557">"PIN লিখুন"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"সিম পিন লিখুন"</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_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_password_wrong_pin_code" msgid="1139324887413846912">"ভুল PIN কোড৷"</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"৪ থেকে ৮টি সংখ্যার একটি PIN লিখুন৷"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"ভুল পিন কোড৷"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"৪ থেকে ৮টি সংখ্যার একটি পিন লিখুন৷"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"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_login_instructions" msgid="1100551261265506448">"আনলক করতে আপনার Google অ্যাকাউন্টের মাধ্যমে সাইন ইন করুন৷"</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"ব্যবহারকারী নাম (ইমেল)"</string>
@@ -1432,15 +1429,15 @@
     <string name="reason_service_unavailable" msgid="7824008732243903268">"মুদ্রণ পরিষেবা সক্ষম করা নেই"</string>
     <string name="print_service_installed_title" msgid="2246317169444081628">"<xliff:g id="NAME">%s</xliff:g> পরিষেবা ইনস্টল হয়েছে"</string>
     <string name="print_service_installed_message" msgid="5897362931070459152">"সক্ষম করতে আলতো চাপুন"</string>
-    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"প্রশাসক PIN লিখুন"</string>
-    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN লিখুন"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"প্রশাসক পিন লিখুন"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"পিন লিখুন"</string>
     <string name="restr_pin_incorrect" msgid="8571512003955077924">"ভুল"</string>
-    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"বর্তমান PIN"</string>
-    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"নতুন PIN"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"বর্তমান পিন"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"নতুন পিন"</string>
     <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"নতুন PINটি নিশ্চিত করুন"</string>
-    <string name="restr_pin_create_pin" msgid="8017600000263450337">"নিষেধাজ্ঞাগুলি পরিবর্তন করার জন্য একটি PIN তৈরি করুন"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"নিষেধাজ্ঞাগুলি পরিবর্তন করার জন্য একটি পিন তৈরি করুন"</string>
     <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PINগুলি মেলেনি৷ আবার চেষ্টা করুন৷"</string>
-    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN খুবই ছোট৷ এটিকে কমপক্ষে ৪ সংখ্যার হতে হবে৷"</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"পিন খুবই ছোট৷ এটিকে কমপক্ষে ৪ সংখ্যার হতে হবে৷"</string>
     <plurals name="restr_pin_countdown" formatted="false" msgid="9061246974881224688">
       <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন</item>
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন</item>
@@ -1463,7 +1460,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"অ্যাপ্লিকেশান পিন করা আছে: এই ডিভাইস এটিকে পিনমুক্ত করা মঞ্জুরিপ্রাপ্ত নয়৷"</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"স্ক্রীন পিন করা হয়েছে"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"পিন না করা স্ক্রীন"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"আনপিন করার আগে PIN চান"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"আনপিন করার আগে পিন চান"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"আনপিন করার আগে আনলক প্যাটার্ন চান"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"আনপিন করার আগে পাসওয়ার্ড চান"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"আপনার প্রশাসক দ্বারা ইনস্টল করা হয়েছে"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 6fdce0b..c75459a 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -229,7 +229,7 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Contactes"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"accedir als contactes"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Ubicació"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"accedeix a la ubicació del dispositiu"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"accedir a la ubicació del dispositiu"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendari"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"accedir al calendari"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
@@ -241,7 +241,7 @@
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Càmera"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"fer fotos i vídeos"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telèfon"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"fer i gestionar les trucades telefòniques"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"fer i gestionar trucades telefòniques"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Sensors corporals"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"accedir a les dades del sensor sobre els signes vitals"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperar el contingut de la finestra"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permet que l\'aplicació rebi i processi missatges MMS. Això vol dir que l\'aplicació pot controlar o suprimir missatges que s\'han enviat al teu dispositiu sense mostrar-te\'ls."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"llegir missatges de difusió mòbil"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permet que l\'aplicació llegeixi missatges de difusió mòbil rebuts pel dispositiu. Les alertes de difusió mòbil s\'entreguen en algunes ubicacions per alertar de situacions d\'emergència. És possible que les aplicacions malicioses interfereixin en el rendiment o en el funcionament del dispositiu quan es rep una difusió mòbil d\'emergència."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Comptes"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedeix als comptes disponibles."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"llegir els feeds als quals esteu subscrit"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permet que l\'aplicació obtingui detalls sobre els feeds sincronitzats actualment."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"envia i llegeix missatges SMS"</string>
@@ -356,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>
@@ -504,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>
@@ -533,7 +535,7 @@
     <item msgid="1735177144948329370">"Fax de casa"</item>
     <item msgid="603878674477207394">"Cercapersones"</item>
     <item msgid="1650824275177931637">"Altres"</item>
-    <item msgid="9192514806975898961">"Personalitzat"</item>
+    <item msgid="9192514806975898961">"Personalitza"</item>
   </string-array>
   <string-array name="emailAddressTypes">
     <item msgid="8073994352956129127">"Casa"</item>
@@ -551,7 +553,7 @@
     <item msgid="1738585194601476694">"Casa"</item>
     <item msgid="1359644565647383708">"Feina"</item>
     <item msgid="7868549401053615677">"Altres"</item>
-    <item msgid="3145118944639869809">"Personalitzat"</item>
+    <item msgid="3145118944639869809">"Personalitza"</item>
   </string-array>
   <string-array name="organizationTypes">
     <item msgid="7546335612189115615">"Feina"</item>
@@ -936,22 +938,22 @@
     <string name="volume_ringtone" msgid="6885421406845734650">"Volum del timbre"</string>
     <string name="volume_music" msgid="5421651157138628171">"Volum de multimèdia"</string>
     <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"S\'està reproduint a través de Bluetooth"</string>
-    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"S\'ha establert el to en silenci"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"S\'ha establert el so de silenci"</string>
     <string name="volume_call" msgid="3941680041282788711">"Volum en trucada"</string>
     <string name="volume_bluetooth_call" msgid="2002891926351151534">"Volum en trucada Bluetooth"</string>
     <string name="volume_alarm" msgid="1985191616042689100">"Volum de l\'alarma"</string>
     <string name="volume_notification" msgid="2422265656744276715">"Volum de notificació"</string>
     <string name="volume_unknown" msgid="1400219669770445902">"Volum"</string>
     <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Volum de Bluetooth"</string>
-    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volum del to"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Volum del so"</string>
     <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volum de trucada"</string>
     <string name="volume_icon_description_media" msgid="4217311719665194215">"Volum de multimèdia"</string>
     <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volum de notificació"</string>
-    <string name="ringtone_default" msgid="3789758980357696936">"To predeterminat"</string>
-    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"To predeterminat (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"So predeterminat"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"So predeterminat (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
     <string name="ringtone_silent" msgid="7937634392408977062">"Cap"</string>
     <string name="ringtone_picker_title" msgid="3515143939175119094">"Sons"</string>
-    <string name="ringtone_unknown" msgid="5477919988701784788">"To desconegut"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"So desconegut"</string>
     <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
       <item quantity="other">Xarxes Wi-Fi disponibles</item>
       <item quantity="one">Xarxa Wi-Fi disponible</item>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connectat com a instal·lador"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connectat a un accessori USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Toca per veure més opcions."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formata l\'emmagatzematge USB"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Vols formatar la targeta SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"S\'esborraran tots els fitxers emmagatzemats al dispositiu d\'emmagatzematge USB. Aquesta acció no es pot desfer."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Es perdran totes les dades d\'aquesta targeta."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formata"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuració USB activada"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca per desactivar la depuració USB"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Canvia el teclat"</string>
@@ -1463,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 d3ddf6a..ba4de89 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -243,11 +243,11 @@
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"pořizování fotografií a nahrávání videa"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"uskutečňování a správa telefonních hovorů"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"uskutečňování a spravování telefonních hovorů"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Tělesné senzory"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"přístup k údajům snímačů vašich životních funkcí"</string>
-    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Načíst obsah okna"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Můžete prozkoumat obsah okna, se kterým pracujete."</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Načítat obsah oken"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Může prozkoumávat obsah oken, se kterými pracujete."</string>
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Zapnout funkci Prozkoumání dotykem"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Položky, na které klepnete, budou přečteny nahlas a obrazovku bude možné procházet pomocí gest."</string>
     <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Zapnout vylepšené usnadnění přístupu k webu"</string>
@@ -272,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Umožňuje aplikaci přijmout a zpracovat zprávy MMS. Znamená to, že aplikace může sledovat zprávy odeslané do vašeho zařízení nebo je smazat, aniž by se vám zobrazily."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"čtení zpráv informačních služeb"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Umožňuje aplikaci číst zprávy informačních služeb přijaté ve vašem zařízení. Výstražná upozornění informačních služeb jsou v některých oblastech odesílána za účelem varování před výjimečnými událostmi. Škodlivé aplikace mohou narušit výkon či provoz vašeho zařízení během přijímání zpráv informačních služeb."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Přístup k dostupným účtům."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"čtení zdrojů přihlášených k odběru"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Umožňuje aplikaci získat podrobnosti o aktuálně synchronizovaných zdrojích."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"odesílání a zobrazení zpráv SMS"</string>
@@ -358,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>
@@ -985,10 +987,10 @@
     <string name="wifi_connect_alert_title" msgid="8455846016001810172">"Povolit připojení?"</string>
     <string name="wifi_connect_alert_message" msgid="6451273376815958922">"Aplikace %1$s se chce připojit k síti Wi-Fi %2$s."</string>
     <string name="wifi_connect_default_application" msgid="7143109390475484319">"Aplikace"</string>
-    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Přímé připojení sítě Wi-Fi"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Spustit přímé připojení sítě Wi-Fi. Tato možnost vypne provoz sítě Wi-Fi v režimu klient/hotspot."</string>
-    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Přímé připojení sítě Wi-Fi se nepodařilo spustit."</string>
-    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Přímé připojení sítě Wi-Fi je zapnuto"</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Spustit Wi-Fi Direct. Tato možnost vypne provoz sítě Wi-Fi v režimu klient/hotspot."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Wi-Fi Direct se nepodařilo spustit."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct je zapnuto"</string>
     <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Nastavení otevřete dotykem"</string>
     <string name="accept" msgid="1645267259272829559">"Přijmout"</string>
     <string name="decline" msgid="2112225451706137894">"Odmítnout"</string>
@@ -1056,11 +1058,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Připojeno jako instalátor"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Připojeno k perifernímu zařízení USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Klepnutím zobrazíte další možnosti."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formátovat úložiště USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formátovat kartu SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Všechny soubory uložené v úložišti USB budou vymazány. Tuto akci nelze vrátit zpět."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Všechna data na kartě budou ztracena."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formátovat"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Ladění přes USB připojeno"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Dotykem zakážete ladění USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Změna klávesnice"</string>
@@ -1562,9 +1559,9 @@
     <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"Další možnosti"</string>
     <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Zavřít rozbalovací nabídku"</string>
     <plurals name="selected_count" formatted="false" msgid="7187339492915744615">
-      <item quantity="few">Vybrány <xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
-      <item quantity="many">Vybráno <xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
-      <item quantity="other">Vybráno <xliff:g id="COUNT_1">%1$d</xliff:g> položek</item>
-      <item quantity="one">Vybrána <xliff:g id="COUNT_0">%1$d</xliff:g> položka</item>
+      <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
+      <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> položek</item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> položka</item>
     </plurals>
 </resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 4c1eac0..3aa9db4 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -229,13 +229,13 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Kontaktpersoner"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"have adgang til dine kontaktpersoner"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Placering"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"adgang til enhedens placering"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"få adgang til enhedens placering"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"have adgang til din kalender"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"Sms"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"Send og se sms-beskeder"</string>
-    <string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"Få adgang til billeder, medier og filer på din enhed"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"sende og se sms-beskeder"</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Lagerplads"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"få adgang til billeder, medier og filer på din enhed"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"optage lyd"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Tillader, at appen kan modtage og behandle mms-beskeder. Det betyder, at appen kan overvåge eller slette de beskeder, der sendes til din enhed, uden at vise dem til dig."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"læse Cell Broadcast-beskeder"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Tillader, at appen læser Cell Broadcast-beskeder, der modtages af din enhed. I nogle områder sendes der Cell Broadcast-beskeder for at advare om nødsituationer. Ondsindede apps kan forstyrre ydelsen eller driften af ​din ​enhed, når der modtages en Cell Broadcast-besked om en nødsituation."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Dine konti"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Få adgang til de tilgængelige konti."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"læse feeds, jeg abonnerer på"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Tillader, at appen kan hente oplysninger om de feeds, der synkroniseres."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"Send og se sms-beskeder"</string>
@@ -356,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>
@@ -503,8 +505,8 @@
     <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Registrer antallet af forkerte adgangskoder, der indtastes ved oplåsning af skærmen, og lås din tablet, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Registrer antallet af forkerte adgangskoder, der indtastes ved oplåsning af skærmen, og lås tv-adgangen, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Registrer antallet af forkerte adgangskoder, der indtastes ved oplåsning af skærmen, og lås telefonen, eller slet alle brugerens data, hvis adgangskoden tastes forkert for mange gange."</string>
-    <string name="policylab_resetPassword" msgid="4934707632423915395">"Skift skærmlås"</string>
-    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Skifte skærmlås"</string>
+    <string name="policylab_resetPassword" msgid="4934707632423915395">"Skifte skærmlås"</string>
+    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Skifter skærmlås"</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Låse skærmen"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Kontrollerer, hvordan og hvornår skærmen låses."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Slette alle data"</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Tilsluttet som et installationsprogram"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Tilsluttet et USB-ekstraudstyr"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Tryk for at se flere muligheder."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formater USB-lager?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Vil du formatere SD-kortet?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Alle filer, der er gemt på dit USB-lager, slettes. Denne handling kan ikke fortrydes!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Du mister alle data på kortet."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formater"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-fejlretning er tilsluttet"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Tryk for at deaktivere USB-fejlretning."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Skift tastatur"</string>
@@ -1223,7 +1220,7 @@
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"Flere valgmuligheder"</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">"Internt lager"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"Intern lagerplads"</string>
     <string name="storage_sd_card" msgid="3282948861378286745">"SD-kort"</string>
     <string name="storage_sd_card_label" msgid="6347111320774379257">"SD-kort fra <xliff:g id="MANUFACTURER">%s</xliff:g>"</string>
     <string name="storage_usb_drive" msgid="6261899683292244209">"USB-drev"</string>
@@ -1528,7 +1525,7 @@
     <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"Flere valgmuligheder"</string>
     <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Luk overløb"</string>
     <plurals name="selected_count" formatted="false" msgid="7187339492915744615">
-      <item quantity="one">Der er valgt <xliff:g id="COUNT_1">%1$d</xliff:g></item>
-      <item quantity="other">Der er valgt <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>valgt</item>
+      <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> valgt</item>
     </plurals>
 </resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index d38cb3f..cc4eb09 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -245,7 +245,7 @@
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Körpersensoren"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"Auf Sensordaten zu Ihren Vitaldaten zugreifen"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Fensterinhalte abrufen"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Die Inhalte eines Fensters mit dem Sie interagieren werden abgerufen."</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Die Inhalte eines Fensters, mit dem Sie interagieren, werden abgerufen."</string>
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"\"Tippen &amp; Entdecken\" aktivieren"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Berührte Elemente werden laut vorgelesen und der Bildschirm kann über Gesten erkundet werden."</string>
     <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Verbesserte Web-Bedienung aktivieren"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Ermöglicht der App, MMS zu empfangen und zu verarbeiten. Das bedeutet, dass die App an Ihr Gerät gesendete Nachrichten überwachen und löschen kann, ohne sie Ihnen anzuzeigen."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"Cell Broadcast-Nachrichten lesen"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Ermöglicht der App, von Ihrem Gerät empfangene Cell Broadcast-Nachrichten zu lesen. Cell Broadcast-Benachrichtigungen werden an einigen Standorten gesendet, um Sie über Notfallsituationen zu informieren. Schädliche Apps können die Leistung oder den Betrieb Ihres Geräts beeinträchtigen, wenn eine Cell Broadcast-Notfallbenachrichtigung eingeht."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ihre Konten"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Zugriff auf verfügbare Konten"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"Abonnierte Feeds lesen"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Ermöglicht der App, Details zu den zurzeit synchronisierten Feeds abzurufen"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS senden und abrufen"</string>
@@ -356,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>
@@ -600,7 +602,7 @@
     <string name="emailTypeMobile" msgid="119919005321166205">"Mobil"</string>
     <string name="postalTypeCustom" msgid="8903206903060479902">"Benutzerdefiniert"</string>
     <string name="postalTypeHome" msgid="8165756977184483097">"Privat"</string>
-    <string name="postalTypeWork" msgid="5268172772387694495">"Büro"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"Geschäftlich"</string>
     <string name="postalTypeOther" msgid="2726111966623584341">"Sonstige"</string>
     <string name="imTypeCustom" msgid="2074028755527826046">"Benutzerdefiniert"</string>
     <string name="imTypeHome" msgid="6241181032954263892">"Privat"</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Als Installationsprogramm angeschlossen"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Mit USB-Zubehör verbunden"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Für weitere Optionen tippen"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB-Speicher formatieren?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD-Karte formatieren?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Alle in Ihrem USB-Speicher abgelegten Dateien werden gelöscht. Diese Aktion kann nicht rückgängig gemacht werden!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Alle Daten auf Ihrer Karte gehen verloren."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-Debugging"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Zum Deaktivieren berühren"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Tastatur ändern"</string>
@@ -1061,7 +1058,7 @@
     <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"<xliff:g id="NAME">%s</xliff:g> wird vorbereitet"</string>
     <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"Nach Fehlern wird gesucht"</string>
     <string name="ext_media_new_notification_message" msgid="7589986898808506239">"Neue <xliff:g id="NAME">%s</xliff:g> entdeckt"</string>
-    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"Für die Übertragung von Fotos und Medien"</string>
+    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"Zum Übertragen von Fotos und Medien"</string>
     <string name="ext_media_unmountable_notification_title" msgid="8295123366236989588">"<xliff:g id="NAME">%s</xliff:g> beschädigt"</string>
     <string name="ext_media_unmountable_notification_message" msgid="1586311304430052169">"<xliff:g id="NAME">%s</xliff:g> ist beschädigt. Zum Reparieren tippen."</string>
     <string name="ext_media_unsupported_notification_title" msgid="3797642322958803257">"<xliff:g id="NAME">%s</xliff:g> nicht unterstützt"</string>
@@ -1074,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 2ac26fe..7f5d2c3 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -51,10 +51,10 @@
     <string name="serviceDisabled" msgid="1937553226592516411">"Η υπηρεσία έχει απενεργοποιηθεί."</string>
     <string name="serviceRegistered" msgid="6275019082598102493">"Η εγγραφή ήταν επιτυχής."</string>
     <string name="serviceErased" msgid="1288584695297200972">"Η διαγραφή ήταν επιτυχής."</string>
-    <string name="passwordIncorrect" msgid="7612208839450128715">"Εσφαλμένος κωδικός πρόσβασης."</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"Λανθασμένος κωδικός πρόσβασης."</string>
     <string name="mmiComplete" msgid="8232527495411698359">"Το MMI ολοκληρώθηκε."</string>
-    <string name="badPin" msgid="9015277645546710014">"Ο παλιός αριθμός PIN που πληκτρολογήσατε είναι εσφαλμένος."</string>
-    <string name="badPuk" msgid="5487257647081132201">"Ο κωδικός PUK που πληκτρολογήσατε είναι εσφαλμένος."</string>
+    <string name="badPin" msgid="9015277645546710014">"Ο παλιός αριθμός PIN που πληκτρολογήσατε είναι λάθος."</string>
+    <string name="badPuk" msgid="5487257647081132201">"Ο κωδικός PUK που πληκτρολογήσατε είναι λάθος."</string>
     <string name="mismatchPin" msgid="609379054496863419">"Οι αριθμοί PIN που πληκτρολογήσατε δεν ταιριάζουν."</string>
     <string name="invalidPin" msgid="3850018445187475377">"Πληκτρολογήστε έναν αριθμό PIN μεγέθους 4 έως 8 αριθμών."</string>
     <string name="invalidPuk" msgid="8761456210898036513">"Πληκτρολογήστε έναν κωδικό PUK με 8 αριθμούς ή περισσότερους."</string>
@@ -229,19 +229,19 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Επαφές"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"πρόσβαση στις επαφές σας"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Τοποθεσία"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"πρόσβαση στην τοποθεσία αυτής της συσκευής"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"έχει πρόσβαση στην τοποθεσία της συσκευής"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Ημερολόγιο"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"πρόσβαση στο ημερολόγιό σας"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"έχει πρόσβαση στο ημερολόγιό σας"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
     <string name="permgroupdesc_sms" msgid="4656988620100940350">"αποστολή και προβολή μηνυμάτων SMS"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Αποθηκευτικός χώρος"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"πρόσβαση στις φωτογραφίες, τα πολυμέσα και τα αρχεία στη συσκευή σας"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"έχει πρόσβαση στις φωτογραφίες/πολυμέσα/αρχεία στη συσκευή σας"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Μικρόφωνο"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"εγγραφή ήχου"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Κάμερα"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"λήψη φωτογραφιών και εγγραφή βίντεο"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Τηλέφωνο"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"πραγματοποίηση και διαχείριση τηλεφωνικών κλήσεων"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"πραγματοποιεί και να διαχειρίζεται τηλ/κές κλήσεις"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Αισθητήρες σώματος"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"πρόσβαση στα δεδομένα αισθητήρα σχετικά με τις ζωτικές ενδείξεις σας"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Ανάκτηση του περιεχομένου του παραθύρου"</string>
@@ -270,11 +270,9 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Επιτρέπει στην εφαρμογή τη λήψη και την επεξεργασία μηνυμάτων MMS. Αυτό σημαίνει ότι η εφαρμογή θα μπορούσε να παρακολουθήσει ή να διαγράψει τα μηνύματα που αποστέλλονται στη συσκευή σας χωρίς αυτά να εμφανιστούν σε εσάς."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ανάγνωση μηνυμάτων που έχουν μεταδοθεί μέσω κινητού τηλεφώνου"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Επιτρέπει στην εφαρμογή την ανάγνωση μηνυμάτων που έχουν μεταδοθεί μέσω κινητού τηλεφώνου και έχουν ληφθεί από τη συσκευή σας. Ειδοποιήσεις που μεταδίδονται μέσω κινητού παραδίδονται σε ορισμένες τοποθεσίες για να σας προειδοποιήσουν για καταστάσεις έκτακτης ανάγκης. Κακόβουλες εφαρμογές ενδέχεται να παρεμποδίσουν την απόδοση ή τη λειτουργία της συσκευής σας κατά τη λήψη μετάδοσης μέσω κινητού σχετικά με μια επείγουσα κατάσταση."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Οι λογαριασμοί σας"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Πρόσβαση στους διαθέσιμους λογαριασμούς."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ανάγνωση ροών δεδομένων στις οποίες έχετε εγγραφεί"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Επιτρέπει στην εφαρμογή τη λήψη λεπτομερειών σχετικά με τις τρέχουσες συγχρονισμένες ροές δεδομένων."</string>
-    <string name="permlab_sendSms" msgid="7544599214260982981">"αποστολή και προβολή μηνυμάτων SMS"</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"πραγματοποιεί αποστολή και προβολή μηνυμάτων SMS"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"Επιτρέπει στην εφαρμογή των αποστολή μηνυμάτων SMS. Αυτό μπορεί να προκαλέσει μη αναμενόμενες χρεώσεις. Οι κακόβουλες εφαρμογές ενδέχεται να σας κοστίσουν χρήματα, αποστέλλοντας μηνύματα χωρίς την έγκρισή σας."</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"ανάγνωση των μηνυμάτων κειμένου σας (SMS ή MMS)"</string>
     <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Επιτρέπει στην εφαρμογή την ανάγνωση μηνυμάτων SMS που είναι αποθηκευμένα στο tablet σας ή στην κάρτα σας SIM. Αυτό δίνει τη δυνατότητα στην εφαρμογή να διαβάζει όλα τα μηνύματα SMS, ανεξάρτητα από το περιεχόμενο ή το επίπεδο εμπιστευτικότητάς τους."</string>
@@ -356,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>
@@ -635,7 +637,7 @@
     <string name="relationTypeSister" msgid="1735983554479076481">"Αδερφή"</string>
     <string name="relationTypeSpouse" msgid="394136939428698117">"Σύζυγος"</string>
     <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Προσαρμοσμένο"</string>
-    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Αρχική σελίδα"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Οικία"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Εργασία"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Άλλο"</string>
     <string name="quick_contacts_not_available" msgid="746098007828579688">"Δεν βρέθηκε καμία εφαρμογή για την προβολή αυτής της επαφής."</string>
@@ -646,7 +648,7 @@
     <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_wrong_pin_code" msgid="2422225591006134936">"Λανθασμένος κωδικός PIN."</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"Για ξεκλείδωμα, πατήστε το πλήκτρο Menu και, στη συνέχεια, το πλήκτρο 0."</string>
     <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Αριθμός έκτακτης ανάγκης"</string>
     <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Καμία υπηρεσία."</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Συνδεδεμένο ως πρόγραμμα εγκατάστασης"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Σύνδεση σε αξεσουάρ USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Αγγίξτε για περισσότερες επιλογές."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Μορφοπ.χώρ.αποθ.USB;"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Να γίνει διαμόρφωση της κάρτας SD;"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Όλα τα αρχεία που είναι αποθηκευμένα στον αποθηκευτικό σας χώρο USB θα διαγραφούν. Αυτή η ενέργεια δεν είναι αναστρέψιμη!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Όλα τα δεδομένα που υπάρχουν στην κάρτα σας θα χαθούν."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Διαμόρφωση"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Συνδέθηκε ο εντοπισμός σφαλμάτων USB"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Απεν. του εντοπ. σφαλμάτων USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Αλλαγή πληκτρολογίου"</string>
@@ -1294,8 +1291,8 @@
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", ασφαλές"</string>
     <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_password" msgid="2333281762128113157">"Λανθασμένος κωδικός πρόσβασης"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"Λανθασμένος κωδικός PIN"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Δοκιμάστε ξανά σε <xliff:g id="NUMBER">%1$d</xliff:g> δευτερόλεπτα."</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"Σχεδιάστε το μοτίβο σας"</string>
     <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Εισαγωγή PIN SIM"</string>
@@ -1305,7 +1302,7 @@
     <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_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ξεκλείδωμα κάρτας SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Εσφαλμένος κωδικός PIN."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Λανθασμένος κωδικός PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Πληκτρολογήστε έναν αριθμό PIN που να αποτελείται από 4 έως 8 αριθμούς."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Ο κωδικός PUK θα πρέπει να αποτελείται από 8 αριθμούς."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Εισαγάγετε ξανά τον κωδικό PUK. Οι επαναλαμβανόμενες προσπάθειες θα απενεργοποιήσουν οριστικά την κάρτα SIM."</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 3a1f74c..55270f7 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Allows the app to receive and process MMS messages. This means that the app could monitor or delete messages sent to your device without showing them to you."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"read mobile broadcast messages"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Allows the app to read mobile broadcast messages received by your device. Cell broadcast alerts are delivered in some locations to warn you of emergency situations. Malicious apps may interfere with the performance or operation of your device when an emergency mobile broadcast is received."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Your accounts"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access the available accounts."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"read subscribed feeds"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Allows the app to get details about the currently synced feeds."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"send and view SMS messages"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connected as an installer"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connected to a USB accessory"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Touch for more options."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format USB storage?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Format SD card?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"All files stored in your USB storage will be erased. This action can\'t be reversed!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"All data on your card will be lost."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Touch to disable USB debugging."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 3a1f74c..55270f7 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Allows the app to receive and process MMS messages. This means that the app could monitor or delete messages sent to your device without showing them to you."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"read mobile broadcast messages"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Allows the app to read mobile broadcast messages received by your device. Cell broadcast alerts are delivered in some locations to warn you of emergency situations. Malicious apps may interfere with the performance or operation of your device when an emergency mobile broadcast is received."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Your accounts"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access the available accounts."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"read subscribed feeds"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Allows the app to get details about the currently synced feeds."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"send and view SMS messages"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connected as an installer"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connected to a USB accessory"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Touch for more options."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format USB storage?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Format SD card?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"All files stored in your USB storage will be erased. This action can\'t be reversed!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"All data on your card will be lost."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Touch to disable USB debugging."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 3a1f74c..55270f7 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Allows the app to receive and process MMS messages. This means that the app could monitor or delete messages sent to your device without showing them to you."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"read mobile broadcast messages"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Allows the app to read mobile broadcast messages received by your device. Cell broadcast alerts are delivered in some locations to warn you of emergency situations. Malicious apps may interfere with the performance or operation of your device when an emergency mobile broadcast is received."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Your accounts"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Access the available accounts."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"read subscribed feeds"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Allows the app to get details about the currently synced feeds."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"send and view SMS messages"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connected as an installer"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connected to a USB accessory"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Touch for more options."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format USB storage?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Format SD card?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"All files stored in your USB storage will be erased. This action can\'t be reversed!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"All data on your card will be lost."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Touch to disable USB debugging."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 80a7fc3..a8f3fbb 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"tomar fotografías y grabar videos"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Teléfono"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"realizar y administrar llamadas telefónicas"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporales"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"acceder a los datos del sensor acerca de tus signos vitales"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperar el contenido de las ventanas"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecciona el contenido de la ventana con la que estés interactuando."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permite que la aplicación reciba y procese mensajes MMS, lo que significa que podría controlar o eliminar mensajes enviados al dispositivo sin mostrártelos."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"Leer mensajes de difusión móvil"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite a la aplicación leer los mensajes de difusión móvil que recibe tu dispositivo. En algunas ubicaciones, las alertas de difusión móvil se envían para informar situaciones de emergencia. Las aplicaciones maliciosas pueden afectar el rendimiento o funcionamiento de tu dispositivo cuando se recibe un un mensaje de difusión móvil de emergencia."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"leer canales suscritos"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite que la aplicación obtenga detalles sobre los feeds sincronizados en este momento."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"enviar y ver mensajes SMS"</string>
@@ -357,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>
@@ -627,7 +628,7 @@
     <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Pareja de hecho"</string>
     <string name="relationTypeFather" msgid="5228034687082050725">"Padre"</string>
     <string name="relationTypeFriend" msgid="7313106762483391262">"Amigo"</string>
-    <string name="relationTypeManager" msgid="6365677861610137895">"Gerente"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"Supervisor"</string>
     <string name="relationTypeMother" msgid="4578571352962758304">"Madre"</string>
     <string name="relationTypeParent" msgid="4755635567562925226">"Padre"</string>
     <string name="relationTypePartner" msgid="7266490285120262781">"Socio"</string>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectado como un instalador"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a un accesorio USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Toca para ver más opciones."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"¿Deseas formatear el almacenamiento USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"¿Deseas formatear la tarjeta SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Se borrarán todos los archivos guardados en el almacenamiento USB. Esta acción no se puede deshacer."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Se perderán todos los datos de tu tarjeta."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formato"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración por USB conectada"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca para desactivar la depuración por USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Cambiar el teclado"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 84fecfc..f1e7490 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permite que la aplicación reciba y procese mensajes MMS, lo que significa que podría utilizar este permiso para controlar o eliminar mensajes enviados al dispositivo sin mostrárselos al usuario."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"leer mensajes de difusión móvil"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite que la aplicación lea mensajes de difusión móvil que haya recibido el dispositivo. Las alertas de difusión móvil se envían en algunas ubicaciones para avisar de situaciones de emergencia. Es posible que las aplicaciones malintencionadas interfieran en el rendimiento o en el funcionamiento del dispositivo si se recibe una alerta de difusión móvil de emergencia."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Tus cuentas"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder a las cuentas disponibles"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"leer feeds a los que está suscrito el usuario"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite que la aplicación obtenga detalles sobre los feeds sincronizados actualmente."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"enviar y ver mensajes SMS"</string>
@@ -356,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>
@@ -504,7 +506,7 @@
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Controla el número de contraseñas incorrectas introducidas para desbloquear la pantalla y bloquea la TV o borra todos los datos del usuario si se introducen demasiadas contraseñas incorrectas."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Controla el número de contraseñas incorrectas introducidas para desbloquear la pantalla y bloquea el teléfono o borra todos los datos del usuario si se introducen demasiadas contraseñas incorrectas."</string>
     <string name="policylab_resetPassword" msgid="4934707632423915395">"Cambiar el bloqueo de pantalla"</string>
-    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Cambia el bloqueo de pantalla."</string>
+    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Cambiar el bloqueo de pantalla"</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Bloquear la pantalla"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Controlar cómo y cuándo se bloquea la pantalla"</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Borrar todos los datos"</string>
@@ -606,7 +608,7 @@
     <string name="imTypeHome" msgid="6241181032954263892">"Casa"</string>
     <string name="imTypeWork" msgid="1371489290242433090">"Trabajo"</string>
     <string name="imTypeOther" msgid="5377007495735915478">"Otro"</string>
-    <string name="imProtocolCustom" msgid="6919453836618749992">"Personalizada"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Personalizado"</string>
     <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
     <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
     <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo!"</string>
@@ -619,13 +621,13 @@
     <string name="orgTypeWork" msgid="29268870505363872">"Trabajo"</string>
     <string name="orgTypeOther" msgid="3951781131570124082">"Otra"</string>
     <string name="orgTypeCustom" msgid="225523415372088322">"Personalizada"</string>
-    <string name="relationTypeCustom" msgid="3542403679827297300">"Personalizada"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"Personalizado"</string>
     <string name="relationTypeAssistant" msgid="6274334825195379076">"Asistente"</string>
     <string name="relationTypeBrother" msgid="8757913506784067713">"Hermano"</string>
-    <string name="relationTypeChild" msgid="1890746277276881626">"Hijo/a"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"Hijo"</string>
     <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Pareja de hecho"</string>
     <string name="relationTypeFather" msgid="5228034687082050725">"Padre"</string>
-    <string name="relationTypeFriend" msgid="7313106762483391262">"Amigo/a"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"Amigo"</string>
     <string name="relationTypeManager" msgid="6365677861610137895">"Jefe"</string>
     <string name="relationTypeMother" msgid="4578571352962758304">"Madre"</string>
     <string name="relationTypeParent" msgid="4755635567562925226">"Padre/madre"</string>
@@ -891,7 +893,7 @@
     <string name="use_a_different_app" msgid="8134926230585710243">"Uitliza otra aplicación"</string>
     <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Para borrar los valores predeterminados, accede a Ajustes del sistema &gt; Aplicaciones &gt; Descargadas."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"Selecciona una acción"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"Seleccionar una aplicación para el dispositivo USB"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"Elegir una aplicación para el dispositivo USB"</string>
     <string name="noApplications" msgid="2991814273936504689">"Ninguna aplicación puede realizar esta acción."</string>
     <string name="aerr_title" msgid="1905800560317137752"></string>
     <string name="aerr_application" msgid="932628488013092776">"Se ha detenido la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>."</string>
@@ -1041,12 +1043,7 @@
     <string name="usb_midi_notification_title" msgid="4850904915889144654">"USB para MIDI"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectado como instalador"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a un accesorio USB"</string>
-    <string name="usb_notification_message" msgid="7347368030849048437">"Toca para obtener más opciones."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"¿Formatear USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"¿Formatear la tarjeta SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Se borrarán todos los archivos almacenados en el almacenamiento USB. Esta acción no se puede deshacer."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Se perderán todos los datos de tu tarjeta."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formato"</string>
+    <string name="usb_notification_message" msgid="7347368030849048437">"Toca para obtener más opciones"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración USB habilitada"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca aquí para inhabilitarla"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Cambiar teclado"</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index a04244f..132379b 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Võimaldab rakendusel vastu võtta ja töödelda multimeediumsõnumeid. See tähendab, et rakendus võib jälgida või kustutada teie seadmele saadetud sõnumeid neid teile näitamata."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"mobiilsidesõnumite lugemine"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Võimaldab rakendusel lugeda seadme vastu võetud mobiilsidesõnumeid. Mobiilsidemärguandeid edastatakse mõnes asukohas eriolukorrast teavitamiseks. Pahatahtlikud rakendused võivad segada seadme toimivust või tööd eriolukorra sõnumi vastuvõtmisel."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Teie kontod"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Juurdepääs saadaolevatele kontodele."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"loe tellitud kanaleid"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Võimaldab rakendusel saada üksikasju praegu sünkroonitavate voogude kohta."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"saata ja vaadata SMS-sõnumeid"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Ühendatud installijana"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ühendatud USB-lisaseadmega"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Puudutage rohkemate valikute kuvamiseks."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Vormind. USB-seade?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Kas vormindada SD-kaart?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Kõik USB-mäluseadmele salvestatud failid kustutatakse. Seda toimingut ei saa tagasi võtta."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kõik kaardil olevad andmed lähevad kaduma."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Vorminda"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-silumine ühendatud"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Puudutage USB-silumise keelamiseks."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Klaviatuuri muutmine"</string>
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml
index 3a35a07..e482f57 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu-rES/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS mezuak jasotzeko eta prozesatzeko baimena ematen die aplikazioei. Horrela, aplikazioak gailura bidalitako mezuak kontrola eta ezaba ditzake zuri erakutsi gabe."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"sare mugikor bidezko igorpen-mezuak irakurtzea"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Gailuak jasotako sare mugikor bidezko igorpenen mezuak irakurtzeko baimena ematen die aplikazioei. Sare mugikor bidezko igorpen-alertak kokapen batzuetan ematen dira larrialdi-egoeren berri emateko. Aplikazio gaiztoek gailuaren errendimendua edo funtzionamendua oztopa dezakete larrialdi-igorpen horietako bat jasotzen denean."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Zure kontuak"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Sartu kontu erabilgarrietan."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"irakurri harpidetutako jarioak"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Unean sinkronizatutako jarioei buruzko xehetasunak lortzea baimentzen die aplikazioei."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"bidali eta ikusi SMS mezuak"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Instalatzaile gisa konektatua"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB osagarri batera konektatuta"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Ukitu aukera gehiago ikusteko."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB memoria formateatu?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD txartela formateatu?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB memorian dauden fitxategi guztiak ezabatuko dira. Ezin izango duzu ekintza hori desegin!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Txarteleko datu guztiak galduko dira."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formateatu"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB arazketa konektatuta"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB arazketa desgaitzeko, ukitu hau."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Aldatu teklatua"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 36ce6e5..a01a5ba 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"‏به برنامه اجازه می‌دهد پیام‌های MMS را دریافت و پردازش کند. این یعنی برنامه می‌تواند پیام‌های ارسالی به دستگاه شما را بدون نمایش آن‌ها به شما حذف یا کنترل کند."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"خواندن پیام‌های پخش سلولی"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"‏به برنامه اجازه می‎دهد پیام‌های پخش سلولی دستگاه شما را بخواند. هشدارهای پخش سلولی در برخی از موقعیت‌های مکانی تحویل داده می‎شوند تا موقعیت‌های اضطراری را به شما اعلام کنند. وقتی پخش سلولی دریافت می‎شود، ممکن است برنامه‎های مخرب در عملکرد یا کارکرد دستگاه شما اختلال ایجاد کنند."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"حساب‌های شما"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"به حساب‌های موجود دسترسی داشته باشید."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"خواندن فیدهای مشترک"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"‏به برنامه اجازه می‎دهد تا جزئیات مربوط به فیدهای همگام شده کنونی را دریافت کند."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"ارسال و نمایش پیام‌های پیامک"</string>
@@ -356,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>
@@ -368,10 +370,10 @@
     <string name="permdesc_transmitIr" product="tablet" msgid="5358308854306529170">"به برنامه اجازه می‌دهد تا از فرستنده مادون قرمز رایانه لوحی استفاده کند."</string>
     <string name="permdesc_transmitIr" product="tv" msgid="3926790828514867101">"به برنامه اجازه می‌دهد تا از فرستنده مادون‌قرمز تلویزیون استفاده کند."</string>
     <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"به برنامه اجازه می‌دهد تا از فرستنده مادون قرمز تلفن استفاده کند."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"تنظیم تصویر زمینه"</string>
-    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"‏به برنامه اجازه می‎دهد تا تصویر زمینه سیستم را تنظیم کند."</string>
-    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"تنظیم اندازه تصویر زمینه"</string>
-    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"‏به برنامه اجازه می‎دهد تا نکات اندازه تصویر زمینه سیستم را تنظیم کند."</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"تنظیم کاغذدیواری"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"‏به برنامه اجازه می‎دهد تا کاغذدیواری سیستم را تنظیم کند."</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"تنظیم اندازه کاغذدیواری"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"‏به برنامه اجازه می‎دهد تا نکات اندازه کاغذدیواری سیستم را تنظیم کند."</string>
     <string name="permlab_setTimeZone" msgid="2945079801013077340">"تنظیم منطقهٔ زمانی"</string>
     <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"‏به برنامه اجازه می‎دهد تا منطقهٔ زمانی رایانهٔ لوحی را تغییر دهد."</string>
     <string name="permdesc_setTimeZone" product="tv" msgid="888864653946175955">"‏به برنامه اجازه می‎دهد منطقه زمانی تلویزیون را تغییر دهد."</string>
@@ -622,8 +624,8 @@
     <string name="relationTypeCustom" msgid="3542403679827297300">"سفارشی"</string>
     <string name="relationTypeAssistant" msgid="6274334825195379076">"دستیار"</string>
     <string name="relationTypeBrother" msgid="8757913506784067713">"برادر"</string>
-    <string name="relationTypeChild" msgid="1890746277276881626">"کودک"</string>
-    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"شریک محلی"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"فرزند"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"هم‌خانه قانونی"</string>
     <string name="relationTypeFather" msgid="5228034687082050725">"پدر"</string>
     <string name="relationTypeFriend" msgid="7313106762483391262">"دوست"</string>
     <string name="relationTypeManager" msgid="6365677861610137895">"مدیر"</string>
@@ -949,7 +951,7 @@
     <string name="volume_icon_description_notification" msgid="7044986546477282274">"میزان صدای اعلان"</string>
     <string name="ringtone_default" msgid="3789758980357696936">"آهنگ زنگ پیش‌فرض"</string>
     <string name="ringtone_default_with_actual" msgid="8129563480895990372">"آهنگ زنگ پیش‌فرض (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
-    <string name="ringtone_silent" msgid="7937634392408977062">"هیچکدام"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"هیچ‌کدام"</string>
     <string name="ringtone_picker_title" msgid="3515143939175119094">"آهنگ‌های زنگ"</string>
     <string name="ringtone_unknown" msgid="5477919988701784788">"آهنگ زنگ ناشناس"</string>
     <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
@@ -968,7 +970,7 @@
     <string name="wifi_no_internet_detailed" msgid="7593858887662270131">"برای گزینه‌ها لمس کنید"</string>
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‏اتصال به Wi-Fi ممکن نیست"</string>
     <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" اتصال اینترنتی ضعیفی دارد."</string>
-    <string name="wifi_connect_alert_title" msgid="8455846016001810172">"اتصال اجازه داده شود؟"</string>
+    <string name="wifi_connect_alert_title" msgid="8455846016001810172">"اتصال مجاز است؟"</string>
     <string name="wifi_connect_alert_message" msgid="6451273376815958922">"‏برنامه %1$s می‌خواهد به شبکه Wifi ‏%2$s وصل شود"</string>
     <string name="wifi_connect_default_application" msgid="7143109390475484319">"برنامه"</string>
     <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
@@ -976,8 +978,8 @@
     <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"‏Wi-Fi Direct شروع نشد."</string>
     <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"‏Wi-Fi Direct روشن است"</string>
     <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"لمس کردن برای تنظیمات"</string>
-    <string name="accept" msgid="1645267259272829559">"پذیرش"</string>
-    <string name="decline" msgid="2112225451706137894">"عدم پذیرش"</string>
+    <string name="accept" msgid="1645267259272829559">"پذیرفتن"</string>
+    <string name="decline" msgid="2112225451706137894">"نپذیرفتن"</string>
     <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"دعوت‌نامه ارسال شد"</string>
     <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"دعوت‌نامه برای اتصال"</string>
     <string name="wifi_p2p_from_message" msgid="570389174731951769">"از:"</string>
@@ -990,8 +992,8 @@
     <string name="select_character" msgid="3365550120617701745">"درج نویسه"</string>
     <string name="sms_control_title" msgid="7296612781128917719">"ارسال پیامک ها"</string>
     <string name="sms_control_message" msgid="3867899169651496433">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; در حال ارسال تعداد زیادی پیامک است. آیا اجازه می‌دهید این برنامه همچنان پیامک ارسال کند؟"</string>
-    <string name="sms_control_yes" msgid="3663725993855816807">"اجازه دادن"</string>
-    <string name="sms_control_no" msgid="625438561395534982">"ردکردن"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"مجاز است"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"اجازه ندارد"</string>
     <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; مایل است پیامی به &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt; ارسال کند."</string>
     <string name="sms_short_code_details" msgid="5873295990846059400">"این مورد "<b>"شاید هزینه‌ای"</b>" را به حساب دستگاه همراهتان بگذارد."</string>
     <string name="sms_premium_short_code_details" msgid="7869234868023975"><b>"این مورد هزینه‌ای را به حساب دستگاه همراهتان می‌گذارد."</b></string>
@@ -999,7 +1001,7 @@
     <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"لغو"</string>
     <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"این انتخاب را به خاطر بسپار"</string>
     <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"‏می‌توانید بعداً آن را در تنظیمات &gt; برنامه‌ها تغییر دهید"</string>
-    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"همیشه مجاز"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"همیشه مجاز است"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"همیشه غیرمجاز"</string>
     <string name="sim_removed_title" msgid="6227712319223226185">"سیم کارت برداشته شد"</string>
     <string name="sim_removed_message" msgid="5450336489923274918">"تا زمانی که با یک سیم‌کارت معتبر دوباره راه‌اندازی نکنید شبکه تلفن همراه غیر قابل‌ دسترس خواهد بود."</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"متصل شده به‌عنوان نصب کننده"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‏به یک وسیله جانبی USB وصل شده است"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"برای گزینه‌های بیشتر لمس کنید."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"‏حافظهٔ USB فرمت شود؟"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"‏کارت SD فرمت شود؟"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"‏همه فایل‌های ذخیره شده در حافظهٔ USB پاک خواهد شد. این عمل را نمی‎توان برگرداند!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"‏تمام اطلاعات روی کارت شما از بین می‎رود."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"قالب"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"‏اشکال‌زدایی USB متصل شد"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"‏غیرفعال‌کردن اشکال‌زدایی‌USB: با لمس آن."</string>
     <string name="select_input_method" msgid="8547250819326693584">"تغییر صفحه‌کلید"</string>
@@ -1115,17 +1112,17 @@
     <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"یک یا چند برنامه زیر برای دسترسی به حساب شما در زمان حال و آینده درخواست مجوز کرده‌اند."</string>
     <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"می‌خواهید به این درخواست اجازه دهید؟"</string>
     <string name="grant_permissions_header_text" msgid="6874497408201826708">"درخواست دسترسی"</string>
-    <string name="allow" msgid="7225948811296386551">"مجاز"</string>
-    <string name="deny" msgid="2081879885755434506">"رد کردن"</string>
+    <string name="allow" msgid="7225948811296386551">"ارزیابی‌شده"</string>
+    <string name="deny" msgid="2081879885755434506">"اجازه ندارد"</string>
     <string name="permission_request_notification_title" msgid="6486759795926237907">"مجوز درخواست شد"</string>
     <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"مجوز\nبرای حساب <xliff:g id="ACCOUNT">%s</xliff:g> درخواست شد."</string>
     <string name="forward_intent_to_owner" msgid="1207197447013960896">"شما از این برنامه در خارج از نمایه کاری‌تان استفاده می‌کنید"</string>
     <string name="forward_intent_to_work" msgid="621480743856004612">"از این برنامه در نمایه کاری‌تان استفاده می‌کنید"</string>
     <string name="input_method_binding_label" msgid="1283557179944992649">"روش ورودی"</string>
     <string name="sync_binding_label" msgid="3687969138375092423">"همگام‌سازی"</string>
-    <string name="accessibility_binding_label" msgid="4148120742096474641">"قابلیت دسترسی"</string>
-    <string name="wallpaper_binding_label" msgid="1240087844304687662">"تصویر زمینه"</string>
-    <string name="chooser_wallpaper" msgid="7873476199295190279">"تغییر تصویر زمینه"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"دسترس‌پذیری"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"کاغذدیواری"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"تغییر کاغذدیواری"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"شنونده اعلان"</string>
     <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ارائه‌دهنده وضعیت"</string>
     <string name="vpn_title" msgid="19615213552042827">"‏VPN فعال شد"</string>
@@ -1180,7 +1177,7 @@
     <string name="sync_too_many_deletes" msgid="5296321850662746890">"از حد مجاز حذف فراتر رفت"</string>
     <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"‏<xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> مورد حذف شده برای <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>، حساب <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> وجود دارد. می‎خواهید چه کاری انجام دهید؟"</string>
     <string name="sync_really_delete" msgid="2572600103122596243">"حذف موارد"</string>
-    <string name="sync_undo_deletes" msgid="2941317360600338602">"لغو موارد حذف شده"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"واگرد موارد حذف شده"</string>
     <string name="sync_do_nothing" msgid="3743764740430821845">"اکنون کاری انجام نشود"</string>
     <string name="choose_account_label" msgid="5655203089746423927">"انتخاب حساب"</string>
     <string name="add_account_label" msgid="2935267344849993553">"افزودن یک حساب"</string>
@@ -1333,9 +1330,9 @@
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"حذف"</string>
     <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"میزان صدا را به بالاتر از حد توصیه شده افزایش می‌دهید؟\n\nگوش دادن به صداهای بلند برای مدت طولانی می‌تواند به شنوایی‌تان آسیب وارد کند."</string>
-    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"برای فعال کردن قابلیت دسترسی، با دو انگشت خود همچنان به طرف پایین فشار دهید."</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"برای فعال کردن دسترس‌پذیری، با دو انگشت خود همچنان به طرف پایین فشار دهید."</string>
     <string name="accessibility_enabled" msgid="1381972048564547685">"قابلیت دسترسی فعال شد."</string>
-    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"قابلیت دسترسی لغو شد."</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"دسترس‌پذیری لغو شد."</string>
     <string name="user_switched" msgid="3768006783166984410">"کاربر کنونی <xliff:g id="NAME">%1$s</xliff:g>."</string>
     <string name="user_switching_message" msgid="2871009331809089783">"در حالت تغییر به <xliff:g id="NAME">%1$s</xliff:g>…"</string>
     <string name="owner_name" msgid="2716755460376028154">"دارنده"</string>
@@ -1458,7 +1455,7 @@
     <string name="select_year" msgid="7952052866994196170">"انتخاب سال"</string>
     <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> حذف شد"</string>
     <string name="managed_profile_label_badge" msgid="2355652472854327647">"<xliff:g id="LABEL">%1$s</xliff:g> محل کار"</string>
-    <string name="lock_to_app_toast" msgid="7570091317001980053">"برای برداشتن پین این صفحه، هم‌زمان «بازگشت» و «نمای کلی» را لمس کنید و نگه دارید."</string>
+    <string name="lock_to_app_toast" msgid="7570091317001980053">"برای برداشتن پین این صفحه، هم‌زمان «برگشت» و «نمای کلی» را لمس کنید و نگه دارید."</string>
     <string name="lock_to_app_toast_accessible" msgid="8239120109365070664">"برای برداشتن پین این صفحه، «نمای کلی» را لمس کنید و نگه دارید."</string>
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"برنامه پین شده است: برداشتن پین در این دستگاه مجاز نیست."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"صفحه پین شد"</string>
@@ -1528,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 1e19ea6..5379e9f 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -210,7 +210,7 @@
     <string name="global_action_power_off" msgid="4471879440839879722">"Katkaise virta"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"Virheraportti"</string>
     <string name="bugreport_title" msgid="2667494803742548533">"Luo virheraportti"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Toiminto kerää tietoja nykyisestä laitteen tilasta ja lähettää ne sähköpostitse. Kestää hetken aikaa, ennen kuin virheraportti on valmis lähetettäväksi, ole kärsivällinen."</string>
+    <string name="bugreport_message" msgid="398447048750350456">"Toiminto kerää tietoja laitteen tilasta ja lähettää ne sähköpostitse. Virheraportti on valmis lähetettäväksi hetken kuluttua - kiitos kärsivällisyydestäsi."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Äänetön tila"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Äänet ovat POISSA KÄYTÖSTÄ"</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Äänet ovat KÄYTÖSSÄ"</string>
@@ -246,9 +246,9 @@
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"käyttää anturitietoja elintoiminnoistasi"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Noutaa ikkunan sisältöä"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Tarkistaa käyttämäsi ikkunan sisältö."</string>
-    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Ottaa kosketuksella tutkiminen käyttöön"</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Ottaa kosketuksella tutkimisen käyttöön"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Kosketetut kohteet sanotaan ääneen ja ruudulla voi liikkua eleiden avulla."</string>
-    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Ottaa parannettu verkon esteettömyys käyttöön"</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Ottaa verkon paremman esteettömyyden käyttöön"</string>
     <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Sovellus voi asentaa ohjelmia tehdäkseen sisällöstään esteettömämmän."</string>
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Tarkkailla kirjoittamaasi tekstiä"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Sisältää henkilökohtaisia tietoja, kuten luottokortin numeroita ja salasanoja."</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Antaa sovelluksen vastaanottaa ja käsitellä multimediaviestejä. Sovellus voi valvoa tai poistaa laitteeseesi lähetettyjä viestejä näyttämättä niitä sinulle."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lue tiedotteita"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Antaa sovelluksen lukea laitteesi vastaanottamia tiedotteita. Tiedotteiden avulla ilmoitetaan hätätilanteista joissakin paikoissa. Haitalliset sovellukset voivat häiritä laitteen toimintaa laitteen vastaanottaessa hätätiedotteen."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Omat tilit"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Käytä saatavilla olevia tilejä."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lukea tilattuja syötteitä"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Antaa sovelluksen saada tietoja tällä hetkellä synkronoitavista syötteistä."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"lähettää ja tarkastella tekstiviestejä"</string>
@@ -356,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,9 +506,9 @@
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Valvo väärien salasanojen määrää ruudun lukitusta avattaessa ja lukitse televisio tai poista kaikki tämän käyttäjän tiedot, jos salasana kirjoitetaan väärin liian monta kertaa."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Valvo väärien salasanojen määrää ruudun lukitusta avattaessa ja lukitse puhelin tai poista kaikki tämän käyttäjän tiedot, jos salasana kirjoitetaan väärin liian monta kertaa."</string>
     <string name="policylab_resetPassword" msgid="4934707632423915395">"Muuta näytön lukitus"</string>
-    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Muuta näytön lukitus."</string>
-    <string name="policylab_forceLock" msgid="2274085384704248431">"Lukita ruutu"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Hallinnoida, milloin ja miten ruutu lukittuu."</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">"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>
@@ -698,7 +700,7 @@
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Tilin lukituksen poisto"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Liikaa kuvionpiirtoyrityksiä"</string>
     <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Poista lukitus kirjautumalla sisään Google-tililläsi."</string>
-    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Käyttäjänimi (sähköposti)"</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Käyttäjätunnus (sähköposti)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Salasana"</string>
     <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Kirjaudu sisään"</string>
     <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Virheellinen käyttäjänimi tai salasana."</string>
@@ -1041,14 +1043,9 @@
     <string name="usb_midi_notification_title" msgid="4850904915889144654">"USB on MIDI-tilassa"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Kytketty asennusohjelmana"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Liitetty USB-laitteeseen"</string>
-    <string name="usb_notification_message" msgid="7347368030849048437">"Näet lisää vaihtoehtoja koskettamalla."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Alusta USB-tila?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Alustetaanko SD-kortti?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Kaikki USB-tallennustilaan tallennetut tiedostot poistetaan. Tätä toimintoa ei voi kumota!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kaikki kortilla olevat tiedot menetetään."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Muoto"</string>
+    <string name="usb_notification_message" msgid="7347368030849048437">"Lisää vaihtoehtoja koskettamalla"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-vianetsintä yhdistetty"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"Sulje USB-vianetsintä koskettamalla tätä."</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"Sulje USB-vianetsintä koskettamalla."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Vaihda näppäimistö"</string>
     <string name="configure_input_methods" msgid="4769971288371946846">"Valitse näppäimistöt"</string>
     <string name="show_ime" msgid="9157568568695230830">"Näytä syöttötapa"</string>
@@ -1312,7 +1309,7 @@
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodit eivät täsmää"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liikaa kuvionpiirtoyrityksiä"</string>
     <string name="kg_login_instructions" msgid="1100551261265506448">"Poista lukitus kirjautumalla sisään Google-tililläsi."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Käyttäjänimi (sähköposti)"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Käyttäjätunnus (sähköposti)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"Salasana"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"Kirjaudu sisään"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"Virheellinen käyttäjänimi tai salasana."</string>
@@ -1463,7 +1460,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Sovellus on kiinnitetty. Irrottaminen ei ole sallittua tällä laitteella."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"Näyttö kiinnitetty"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"Näyttö irrotettu"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Pyydä PIN-koodi ennen irrotusta"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Pyydä PIN ennen irrotusta"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pyydä lukituksenpoistokuvio ennen irrotusta"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Pyydä salasana ennen irrotusta"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Järjestelmänvalvoja on asentanut paketin."</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 3ae8ba9..4cce540 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"prendre des photos et filmer des vidéos"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Téléphone"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"faire et gérer des appels téléphoniques"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Capteurs corporels"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"accéder aux données des capteurs sur vos signes vitaux"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Récupérer le contenu d\'une fenêtre"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecter le contenu d\'une fenêtre avec laquelle vous interagissez."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permet à l\'application de recevoir et de traiter les messages multimédias. Cette autorisation lui donne la possibilité de surveiller ou de supprimer les messages envoyés à votre appareil sans vous les montrer."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lire les messages de diffusion cellulaire"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permet à l\'application de lire les messages de diffusion cellulaire que votre appareil reçoit. Dans certaines zones géographiques, des alertes vous sont envoyées afin de vous prévenir en cas de situation d\'urgence. Des applications malveillantes peuvent venir perturber les performances ou le fonctionnement de votre appareil lors de la réception d\'un message de diffusion cellulaire."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Vos comptes"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accéder aux comptes disponibles"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lire les flux auxquels vous êtes abonné"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permet à l\'application d\'obtenir des données sur les flux en cours de synchronisation."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"envoyer et afficher des messages texte"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connecté en tant que programme d\'installation"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connecté à un accessoire USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Touchez pour afficher plus d\'options."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formater mémoire?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formater la carte SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Tous les fichiers stockés sur la mémoire de stockage USB vont être effacés. Cette action est irréversible."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Toutes les données stockées sur votre carte seront perdues."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Mise en forme"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Débogage USB connecté"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Appuyez pour désactiver le débogage USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Changer de clavier"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index f4e19fb..0979393 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"prendre des photos et enregistrer des vidéos"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Téléphone"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"effectuer et gérer des appels téléphoniques"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Capteurs corporels"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"accéder aux données des capteurs relatives à vos signes vitaux"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Récupérer le contenu d\'une fenêtre"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecter le contenu d\'une fenêtre avec laquelle vous interagissez"</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permet à l\'application de recevoir et de traiter les MMS. Cette autorisation lui donne la possibilité de surveiller ou supprimer les messages envoyés à votre appareil sans vous les montrer."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lire les messages reçus via un canal de diffusion cellulaire"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permet à l\'application de lire les messages que votre appareil reçoit via un canal de diffusion cellulaire. Dans certaines zones géographiques, des alertes vous sont envoyées afin de vous prévenir en cas de situation d\'urgence. Les applications malveillantes peuvent venir perturber les performances ou le fonctionnement de votre appareil lorsqu\'un message est reçu via un canal de diffusion cellulaire."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Vos comptes"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accéder aux comptes disponibles"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lire les flux auxquels vous êtes abonné"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permet à l\'application d\'obtenir des informations sur les flux en cours de synchronisation."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"envoyer et consulter des SMS"</string>
@@ -357,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>
@@ -1042,12 +1043,7 @@
     <string name="usb_midi_notification_title" msgid="4850904915889144654">"USB en mode MIDI"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connecté en tant que programme d\'installation"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connecté à un accessoire USB"</string>
-    <string name="usb_notification_message" msgid="7347368030849048437">"Appuyez pour afficher plus d\'options."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formater mémoire ?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formater la carte SD ?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Tous les fichiers stockés sur la mémoire de stockage USB vont être effacés. Cette action est irréversible."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Toutes les données stockées sur votre carte seront perdues."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
+    <string name="usb_notification_message" msgid="7347368030849048437">"Appuyez pour afficher plus d\'options"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Débogage USB activé"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Appuyez pour désact. débogage USB"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Changer de clavier"</string>
@@ -1470,7 +1466,7 @@
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Installé par votre administrateur"</string>
     <string name="package_updated_device_owner" msgid="8856631322440187071">"Mis à jour par votre administrateur"</string>
     <string name="package_deleted_device_owner" msgid="7650577387493101353">"Supprimé par votre administrateur"</string>
-    <string name="battery_saver_description" msgid="1960431123816253034">"Pour améliorer l\'autonomie de la batterie, l\'économiseur de batterie réduit les performances de votre appareil, et il désactive le vibreur, les services de localisation et la plupart des données en arrière-plan. La messagerie électronique, les SMS/MMS et les autres applications basées sur la synchronisation ne sont mises à jour que si vous les ouvrez.\n\nL\'économiseur de batterie s\'éteint automatiquement lorsque votre appareil est en charge."</string>
+    <string name="battery_saver_description" msgid="1960431123816253034">"Pour améliorer l\'autonomie de la batterie, l\'économiseur de batterie réduit les performances et désactive le vibreur, les services de localisation et la plupart des données en arrière-plan. Les messageries électroniques ou autres applications utilisant la synchronisation pourraient ne pas se mettre à jour, sauf si vous les ouvrez.\n\nL\'économiseur de batterie s\'éteint automatiquement lorsque l\'appareil est en charge."</string>
     <plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
       <item quantity="one">Pendant %1$d minute (jusqu\'à <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
       <item quantity="other">Pendant %1$d minutes (jusqu\'à <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml
index f2db033..f6340ef 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl-rES/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permite á aplicación recibir e procesar mensaxes MMS. Isto significa que a aplicación pode supervisar ou eliminar mensaxes enviadas ao teu dispositivo sen mostrarchas."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ler mensaxes de difusión móbil"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite á aplicación ler mensaxes de difusión móbil recibidas polo teu dispositivo. As alertas de difusión móbil entréganse nalgunhas situacións para avisar de situacións de emerxencia. É posible que aplicacións maliciosas afecten ao rendemento ou funcionamento do teu dispositivo cando se recibe unha difusión móbil de emerxencia."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"As túas contas"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acceder ás contas dispoñibles."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ler feeds subscritos"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite á aplicación obter detalles acerca dos feeds sincronizados actualmente."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"enviar e consultar mensaxes de SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectado como instalador"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a un accesorio USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Toca para ver máis opcións."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Queres formatar o almacenamento USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Queres formatar a tarxeta SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Borraranse todos os ficheiros gardados no teu almacenamento USB. Esta acción non se pode desfacer."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Perderanse todos os datos da túa tarxeta."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formato"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración USB conectada"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca para desactivar a depuración de erros de USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Cambiar teclado"</string>
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml
index 78de77e..c5f1f3c 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu-rIN/strings.xml
@@ -231,11 +231,11 @@
     <string name="permgrouplab_location" msgid="7275582855722310164">"સ્થાન"</string>
     <string name="permgroupdesc_location" msgid="1346617465127855033">"આ ઉપકરણના સ્થાનને ઍક્સેસ કરો"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"કૅલેન્ડર"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"તમારા કેલેન્ડરને ઍક્સેસ કરો"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"તમારા કેલેન્ડરને ઍક્સેસ કરવાની"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS સંદેશા મોકલો અને જુઓ"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS સંદેશા મોકલો અને જોવાની"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"સ્ટોરેજ"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"તમારા ઉપકરણ પર ફોટા, મીડિયા અને ફાઇલો ઍક્સેસ કરો"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"તમારા ઉપકરણ પર ફોટા, મીડિયા અને ફાઇલો ઍક્સેસ કરવાની"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"માઇક્રોફોન"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"ઑડિઓ રેકોર્ડ કરો"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"કૅમેરો"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"એપ્લિકેશનને MMS સંદેશા પ્રાપ્ત કરવાની અને તેના પર પ્રક્રિયા કરવાની મંજૂરી આપે છે. આનો અર્થ એ કે એપ્લિકેશન તમને દર્શાવ્યા વિના તમારા ઉપકરણ પર મોકલેલ સંદેશાઓનું નિરીક્ષણ કરી શકે છે અથવા કાઢી નાખી શકે છે."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"સેલ બ્રોડકાસ્ટ સંદેશા વાંચો"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"એપ્લિકેશનને તમારા ઉપકરણ દ્વારા પ્રાપ્ત થયેલ સેલ બ્રોડકાસ્ટ સંદેશાને વાંચવાની મંજૂરી આપે છે. સેલ બ્રોડકાસ્ટ ચેતવણીઓ તમને કટોકટીની સ્થિતિઓ અંગે ચેતવવા માટે કેટલાક સ્થાનોમાં વિતરિત થાય છે. જ્યારે કટોકટીનો સેલ બ્રોડકાસ્ટ પ્રાપ્ત થાય ત્યારે દુર્ભાવનાપૂર્ણ એપ્લિકેશન્સ તમારા ઉપકરણના પ્રદર્શન અથવા ઓપરેશનમાં હસ્તક્ષેપ કરી શકે છે."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"તમારા એકાઉન્ટ્સ"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ઉપલબ્ધ એકાઉન્ટ્સ ઍક્સેસ કરો."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"સબ્સ્ક્રાઇબ કરેલ ફીડ્સ વાંચો"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"એપ્લિકેશનને હાલમાં સમન્વયિત ફીડ્સ વિશે વિગતો મેળવવાની મંજૂરી આપે છે."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS સંદેશા મોકલો અને જુઓ"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ઇન્સ્ટોલર તરીકે કનેક્ટ કર્યું"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB ઍક્સેસરીથી કનેક્ટ થયાં"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"વધુ વિકલ્પો માટે ટચ કરો."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB સંગ્રહને ફોર્મેટ કરીએ?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD કાર્ડ ફોર્મેટ કરીએ?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"તમારા USB સંગ્રહમાં સંગ્રહિત તમામ ફાઇલો કાઢી નાખવામાં આવશે. આ ક્રિયા પલટાવી શકાતી નથી!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"તમારા કાર્ડ પરનો બધો ડેટા ગુમ થઈ જશે."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ફોર્મેટ"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ડીબગિંગ કનેક્ટ થયું."</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ડીબગિંગ અક્ષમ કરવા માટે ટચ કરો."</string>
     <string name="select_input_method" msgid="8547250819326693584">"કીબોર્ડ બદલો"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 79f376b..97ba032 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"ऐप्स  को MMS संदेशों को प्राप्‍त और संसाधित करने देता है. इसका अर्थ है कि ऐप्स  आपके डिवाइस पर भेजे गए संदेशों की निगरानी आपको दिखाए बिना कर सकता है और उन्‍हें हटा सकता है."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारण संदेश पढ़ें"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ऐप्स को आपके डिवाइस द्वारा प्राप्त सेल प्रसारण संदेशों को पढ़ने देता है. कुछ स्‍थानों पर आपको आपातकालीन स्‍थितियों की चेतावनी देने के लिए सेल प्रसारण अलर्ट वितरित किए जाते हैं. आपातकालीन सेल प्रसारण प्राप्त होने पर दुर्भावनापूर्ण ऐप्स आपके डिवाइस के निष्‍पादन या संचालन में हस्‍तक्षेप कर सकते हैं."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"आपके खाते"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्‍ध खातों में पहुंचें."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्यता-प्राप्त फ़ीड पढ़ें"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ऐप्स को वर्तमान में समन्वयित फ़ीड के बारे में विवरण प्राप्त करने देता है."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS संदेश भेजें और देखें"</string>
@@ -356,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>
@@ -507,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>
@@ -939,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"किसी इंस्‍टॉलर के रूप में कनेक्‍ट किया गया"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB सहायक सामग्री से कनेक्‍ट कि‍या गया"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"और विकल्पों के लिए स्पर्श करें."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB मेमोरी फ़ॉर्मेट करें?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD कार्ड प्रारूपित करें?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"आपके USB मेमोरी में संग्रहीत सभी फ़ाइलें मिट जाएंगी. यह क्रिया पूर्ववत नहीं की जा सकती!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"आपके कार्ड का सभी डेटा खो जाएगा."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"प्रारूपित करें"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डीबग कनेक्ट किया गया"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डीबग करना अक्षम करने के लिए स्‍पर्श करें."</string>
     <string name="select_input_method" msgid="8547250819326693584">"कीबोर्ड बदल सकता है"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 3b7e048..d91170a 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -243,8 +243,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"snimati fotografije i videozapise"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"uspostavljati telefonske pozive i upravljati njima"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Biometrijski senzori"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"pristupiti podacima senzora o vašim vitalnim znakovima"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Dohvaćati sadržaj prozora"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Istražite sadržaj prozora koji upotrebljavate."</string>
@@ -272,8 +271,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Aplikaciji omogućuje primanje i obradu MMS poruka. To znači da aplikacija može nadzirati ili izbrisati poruke poslane na vaš uređaj, a da vam ih ne prikaže."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"čitaj poruke koje se emitiraju unutar mobilne mreže"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Omogućuje aplikaciji čitanje poruka emitiranih unutar mobilne mreže koje prima vaš uređaj. Upozorenja koja se emitiraju na području mobilne mreže dostavljaju se na nekim lokacijama kako bi upozorila korisnike na hitne situacije. Zlonamjerne aplikacije mogu ometati izvršavanje ili rad vašeg uređaja kada stigne hitno upozorenje koje se emitira unutar mobilne mreže."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pristup dostupnim računima."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"čitanje pretplaćenih feedova"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Aplikaciji omogućuje dohvaćanje detalja o trenutačno sinkroniziranim feedovima."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"slati i pregledavati SMS poruke"</string>
@@ -358,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>
@@ -370,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>
@@ -528,9 +529,9 @@
     <string name="policylab_disableKeyguardFeatures" msgid="8552277871075367771">"Onemogući dio značajki zaklj. zaslona"</string>
     <string name="policydesc_disableKeyguardFeatures" msgid="2044755691354158439">"Sprječava upotrebu nekih značajki zaključavanja zaslona."</string>
   <string-array name="phoneTypes">
-    <item msgid="8901098336658710359">"Početna"</item>
+    <item msgid="8901098336658710359">"Privatni"</item>
     <item msgid="869923650527136615">"Mobilni"</item>
-    <item msgid="7897544654242874543">"Posao"</item>
+    <item msgid="7897544654242874543">"Službeni"</item>
     <item msgid="1103601433382158155">"Službeni faks"</item>
     <item msgid="1735177144948329370">"Faks kod kuće"</item>
     <item msgid="603878674477207394">"Dojavljivač"</item>
@@ -538,20 +539,20 @@
     <item msgid="9192514806975898961">"Prilagođeno"</item>
   </string-array>
   <string-array name="emailAddressTypes">
-    <item msgid="8073994352956129127">"Početna"</item>
-    <item msgid="7084237356602625604">"Posao"</item>
+    <item msgid="8073994352956129127">"Privatna"</item>
+    <item msgid="7084237356602625604">"Službena"</item>
     <item msgid="1112044410659011023">"Ostalo"</item>
     <item msgid="2374913952870110618">"Prilagođeno"</item>
   </string-array>
   <string-array name="postalAddressTypes">
-    <item msgid="6880257626740047286">"Početna"</item>
-    <item msgid="5629153956045109251">"Posao"</item>
+    <item msgid="6880257626740047286">"Privatna"</item>
+    <item msgid="5629153956045109251">"Službena"</item>
     <item msgid="4966604264500343469">"Ostalo"</item>
     <item msgid="4932682847595299369">"Prilagođeno"</item>
   </string-array>
   <string-array name="imAddressTypes">
-    <item msgid="1738585194601476694">"Početna"</item>
-    <item msgid="1359644565647383708">"Posao"</item>
+    <item msgid="1738585194601476694">"Privatni"</item>
+    <item msgid="1359644565647383708">"Službeni"</item>
     <item msgid="7868549401053615677">"Ostalo"</item>
     <item msgid="3145118944639869809">"Prilagođeno"</item>
   </string-array>
@@ -571,9 +572,9 @@
     <item msgid="1648797903785279353">"Jabber"</item>
   </string-array>
     <string name="phoneTypeCustom" msgid="1644738059053355820">"Prilagođeno"</string>
-    <string name="phoneTypeHome" msgid="2570923463033985887">"Početna"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Privatni"</string>
     <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobilni"</string>
-    <string name="phoneTypeWork" msgid="8863939667059911633">"Posao"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"Službeni"</string>
     <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Službeni faks"</string>
     <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Faks kod kuće"</string>
     <string name="phoneTypePager" msgid="7582359955394921732">"Dojavljivač"</string>
@@ -587,7 +588,7 @@
     <string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
     <string name="phoneTypeTelex" msgid="3367879952476250512">"Teleks"</string>
     <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
-    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Poslovni mobitel"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Službeni mobitel"</string>
     <string name="phoneTypeWorkPager" msgid="649938731231157056">"Poslovni dojavljivač"</string>
     <string name="phoneTypeAssistant" msgid="5596772636128562884">"Pomoćnik"</string>
     <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
@@ -596,17 +597,17 @@
     <string name="eventTypeAnniversary" msgid="3876779744518284000">"Godišnjica"</string>
     <string name="eventTypeOther" msgid="7388178939010143077">"Drugo"</string>
     <string name="emailTypeCustom" msgid="8525960257804213846">"Prilagođeno"</string>
-    <string name="emailTypeHome" msgid="449227236140433919">"Početna"</string>
-    <string name="emailTypeWork" msgid="3548058059601149973">"Posao"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Privatna"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"Službena"</string>
     <string name="emailTypeOther" msgid="2923008695272639549">"Ostalo"</string>
     <string name="emailTypeMobile" msgid="119919005321166205">"Mobilni"</string>
     <string name="postalTypeCustom" msgid="8903206903060479902">"Prilagođeno"</string>
-    <string name="postalTypeHome" msgid="8165756977184483097">"Početna"</string>
-    <string name="postalTypeWork" msgid="5268172772387694495">"Posao"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Privatna"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"Službena"</string>
     <string name="postalTypeOther" msgid="2726111966623584341">"Ostalo"</string>
     <string name="imTypeCustom" msgid="2074028755527826046">"Prilagođeno"</string>
-    <string name="imTypeHome" msgid="6241181032954263892">"Početna"</string>
-    <string name="imTypeWork" msgid="1371489290242433090">"Posao"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Privatna"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"Službeni"</string>
     <string name="imTypeOther" msgid="5377007495735915478">"Ostalo"</string>
     <string name="imProtocolCustom" msgid="6919453836618749992">"Prilagođeno"</string>
     <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
@@ -625,7 +626,7 @@
     <string name="relationTypeAssistant" msgid="6274334825195379076">"Pomoćnik"</string>
     <string name="relationTypeBrother" msgid="8757913506784067713">"Brat"</string>
     <string name="relationTypeChild" msgid="1890746277276881626">"Dijete"</string>
-    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Partner u kućanstvu"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Partner u kućan."</string>
     <string name="relationTypeFather" msgid="5228034687082050725">"Otac"</string>
     <string name="relationTypeFriend" msgid="7313106762483391262">"Prijatelj"</string>
     <string name="relationTypeManager" msgid="6365677861610137895">"Voditelj"</string>
@@ -637,8 +638,8 @@
     <string name="relationTypeSister" msgid="1735983554479076481">"Sestra"</string>
     <string name="relationTypeSpouse" msgid="394136939428698117">"Bračni partner"</string>
     <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Prilagođeno"</string>
-    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Početna"</string>
-    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Posao"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Privatna"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Službena"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Drugo"</string>
     <string name="quick_contacts_not_available" msgid="746098007828579688">"Nema aplikacije za prikazivanje tog kontakta."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Unesite PIN kôd"</string>
@@ -1050,11 +1051,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Spojen kao instalacijski program"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Spojen na USB pribor"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Dodirnite za više opcija."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format. USB pohranu?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formatirati SD karticu?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Sve datoteke pohranjene na vašoj USB pohrani bit će izbrisane. Ta se radnja ne može poništiti!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Svi podaci na kartici bit će izgubljeni."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Priključen je alat za uklanjanje pogrešaka USB-om"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Dodirnite da se onemogući otklanjanje pogrešaka USB-om."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Promjena tipkovnice"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 9a4bd5a..0005a756 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Lehetővé teszi az alkalmazás számára, hogy MMS-eket fogadjon és dolgozzon fel. Ez azt jelenti, hogy az alkalmazás megfigyelheti vagy törölheti a beérkező üzeneteket anélkül, hogy Ön látná azokat."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"cellán belüli üzenetek olvasása"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Lehetővé teszi az alkalmazás számára az eszközre érkező cellán belüli üzenetek olvasását. Bizonyos helyeken figyelmeztető üzeneteket kaphat a cellán belül a vészhelyzetekről. A rosszindulatú alkalmazások befolyásolhatják az eszköz  teljesítményét vagy működését vészhelyzeti cellaüzenet érkezésekor."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Az Ön fiókjai"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Hozzáférés az elérhető fiókokhoz."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"feliratkozott hírcsatornák olvasása"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Lehetővé teszi az alkalmazás számára, hogy részleteket kapjon a jelenleg szinkronizált hírcsatornákról."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS-ek küldése és megtekintése"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Csatlakoztatva telepítőként"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Csatlakoztatva egy USB-kiegészítőhöz"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Érintse meg a további lehetőségekhez."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB-tár formázása?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD-kártya formázása?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Az USB-háttértáron tárolt összes fájl törlésre kerül. Ez a művelet nem visszavonható!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"A kártyán lévő összes adat elvész."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formázás"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB hibakereső csatlakoztatva"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Érintse meg az USB hibakeresés kikapcsolásához."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Billentyűzet megváltoztatása"</string>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index b8e944f..6402e31 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Թույլ է տալիս հավելվածին ստանալ և մշակել MMS հաղորդագրությունները: Սա նշանակում է, որ հավելվածը կարող է ստուգել կամ ջնջել ձեր սարքին ուղարկված հաղորդագրությունները` առանց դրանք ձեզ ցուցադրելու:"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"կարդալ բջջային զեկուցվող հաղորդագրությունները"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Թույլ է տալիս հավելվածին կարդալ ձեր սարքի կողմից ստացված բջջային հեռարձակվող հաղորդագրությունները: Բջջային հեռարձակվող զգուշացումները ուղարկվում են որոշ վայրերում` արտակարգ իրավիճակների մասին ձեզ զգուշացնելու համար: Վնասարար հավելվածները կարող են խանգարել ձեր սարքի արդյունավետությանը կամ շահագործմանը, երբ ստացվում է արտակարգ իրավիճակի մասին բջջային հաղորդում:"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ձեր հաշիվները"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Մուտքի հնարավորություն առկա հաշիվներ:"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"կարդալ բաժանորդագրված հոսքերը"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Թույլ է տալիս հավելվածին մանրամասներ ստանալ ընթացիկ համաժամեցված հոսքերի մասին:"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS հաղորդագրությունների ուղարկում և ընթերցում"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Միացված է որպես տեղադրիչ"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Կապակցված է USB լրասարքի"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Հպեք՝ լրացուցիչ ընտրանքների համար:"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Ֆորմատավորե՞լ USB կրիչը:"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Ֆորմատավորե՞լ SD քարտը:"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Ձեր USB կրիչում պահվող բոլոր ֆայլերը կջնջվեն: Այս գործողությունը անշրջելի է:"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Ձեր քարտի բոլոր տվյալները կկորեն:"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Ձևաչափ"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB վրիպազերծումը միացված է"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Հպեք` USB կարգաբերումը կասեցնելու համար:"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Փոխել ստեղնաշարը"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 44bdf3e..0c8b3ff 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Memungkinkan aplikasi menerima dan memproses pesan MMS. Ini artinya aplikasi dapat memantau atau menghapus pesan yang dikirim ke perangkat Anda tanpa menunjukkannya kepada Anda."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"membaca pesan siaran seluler"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Mengizinkan aplikasi membaca pesan siaran seluler yang diterima perangkat Anda. Lansiran siaran seluler dikirimkan di beberapa lokasi untuk memperingatkan Anda tentang situasi darurat. Aplikasi berbahaya dapat mengganggu kinerja atau operasi perangkat Anda saat siaran seluler darurat diterima."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Akun-akun Anda"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akun yang tersedia."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"baca umpan langganan"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Mengizinkan apl mendapatkan detail tentang umpan yang saat ini sedang disinkronkan."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"mengirim dan melihat pesan SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Tersambung sebagai pemasang"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Tersambung ke aksesori USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Sentuh untuk opsi lainnya."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format penyimpanan USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Format kartu SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Semua file yang tersimpan dalam penyimpanan USB Anda akan dihapus. Tindakan ini tidak dapat diurungkan!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Semua data di kartu Anda akan hilang."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Debugging USB terhubung"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Sentuh untuk menonaktifkan debugging USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Ubah keyboard"</string>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index 8801523..d90ad2b 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"taka myndir og taka upp myndskeið"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Sími"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"hringja og stjórna símtölum"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Líkamsskynjarar"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"aðgangur að skynjaragögnum yfir lífsmörk þín"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Sækja innihald glugga"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Kanna innihald glugga sem þú ert að nota."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Leyfir forriti að taka á móti og vinna úr MMS-skilaboðum. Þetta þýðir að forritið getur fylgst með eða eytt skilaboðum sem send eru í tækið án þess að birta þér þau."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lesa skilaboð frá endurvarpa"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Leyfir forriti að lesa skilaboð frá endurvarpa sem tækið móttekur. Viðvaranir frá endurvarpa berast á tilteknum stöðum til að vara þig við neyðarástandi. Spilliforrit geta truflað afköst eða virkni tækisins þegar neyðarboð berast frá endurvarpa."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Reikningarnir þínir"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Aðgangur að tiltækum reikningum."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lesa strauma í áskrift"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Leyfir forriti að fá upplýsingar um straumana sem samstilltir eru á hverjum tíma."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"senda og skoða SMS-skilaboð"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Tengt sem uppsetningarforrit"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Tengt við USB-aukabúnað"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Snertu til að fá fleiri valkosti."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Sníða USB-geymslu?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Sníða SD-kort?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Öllum skrám í USB-geymslunni verður eytt. Ekki er hægt að afturkalla þessa aðgerð!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Öll gögn á kortinu tapast."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Forsníða"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-villuleit tengd"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Snertu til að slökkva á USB-villuleit."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Skipta um lyklaborð"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index c17081e..2305414 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -210,7 +210,7 @@
     <string name="global_action_power_off" msgid="4471879440839879722">"Spegni"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"Segnalazione di bug"</string>
     <string name="bugreport_title" msgid="2667494803742548533">"Apri segnalazione bug"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Raccoglierà informazioni sullo stato corrente del dispositivo che verranno inviate sotto forma di messaggio email. Passerà un po\' di tempo prima che la segnalazione di bug aperta sia pronta per essere inviata; ti preghiamo di avere pazienza."</string>
+    <string name="bugreport_message" msgid="398447048750350456">"Verranno raccolte informazioni sullo stato corrente del dispositivo che saranno inviate sotto forma di messaggio email. Passerà un po\' di tempo prima che la segnalazione di bug aperta sia pronta per essere inviata; ti preghiamo di avere pazienza."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modalità silenziosa"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Audio non attivo"</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Audio attivo"</string>
@@ -227,24 +227,24 @@
     <string name="user_owner_label" msgid="2804351898001038951">"Personale"</string>
     <string name="managed_profile_label" msgid="6260850669674791528">"Lavoro"</string>
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Contatti"</string>
-    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"accesso ai contatti"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"accedere ai contatti"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Posizione"</string>
     <string name="permgroupdesc_location" msgid="1346617465127855033">"accedere alla posizione di questo dispositivo"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Calendario"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"accesso al calendario"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"accedere al calendario"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"invio e lettura di SMS"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"inviare e visualizzare SMS"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Archiviazione"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"accesso a foto, contenuti multimediali e file sul dispositivo"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"accedere a foto, contenuti multimediali e file sul dispositivo"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfono"</string>
-    <string name="permgroupdesc_microphone" msgid="4988812113943554584">"registrazione audio"</string>
+    <string name="permgroupdesc_microphone" msgid="4988812113943554584">"registrare audio"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotocamera"</string>
-    <string name="permgroupdesc_camera" msgid="3250611594678347720">"acquisizione di foto e registrazione di video"</string>
+    <string name="permgroupdesc_camera" msgid="3250611594678347720">"acquisire foto e registrare video"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefono"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"esecuzione e gestione delle telefonate"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"eseguire e gestire le telefonate"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Sensori per il corpo"</string>
-    <string name="permgroupdesc_sensors" msgid="7147968539346634043">"accesso ai dati dei sensori sui tuoi parametri vitali"</string>
-    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperare contenuti finestra"</string>
+    <string name="permgroupdesc_sensors" msgid="7147968539346634043">"accedere ai dati dei sensori sui tuoi parametri vitali"</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperare contenuti della finestra"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Esaminare i contenuti di una finestra con cui interagisci."</string>
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Attivare Esplora al tocco"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Gli elementi toccati verranno pronunciati ad alta voce e sarà possibile esplorare lo schermo utilizzando i gesti."</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Consente all\'applicazione di ricevere ed elaborare messaggi MMS. Significa che l\'applicazione potrebbe monitorare o eliminare i messaggi inviati al tuo dispositivo senza mostrarteli."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lettura di messaggi cell broadcast"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Consente all\'applicazione di leggere i messaggi cell broadcast ricevuti dal dispositivo. Gli avvisi cell broadcast vengono trasmessi in alcune località per avvertire di eventuali situazioni di emergenza. Le applicazioni dannose potrebbero interferire con il rendimento o con il funzionamento del dispositivo quando si riceve un messaggio cell broadcast di emergenza."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"I tuoi account"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accedere agli account disponibili."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lettura feed sottoscritti"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Consente all\'applicazione di ottenere dettagli sui feed attualmente sincronizzati."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"invio e lettura di SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Collegato come installer"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Collegato a un accessorio USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Tocca per visualizzare più opzioni."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formattare archivio USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formattare la scheda SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Tutti i file memorizzati nell\'archivio USB verranno cancellati. Questa azione non può essere annullata."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Tutti i dati sulla scheda andranno persi."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatta"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Debug USB collegato"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Tocca per disattivare il debug USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Cambia tastiera"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 7d46434..734f7e7 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -212,7 +212,7 @@
     <string name="global_action_power_off" msgid="4471879440839879722">"כיבוי"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"דיווח על באג"</string>
     <string name="bugreport_title" msgid="2667494803742548533">"שלח דיווח על באג"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"פעולה זו תאסוף מידע על מצב המכשיר הנוכחי שלך על מנת לשלוח אותו כהודעת אימייל. היא תימשך זמן קצר מרגע פתיחת דיווח הבאג ועד שיהיה ניתן לבצע שליחה. אנא המתן בסבלנות."</string>
+    <string name="bugreport_message" msgid="398447048750350456">"פעולה זו תאסוף מידע על מצב המכשיר הנוכחי שלך על מנת לשלוח אותו כהודעת אימייל. היא תימשך זמן קצר מרגע פתיחת דיווח הבאג ועד לשליחת ההודעה בפועל. אנא המתן בסבלנות."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"מצב שקט"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"הקול כבוי"</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"קול מופעל"</string>
@@ -272,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"‏מאפשר לאפליקציה לקבל ולעבד הודעות MMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"קריאת הודעות שידור סלולרי"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"מאפשר לאפליקציה לקרוא הודעות שידור סלולרי שהתקבלו במכשיר שלך. התראות שידור סלולרי נשלחות במקומות מסוימים על מנת להזהיר אותך מפני מצבי חירום. אפליקציות זדוניות עשויות להפריע לביצועים או לפעולה של המכשיר שלך כאשר מתקבל שידור חירום סלולרי."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"החשבונות שלך"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"גישה לכל החשבונות הזמינים."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"קרא עדכוני מנויים"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"מאפשר לאפליקציה לקבל פרטים על ההזנות הנוכחיות שמסונכרנות."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"‏שליחה והצגה של הודעות SMS"</string>
@@ -358,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>
@@ -476,8 +478,8 @@
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של שירות מאזין להתראות. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילים."</string>
     <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"איגוד לשירות ספק תנאי"</string>
     <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות ספק תנאי. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
-    <string name="permlab_bindDreamService" msgid="4153646965978563462">"‏איגוד לשירות Dream"</string>
-    <string name="permdesc_bindDreamService" msgid="7325825272223347863">"‏מאפשרת לבעלים לבצע איגוד לממשק הרמה העליונה של שירות Dream. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילות."</string>
+    <string name="permlab_bindDreamService" msgid="4153646965978563462">"איגוד לשירות ׳חלום בהקיץ׳"</string>
+    <string name="permdesc_bindDreamService" msgid="7325825272223347863">"מאפשרת לבעלים לבצע איגוד לממשק הרמה העליונה של שירות ׳חלום בהקיץ׳. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילות."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"הפעלה של אפליקציית תצורה שסופקה על ידי ספק"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"ההרשאה הזו מאפשרת לבעלים להפעיל את אפליקציית התצורה שסופקה על ידי ספק. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"קליטת מעקב אחר תנאי רשת"</string>
@@ -507,12 +509,12 @@
     <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_forceLock" msgid="2274085384704248431">"לנעול את המסך"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"שלוט באופן ובתזמון של נעילת המסך"</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"למחוק את כל הנתונים"</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="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>
@@ -883,7 +885,7 @@
     <string name="cancel" msgid="6442560571259935130">"ביטול"</string>
     <string name="yes" msgid="5362982303337969312">"אישור"</string>
     <string name="no" msgid="5141531044935541497">"ביטול"</string>
-    <string name="dialog_alert_title" msgid="2049658708609043103">"לידיעתך"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"זהירות"</string>
     <string name="loading" msgid="7933681260296021180">"טוען..."</string>
     <string name="capital_on" msgid="1544682755514494298">"מופעל"</string>
     <string name="capital_off" msgid="6815870386972805832">"כבוי"</string>
@@ -1056,11 +1058,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"מחובר כמתקין"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‏מחובר לאביזר USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"גע להצגת עוד אפשרויות."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"‏לפרמט את אמצעי האחסון מסוג USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"‏לפרמט את כרטיס ה-SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"‏כל הקבצים ששמורים באמצעי האחסון מסוג USB שלך יימחקו. פעולה זו היא בלתי הפיכה!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"כל הנתונים שמאוחסנים בכרטיס יאבדו."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"פרמוט"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"‏ניקוי באגים של USB מחובר"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"‏גע כדי להשבית ניקוי באגים בהתקן ה-USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"שינוי מקלדת"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 67f9595..c305d31 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -229,7 +229,7 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"連絡先"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"連絡先へのアクセス"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"位置情報"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"この端末の位置情報にアクセス"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"この端末の位置情報へのアクセス"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"カレンダー"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"カレンダーへのアクセス"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
@@ -247,9 +247,9 @@
     <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_desc_canRequestTouchExploration" msgid="5800552516779249356">"触れたアイテムが読み上げられ、ジェスチャーで画面のガイドを利用できます。"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"タップしたアイテムが読み上げられ、ジェスチャーで画面のガイドを利用できます。"</string>
     <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"ウェブアクセシビリティ拡張の有効化"</string>
-    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"アプリコンテンツのアクティビティをもっと向上させるためにスクリプトをインストールできます。"</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>
     <string name="permlab_statusBar" msgid="7417192629601890791">"ステータスバーの無効化や変更"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMSメッセージの受信と処理をアプリに許可します。これにより、アプリが端末に届いたメッセージを表示することなく監視または削除できるようになります。"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"緊急警報SMSの読み取り"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"端末で受信した緊急警報SMSの読み取りをアプリに許可します。緊急警報は、緊急事態を警告する目的で一部の地域に配信されます。緊急警報の受信時に、悪意のあるアプリによって端末の動作や処理が妨害される恐れがあります。"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"アカウント"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"利用可能なアカウントにアクセスします。"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"登録したフィードの読み取り"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"現在同期されているフィードの詳細を取得することをアプリに許可します。"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMSメッセージの送信と表示"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"インストーラとして接続"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USBアクセサリを接続しました"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"タップするとその他のオプションが表示されます。"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USBストレージをフォーマットしますか?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SDカードをフォーマットしますか?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USBストレージに保存されているファイルはすべて消去されます。この操作は元に戻せません。"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"カード内のすべてのデータが失われます。"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"フォーマット"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USBデバッグが接続されました"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"タップしてUSBデバッグを無効化"</string>
     <string name="select_input_method" msgid="8547250819326693584">"キーボードの変更"</string>
@@ -1061,7 +1058,7 @@
     <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"<xliff:g id="NAME">%s</xliff:g>を準備中"</string>
     <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"エラーを確認中"</string>
     <string name="ext_media_new_notification_message" msgid="7589986898808506239">"新しい<xliff:g id="NAME">%s</xliff:g>が検出されました"</string>
-    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"写真などのメディアを転送するため"</string>
+    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"写真などのメディア転送用"</string>
     <string name="ext_media_unmountable_notification_title" msgid="8295123366236989588">"<xliff:g id="NAME">%s</xliff:g>は破損しています"</string>
     <string name="ext_media_unmountable_notification_message" msgid="1586311304430052169">"<xliff:g id="NAME">%s</xliff:g>は破損しています。タップして解決してください。"</string>
     <string name="ext_media_unsupported_notification_title" msgid="3797642322958803257">"対応していない<xliff:g id="NAME">%s</xliff:g>です"</string>
@@ -1528,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="other"><xliff:g id="COUNT_1">%1$d</xliff:g>個を選択中</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%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_0">%1$d</xliff:g>件選択済み</item>
     </plurals>
 </resources>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index b06efd8..5cf8566 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"აპს შეეძლება MMS შეტყობინებების მიღება და დამუშავება. ეს ნიშნავს, რომ აპს შეეძლება შეტყობინებების მონიტორინგი და მათი წაშლა თქვენთვის ჩვენების გარეშე."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"მასიური დაგზავნის შეტყობინებების წაკითხვა"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"აპს შეეძლება, წაიკითხოს თქვენს მოწყობილობაზე გამოგზავნილი ქსელის სამაუწყებლო შეტყობინებები. სამაუწყებლო გაფრთხილებები მოგეწოდებათ ზოგიერთ ადგილზე ექსტრემალური სიტუაციების შესახებ გასაფრთხილებლად. ქსელის გადაუდებელი შეტყონიბენის მიღების დროს მავნე აპებმა შეიძლება ხელი შეუშალონ თქვენი მოწყობილობის ფუნქციონირებას ან ოპერაციებს."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"თქვენი ანგარიშები"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ხელმისაწვდომ ანგარიშებზე წვდომა."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"გამოწერილი არხების წაკითხვა"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"აპს შეეძლება ინფორმაციის მოპოვება ბოლოს სინქრონიზებული არხების შესახებ."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS-ის შეტყობინებების გაგზავნა და ნახვა"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"დაკავშირებულია როგორც დამყენებელი"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"დაკავშირებულია USB აქსესუართან"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"შეეხეთ დამატებითი პარამეტრებისთვის."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"დავაფორმატო USB მეხსიერება?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"გსურთ SD ბარათის დაფორმატება?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"თქვენ USB მეხსიერებაში შენახული ყველა ფაილი წაიშლება. ეს მოქმედება ვეღარ შეიცვლება!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"თქვენს ბარათზე ყველა მონაცემი დაიკარგება."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"დაფორმატება"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB გამართვა შეერთებულია"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"შეეხეთ, რათა შეწყვიტოთ USB-ის გამართვა."</string>
     <string name="select_input_method" msgid="8547250819326693584">"კლავიატურის შეცვლა"</string>
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml
index 0486890..0fc111b 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk-rKZ/strings.xml
@@ -243,8 +243,7 @@
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"қоңырау шалу және телефон қоңырауларын басқару"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Дене датчиктері"</string>
-    <!-- no translation found for permgroupdesc_sensors (7147968539346634043) -->
-    <skip />
+    <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>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Қолданбаға MMS хабарларын алу және өңдеу мүмкіндігін береді. Бұл қолданба құрылғыңызға жіберілген хабарларды сізге көрсетпестен қабылдай және жоя алады дегенді білдіреді."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ұялы хабар тарату хабарларын оқу"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Қолданбаға ұялы таратылым хабарларын оқу мүмкіндігін береді. Ұялы таратылым дабылдары кейбір аймақтарда төтенше жағдай туралы ескерту үшін қолданылады. Төтенше ұялы хабарлар келгенде залалды қолданбалар құрылғының жұмысына кедергі жасауы мүмкін."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Сіздің есептік жазбаларыңыз"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Қол жетімді есептік жазбаларға кіру."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"жазылған ағындарды оқу"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Қолданбаға қазіргі уақытта синхрондалған арналар туралы мәліметтерді алуға рұқсат береді."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS хабарларын жіберу және көру"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Орнату құрылғысына жалғанған"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB жабдығына қосылған"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Қосымша параметрлер үшін түртіңіз."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB қой. піш. к. пе?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD картасын пішімдеу керек пе?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB қоймасында сақталған бүкіл файлдар өшіріледі. Бұл әрекетті қайтару мүмкін емес!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Картаңыздағы бүкіл деректер жоғалады."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Формат"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB жөндеу қосылған"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB жөндеуді өшіру үшін түртіңіз."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Пернетақтаны өзгерту"</string>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index bbc0805..0d95bee 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"ឲ្យ​កម្មវិធី​ទទួល និង​ដំណើរការ​​សារ​ MMS ។ វា​មាន​ន័យ​ថា កម្មវិធី​អាច​តាមដាន​ ឬ​លុប​សារ​ដែល​បាន​ផ្ញើ​ទៅ​ឧបករណ៍​របស់​អ្នក​ដោយ​មិន​បង្ហាញ​ពួកវា។"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"អាន​សារ​ប្រកាស​ចល័ត"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ឲ្យ​កម្មវិធី​អាន​សារ​ប្រកាស​ការ​ហៅ​ដែល​ឧបករណ៍​របស់​​អ្នក​បាន​ទទួល។ ការ​ជូន​ដំណឹង​ប្រកាស​ចល័ត​ត្រូវ​បាន​បញ្ជូន​ទៅ​ទីតាំង​មួយ​ចំនួន ដើម្បី​ព្រមាន​អ្នក​អំពី​ស្ថានភាព​អាសន្ន។ កម្មវិធី​ព្យាបាទ​អាច​ជ្រៀតជ្រែក​ការ​អនុវត្ត ឬ​ប្រតិបត្តិការ​ឧបករណ៍​របស់​អ្នក​​ពេល​ទទួល​ការ​ប្រកាស​ចល័ត​ពេល​អាសន្ន។"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"គណនី​របស់​អ្នក"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ចូល​ដំណើរការ​គណនី​ដែល​មាន។"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"អាន​អត្ថបទ​ព័ត៌មាន​បាន​ជាវ"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ឲ្យ​កម្មវិធី​ទទួល​ព័ត៌មាន​លម្អិត​អំពី​អត្ថបទ​ព័ត៌មាន​​បាន​ធ្វើ​សម​កាល​កម្ម​បច្ចុប្បន្ន។"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"ផ្ញើ និងមើលសារ SMS"</string>
@@ -356,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>
@@ -1044,11 +1046,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"បាន​ភ្ជាប់​ជា​កម្មវិធី​ដំឡើង"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"បាន​ភ្ជាប់​ឧបករណ៍​យូអេសប៊ី"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"ប៉ះដើម្បីបានជម្រើសថែមទៀត។"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"ធ្វើ​ទ្រង់ទ្រាយ​ឧបករណ៍​ផ្ទុក​យូអេសប៊ី?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"ធ្វើ​ទ្រង់ទ្រាយ​កាត​អេសឌី?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ឯកសារ​ទាំងអស់​ដែល​បាន​រក្សាទុក​ក្នុង​ឧបករណ៍​ផ្ទុក​យូអេសប៊ី​នឹង​ត្រូវ​បាន​លុប។ សកម្មភាព​នេះ​មិន​អាច​ត្រឡប់​វិញ​បាន​ទេ!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ទិន្នន័យ​ទាំងអស់​ក្នុង​កាត​របស់​អ្នក​នឹង​បាត់បង់។"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ធ្វើ​ទ្រង់ទ្រាយ"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"បាន​ភ្ជាប់​ការ​កែ​កំហុស​យូអេសប៊ី"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"ប៉ះ ដើម្បី​បិទ​ការ​កែ​កំហុស​យូអេសប៊ី។"</string>
     <string name="select_input_method" msgid="8547250819326693584">"ប្ដូរ​ក្ដារចុច"</string>
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml
index 952f63c..57dd3cc 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn-rIN/strings.xml
@@ -209,8 +209,8 @@
     <string name="global_action_lock" msgid="2844945191792119712">"ಪರದೆ ಲಾಕ್"</string>
     <string name="global_action_power_off" msgid="4471879440839879722">"ಪವರ್ ಆಫ್ ಮಾಡು"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"ದೋಷದ ವರದಿ"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"ದೋಷದ ವರದಿಯನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"ಇ-ಮೇಲ್ ಸಂದೇಶದ ರೂಪದಲ್ಲಿ ಕಳುಹಿಸಲು, ನಿಮ್ಮ ಸಾಧನದ ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಇದು ಸಂಗ್ರಹಿಸಿಕೊಳ್ಳುತ್ತದೆ. ಇದು ದೋಷ ವರದಿಯನ್ನು ಪ್ರಾರಂಭಿಸಿದ ಸಮಯದಿಂದ ಅದನ್ನು ಕಳುಹಿಸುವವರೆಗೆ ಸ್ವಲ್ಪ ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ; ದಯವಿಟ್ಟು ತಾಳ್ಮೆಯಿಂದಿರಿ."</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"ದೋಷ ವರದಿ ರಚಿಸಿ"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"ನಿಮ್ಮ ಸಾಧನದ ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಿಕೊಳ್ಳುವುದರ ಜೊತೆ ಇ-ಮೇಲ್ ರೂಪದಲ್ಲಿ ನಿಮಗೆ ರವಾನಿಸುತ್ತದೆ. ಇದು ದೋಷ ವರದಿಯನ್ನು ಪ್ರಾರಂಭಿಸಿದ ಸಮಯದಿಂದ ಅದನ್ನು ಕಳುಹಿಸುವವರೆಗೆ ಸ್ವಲ್ಪ ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ; ದಯವಿಟ್ಟು ತಾಳ್ಮೆಯಿಂದಿರಿ."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"ಶಾಂತ ಮೋಡ್"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ಶಬ್ಧ ಆಫ್ ಆಗಿದೆ"</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ಶಬ್ಧ ಆನ್ ಆಗಿದೆ"</string>
@@ -227,21 +227,21 @@
     <string name="user_owner_label" msgid="2804351898001038951">"ವೈಯಕ್ತಿಕ"</string>
     <string name="managed_profile_label" msgid="6260850669674791528">"ಕಚೇರಿ"</string>
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"ಸಂಪರ್ಕಗಳು"</string>
-    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರವೇಶಿಸಲು"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"ಸ್ಥಳ"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"ಈ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"ಈ ಸಾಧನದ ಸ್ಥಳ ಪ್ರವೇಶಿಸಲು"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"ಕ್ಯಾಲೆಂಡರ್"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಪ್ರವೇಶಿಸಿ"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಪ್ರವೇಶಿಸಲು"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"ಸಂಗ್ರಹಣೆ"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಫೋಟೋಗಳು, ಮಾಧ್ಯಮ ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಫೋಟೋಗಳು, ಮಾಧ್ಯಮ ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಲು"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"ಮೈಕ್ರೋಫೋನ್‌"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"ಆಡಿಯೊ ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"ಕ್ಯಾಮರಾ"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"ಚಿತ್ರಗಳನ್ನು ತೆಗೆಯಿರಿ ಹಾಗೂ ವೀಡಿಯೊ ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"ಫೋನ್"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"ಫೋನ್ ಕರೆ ಮಾಡಲು ಹಾಗೂ ನಿರ್ವಹಿಸಲು"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"ದೇಹ ಸೆನ್ಸರ್‌ಗಳು"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"ನಿಮ್ಮ ಮುಖ್ಯ ಲಕ್ಷಣಗಳ ಕುರಿತು ಸೆನ್ಸಾರ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"ವಿಂಡೋ ವಿಷಯವನ್ನು ಹಿಂಪಡೆದುಕೊಳ್ಳುತ್ತದೆ"</string>
@@ -270,11 +270,9 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಮತ್ತು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ. ಇದರರ್ಥ, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಕಳುಹಿಸಲಾಗಿರುವ ಸಂದೇಶಗಳನ್ನು ನಿಮಗೆ ತೋರಿಸದೆಯೇ, ಅಪ್ಲಿಕೇಶನ್ ಅವುಗಳನ್ನು ಮಾನಿಟರ್ ಮಾಡಬಹುದು ಅಥವಾ ಅಳಿಸಬಹುದು."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ಸೆಲ್ ಪ್ರಸಾರದ ಸಂದೇಶಗಳನ್ನು ಓದಿರಿ"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ನಿಮ್ಮ ಸಾಧನದಿಂದ ಸ್ವೀಕರಿಸಿದ ಸೆಲ್ ಪ್ರಸಾರ ಸಂದೇಶಗಳನ್ನು ರೀಡ್ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್‌‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಸೆಲ್ ಪ್ರಸಾರ ಎಚ್ಚರಿಕೆಗಳನ್ನು ತುರ್ತು ಸಂದರ್ಭಗಳಲ್ಲಿ ನಿಮಗೆ ಎಚ್ಚರಿಸುವ ಸಲುವಾಗಿ ಕೆಲವು ಸ್ಥಳಗಳಲ್ಲಿ ವಿತರಿಸಲಾಗುತ್ತದೆ. ದುರುದ್ದೇಶಪೂರಿತ ಅಪ್ಲಿಕೇಶನ್‌‌‌ಗಳು ತುರ್ತು ಸೆಲ್ ಪ್ರಸಾರವನ್ನು ಸ್ವೀಕರಿಸುವಾಗ, ನಿಮ್ಮ ಸಾಧನದ ಕಾರ್ಯಕ್ಷಮತೆ ಇಲ್ಲವೇ ಕಾರ್ಯಾಚರಣೆಯಲ್ಲಿ ಹಸ್ತಕ್ಷೇಪ ಮಾಡಬಹುದು."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"ನಿಮ್ಮ ಖಾತೆಗಳು"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ಲಭ್ಯವಿರುವ ಖಾತೆಗಳನ್ನು ಪ್ರವೇಶಿಸಿ."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ಚಂದಾದಾರ ಫೀಡ್‌ಗಳನ್ನು ಓದಿ"</string>
-    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ಪ್ರಸ್ತುತವಾಗಿ ಸಿಂಕ್‌ ಮಾಡಲಾದ ಫೀಡ್‌ಗಳ ಕುರಿತು ವಿವರಗಳನ್ನು ಪಡೆಯಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
-    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ಪ್ರಸ್ತುತ ಸಿಂಕ್‌ ಮಾಡಲಾದ ಫೀಡ್‌ಗಳ ಕುರಿತು ವಿವರಗಳನ್ನು ಪಡೆಯಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಇದು ಅನಿರೀಕ್ಷಿತ ವೆಚ್ಚಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ದುರುದ್ದೇಶಪೂರಿತ ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳು ನಿಮ್ಮ ದೃಢೀಕರಣವಿಲ್ಲದೆಯೇ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ ನಿಮ್ಮ ಹಣವನ್ನು ವ್ಯಯಿಸಬಹುದು."</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"ನಿಮ್ಮ ಪಠ್ಯ ಸಂದೇಶಗಳನ್ನು ಓದಿ (SMS ಅಥವಾ MMS)"</string>
     <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅಥವಾ ಸಿಮ್‌ ಕಾರ್ಡ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾದ SMS ಸಂದೇಶಗಳನ್ನು ಓದಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಇದು ವಿಷಯ ಅಥವಾ ಗೌಪ್ಯತೆಯನ್ನು ಲೆಕ್ಕಿಸದೆಯೇ, ಎಲ್ಲಾ SMS ಸಂದೇಶಗಳನ್ನು ಓದಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
@@ -356,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>
@@ -1042,12 +1044,7 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ಸ್ಥಾಪಕದಂತೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB ಪರಿಕರಕ್ಕೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳಿಗೆ ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB ಸಂಗ್ರಹಣೆಯನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುವುದೇ?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD ಕಾರ್ಡ್‌ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುವುದೇ?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ನಿಮ್ಮ USB ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾದ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳನ್ನು ಅಳಿಸಿಹಾಕಲಾಗುವುದು. ಈ ಕ್ರಿಯೆಯನ್ನು ಹಿಂತಿರುಗಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ನಿಮ್ಮ ಕಾರ್ಡ್‌ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಡೇಟಾ ಕಳೆದುಹೋಗುತ್ತದೆ."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ಸ್ವರೂಪಿಸು"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ಡೀಬಗಿಂಗ್‌‌ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ಡೀಬಗಿಂಗ್‌‌ ಸಂಪರ್ಕ"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ಡೀಬಗಿಂಗ್‌ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
     <string name="select_input_method" msgid="8547250819326693584">"ಕೀಬೋರ್ಡ್ ಬದಲಿಸಿ"</string>
     <string name="configure_input_methods" msgid="4769971288371946846">"ಕೀಬೋರ್ಡ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
@@ -1073,7 +1070,7 @@
     <string name="ext_media_unmounting_notification_title" msgid="640674168454809372">"<xliff:g id="NAME">%s</xliff:g> ಇನ್ನೂ ಎಜೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
     <string name="ext_media_unmounting_notification_message" msgid="4182843895023357756">"ತೆಗೆದುಹಾಕಬೇಡಿ"</string>
     <string name="ext_media_init_action" msgid="7952885510091978278">"ಹೊಂದಿಸು"</string>
-    <string name="ext_media_unmount_action" msgid="1121883233103278199">"ಎಜೆಕ್ಟ್ ಮಾಡು"</string>
+    <string name="ext_media_unmount_action" msgid="1121883233103278199">"ಎಜೆಕ್ಟ್"</string>
     <string name="ext_media_browse_action" msgid="8322172381028546087">"ಎಕ್ಸ್‌ಪ್ಲೋರ್‌‌"</string>
     <string name="ext_media_missing_title" msgid="620980315821543904">"<xliff:g id="NAME">%s</xliff:g> ಕಾಣೆಯಾಗಿದೆ"</string>
     <string name="ext_media_missing_message" msgid="5761133583368750174">"ಈ ಸಾಧನವನ್ನು ಮರುಸೇರಿಸಿ"</string>
@@ -1146,7 +1143,7 @@
     <string name="tethered_notification_message" msgid="6857031760103062982">"ಹೊಂದಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
     <string name="back_button_label" msgid="2300470004503343439">"ಹಿಂದೆ"</string>
     <string name="next_button_label" msgid="1080555104677992408">"ಮುಂದಿನದು"</string>
-    <string name="skip_button_label" msgid="1275362299471631819">"ಸ್ಕಿಪ್‌ ಮಾಡು"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"ಸ್ಕಿಪ್‌"</string>
     <string name="no_matches" msgid="8129421908915840737">"ಯಾವುದೇ ಹೊಂದಿಕೆಗಳಿಲ್ಲ"</string>
     <string name="find_on_page" msgid="1946799233822820384">"ಪುಟದಲ್ಲಿ ಹುಡುಕಿ"</string>
     <plurals name="matches_found" formatted="false" msgid="1210884353962081884">
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 92c1e8e..31113fb 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -233,17 +233,16 @@
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"캘린더"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"캘린더 액세스"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS 메시지를 전송하고 봅니다."</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS 메시지 전송 및 보기"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"저장"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"기기의 사진, 미디어, 파일에 액세스합니다."</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"기기 사진, 미디어, 파일 액세스"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"마이크"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"오디오 녹음"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"카메라"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"사진 찍기 및 동영상 녹화"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"전화"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"전화 걸기 및 관리"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"신체 센서"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"생체 신호에 관한 센서 데이터에 액세스"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"창 콘텐츠 가져오기"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"상호작용 중인 창의 콘텐츠를 검사합니다."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"앱이 MMS 메시지를 수신하고 처리할 수 있도록 허용합니다. 이는 앱이 사용자에게 표시하지 않고 기기로 전송된 메시지를 모니터링 또는 삭제할 수도 있다는 것을 의미합니다."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"셀 브로드캐스트 메시지 읽기"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"앱이 기기가 수신한 셀 브로드캐스트 메시지를 읽을 수 있도록 합니다. 비상 상황임을 알리기 위해 일부 지역에서 셀 브로드캐스트 경고가 전달됩니다. 비상 셀 브로드캐스트를 수신할 때 악성 앱이 기기의 성능이나 작동을 방해할 수 있습니다."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"계정"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"사용 가능한 계정에 액세스합니다."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"가입된 피드 읽기"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"앱이 현재 동기화된 피드에 대한 세부정보를 가져올 수 있도록 허용합니다."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS 메시지 전송 및 보기"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"설치 프로그램으로 연결됨"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB 액세서리에 연결됨"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"더 많은 옵션을 확인하려면 터치하세요."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB 저장소를 포맷하시겠습니까?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD 카드를 포맷하시겠습니까?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB 저장소에 저장된 파일이 모두 삭제됩니다. 이 작업은 되돌릴 수 없습니다."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"카드의 모든 데이터가 삭제됩니다."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"포맷"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB 디버깅 연결됨"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB 디버깅을 사용하지 않으려면 터치하세요."</string>
     <string name="select_input_method" msgid="8547250819326693584">"키보드 변경"</string>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index 5965ccc..4637db24 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -352,7 +352,7 @@
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"телефон чалуу жана аларды башкаруу"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Дене сенсорлору"</string>
-    <string name="permgroupdesc_sensors" msgid="7147968539346634043">"өмүр белгилериңиз тууралуу сенсордун дайындарына мүмкүнчүлүк алуу"</string>
+    <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>
@@ -382,10 +382,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Колдонмого MMS билдирүүлөрүн кабыл алууга жана аларды иштетип чыгууга уруксат берет. Бул, колдонмо сизге билгизбестен түзмөгүңүзгө жөнөтүлгөн билдирүүлөрдү мониторлой же жок кыла алат дегенди билдирет."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"уюктук берүү билдирүүлөрүн окуу"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Колдонмого түзмөгүңүз кабыл алган уюк берүүнүн билдирүүлөрүн окууга жол берет. Шашылыш эскертүү билдирүүлөрү кээ бир жерлердеги өзгөчө кырдаалдар тууралу сизди эскертүү үчүн жөнөтүлөт. Зыяндуу колдономолор шашылыш эскертүүлөр берилип жатканда, сиздин түзмөктүн иштешине жолтоо болушу мүмкүн."</string>
-    <!-- no translation found for permgrouplab_accounts (3359646291125325519) -->
-    <skip />
-    <!-- no translation found for permgroupdesc_accounts (4948732641827091312) -->
-    <skip />
     <!-- no translation found for permlab_subscribedFeedsRead (4756609637053353318) -->
     <skip />
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Колдонмого учурда шайкештештирилген каналдардын чоо-жайларын алуу мүмкүнчүлүгүн берет."</string>
@@ -479,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) -->
@@ -1388,12 +1388,6 @@
     <skip />
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB аксессуарга байланышты"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Көбүрөөк параметр үчүн тийип коюңуз."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB сактагычы форматталсынбы?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD карта форматталсынбы?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB сактагычыңызда сакталган бардык файлдар тазаланып салынат. Бул аракетти артка кайтаруу мүмкүн эмес!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Картаңыздагы дайындардын баары жоголот."</string>
-    <!-- no translation found for extmedia_format_button_format (4131064560127478695) -->
-    <skip />
     <!-- no translation found for adb_active_notification_title (6729044778949189918) -->
     <skip />
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB мүчүлүштүктөрдү жоюу мүмкүнчүлүгүн өчүрүү үчүн тийип коюңуз."</string>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 0065d6d..2bc2908 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"ອະນຸຍາດໃຫ້ແອັບຯ ຮັບແລະປະມວນຜົນຂໍ້ຄວາມ MMS. ນີ້ໝາຍຄວາມວ່າແອັບຯສາມາດຕິດຕາມ ຫຼືລຶບຂໍ້ຄວາມທີ່ສົ່ງເຂົ້າອຸປະກອນຂອງທ່ານ ໂດຍທີ່ບໍ່ສະແດງພວກມັນໃຫ້ທ່ານເຫັນ."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ອ່ານຂໍ້ຄວາມກະຈາຍສັນຍານຂອງເສົາສັນຍານ"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ອະນຸຍາດໃຫ້ແອັບຯ ສາມາດອ່ານຂໍ້ຄວາມແຈ້ງເຕືອນເຫດສຸກເສີນ ທີ່ໄດ້ຮັບໂດຍອຸປະກອນຂອງທ່ານ. ການແຈ້ງເຕືອນສຸກເສີນທີ່ມີໃຫ້ບໍລິການໃນບາງພື້ນທີ່ ເພື່ອແຈ້ງເຕືອນໃຫ້ທ່ານຮູ້ເຖິງສະຖານະການສຸກເສີນ. ແອັບພລິເຄຊັນທີ່ເປັນອັນຕະລາຍອາດລົບກວນປະສິດທິພາບ ຫຼືການດຳເນີນງານຂອງອຸປະກອນຂອງທ່ານ ເມື່ອໄດ້ການຮັບແຈ້ງເຕືອນສຸກເສີນຈາກສະຖານີມືຖື."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"ບັນຊີຂອງທ່ານ"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ເຂົ້າເຖິງບັນຊີທີ່ໃຊ້ໄດ້."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ອ່ານຂໍ້ມູນຟີດທີ່ສະໝັກໄວ້"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ອະນຸຍາດໃຫ້ແອັບຯ ດຶງລາຍລະອຽດກ່ຽວກັບຂໍ້ມູນທີ່ກຳລັງຊິ້ງຢູ່."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"ສົ່ງ ແລະ​ເບິ່ງ​ຂໍ້​ຄວາມ SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ເຊື່ອມຕໍ່ໃນນາມຕົວຕິດຕັ້ງ"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"ເຊື່ອມຕໍ່ກັບອຸປະກອນເສີມ USB ແລ້ວ"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"ສຳ​ພັດ​ສຳ​ລັບ​ທາງ​ເລືອກ​ເພີ່ມ​ເຕີມ."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"ຟໍແມັດ ບ່ອນຈັດເກັບຂໍ້ມູນ USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"ຟໍແມັດ SD card?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ໄຟລ໌ທັງໝົດທີ່ຢູ່ໃນບ່ອນຈັດເກັບຂໍ້ມູນ USB ຂອງທ່ານຈະຖືກລຶບອອກໝົດ. ການກະທຳຈະບໍ່ສາມາດຍົກເລີກໄດ້!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ຂໍ້ມູນທັງໝົດໃນກາດຂອງທ່ານຈະຫາຍໄປ."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ຟໍແມັດ"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"ເຊື່ອມຕໍ່ການດີບັ໊ກຜ່ານ USB ແລ້ວ"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"ແຕະເພື່ອປິດການດີບັ໊ກຜ່ານ USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"​ປ່ຽນ​ແປ້ນ​ພິມ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index a892bbe..a9b4050 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -231,7 +231,7 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Kontaktai"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"pasiekti kontaktus"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Vietovė"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"galimybė pasiekti įrenginio vietovės informaciją"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"pasiekti įrenginio vietovės informaciją"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendorius"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"pasiekti kalendorių"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
@@ -272,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Leidžiama programai gauti ir apdoroti MMS pranešimus. Tai reiškia, kad programa gali stebėti ir ištrinti į jūsų įrenginį siunčiamus pranešimus jums jų neparodžiusi."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"skaityti mobiliuoju transliuojamus pranešimus"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Programai leidžiama skaityti mobiliuoju transliuojamus pranešimus, gaunamus jūsų įrenginyje. Mobiliuoju transliuojami įspėjimai pristatomi kai kuriose vietose, kad įspėtų apie kritines situacijas. Kai gaunamas  mobiliuoju transliuojamas pranešimas apie kritinę situaciją, kenkėjiškos programos gali trukdyti įrenginiui veikti ar jį naudoti."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsų paskyros"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Pasiekite galimas paskyras."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"skaityti prenumeruojamus tiekimus"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Leidžiama programai gauti išsamios informacijos apie šiuo metu sinchronizuojamus sklaidos kanalus."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"siųsti ir peržiūrėti SMS pranešimus"</string>
@@ -358,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>
@@ -505,7 +507,7 @@
     <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Stebėkite atrakinant ekraną įvestų netinkamų slaptažodžių skaičių ir užrakinkite planšetinį kompiuterį arba ištrinkite visus šio naudotojo duomenis, jei per daug kartų įvedamas netinkamas slaptažodis."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Stebėkite atrakinant ekraną įvestų netinkamų slaptažodžių skaičių ir užrakinkite TV arba ištrinkite visus šio naudotojo duomenis, jei per daug kartų įvedamas netinkamas slaptažodis."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Stebėkite atrakinant ekraną įvestų netinkamų slaptažodžių skaičių ir užrakinkite telefoną arba ištrinkite visus šio naudotojo duomenis, jei per daug kartų įvedamas netinkamas slaptažodis."</string>
-    <string name="policylab_resetPassword" msgid="4934707632423915395">"Ekrano užrakto pakeitimas"</string>
+    <string name="policylab_resetPassword" msgid="4934707632423915395">"Pakeisti ekrano užraktą"</string>
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"Pakeisti ekrano užraktą."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Užrakinti ekraną"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Valdyti, kaip ir kada užrakinamas ekranas."</string>
@@ -912,7 +914,7 @@
     <string name="anr_application_process" msgid="8941757607340481057">"„<xliff:g id="APPLICATION">%1$s</xliff:g>“ neatsako. Ar norite ją uždaryti?"</string>
     <string name="anr_process" msgid="6513209874880517125">"Procesas „<xliff:g id="PROCESS">%1$s</xliff:g>“ neatsako.\n\nAr norite jį uždaryti?"</string>
     <string name="force_close" msgid="8346072094521265605">"Gerai"</string>
-    <string name="report" msgid="4060218260984795706">"Ataskaita"</string>
+    <string name="report" msgid="4060218260984795706">"Pranešti"</string>
     <string name="wait" msgid="7147118217226317732">"Palaukti"</string>
     <string name="webpage_unresponsive" msgid="3272758351138122503">"Puslapis neatsako.\n\nAr norite jį uždaryti?"</string>
     <string name="launch_warning_title" msgid="1547997780506713581">"Programa peradresuota"</string>
@@ -1056,11 +1058,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Prij. kaip diegimo programa"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Prijungta prie USB priedo"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Palieskite, kad būtų rodoma daugiau parinkčių."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formatuoti USB atmintį?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formatuoti SD kortelę?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Bus ištrinti visi USB atmintyje saugomi failai. Šio veiksmo negalima atšaukti!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Bus prarasti visi kortelėje esantys duomenys."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatuoti"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB derinimas prijungtas"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Neleisti USB derinimo."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Klaviatūros keitimas"</string>
@@ -1562,9 +1559,9 @@
     <string name="floating_toolbar_open_overflow_description" msgid="4797287862999444631">"Daugiau parinkčių"</string>
     <string name="floating_toolbar_close_overflow_description" msgid="559796923090723804">"Uždaryti perpildymo sritį"</string>
     <plurals name="selected_count" formatted="false" msgid="7187339492915744615">
-      <item quantity="one">Pasirinktas <xliff:g id="COUNT_1">%1$d</xliff:g> elementas</item>
-      <item quantity="few">Pasirinkti <xliff:g id="COUNT_1">%1$d</xliff:g> elementai</item>
-      <item quantity="many">Pasirinkta <xliff:g id="COUNT_1">%1$d</xliff:g> elemento</item>
-      <item quantity="other">Pasirinkta <xliff:g id="COUNT_1">%1$d</xliff:g> elementų</item>
+      <item quantity="one">Pasir. <xliff:g id="COUNT_1">%1$d</xliff:g> elem.</item>
+      <item quantity="few">Pasir. <xliff:g id="COUNT_1">%1$d</xliff:g> elem.</item>
+      <item quantity="many">Pasir. <xliff:g id="COUNT_1">%1$d</xliff:g> elem.</item>
+      <item quantity="other">Pasir. <xliff:g id="COUNT_1">%1$d</xliff:g> elem.</item>
     </plurals>
 </resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 75c015b..3c1b78a 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -271,8 +271,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Ļauj lietotnei saņemt un apstrādāt multiziņas. Tas nozīmē, ka lietotne var pārraudzīt vai dzēst uz jūsu ierīci nosūtītos ziņojumus, neparādot tos jums."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"šūnu apraides ziņojumu lasīšana"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Ļauj lietotnei lasīt ierīcē saņemtos šūnu apraides ziņojumus. Šūnu apraides brīdinājumi tiek piegādāti dažās atrašanās vietās, lai brīdinātu jūs par ārkārtas situācijām. Ļaunprātīgas lietotnes var traucēt ierīces veiktspēju vai darbības, kad ir saņemts ārkārtas šūnas apraides ziņojums."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Jūsu konti"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Piekļūstiet pieejamajiem kontiem."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lasīt abonētās plūsmas"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Ļauj lietotnei iegūt informāciju par pašlaik sinhronizētajām plūsmām."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"sūtīt un skatīt īsziņas"</string>
@@ -357,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>
@@ -505,8 +507,8 @@
     <string name="policydesc_watchLogin_secondaryUser" product="TV" msgid="3484832653564483250">"Pārraudzīt nepareizi ievadīto ekrāna atbloķēšanas paroļu skaitu un bloķēt televizoru vai dzēst visus šī lietotāja datus, ja tiek ievadīts pārāk daudz nepareizu paroļu."</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Pārraudzīt nepareizi ievadīto ekrāna atbloķēšanas paroļu skaitu un bloķēt tālruni vai dzēst visus šī lietotāja datus, ja tiek ievadīts pārāk daudz nepareizu paroļu."</string>
     <string name="policylab_resetPassword" msgid="4934707632423915395">"Mainīt ekrāna bloķēšanas iestatījumus"</string>
-    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Mainīt ekrāna bloķēšanas iestatījumu."</string>
-    <string name="policylab_forceLock" msgid="2274085384704248431">"Ekrāna bloķēšana"</string>
+    <string name="policydesc_resetPassword" msgid="1278323891710619128">"Maina ekrāna bloķēšanas iestatījumu."</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Bloķēt ekrānu"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Kontrolē, kā un kad ekrāns tiek bloķēts."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Dzēst visus datus"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Dzēš planšetdatora datus bez brīdinājuma, veicot rūpnīcas datu atiestatīšanu."</string>
@@ -530,8 +532,8 @@
     <item msgid="8901098336658710359">"Mājas"</item>
     <item msgid="869923650527136615">"Mobilais"</item>
     <item msgid="7897544654242874543">"Darbā"</item>
-    <item msgid="1103601433382158155">"Faksa numurs darbā"</item>
-    <item msgid="1735177144948329370">"Faksa numurs mājās"</item>
+    <item msgid="1103601433382158155">"Darba fakss"</item>
+    <item msgid="1735177144948329370">"Mājas fakss"</item>
     <item msgid="603878674477207394">"Peidžers"</item>
     <item msgid="1650824275177931637">"Cits"</item>
     <item msgid="9192514806975898961">"Pielāgots"</item>
@@ -573,8 +575,8 @@
     <string name="phoneTypeHome" msgid="2570923463033985887">"Mājas"</string>
     <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobilais"</string>
     <string name="phoneTypeWork" msgid="8863939667059911633">"Darbā"</string>
-    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Faksa numurs darbā"</string>
-    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Faksa numurs mājās"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Darba fakss"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Mājas fakss"</string>
     <string name="phoneTypePager" msgid="7582359955394921732">"Peidžers"</string>
     <string name="phoneTypeOther" msgid="1544425847868765990">"Cits"</string>
     <string name="phoneTypeCallback" msgid="2712175203065678206">"Atzvanīšana"</string>
@@ -1014,7 +1016,7 @@
     <string name="sim_added_title" msgid="3719670512889674693">"SIM karte ir pievienota."</string>
     <string name="sim_added_message" msgid="7797975656153714319">"Lai piekļūtu mobilajam tīklam, restartējiet ierīci."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"Restartēt"</string>
-    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Laika iestatīšana"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Iestatīt laiku"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Datuma iestatīšana"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Iestatīt"</string>
     <string name="date_time_done" msgid="2507683751759308828">"Gatavs"</string>
@@ -1048,12 +1050,7 @@
     <string name="usb_midi_notification_title" msgid="4850904915889144654">"USB savienojums MIDI režīmā"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Pievienots kā instalēšanas programma"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ir izveidots savienojums ar USB piederumu."</string>
-    <string name="usb_notification_message" msgid="7347368030849048437">"Lai skatītu citas opcijas, pieskarieties šeit."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Vai formatēt USB atmiņu?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Vai formatēt SD karti?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Visi USB atmiņā saglabātie faili tiks dzēsti. Šo darbību nevar atsaukt."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Visi jūsu kartes dati tiks zaudēti."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatēt"</string>
+    <string name="usb_notification_message" msgid="7347368030849048437">"Citas opcijas"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB atkļūdošana ir pievienota."</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Iespējot USB atkļūdošanu."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Tastatūras maiņa"</string>
@@ -1472,7 +1469,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Lietotne ir piesprausta. Atspraušana šajā ierīcē nav atļauta."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"Ekrāns ir piesprausts"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"Ekrāns ir atsprausts"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Pirms atspraušanas pieprasīt PIN"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Prasīt PIN kodu pirms atspraušanas"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Pirms atspraušanas pieprasīt grafisko atslēgu"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Pirms atspraušanas pieprasīt paroli"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Instalēja jūsu administrators"</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 d0cd9ff..2582ea3 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Овозможува апликацијата да прима и да обработува ММС пораки. Тоа значи дека апликацијата може да следи или да брише пораки испратени до вашиот уред без да ви ги прикаже вам."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"прочитај пораки за мобилно емитување"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Овозможува апликациите да ги читаат пораките за мобилно емитување што ги прима вашиот уред. Предупредувањата за мобилно емитување се доставуваат на некои локации, за да ве предупредат на итни ситуации. Злонамерните апликации може да пречат во ефикасноста или работењето на вашиот уред кога се прима емитување за итен случај."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваши сметки"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Пристапи кон достапните сметки."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"читај претплатени навестувања на содржина"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Дозволува апликацијата да добива детали за навестувања што се тековно синхронизирани."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"испрати и прикажи СМС-пораки"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Поврзан како инсталатор"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Поврзан со УСБ додаток"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Допри за повеќе опции."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Форматирај УСБ-склад?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Да се форматира СД-картичката?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Сите датотеки складирани на УСБ-склад ќе се избришат. Дејството не може да се отповика."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Сите податоци од картичката ќе се загубат."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Форматирај"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Поврзано е отстранување грешки преку УСБ"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Допрете за да се оневозможи отстранувањето грешки преку USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Измени тастатура"</string>
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml
index 2eb442d..7a21d87 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml-rIN/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"ചിത്രങ്ങളെടുത്ത് വീഡിയോ റെക്കോർഡുചെയ്യുക"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"ഫോണ്‍"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"ഫോൺ വിളിക്കുകയും നിയന്ത്രിക്കുകയും ചെയ്യുക"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"ബോഡി സെൻസറുകൾ"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"നിങ്ങളുടെ ജീവാധാര ലക്ഷണങ്ങളെ കുറിച്ചുള്ള സെൻസർ വിവരങ്ങൾ ആക്സസ് ചെയ്യുക"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"വിൻഡോ ഉള്ളടക്കം വീണ്ടെടുക്കുക"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"നിങ്ങൾ സംവദിക്കുന്ന ഒരു വിൻഡോയുടെ ഉള്ളടക്കം പരിശോധിക്കുക."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS സന്ദേശങ്ങൾ നേടാനും പ്രോസസ്സുചെയ്യാനും അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. നിങ്ങളുടെ ഉപകരണത്തിലേക്ക് അയയ്‌ക്കുന്ന സന്ദേശങ്ങൾ നിങ്ങൾക്ക് ദൃശ്യമാക്കാതെ തന്നെ അപ്ലിക്കേഷന് നിരീക്ഷിക്കാനോ ഇല്ലാതാക്കാനോ കഴിയുമെന്നാണ് ഇതിനർത്ഥം."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"സെൽ പ്രക്ഷേപണ സന്ദേശങ്ങൾ റീഡുചെയ്യുക"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"നിങ്ങളുടെ ഉപകരണത്തിൽ ലഭിച്ച സെൽ പ്രക്ഷേപണ സന്ദേശങ്ങൾ റീഡുചെയ്യാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. അടിയന്തര സാഹചര്യങ്ങളെക്കുറിച്ച് നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകാനായി ചില ലൊക്കേഷനുകളിൽ നൽകപ്പെടുന്നവയാണ് സെൽ പ്രക്ഷേപണ അലേർട്ടുകൾ. ഒരു അടിയന്തര സെൽ പ്രക്ഷേപണം ലഭിക്കുമ്പോൾ, ക്ഷുദ്രകരമായ അപ്ലിക്കേഷനുകൾ നിങ്ങളുടെ ഉപകരണത്തിന്റെ പ്രകടനമോ പ്രവർത്തനമോ തടസ്സപ്പെടുത്താനിടയുണ്ട്."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"നിങ്ങളുടെ അക്കൗണ്ടുകൾ"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ലഭ്യമായ അക്കൗണ്ടുകൾ ആക്‌സസ്സ് ചെയ്യുക."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"സബ്‌സ്ക്രൈബ് ചെയ്‌ത ഫീഡുകൾ വായിക്കുക"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"നിലവിൽ സമന്വയിപ്പിച്ച ഫീഡുകളെക്കുറിച്ചുള്ള വിശദാംശങ്ങൾ നേടുന്നതിന് അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS സന്ദേശങ്ങൾ അയയ്‌ക്കുകയും കാണുകയും ചെയ്യുക"</string>
@@ -357,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>
@@ -601,7 +602,7 @@
     <string name="emailTypeMobile" msgid="119919005321166205">"മൊബൈൽ"</string>
     <string name="postalTypeCustom" msgid="8903206903060479902">"ഇഷ്‌ടാനുസൃതം"</string>
     <string name="postalTypeHome" msgid="8165756977184483097">"വീട്ടുവിലാസം"</string>
-    <string name="postalTypeWork" msgid="5268172772387694495">"ഔദ്യോഗികവിലാസം"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"ജോലി വിലാസം"</string>
     <string name="postalTypeOther" msgid="2726111966623584341">"മറ്റുള്ളവ"</string>
     <string name="imTypeCustom" msgid="2074028755527826046">"ഇഷ്‌ടാനുസൃതം"</string>
     <string name="imTypeHome" msgid="6241181032954263892">"വീട്ടിലെ IM വിലാസം"</string>
@@ -631,7 +632,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>
@@ -788,7 +789,7 @@
     <string name="save_password_message" msgid="767344687139195790">"ബ്രൗസർ ഈ പാസ്‌വേഡ് ഓർക്കേണ്ടതുണ്ടോ?"</string>
     <string name="save_password_notnow" msgid="6389675316706699758">"ഇപ്പോൾ വേണ്ട"</string>
     <string name="save_password_remember" msgid="6491879678996749466">"ഓർമ്മിക്കുക"</string>
-    <string name="save_password_never" msgid="8274330296785855105">"ഒരിക്കലുമില്ല"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"ഒരിക്കലും"</string>
     <string name="open_permission_deny" msgid="7374036708316629800">"ഈ പേജ് തുറക്കുന്നതിന് നിങ്ങൾക്ക് അനുമതിയില്ല."</string>
     <string name="text_copied" msgid="4985729524670131385">"ടെക്‌സ്റ്റ് ക്ലിപ്‍ബോർഡിലേക്ക് പകർത്തി."</string>
     <string name="more_item_label" msgid="4650918923083320495">"കൂടുതൽ"</string>
@@ -1042,15 +1043,10 @@
     <string name="usb_midi_notification_title" msgid="4850904915889144654">"MIDI-യ്‌ക്കായുള്ള USB"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ഇൻസ്‌റ്റാളറായി കണക്‌റ്റുചെയ്തു"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"ഒരു USB ആക്‌സസ്സറി കണക്റ്റുചെയ്‌തു"</string>
-    <string name="usb_notification_message" msgid="7347368030849048437">"കൂടുതൽ ഓപ്‌ഷനുകൾക്കായി സ്‌പർശിക്കുക."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB സംഭരണം ഫോർമാറ്റുചെയ്യണോ?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD കാർഡ് ഫോർമാറ്റുചെയ്യണോ?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB സംഭരണത്തിൽ ശേഖരിച്ചിട്ടുള്ള നിങ്ങളുടെ എല്ലാ ഫയലുകളും മായ്ക്കും. ഈ പ്രവർത്തനം പഴയപടിയാക്കാനാവില്ല!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"നിങ്ങളുടെ കാർഡിലുള്ള എല്ലാ ഡാറ്റയും നഷ്‌‌ടമാവും."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ഫോർമാറ്റുചെയ്യുക"</string>
+    <string name="usb_notification_message" msgid="7347368030849048437">"കൂടുതൽ ഓപ്‌ഷനുകൾക്ക് സ്‌പർശിക്കൂ."</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ഡീബഗ്ഗിംഗ് കണക്‌റ്റുചെയ്‌തു"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ഡീബഗ്ഗിംഗ് ഓഫാക്കാൻ സ്‌പർശിക്കൂ."</string>
-    <string name="select_input_method" msgid="8547250819326693584">"കീബോർട്ട് മാറ്റുക"</string>
+    <string name="select_input_method" msgid="8547250819326693584">"കീബോഡ് മാറ്റുക"</string>
     <string name="configure_input_methods" msgid="4769971288371946846">"കീബോർഡുകൾ തിരഞ്ഞെടുക്കുക"</string>
     <string name="show_ime" msgid="9157568568695230830">"ടൈപ്പുചെയ്യൽ രീതി കാണിക്കുക"</string>
     <string name="hardware" msgid="7517821086888990278">"ഹാർഡ്‌വെയർ"</string>
@@ -1182,7 +1178,7 @@
     <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"<xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> എന്ന അക്കൗണ്ടിലെ <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> എന്നതിനായി ഇല്ലാതാക്കിയ <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> ഇനങ്ങളുണ്ട്. നിങ്ങൾ എന്തുചെയ്യാൻ താൽപ്പര്യപ്പെടുന്നു?"</string>
     <string name="sync_really_delete" msgid="2572600103122596243">"ഇനങ്ങൾ ഇല്ലാതാക്കുക"</string>
     <string name="sync_undo_deletes" msgid="2941317360600338602">"ഇല്ലാതാക്കിയവ പഴയപടിയാക്കുക"</string>
-    <string name="sync_do_nothing" msgid="3743764740430821845">"ഇപ്പോൾ ഒന്നും ചെയ്യരുത്"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"ഇപ്പോൾ ഒന്നും ചെയ്യേണ്ടതില്ല"</string>
     <string name="choose_account_label" msgid="5655203089746423927">"ഒരു അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക"</string>
     <string name="add_account_label" msgid="2935267344849993553">"ഒരു അക്കൗണ്ട് ചേർക്കുക"</string>
     <string name="add_account_button_label" msgid="3611982894853435874">"അക്കൗണ്ട് ചേർക്കുക"</string>
@@ -1464,7 +1460,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"അപ്ലിക്കേഷൻ പിൻ ചെയ്‌തു: ഈ ഉപകരണത്തിൽ അൺപിൻ ചെയ്യാനാവില്ല."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"സ്ക്രീൻ പിൻ ചെയ്തു"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"സ്ക്രീൻ അൺപിൻ ചെയ്തു"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"അൺപിന്നിനുമുമ്പ് പിൻ ആവശ്യപ്പെടൂ"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"ചെയ്യുംമുമ്പ് പിൻ ചോദിക്കൂ"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"അൺപിൻ ചെയ്യുന്നതിനുമുമ്പ് അൺലോക്ക് പാറ്റേൺ ആവശ്യപ്പെടുക"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"അൺപിൻ ചെയ്യുന്നതിനുമുമ്പ് പാസ്‌വേഡ് ആവശ്യപ്പെടുക"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ഇൻസ്റ്റാളുചെയ്‌തു"</string>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 7b14b70..09673d1 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Апп нь MMS мессежийг хүлээн авах болон гүйцэтгэх боломжтой. Ингэснээр апп нь таны төхөөрөмжрүү илгээсэн мессежийг танд үзүүлэхгүйгээр хянах болон устгаж чадна."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"үүрэн өргөн дамжууллын мессеж унших"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Апп нь таны төхөөрөмжийн хүлээн авсан үүрэн өргөн дамжуулах мессежийг унших боломжтой. Үүрэн өргөн дамжууллын мэдэгдэл нь яаралтай нөхцөл байдлыг анхааруулах зорилгоор зарим байршлуудад хүрдэг. Хортой апп нь яаралтай үүрэн өргөн дамжууллыг хүлээн авсан үед таны төхөөрөмжийн ажиллагаа болон чадамжид нөлөөлөх боломжтой."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Таны акаунт"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Боломжит акаунтад хандах."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"бүртгүүлсэн хангамжийг унших"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Апп нь одоогийн синк хийгдсэн хангамжийн талаарх мэдээллийг авах боломжтой."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS мессежийг илгээх, харах"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Суулгагч болгон холбогдсон"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB төхөөрөмжид холбогдов"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Нэмэлт сонголтыг харахын тулд дарна."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB санг форматлах уу?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD картыг форматлах уу?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Таны USB санд хадгалагдсан бүх файл арилгагдана. Энэ үйлдлийг буцаах боломжгүй!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Таны картан дээрх бүх дата устах болно."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Форматлах"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB дебаг холбогдсон"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB дебаг хийхийг идэвхгүй болгох бол хүрнэ үү."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Гарыг өөрчлөх"</string>
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml
index 2fb4f93..aa5562a 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr-rIN/strings.xml
@@ -227,21 +227,21 @@
     <string name="user_owner_label" msgid="2804351898001038951">"वैयक्तिक"</string>
     <string name="managed_profile_label" msgid="6260850669674791528">"कार्य"</string>
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"संपर्क"</string>
-    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"आपल्या संपर्कांवर प्रवेश करा"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"आपल्या संपर्कांवर प्रवेश"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"स्थान"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"या डिव्हाइसच्या स्थानावर प्रवेश करा"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"या डिव्हाइसच्या स्थानावर प्रवेश"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"कॅलेंडर"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"आपल्या कॅलेंडरवर प्रवेश करा"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"आपल्या कॅलेंडरवर प्रवेश"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS संदेश पाठवा आणि पहा"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS संदेश पाठवणे आणि पाहणे हे"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"संचयन"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"आपल्‍या डिव्‍हाइस वरील फोटो, मीडिया आणि फायलींमध्‍ये प्रवेश करा"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"आपल्‍या डिव्‍हाइस वरील फोटो, मीडिया आणि फायलींमध्‍ये प्रवेश"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"मायक्रोफोन"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"ऑडिओ रेकॉर्ड करा"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"कॅमेरा"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"चित्रे घ्या आणि व्हिडिओ रेकॉर्ड करा"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"फोन"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"फोन कॉल करा आणि व्यवस्थापित करा"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"फोन कॉल आणि व्यवस्थापित"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"शरीर सेन्सर"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"आपल्‍या महत्त्वाच्या मापनांविषयी सेन्सर डेटामध्‍ये प्रवेश करा"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"विंडो सामग्री पुनर्प्राप्त करा"</string>
@@ -270,11 +270,9 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS संदेश प्राप्त करण्यास आणि त्यावर प्रक्रिया करण्यास अॅप ला अनुमती देते. म्हणजेच अॅप आपल्या डिव्हाइसवर पाठविलेले संदेश आपल्याला न दर्शवता त्यांचे परीक्षण करू किंवा ते हटवू शकतो."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारण संदेश वाचा"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"आपल्या डिव्हाइसद्वारे प्राप्त केलेले सेल प्रसारण संदेश वाचण्यासाठी अॅप ला अनुमती देते. काही स्थानांमध्ये आपल्याला आणीबाणीच्या परिस्थितीची चेतावणी देण्यासाठी सेल प्रसारण सूचना वितरीत केल्या जातात. आणीबाणी सेल प्रसारण प्राप्त होते तेव्हा आपल्या डिव्हाइसच्या कार्यप्रदर्शनात किंवा कार्यात दुर्भावनापूर्ण अॅप्स व्यत्यय आणू शकतात."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"आपली खाती"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्ध खात्यांवर प्रवेश करा."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्यता घेतलेली फीड वाचा"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"सध्या संकालित केलेल्या फीडविषयी तपशील मिळविण्यासाठी अॅप ला अनुमती देते."</string>
-    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS संदेश पहा आणि व्यवस्थापित करा"</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS संदेश पाठवणे आणि पाहणे"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"SMS संदेश पाठविण्यासाठी अॅप ला अनुमती देते. हे अनपेक्षित शुल्कामुळे होऊ शकते. दुर्भावनापूर्ण अॅप्स नी आपल्या पुष्टिकरणाशिवाय संदेश पाठवल्यामुळे आपले पैसे खर्च होऊ शकतात."</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"आपले मजकूर संदेश वाचा (SMS किंवा MMS)"</string>
     <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"आपल्या टॅब्लेटवर किंवा सिम कार्डवर संचयित केलेले SMS संदेश वाचण्यासाठी अॅप ला अनुमती देते. हे सामग्री किंवा गोपनीयतेकडे दुर्लक्ष करून, सर्व SMS संदेश वाचण्यासाठी अॅप ला अनुमती देते."</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"स्थापनकर्ता म्हणून कनेक्ट केले"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB उपसाधनावर कनेक्ट केले"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"अधिक पर्यायांसाठी स्पर्श करा."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB संचयनाचे स्वरूपन करायचे?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD कार्डचे स्वरूपन करायचे?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"आपल्या USB संचयनामध्ये संचयित केलेल्या सर्व फायली मिटविल्या जातील. ही क्रिया उलट करणे शक्य नाही!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"आपल्या कार्डवरील सर्व डेटा गमावला जाईल."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"फॉरमॅट करा"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डीबग करणे कनेक्‍ट केले"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डीबग करणे अक्षम करण्यासाठी स्पर्श करा."</string>
     <string name="select_input_method" msgid="8547250819326693584">"कीबोर्ड बदला"</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 5464ccc..9a6bd73 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -227,23 +227,22 @@
     <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>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <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>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Periksa kandungan tetingkap yang berinteraksi dengan anda."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Membenarkan apl menerima dan memproses mesej MMS. Ini bermakna apl boleh memantau atau memadam mesej yang dihantar ke peranti anda tanpa menunjukkannya kepada anda."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"baca mesej siaran sel"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Membolehkan apl membaca mesej siaran sel yang diterima oleh peranti anda. Isyarat siaran sel dihantar di beberapa lokasi untuk memberi amaran kepada anda tentang situasi kecemasan. Apl hasad boleh mengganggu prestasi atau operasi peranti anda apabila siaran sel kecemasan diterima."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaun anda"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akaun yang tersedia."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"baca suapan langganan"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Membenarkan apl mendapatkan butiran mengenai suapan tersegerak semasa."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"hantar dan lihat mesej SMS"</string>
@@ -357,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>
@@ -507,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>
@@ -527,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>
@@ -549,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>
@@ -570,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>
@@ -600,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Disambungkan sebagai pemasang"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Disambungkan kepada aksesori USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Sentuh untuk mendapatkan lagi pilihan."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format storan USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Format kad SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Semua fail yang disimpan dalam storan USB anda akan dipadamkan. Tindakan ini tidak boleh diterbalikkan!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Semua data pada kad anda akan hilang."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Penyahpepijatan USB disambungkan"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Sentuh untuk melumpuhkan penyahpepijatan USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Tukar papan kekunci"</string>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index 183ba30..a8761ce 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"အပလီကေးရှင်းအား ရုပ်သံစာများ လက်ခံခြင်း၊ ဆောင်ရွက်ခြင်း ခွင့်ပြုပါ။ ဤခွင့်ပြုချက်တွင် အပလီကေးရှင်းအနေဖြင့် သင် လက်ခံရရှိသော စာများအား သင့်အား မပြပဲစောင့်ကြည့်ခွင့်နှင့် ဖျက်ပစ်ခွင့်များ ပါဝင်ပါသည်။"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"စာတိုများ ဖြန့်ဝေခြင်းစနစ်အား ဖတ်ခြင်း"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"အပလီကေးရှင်းကို သင်၏ စက်ပစ္စည်းမှ လက်ခံရရှိသော အများလွှင့်ထုတ်ချက်များကို ဖတ်ရန် ခွင့်ပြုသည်။  အများလွှင့်ထုတ်ချက်များသည် အရေးပေါ်အခြေအနေများကို သင့်အား သတိပေးရန် အချို့ နေရာများတွင် ပို့ပေးသည်။ အရေးပေါ်သတိပေးချက် ထုတ်လွှင့်ချက်ကို လက်ခံရရှိချိန်တွင်အန္တရာယ် ဖြစ်စေနိုင်သော အပလီကေးရှင်းများသည် သင့်စက်ပစ္စည်း၏ လုပ်ငန်းလည်ပတ်မှုနှင့် စွမ်းဆောင်မှုကို ဝင်စွက်ဖက်နိုင်သည်။"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"သင့်အကောင့်များ"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ရရိှနိုင်သောအကောင့်များကို အသုံးပြုရန်"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"အမည်သွင်းထားသောဖိဖ့်များကို ဖတ်ခြင်း"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"appအား လောလောဆယ် စင့်က် လုပ်ပြီးသား ထည့်သွင်းမှုများ ဆိုင်ရာ အသေးစိတ်များကို ရယူခွင့်ပြုသည်။"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS စာများကို ပို့ကာ ကြည့်မည်"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"installerအနေဖြင့် ချိတ်ဆက်သည်"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USBတွဲဖက်ပစ္စည်းအား ချိတ်ဆက်ထားသည်"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"ထပ်မံရွေးချယ်စရာများအတွက် ထိပါ"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB သိုလှောင်ခန်းကို ပုံစံပြန်ချမလား?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD ကဒ်ကို ပုံစံပြန်ချမလား?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"သင်၏ USB သိုလှောင်ခန်းထဲ သိုလှောင်ထားသည့် ဖိုင်အားလုံး ဖျက်ခံရမည်။ ဒီလုပ်ရပ်ကို ပြန်ပြီး ပြောင်းလဲ မရနိုင်ပါ။"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"သင့် ကဒ် ထဲက ဒေတာ အားလုံး ဆုံးသွားမည်။"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ပုံစံချရန်ပြင်ဆင်သည်"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB အမှားစစ်ခြင်းအား ချိတ်ဆက်ထားသည်"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ဒီဘာဂင် ပိတ်ရန် ထိပါ။"</string>
     <string name="select_input_method" msgid="8547250819326693584">"ကီးဘုတ် ပြောင်းလဲရန်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 4e9e698..9faf811 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -191,7 +191,7 @@
     <string name="reboot_to_update_prepare" msgid="6305853831955310890">"Forbereder oppdateringen …"</string>
     <string name="reboot_to_update_package" msgid="3871302324500927291">"Behandler oppdateringspakken …"</string>
     <string name="reboot_to_update_reboot" msgid="6428441000951565185">"Starter på nytt …"</string>
-    <string name="reboot_to_reset_title" msgid="4142355915340627490">"Fabrikkinnstillinger"</string>
+    <string name="reboot_to_reset_title" msgid="4142355915340627490">"Tilbakestill til fabrikkstandard"</string>
     <string name="reboot_to_reset_message" msgid="2432077491101416345">"Starter på nytt …"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Avslutter…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Nettbrettet slås av."</string>
@@ -230,28 +230,28 @@
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"få tilgang til kontaktene dine"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Posisjon"</string>
     <string name="permgroupdesc_location" msgid="1346617465127855033">"tilgang til enhetens plassering"</string>
-    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalenderen"</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"få tilgang til kalenderen din"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
     <string name="permgroupdesc_sms" msgid="4656988620100940350">"sende og lese SMS-meldinger"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
     <string name="permgroupdesc_storage" msgid="637758554581589203">"få tilgang til bilder, media og filer på enheten din"</string>
-    <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofonen"</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"spill inn lyd"</string>
-    <string name="permgrouplab_camera" msgid="4820372495894586615">"Kameraet"</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"ta bilder og ta opp video"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"ring og administrer anrop"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Kroppssensorer"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"få tilgang til sensordata om de vitale tegnene dine"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"hente innhold i vinduer"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Den kontrollerer innholdet i vinduer du samhandler med."</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Den analyserer innholdet i vinduer du samhandler med."</string>
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"slå på berøringsutforsking"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Berørte elementer leses høyt, og skjermen kan utforskes ved hjelp av bevegelser."</string>
     <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"slå på forbedret nettilgjengelighet"</string>
     <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Skript kan installeres for å gjøre appinnhold mer tilgjengelig."</string>
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"observere teksten du skriver inn"</string>
-    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Dette kan inkludere personlige data, blant annet kredittkortnumre og passord."</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Dette omfatter personlige data, som kredittkortnumre og passord."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"deaktivere eller endre statusfeltet"</string>
     <string name="permdesc_statusBar" msgid="8434669549504290975">"Lar appen deaktivere statusfeltet eller legge til og fjerne systemikoner."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"statusrad"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Lar appen motta og behandle multimediemeldinger. Dette betyr at appen kan overvåke eller slette meldinger som er sendt til enheten din uten at du har sett dem."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lese kringkastede meldinger"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Tillater at appen kan lese kringkastede meldinger enheten din mottar. Kringkastede varsler leveres noen steder for å advare deg om nødsituasjoner. Skadelige apper kan forstyrre ytelsen eller funksjonen til enheten din når en kringkastet nødmelding mottas."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Google-kontoer"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Tilgang til tilgjengelige Google-kontoer."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lese abonnement på nyhetskilder"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Lar appen hente inn detaljer om strømmer som er synkroniserte for øyeblikket."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"sende og lese SMS-meldinger"</string>
@@ -356,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>
@@ -503,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>
@@ -536,19 +538,19 @@
     <item msgid="9192514806975898961">"Egendefinert…"</item>
   </string-array>
   <string-array name="emailAddressTypes">
-    <item msgid="8073994352956129127">"Hjemme"</item>
+    <item msgid="8073994352956129127">"Hjem"</item>
     <item msgid="7084237356602625604">"Arbeid"</item>
     <item msgid="1112044410659011023">"Annen"</item>
     <item msgid="2374913952870110618">"Egendefinert…"</item>
   </string-array>
   <string-array name="postalAddressTypes">
-    <item msgid="6880257626740047286">"Hjemme"</item>
+    <item msgid="6880257626740047286">"Hjem"</item>
     <item msgid="5629153956045109251">"Arbeid"</item>
     <item msgid="4966604264500343469">"Annen"</item>
     <item msgid="4932682847595299369">"Egendefinert…"</item>
   </string-array>
   <string-array name="imAddressTypes">
-    <item msgid="1738585194601476694">"Hjemme"</item>
+    <item msgid="1738585194601476694">"Hjem"</item>
     <item msgid="1359644565647383708">"Arbeid"</item>
     <item msgid="7868549401053615677">"Annen"</item>
     <item msgid="3145118944639869809">"Egendefinert…"</item>
@@ -569,7 +571,7 @@
     <item msgid="1648797903785279353">"Jabber"</item>
   </string-array>
     <string name="phoneTypeCustom" msgid="1644738059053355820">"Egendefinert"</string>
-    <string name="phoneTypeHome" msgid="2570923463033985887">"Hjemme"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Hjem"</string>
     <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobil"</string>
     <string name="phoneTypeWork" msgid="8863939667059911633">"Arbeid"</string>
     <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Faks arbeid"</string>
@@ -594,16 +596,16 @@
     <string name="eventTypeAnniversary" msgid="3876779744518284000">"Jubileum"</string>
     <string name="eventTypeOther" msgid="7388178939010143077">"Andre"</string>
     <string name="emailTypeCustom" msgid="8525960257804213846">"Egendefinert"</string>
-    <string name="emailTypeHome" msgid="449227236140433919">"Hjemme"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Hjem"</string>
     <string name="emailTypeWork" msgid="3548058059601149973">"Arbeid"</string>
     <string name="emailTypeOther" msgid="2923008695272639549">"Annen"</string>
     <string name="emailTypeMobile" msgid="119919005321166205">"Mobil"</string>
     <string name="postalTypeCustom" msgid="8903206903060479902">"Egendefinert"</string>
-    <string name="postalTypeHome" msgid="8165756977184483097">"Hjemme"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Hjem"</string>
     <string name="postalTypeWork" msgid="5268172772387694495">"Arbeid"</string>
     <string name="postalTypeOther" msgid="2726111966623584341">"Annen"</string>
     <string name="imTypeCustom" msgid="2074028755527826046">"Egendefinert"</string>
-    <string name="imTypeHome" msgid="6241181032954263892">"Hjemme"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Hjem"</string>
     <string name="imTypeWork" msgid="1371489290242433090">"Arbeid"</string>
     <string name="imTypeOther" msgid="5377007495735915478">"Annen"</string>
     <string name="imProtocolCustom" msgid="6919453836618749992">"Egendefinert"</string>
@@ -611,7 +613,7 @@
     <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
     <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
     <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
-    <string name="imProtocolQq" msgid="8887484379494111884">"OQ"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
     <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
     <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
     <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
@@ -1041,12 +1043,7 @@
     <string name="usb_midi_notification_title" msgid="4850904915889144654">"USB for MIDI"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Tilkoblet som installasjonsprogram"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Koblet til et USB-tilbehør"</string>
-    <string name="usb_notification_message" msgid="7347368030849048437">"Trykk for å få flere alternativer."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formatere USB-lagr.?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Vil du formatere SD-kortet?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Alle filer som er lagret på USB-lagringen blir slettet. Denne handlingen kan ikke angres."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Alle data på kortet fjernes."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatér"</string>
+    <string name="usb_notification_message" msgid="7347368030849048437">"Trykk for å se flere alternativer."</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-feilsøking tilkoblet"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Trykk for å slå av USB-feilsøking."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Endre tastatur"</string>
@@ -1463,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 c4886b1..04b9b3e 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -243,7 +243,7 @@
     <string name="permgrouplab_phone" msgid="5229115638567440675">"फोन"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"फोन कलहरू गर्नुहोस् र व्यवस्थापन गर्नुहोस्"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"शारीरिक सेन्सर"</string>
-    <string name="permgroupdesc_sensors" msgid="7147968539346634043">"तपाईँको महत्त्वपूर्ण संकेत बारेको सेन्सर डेटा पहुँच गर्नुहोस्"</string>
+    <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>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"अनुप्रयोगलाई MMS सन्देशहरू प्राप्त गर्न र प्रकृया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको सन्देशहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारित सन्देशहरू पढ्नुहोस्"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"तपाईंको उपकरणद्वारा प्राप्त सेल प्रसारण सन्देशहरू अनुप्रयोगलाई पढ्न अनुमति दिन्छ। सेल प्रसारण चेतावनीहरू केही स्थानहरूमा तपाईंलाई आपतकालीन गतिविधिहरूको बारेमा सचेत गराउन गरिएका छन्। खराब अनुप्रयोगहरूले एउटा आपतकालीन सेल प्रसारण प्राप्त गर्दछ जब तपाईंको उपकरणको प्रदर्शन वा अपरेशनको साथ हस्तक्षेप गर्न सक्दछन्।"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"तपाईँका खाताहरू"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्ध खाताहरू पहुँच गर्नुहोस्।"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्य बनाइका फिडहरू पढ्नुहोस्"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"अनुप्रयोगलाई अहिलेको समीकरण गरिएका सूचकहरू बारे विवरणहरू लिने अनुमति दिन्छ।"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS सन्देशहरू पठाउनुहोस् र हेर्नुहोस्"</string>
@@ -356,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>
@@ -1048,11 +1050,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"एउटा स्थापनकर्ताको रूपमा जोडिएको छ"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB सहायकमा जोडिएको छ"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"थप विकल्पहरूका लागि छुनुहोस्।"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB भण्डारणलाई फर्म्याट  गर्न चाहनु हुन्छ?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD कार्ड फर्म्याट गर्ने?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"तपाईंको USBमा सङ्ग्रह भएका सबै फाइलहरू मेटिने छन्। यो कार्य उल्टाउन सकिँदैन!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"तपाईँको कार्डमा भएका सबै डेटाहरू हराउने छन्।"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"फर्म्याट गर्नुहोस्"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने जडित छ"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डिबग गर्ने असक्षम पार्न छुनुहोस्।"</string>
     <string name="select_input_method" msgid="8547250819326693584">"कुञ्जीपाटी परिवर्तन गर्नुहोस्"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 50cfe83..2c1d994 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -235,7 +235,7 @@
     <string name="permgrouplab_sms" msgid="228308803364967808">"Sms"</string>
     <string name="permgroupdesc_sms" msgid="4656988620100940350">"sms\'jes verzenden en bekijken"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Opslagruimte"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"toegang tot foto\'s, media en bestanden op uw apparaat"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"toegang krijgen tot foto\'s, media en bestanden op uw apparaat"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Microfoon"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"audio opnemen"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Camera"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Hiermee kan de app MMS-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar uw apparaat zijn verzonden, kan bijhouden of verwijderen zonder deze aan u weer te geven."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"infodienstberichten lezen"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Toestaan dat de app infodienstberichten leest die worden ontvangen op uw apparaat. Infodienstberichten worden verzonden naar bepaalde locaties om u te waarschuwen voor noodsituaties. Schadelijke apps kunnen de prestaties of verwerking van uw apparaat verstoren wanneer een infodienstbericht wordt ontvangen."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Uw accounts"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Toegang tot de beschikbare accounts."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"Geabonneerde feeds lezen"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Hiermee kan de app details over de huidige gesynchroniseerde feeds achterhalen."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"sms\'jes verzenden en bekijken"</string>
@@ -356,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>
@@ -492,7 +494,7 @@
     <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Hiermee wordt de houder toegestaan te binden aan de berichteninterface van een provider. Nooit vereist voor normale apps."</string>
     <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"binden aan providerservices"</string>
     <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Hiermee kan de houder binden aan providerservices. Nooit gebruikt voor normale apps."</string>
-    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"toegang tot Niet storen"</string>
+    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"toegang tot \'Niet storen\'"</string>
     <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Hiermee kan de app configuratie voor Niet storen lezen en schrijven."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Wachtwoordregels instellen"</string>
     <string name="policydesc_limitPassword" msgid="2502021457917874968">"De lengte en het aantal tekens beheren die zijn toegestaan in wachtwoorden en pincodes voor schermvergrendeling."</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Gekoppeld als installatieprogramma"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Aangesloten op een USB-accessoire"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Tik voor meer opties."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB-opslag formatteren?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD-kaart formatteren?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Alle bestanden die in uw USB-opslag zijn opgeslagen, worden gewist. Deze actie kan niet ongedaan worden gemaakt."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Alle gegevens op uw kaart worden gewist."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatteren"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-foutopsporing verbonden"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Tik om USB-foutopsporing uit te schakelen."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Toetsenbord wijzigen"</string>
@@ -1463,7 +1460,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"App is vastgezet: losmaken is niet toegestaan op dit apparaat."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"Scherm vastgezet"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"Scherm losgemaakt"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Vraag PIN voor losmaken"</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Vraag pin voor losmaken"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Vraag patroon voor losmaken"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Vraag wachtwoord voor losmaken"</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"Geïnstalleerd door uw beheerder"</string>
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml
index cacd529..8a2c552 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa-rIN/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"ਐਪ ਨੂੰ MMS ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰਨ ਅਤੇ ਉਹਨਾਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਐਪ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਤੇ ਭੇਜੇ ਗਏ ਸੁਨੇਹਿਆਂ ਨੂੰ ਤੁਹਾਨੂੰ ਦਿਖਾਏ ਬਿਨਾਂ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ ਜਾਂ ਮਿਟਾ ਸਕਦਾ ਹੈ।"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ਸੈਲ ਪ੍ਰਸਾਰਨ ਸੁਨੇਹੇ ਪੜ੍ਹੋ"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ਐਪ ਨੂੰ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਵੱਲੋਂ ਪ੍ਰਾਪਤ ਕੀਤੇ ਸੈਲ ਪ੍ਰਸਾਰਨ ਸੁਨੇਹੇ ਪੜ੍ਹਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਸੈਲ ਪ੍ਰਸਾਰਨ ਚਿਤਾਵਨੀਆਂ ਤੁਹਾਨੂੰ ਐਮਰਜੈਂਸੀ ਸਥਿਤੀਆਂ ਦੀ ਚਿਤਾਵਨੀ ਦੇਣ ਲਈ ਕੁਝ ਨਿਰਧਾਰਿਤ ਸਥਾਨਾਂ ਤੇ ਪ੍ਰਦਾਨ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਖ਼ਰਾਬ ਐਪਸ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੇ ਪ੍ਰਦਰਸ਼ਨ ਜਾਂ ਓਪਰੇਸ਼ਨ ਵਿੱਚ ਵਿਘਨ ਪਾ ਸਕਦੇ ਹਨ ਜਦੋਂ ਇੱਕ ਐਮਰਜੈਂਸੀ ਸੈਲ ਪ੍ਰਸਾਰਨ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"ਤੁਹਾਡੇ ਖਾਤੇ"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ਉਪਲਬਧ ਖਾਤਿਆਂ ਤੱਕ ਪਹੁੰਚ।"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ਸਬਸਕ੍ਰਾਈਬ ਕੀਤੇ ਫੀਡਸ ਪੜ੍ਹੋ"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ਐਪ ਨੂੰ ਵਰਤਮਾਨ ਵਿੱਚ ਸਿੰਕ ਕੀਤੇ ਫੀਡਸ ਬਾਰੇ ਵੇਰਵੇ ਪ੍ਰਾਪਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS ਸੁਨੇਹੇ ਭੇਜੋ ਅਤੇ ਦਿਖਾਓ"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ਇੱਕ ਇੰਸਟੌਲਰ ਦੇ ਤੌਰ ਤੇ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"ਇੱਕ USB ਐਕਸੈਸਰੀ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"ਹੋਰ ਵਿਕਲਪਾਂ ਲਈ ਸਪਰਸ਼ ਕਰੋ।"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"ਕੀ USB ਸਟੋਰੇਜ ਨੂੰ ਫੌਰਮੈਟ ਕਰਨਾ ਹੈ?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"ਕੀ SD ਕਾਰਡ ਨੂੰ ਫੌਰਮੈਟ ਕਰਨਾ ਹੈ?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ਤੁਹਾਡੀ USB ਸਟੋਰੇਜ ਵਿੱਚ ਸਟੋਰ ਕੀਤੀਆਂ ਸਾਰੀਆਂ ਫਾਈਲਾਂ ਮਿਟਾ ਦਿੱਤੀਆਂ ਜਾਣਗੀਆਂ। ਇਹ ਕਿਰਿਆ ਉਲਟਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ਤੁਹਾਡੇ ਕਾਰਡ ਤੇ ਸਾਰਾ ਡਾਟਾ ਨਸ਼ਟ ਹੋ ਜਾਏਗਾ।"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ਫੌਰਮੈਟ ਕਰੋ"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ਡੀਬਗਿੰਗ ਕਨੈਕਟ ਕੀਤੀ"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ਡੀਬਗਿੰਗ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਣ ਲਈ ਛੋਹਵੋ।"</string>
     <string name="select_input_method" msgid="8547250819326693584">"ਕੀਬੋਰਡ ਬਦਲੋ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 6de8f6f..fde8142 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -231,13 +231,13 @@
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"Kontakty"</string>
     <string name="permgroupdesc_contacts" msgid="6951499528303668046">"dostęp do kontaktów"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"Lokalizacja"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"dostęp do lokalizacji tego urządzenia"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"dostęp do informacji o lokalizacji tego urządzenia"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendarz"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"dostęp do kalendarza"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"wysyłać i wyświetlać SMS-y"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"wysyłanie i wyświetlanie SMS-ów"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Pamięć"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"uzyskiwać dostęp do zdjęć, multimediów i plików na Twoim urządzeniu"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"dostęp do zdjęć, multimediów i plików na Twoim urządzeniu"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"nagrywanie dźwięku"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Aparat"</string>
@@ -272,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Pozwala aplikacji na odbieranie i przetwarzanie MMS-ów. To oznacza, że aplikacja będzie mogła bez Twojej wiedzy monitorować i usuwać wiadomości wysyłane do Twojego urządzenia."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"odczyt komunikatów z sieci komórkowej"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Zezwala aplikacji na odczyt komunikatów z sieci komórkowej odebranych na urządzeniu. Komunikaty alarmowe z sieci komórkowej są dostarczane w niektórych lokalizacjach w celu ostrzeżenia Cię o sytuacjach zagrożenia. Złośliwe aplikacje mogą wpływać na wydajność lub zakłócać działanie urządzenia po odebraniu komunikatu alarmowego z sieci komórkowej."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Twoje konta"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostęp do udostępnionych kont."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"czytanie subskrybowanych źródeł"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Pozwala aplikacji na pobieranie szczegółowych informacji na temat obecnie zsynchronizowanych kanałów."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"wysyłać i wyświetlać SMS-y"</string>
@@ -358,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>
@@ -1056,11 +1058,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Podłączono jako nośnik instalacyjny."</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Podłączono akcesorium USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Kliknij, by zobaczyć więcej opcji."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Czy sformatować nośnik USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Czy sformatować kartę SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Wszystkie pliki zapisane na nośniku USB zostaną usunięte. Tej czynności nie można cofnąć."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Wszystkie dane na karcie zostaną utracone."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatuj"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Podłączono moduł debugowania USB"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Dotknij, aby wyłączyć debugowanie USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Zmień klawiaturę"</string>
@@ -1228,7 +1225,7 @@
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Wybierz aplikację"</string>
     <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Nie udało się uruchomić aplikacji <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Udostępnij przez"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Udostępnij przez:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Udostępnij przez <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Uchwyt przesuwny. Dotknij i przytrzymaj."</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Przesuń, aby odblokować."</string>
@@ -1275,7 +1272,7 @@
     <string name="sha1_fingerprint" msgid="7930330235269404581">"Odcisk cyfrowy SHA-1:"</string>
     <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Zobacz wszystkie"</string>
     <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Wybierz działanie"</string>
-    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Udostępnij przez"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Udostępnij przez:"</string>
     <string name="list_delimeter" msgid="3975117572185494152">", "</string>
     <string name="sending" msgid="3245653681008218030">"Wysyłanie..."</string>
     <string name="launchBrowserDefault" msgid="2057951947297614725">"Uruchomić przeglądarkę?"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index c257e8c..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>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permite que a aplicação receba e processe mensagens MMS. Isto significa que a aplicação poderá monitorizar ou eliminar mensagens enviadas para o seu dispositivo sem as apresentar."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ler mensagens de transmissão celular"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite que a aplicação leia mensagens de transmissão celular recebidas pelo seu dispositivo. Os alertas de transmissão celular são fornecidos em algumas localizações para avisá-lo sobre situações de emergência. As aplicações maliciosas podem interferir com o desempenho ou funcionamento do seu dispositivo quando for recebida uma transmissão celular de emergência."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"As suas contas"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Aceda às contas disponíveis."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ler feeds subscritos"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite à aplicação obter detalhes acerca dos feeds atualmente sincronizados."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"enviar e ver mensagens SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Ligado como um instalador"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ligado a um acessório USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Toque para ver mais opções."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formatar unidade de armazenamento USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formatar cartão SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Todos os ficheiros armazenados na sua USB de armazenamento serão apagados. Não é possível reverter a ação!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Todos os dados do seu cartão serão perdidos."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatar"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB ligada"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Toque para desat. a depuração USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 235f0db..9fada1c 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"tirar fotos e gravar vídeos"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefone"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"fazer e gerenciar chamadas telefônicas"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Sensores corporais"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"acessar dados do sensor sobre seus sinais vitais"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperar cont. da janela"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspecionar o conteúdo da janela com que você está interagindo."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permite que o app receba e processe mensagens MMS. Isso significa que o app pode monitorar ou excluir as mensagens enviadas para o dispositivo sem mostrá-las para você."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"ler mensagens de difusão celular"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite que o app leia mensagens de difusão celular recebidas por seu dispositivo. Alertas de difusão celular são recebidos em alguns locais para avisar você de situações de emergência. Apps maliciosos podem interferir no desempenho ou funcionamento de seu dispositivo quando uma difusão celular de emergência é recebida."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Suas contas"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Acessar as contas disponíveis."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ler feeds inscritos"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite que o app obtenha detalhes sobre os feeds sincronizados no momento."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"enviar e ver mensagens SMS"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectados como um instalador"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectado a um acessório USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Toque para ver mais opções."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formatar armaz. USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formatar cartão SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Todos os arquivos armazenados em sua unidade armazenamento USB serão apagados. Não é possível reverter essa ação."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Todos os dados em seu cartão serão perdidos."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatar"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB conectada"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Toque para desativar a depuração do USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index b0552e9c..7a6a14f 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -243,8 +243,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotografiază și înregistrează videoclipuri"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"inițiază și gestionează apeluri telefonice"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Senzori corporali"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"accesează datele înregistrate de senzori despre semnele vitale"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Recuperează conținutul ferestrei"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Inspectează conținutul unei ferestre cu care interacționați."</string>
@@ -272,8 +271,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Permite aplicației să primească și să proceseze mesaje MMS. Acest lucru înseamnă că aplicația ar putea monitoriza sau şterge mesajele trimise pe dispozitivul dvs. fără a vi le arăta."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"citeşte mesajele cu transmisie celulară"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite aplicației să citească mesajele primite prin transmisie celulară de dispozitivul dvs. Alertele cu transmisie celulară sunt difuzate în unele locaţii pentru a vă avertiza cu privire la situaţiile de urgenţă. Aplicaţiile rău intenţionate pot afecta performanţa sau funcţionarea dispozitivului dvs. când este primită o transmisie celulară de urgenţă."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Conturile dvs."</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Accesează conturile disponibile."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"citire feeduri abonat"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite aplicației să obţină detalii despre feedurile sincronizate în prezent."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"trimite și vede mesajele SMS"</string>
@@ -358,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>
@@ -1050,11 +1051,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Conectat ca program de instalare"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Conectat la un accesoriu USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Atingeți pentru mai multe opțiuni."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format. stoc. USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formataţi cardul SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Toate fişierele stocate în stocarea USB vor fi şterse. Această acţiune nu poate fi anulată!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Toate datele de pe cardul dvs. se vor pierde."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formataţi"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Depanarea USB este conectată"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Atingeţi pentru a dezactiva depanarea USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Schimbați tastatura"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index a3dcf12..bdf11e1 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -235,17 +235,16 @@
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Календарь"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"доступ к календарю"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"отправка и просмотр SMS-сообщений"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"отправлять и просматривать SMS-сообщения"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Память"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"доступ к фотографиям, файлам и мультимедийному контенту на вашем устройстве"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"доступ к фото, мультимедиа и файлам на вашем устройстве"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"запись аудио"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"фото- и видеосъемка"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"осуществление телефонных звонков и управление ими"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Нательные датчики"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"доступ к данным датчиков о состоянии организма"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Получать содержимое окна"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Анализировать содержимое активного окна."</string>
@@ -273,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Приложение сможет получать и обрабатывать MMS. Это значит, что оно сможет отслеживать и удалять отправленные на ваше устройство сообщения, не показывая их."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"Читать сообщения массовой рассылки"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Приложение получит доступ к сообщениям широковещательных SMS-служб, которые в некоторых странах используются для информирования населения об экстренных ситуациях. Вредоносные программы могут помешать работе устройства, на которое поступают такие сообщения."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваши аккаунты"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ к имеющимся аккаунтам."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"Просмотр фидов пользователя"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Приложение сможет получать сведения о синхронизируемых в настоящее время фидах."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"отправка и просмотр SMS-сообщений"</string>
@@ -359,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>
@@ -510,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>
@@ -633,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>
@@ -1057,11 +1058,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Подключен как установщик"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB-устройство подключено"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Ещё варианты"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Отформатировать USB-накопитель?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Отформатировать SD-карту?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Все файлы, сохраненные на USB-накопителе, будут удалены. Это действие невозможно отменить."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Все данные будут удалены с карты."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Формат"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Отладка по USB разрешена"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Нажмите, чтобы отключить отладку по USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Выбор раскладки"</string>
@@ -1240,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 c406686..c26bc5a 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"පින්තූර ගැනීම සහ වීඩියෝ පටිගත කිරීම"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"දුරකථනය"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"දුරකථන ඇමතුම් සිදු කිරීම සහ කළමනාකරණය කිරීම"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"ශරීර සංවේදක"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"ඔබේ ජෛව ලක්ෂණ පිළිබඳ සංවේදක දත්ත වෙත පිවිසෙන්න"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"කවුළු අන්න්තර්ගතය ලබාගන්න"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ඔබ අන්තර්ක්‍රියාකාරී වන කවුළුවේ අන්තර්ගතය පරීක්ෂා කරන්න."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS පණිවිඩ සොයා ලබාගැනීමට සහ ක්‍රියාත්මක කිරීමට යෙදුමට අවසර දෙන්න. යෙදුම නිරීක්ෂණය කරනු ලබන අතර ඔබට ලැබුන පණිවිඩ පෙන්වීමෙන් තොරවම මකා දැමිය හැකි බව මෙමඟින් අදහස් කරයි."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"සෙල් ප්‍රචාරණ පණිවිඩ කියවීම"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ඔබගේ උපාංගයට ලැබුණු සෙල් විකාශන පණිවිඩ කියවීමට යෙදුමට අවසර දෙන්න. ඔබට හදිසි අවස්ථාවන් පිළිබඳ අනතුරු ඇඟවීමට සෙල් විකාශන පණිවිඩ ඇතැම් ස්ථානවල සිට යවනු ලබයි. හදිසි සෙල් විකාශන ලැබෙන අවස්ථාවකදී, අනිෂ්ට යෙදුම් මඟින් ඔබගේ උපාංගයට කාර්ය සාධනයට හෝ ක්‍රියකරණයට බාධා සිදුවිය හැක."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"ඔබගේ ගිණුම්"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ලබාගත හැකි ගිණුම් වලට ප්‍රවේශ වීම."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"දායක වූ සංග්‍රහ කියවීම"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"වර්තමාන සමමුහුර්ත සංග්‍රහ ගැන විස්තර ලැබීමට යෙදුමට අවසර දෙන්න."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS පණිවිඩ යැවීම සහ බැලීම"</string>
@@ -357,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>
@@ -1045,11 +1046,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ස්ථාපිතයක් ලෙස සම්බන්ධයි"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB මෙවලමකට සම්බන්ධිතයි"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"වඩා වැඩි විකල්ප සඳහා ස්පර්ශ කරන්න."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB ආචයනය ෆෝමැට් කරන්නද?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD පත ෆෝමැට් කරන්නද?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ඔබගේ USB ආචයනයේ ඇති සියලුම ගොනු මැකී යනු ඇත. මෙම ක්‍රියාව ආපසු හැරවිය නොහැක!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ඔබගේ පතේ සියලු දත්ත නැති වනු ඇත."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ෆෝමැට්"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB නිදොස්කරණය සම්බන්ධිතයි"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB නිදොස්කරණය අබල කිරීමට ස්පර්ශ කරන්න."</string>
     <string name="select_input_method" msgid="8547250819326693584">"යතුරු පුවරු වෙනස් කිරීම"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 4305487..9bca666 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -235,7 +235,7 @@
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendár"</string>
     <string name="permgroupdesc_calendar" msgid="3889615280211184106">"prístup ku kalendáru"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="4656988620100940350">"posielanie a zobrazovanie správ SMS"</string>
+    <string name="permgroupdesc_sms" msgid="4656988620100940350">"posielať a zobrazovať SMS"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Úložisko"</string>
     <string name="permgroupdesc_storage" msgid="637758554581589203">"prístup k fotkám, médiám a súborom na zariadení"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofón"</string>
@@ -243,9 +243,8 @@
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Fotoaparát"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotenie a zaznamenávanie videí"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefón"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefonovanie a správa hovorov"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefonovať a spravovať hovory"</string>
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Telesné senzory"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"prístup k údajom senzorov o životných funkciách"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Načítať obsah okna"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Môžete preskúmať obsah okna, s ktorým pracujete."</string>
@@ -273,11 +272,9 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Umožňuje aplikácii prijímať a spracovávať správy MMS. Znamená to, že aplikácia môže sledovať správy odoslané na vaše zariadenie alebo ich odstrániť bez toho, aby sa vám zobrazili."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"čítať správy Cell Broadcast"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Umožňuje aplikácii čítať správy Cell Broadcast prijaté vaším zariadením. Upozornenia Cell Broadcast sú doručované na určitých miestach a upozorňujú na núdzové situácie. Škodlivé aplikácie môžu pri prijatí núdzovej správy Cell Broadcast narušiť výkonnosť alebo prevádzku vášho zariadenia."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaše účty"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Prístup k dostupným účtom."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"čítať odoberané informačné kanály"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Umožňuje aplikácii získať podrobnosti o aktuálne synchronizovaných informačných kanáloch."</string>
-    <string name="permlab_sendSms" msgid="7544599214260982981">"posielať a zobrazovať správy SMS"</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"posielať a zobrazovať SMS"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"Umožňuje aplikácii odosielať správy SMS. Môže to mať za následok účtovanie neočakávaných poplatkov. Škodlivé aplikácie vám môžu spôsobiť výdavky odosielaním správ bez vášho potvrdenia."</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"čítať textové správy (SMS alebo MMS)"</string>
     <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Umožňuje aplikácii čítať správy SMS uložené v tablete alebo na SIM karte. Toto povolenie umožňuje aplikácii čítať správy SMS bez ohľadu na ich obsah alebo dôvernosť."</string>
@@ -359,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>
@@ -1057,15 +1058,10 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Pripojené ako inštalátor"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Pripojené k periférnemu zariadeniu USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Ďalšie možnosti zobrazíte klepnutím."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formátovať ukladací priestor USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formátovať SD kartu?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Všetky súbory uložené v ukladacom priestore USB budú vymazané. Táto akcia sa nedá vrátiť späť!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Všetky údaje na vašej karte budú stratené."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formát"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Ladenie cez USB pripojené"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"Klepnutím zakážete ladenie USB"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"Klepnutím zakážete ladenie cez USB"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Zmeniť klávesnicu"</string>
-    <string name="configure_input_methods" msgid="4769971288371946846">"Vybrať klávesnice"</string>
+    <string name="configure_input_methods" msgid="4769971288371946846">"Vybrať klávesnicu"</string>
     <string name="show_ime" msgid="9157568568695230830">"Zobraziť metódu vstupu"</string>
     <string name="hardware" msgid="7517821086888990278">"Hardvér"</string>
     <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Zvoľte rozloženie klávesnice"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 3b355d7..184595b 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -272,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Aplikaciji omogoča prejemanje in obdelavo MMS-ov. S tem lahko aplikacija nadzoruje ali izbriše sporočila, poslana v napravo, ne da bi vam jih pokazala."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"branje sporočil oddaje v celici"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Omogoča aplikaciji branje sporočil oddaje v celici, ki jih prejme naprava. Opozorila oddaje v celici so dostavljena na nekaterih lokacijah, da vas opozorijo na izredne razmere. Zlonamerne aplikacije lahko vplivajo na delovanje naprave, ko dobi sporočilo oddaje v celici."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Vaši računi"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Dostop do razpoložljivih računov."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"branje naročenih virov"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Aplikaciji omogoča dobivanje podrobnosti o trenutno sinhroniziranih virih."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"pošiljanje in ogled sporočil SMS"</string>
@@ -358,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>
@@ -625,7 +627,7 @@
     <string name="relationTypeAssistant" msgid="6274334825195379076">"Pomočnik"</string>
     <string name="relationTypeBrother" msgid="8757913506784067713">"Brat"</string>
     <string name="relationTypeChild" msgid="1890746277276881626">"Otrok"</string>
-    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Domači partner"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Partner"</string>
     <string name="relationTypeFather" msgid="5228034687082050725">"Oče"</string>
     <string name="relationTypeFriend" msgid="7313106762483391262">"Prijatelj"</string>
     <string name="relationTypeManager" msgid="6365677861610137895">"Vodja"</string>
@@ -1056,11 +1058,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Povezan kot namestitveni program"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Priključen na dodatek USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Za več možnosti se dotaknite."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Ali želite formatirati pomnilnik USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Želite formatirati kartico SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Vse datoteke, shranjene v v pomnilniku USB, bodo izbrisane. Tega dejanja ni mogoče razveljaviti!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Vsi podatki v napravi bodo izgubljeni."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formatiraj"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Iskanje in odpravljanje napak USB je povezano"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Dotaknite se, če želite onemogočiti iskanje in odpravljanje napak prek vrat USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Sprememba tipkovnice"</string>
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml
index 2053443..e1508cb 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq-rAL/strings.xml
@@ -72,7 +72,7 @@
     <string name="ColpMmi" msgid="3065121483740183974">"ID-ja e linjës së lidhur"</string>
     <string name="ColrMmi" msgid="4996540314421889589">"Kufizimi i ID-së së linjës së lidhur"</string>
     <string name="CfMmi" msgid="5123218989141573515">"Transferimi i telefonatave"</string>
-    <string name="CwMmi" msgid="9129678056795016867">"Telefonatë në pritje"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"Pritja e telefonatave"</string>
     <string name="BaMmi" msgid="455193067926770581">"Bllokimi i telefonatave"</string>
     <string name="PwdMmi" msgid="7043715687905254199">"Ndryshimi i fjalëkalimit"</string>
     <string name="PinMmi" msgid="3113117780361190304">"Ndryshim PIN-i"</string>
@@ -235,7 +235,7 @@
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
     <string name="permgroupdesc_sms" msgid="4656988620100940350">"dërgo dhe shiko mesazhet SMS"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Hapësira e ruajtjes"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"qasu te fotografitë, media dhe skedarët në pajisje"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"qasu te fotografitë, përmbajtjet audio-vizuale dhe skedarët në pajisje"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofoni"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"regjistro audio"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Lejon aplikacionin të marrë dhe përpunojë mesazhe MMS. Kjo do të thotë se aplikacioni mund të monitorojë ose fshijë mesazhe të dërguara në pajisjen tënde, pa t\'i treguar ato."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"lexo mesazhet e transmetimit të qelizës"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Lejon aplikacionin të lexojë mesazhet e transmetimit të qelizës, të marra nga pajisja jote. Alarmet e transmetimit të qelizës dërgohen në disa vendndodhje për të të paralajmëruar në situata urgjente. Aplikacionet keqdashëse mund të ndërhyjnë në veprimtarinë ose operacionin e pajisjes tënde kur merret një transmetim urgjent i qelizës."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Llogaritë e tua"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Qasje në llogaritë e vlefshme."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"lexo informacione të abonuara"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Lejon aplikacionin të marrë detaje rreth çdo gjëje që sinkronizohet në pajisje."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"dërgo dhe shiko mesazhet SMS"</string>
@@ -356,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>
@@ -492,7 +494,7 @@
     <string name="permdesc_bindCarrierMessagingService" msgid="2762882888502113944">"Lejon zotëruesin të lidhet me ndërfaqen e nivelit të lartë të shërbimit të mesazheve të operatorit. Nuk nevojitet për aplikacione normale."</string>
     <string name="permlab_bindCarrierServices" msgid="3233108656245526783">"lidhu me shërbimet e operatorit celular"</string>
     <string name="permdesc_bindCarrierServices" msgid="1391552602551084192">"Lejon që mbajtësi të lidhet me shërbimet e operatorit celular. Nuk nevojitet për aplikacionet normale."</string>
-    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"qasje në \"Mos shqetëso\""</string>
+    <string name="permlab_access_notification_policy" msgid="4247510821662059671">"qasje te \"Mos shqetëso\""</string>
     <string name="permdesc_access_notification_policy" msgid="3296832375218749580">"Lejon aplikacionin të lexojë dhe shkruajë konfigurimin e \"Mos shqetëso\"."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Cakto rregullat e fjalëkalimit"</string>
     <string name="policydesc_limitPassword" msgid="2502021457917874968">"Kontrollo gjatësinë dhe karakteret e lejuara në fjalëkalimet dhe kodet PIN të kyçjes së ekranit."</string>
@@ -505,7 +507,7 @@
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="2185480427217127147">"Monitoro numrin e fjalëkalimeve të shkruara gabim kur shkyç ekranin. Kyçe telefonin ose spastro të gjitha të dhënat e këtij përdoruesi nëse shkruhen shumë fjalëkalime të gabuara."</string>
     <string name="policylab_resetPassword" msgid="4934707632423915395">"Ndryshimin e kyçjes"</string>
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"Ndryshon kyçjen e ekranit."</string>
-    <string name="policylab_forceLock" msgid="2274085384704248431">"Kyçje të ekranit"</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Kyçjen e ekranit"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Kontrollon si dhe kur të kyçet ekrani."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Fshirjen e të dhënave"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Fshi të dhënat e tabletit pa paralajmërim duke kryer një rivendosje të të dhënave në gjendje fabrike."</string>
@@ -630,7 +632,7 @@
     <string name="relationTypeMother" msgid="4578571352962758304">"Nënë"</string>
     <string name="relationTypeParent" msgid="4755635567562925226">"Prind"</string>
     <string name="relationTypePartner" msgid="7266490285120262781">"Partner"</string>
-    <string name="relationTypeReferredBy" msgid="101573059844135524">"Referuar nga"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"I referuar"</string>
     <string name="relationTypeRelative" msgid="1799819930085610271">"I afërm"</string>
     <string name="relationTypeSister" msgid="1735983554479076481">"Motër"</string>
     <string name="relationTypeSpouse" msgid="394136939428698117">"Bashkëshort/e"</string>
@@ -1008,7 +1010,7 @@
     <string name="sim_added_message" msgid="7797975656153714319">"Rinise pajisjen për të pasur qasje në rrjetin celular."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"Rifillo"</string>
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Cakto kohën"</string>
-    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Cakto datën"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Vendos datën"</string>
     <string name="date_time_set" msgid="5777075614321087758">"Cakto"</string>
     <string name="date_time_done" msgid="2507683751759308828">"U krye!"</string>
     <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"E RE: "</font></string>
@@ -1042,12 +1044,7 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"I lidhur si instalues"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"U lidh me një ndihmës USB-je"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Prek për më shumë opsione."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Të formatohet USB-ja?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Të formatohet karta SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Të gjithë skedarët e ruajtur në USB do të fshihen. Ky veprim nuk mund të kthehet mbrapsht!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Të gjitha të dhënat e kartës do të humbasin."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Formato"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"Korrigjuesi i USB-së u lidh"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"Korrigjuesi i USB-së i lidhur"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Prek për të çaktivizuar korrigjimin e gabimeve të USB-së."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Ndërro tastierë"</string>
     <string name="configure_input_methods" msgid="4769971288371946846">"Zgjidh tastierat"</string>
@@ -1061,7 +1058,7 @@
     <string name="ext_media_checking_notification_title" msgid="5734005953288045806">"Po përgatit <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="ext_media_checking_notification_message" msgid="4747432538578886744">"Po kontrollon për gabime"</string>
     <string name="ext_media_new_notification_message" msgid="7589986898808506239">"U zbulua karta e re <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"Për transferimin e fotografive dhe skedarëve \"media\""</string>
+    <string name="ext_media_ready_notification_message" msgid="4083398150380114462">"Për transferimin e fotografive dhe skedarëve të tjerë"</string>
     <string name="ext_media_unmountable_notification_title" msgid="8295123366236989588">"<xliff:g id="NAME">%s</xliff:g> e dëmtuar"</string>
     <string name="ext_media_unmountable_notification_message" msgid="1586311304430052169">"<xliff:g id="NAME">%s</xliff:g> është e dëmtuar. Prek për ta rregulluar."</string>
     <string name="ext_media_unsupported_notification_title" msgid="3797642322958803257">"<xliff:g id="NAME">%s</xliff:g> nuk mbështetet"</string>
@@ -1251,7 +1248,7 @@
     <string name="org_unit" msgid="7265981890422070383">"Njësia organizative:"</string>
     <string name="issued_by" msgid="2647584988057481566">"Lëshuar nga:"</string>
     <string name="validity_period" msgid="8818886137545983110">"Vlefshmëria:"</string>
-    <string name="issued_on" msgid="5895017404361397232">"Hedhur në qarkullim më:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"Lëshuar më:"</string>
     <string name="expires_on" msgid="3676242949915959821">"Skadon më:"</string>
     <string name="serial_number" msgid="758814067660862493">"Numri serik:"</string>
     <string name="fingerprints" msgid="4516019619850763049">"Shenjat e gishtave:"</string>
@@ -1463,7 +1460,7 @@
     <string name="lock_to_app_toast_locked" msgid="9125176335701699164">"Ekrani është i gozhduar. Anulimi i mbërthimit nuk lejohet nga organizata jote."</string>
     <string name="lock_to_app_start" msgid="6643342070839862795">"Ekrani u gozhdua"</string>
     <string name="lock_to_app_exit" msgid="8598219838213787430">"Ekrani u hoq nga gozhdimi"</string>
-    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Kërko PIN-in para se ta zhgozhdosh."</string>
+    <string name="lock_to_app_unlock_pin" msgid="2552556656504331634">"Zhgozhdimi kërkon PIN-in"</string>
     <string name="lock_to_app_unlock_pattern" msgid="4182192144797225137">"Kërko model shkyçjeje para heqjes së gozhdimit"</string>
     <string name="lock_to_app_unlock_password" msgid="6380979775916974414">"Kërko fjalëkalim para heqjes nga gozhdimi."</string>
     <string name="package_installed_device_owner" msgid="8420696545959087545">"U instalua nga administratori yt"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index ea1a22d..e5c0b3d 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -243,14 +243,13 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"снимање слика и видео снимака"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"упућивање телефонских позива и управљање њима"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Сензори за тело"</string>
     <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>
@@ -272,8 +271,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Дозвољава апликацији да прима и обрађује MMS поруке. То значи да апликација може да надгледа или брише поруке које се шаљу уређају, а да вам их не прикаже."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"читање порука инфо сервиса"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Омогућава апликацији да чита поруке инфо сервиса које уређај прима. Упозорења инфо сервиса се на неким локацијама примају као упозорења на хитне случајеве. Злонамерне апликације могу да утичу на учинак или ометају функционисање уређаја када се прими порука инфо сервиса о хитном случају."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Налози"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Приступ доступним налозима."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"читање пријављених фидова"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Дозвољава апликацији да преузима детаље о тренутно синхронизованим фидовима."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"шаљи и прегледај SMS поруке"</string>
@@ -358,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>
@@ -505,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>
@@ -880,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>
@@ -1050,11 +1051,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Повезан као инсталациони програм"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Повезано са USB додатком"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Додирните за још опција."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Желите да формат. USB меморију?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Желите ли да форматирате SD картицу?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Све датотеке ускладиштене на USB меморији биће избрисане. Ова радња не може да се опозове!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Сви подаци са картице биће изгубљени."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Формат"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Отклањање грешака са USB-а је успостављено"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Додирните да бисте онемогућили отклањање грешака са USB-а."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Промените тастатуру"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 22584f6..cae88f4 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -240,7 +240,7 @@
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"spela in ljud"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"ta bilder och spela in video"</string>
-    <string name="permgrouplab_phone" msgid="5229115638567440675">"Mobil"</string>
+    <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"ringa och hantera telefonsamtal"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"Kroppssensorer"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"få åtkomst till sensordata om dina vitalparametrar"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Tillåter att appen tar emot och hanterar MMS-meddelanden. Detta innebär att appen kan övervaka eller ta bort meddelanden som skickats till enheten utan att visa dem för dig."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"läsa SMS-meddelanden"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Appen tillåts läsa SMS som skickas till din enhet. På vissa platser skickas SMS för att varna för nödsituationer. Skadliga appar kan påverka enhetens prestanda eller funktionalitet när du får ett meddelande om en nödsituation via SMS."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Dina konton"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Få åtkomst till tillgängliga konton."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"läsa flöden som du prenumererar på"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Tillåter att appen får information om aktuella synkroniserade flöden."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"skicka och visa sms"</string>
@@ -356,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>
@@ -507,7 +509,7 @@
     <string name="policydesc_resetPassword" msgid="1278323891710619128">"Ändra skärmlåset."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Lås skärmen"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Kontrollera hur och när skärmlåset aktiveras."</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"Radera alla data"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Radera all data"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Ta bort data från surfplattan utan förvarning genom att återställa standardinställningarna."</string>
     <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Rensar uppgifterna på tv:n utan föregående varning genom att återställa standardinställningarna."</string>
     <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Ta bort data från mobilen utan förvarning genom att återställa standardinställningarna."</string>
@@ -630,7 +632,7 @@
     <string name="relationTypeMother" msgid="4578571352962758304">"Mamma"</string>
     <string name="relationTypeParent" msgid="4755635567562925226">"Förälder"</string>
     <string name="relationTypePartner" msgid="7266490285120262781">"Partner"</string>
-    <string name="relationTypeReferredBy" msgid="101573059844135524">"Rekommenderad av"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"Genom"</string>
     <string name="relationTypeRelative" msgid="1799819930085610271">"Släkting"</string>
     <string name="relationTypeSister" msgid="1735983554479076481">"Syster"</string>
     <string name="relationTypeSpouse" msgid="394136939428698117">"Make/maka"</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Ansluten som installationsprogram"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ansluten till ett USB-tillbehör"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Visa fler alternativ genom att trycka."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formatera USB-enhet?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Vill du formatera SD-kortet?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Alla filer på USB-lagringsenheten kommer att raderas. Åtgärden kan inte ångras!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Alla data på kortet försvinner."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-felsökning ansluten"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Tryck om du vill inaktivera USB-felsökning."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Byt tangentbord"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 818ee1d..0f8f193 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -272,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Inaruhusu programu kupokea na kuchakata ujumbe medianwai (MMS). Hii inamaanisha uwezo wa kuchunguza na kufuta ujumbe uliotumwa kwa kifaa chako bila ya kukuonyesha."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"soma mawasiliano ya matangazo ya simu"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Huruhusu programu kusoma mawasiliano ya matangazo ya simu yaliyoingia kwenye kifaa chako. Arifa za matangazo ya simu huwasilishwa katika maeneo mengine ili kukuonya juu ya hali za dharura. Huenda programu hasidi zikatatiza utendajikazi au shughuli ya kifaa chako wakati matangazo ya simu ya dharura yameingia."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaunti zako"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Fikia akaunti zinazopatikana."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"kusoma mipasho kutoka vyanzo unavyofuatilia"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Inaruhusu programu kupata maelezo kuhusu mlisho iliyolandanishwa kwa sasa."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"tuma na uangalie ujumbe wa SMS"</string>
@@ -358,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>
@@ -1044,11 +1046,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Imeunganishwa kama kisakinishi"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Imeunganishwa kwa kifuasi cha USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Gusa kwa chaguo zaidi."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Fomati hifadhi ya USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Ungependa kutayarisha kadi ya SD ili iweze kutumika?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Faili zote zilizohifadhiwa katika hifadhi yako ya USB zitafutwa. Hatua hii haiwezi kubadilishwa!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Data yote kwenye kadi yako itapotea."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Fomati"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji wa USB umeunganishwa"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Gusa ili uzime utatuaji wa USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Badilisha kibodi"</string>
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml
index cc9f34b..cf3238f 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta-rIN/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS செய்திகளைப் பெற, செயற்படுத்தப் பயன்பாட்டை அனுமதிக்கிறது. இதற்கு அர்த்தம் உங்கள் சாதனத்திற்கு அனுப்பப்படும் செய்திகளை உங்களுக்குக் காட்டாமல் கண்காணிக்கவோ, நீக்கவோ பயன்பாட்டால் முடியும் என்பதாகும்."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"செல் அலைபரப்புச் செய்திகளைப் படித்தல்"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"உங்கள் சாதனத்தில் பெறப்படும் செல் அலைபரப்புச் செய்திகளைப் படிப்பதற்குப் பயன்பாட்டை அனுமதிக்கிறது. அவசரநிலை சூழ்நிலைகளை உங்களுக்கு எச்சரிக்கைச் செய்வதற்கு சில இடங்களில் செல் அலைபரப்பு விழிப்பூட்டல்கள் வழங்கப்படும். அவசரநிலை மொபைல் அலைபரப்புப் பெறப்படும்போது உங்கள் சாதனத்தின் செயல்திறன் அல்லது செயல்பாட்டுடன் தீங்கிழைக்கும் பயன்பாடுகள் அதைத் தடுக்கலாம்."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"உங்கள் கணக்குகள்"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"கிடைக்கும் கணக்குகளை அணுக முடியும்."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"குழுசேர்ந்த ஊட்டங்களைப் படித்தல்"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"தற்போது ஒத்திசைந்த ஊட்டங்களைப் பற்றிய விவரங்களைப் பெற பயன்பாட்டை அனுமதிக்கிறது."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS செய்திகளை அனுப்புதல் மற்றும் பார்த்தல்"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"நிறுவியாக இணைக்கப்பட்டது"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB துணைக்கருவியுடன் இணைக்கப்பட்டுள்ளது"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"கூடுதல் விருப்பங்களுக்காகத் தொடவும்."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB சேமிப்பகத்தில் உள்ளவற்றை அழிக்கவா?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD கார்டில் உள்ளவற்றை அழிக்கவா?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB சேமிப்பகத்தில் சேமித்த எல்லா கோப்புகளும் அழிக்கப்படும். இந்தச் செயலைச் செயல்தவிர்க்க முடியாது."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"கார்டில் உள்ள எல்லா தரவையும் இழப்பீர்கள்."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"வடிவமைப்பு"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB பிழைதிருத்தம் இணைக்கப்பட்டது"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB பிழைத்திருத்தத்தை முடக்க, தொடவும்."</string>
     <string name="select_input_method" msgid="8547250819326693584">"விசைப்பலகையை மாற்று"</string>
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml
index e96403a..b1feaac 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te-rIN/strings.xml
@@ -227,21 +227,21 @@
     <string name="user_owner_label" msgid="2804351898001038951">"వ్యక్తిగతం"</string>
     <string name="managed_profile_label" msgid="6260850669674791528">"కార్యాలయం"</string>
     <string name="permgrouplab_contacts" msgid="3657758145679177612">"పరిచయాలు"</string>
-    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"మీ పరిచయాలను ప్రాప్యత చేస్తుంది"</string>
+    <string name="permgroupdesc_contacts" msgid="6951499528303668046">"మీ పరిచయాలను ప్రాప్యత చేయడానికి"</string>
     <string name="permgrouplab_location" msgid="7275582855722310164">"స్థానం"</string>
-    <string name="permgroupdesc_location" msgid="1346617465127855033">"ఈ పరికర స్థానాన్ని ప్రాప్యత చేయడానికి అనుమతి"</string>
+    <string name="permgroupdesc_location" msgid="1346617465127855033">"ఈ పరికర స్థానాన్ని ప్రాప్యత చేయడానికి"</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"క్యాలెండర్"</string>
-    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"మీ క్యాలెండర్‌ను ప్రాప్యత చేస్తుంది"</string>
+    <string name="permgroupdesc_calendar" msgid="3889615280211184106">"మీ క్యాలెండర్‌ను ప్రాప్యత చేయడానికి"</string>
     <string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
     <string name="permgroupdesc_sms" msgid="4656988620100940350">"SMS సందేశాలను పంపుతుంది మరియు వీక్షిస్తుంది"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"నిల్వ"</string>
-    <string name="permgroupdesc_storage" msgid="637758554581589203">"మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైల్‌లను ప్రాప్యత చేస్తుంది"</string>
+    <string name="permgroupdesc_storage" msgid="637758554581589203">"మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైల్‌లను ప్రాప్యత చేయడానికి"</string>
     <string name="permgrouplab_microphone" msgid="171539900250043464">"మైక్రోఫోన్"</string>
     <string name="permgroupdesc_microphone" msgid="4988812113943554584">"ఆడియోను రికార్డ్ చేస్తుంది"</string>
     <string name="permgrouplab_camera" msgid="4820372495894586615">"కెమెరా"</string>
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"చిత్రాలను తీస్తుంది మరియు వీడియోను రికార్డ్ చేస్తుంది"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"ఫోన్"</string>
-    <string name="permgroupdesc_phone" msgid="6234224354060641055">"ఫోన్ కాల్‌లను చేస్తుంది మరియు నిర్వహిస్తుంది"</string>
+    <string name="permgroupdesc_phone" msgid="6234224354060641055">"ఫోన్ కాల్‌లను చేయడానికి మరియు నిర్వహించడానికి"</string>
     <string name="permgrouplab_sensors" msgid="416037179223226722">"శరీర సెన్సార్‌లు"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"మీ అత్యంత కీలకమైన గుర్తుల గురించి సెన్సార్ డేటాని ప్రాప్యత చేస్తుంది"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"విండో కంటెంట్‍ను తిరిగి పొందుతుంది"</string>
@@ -270,11 +270,9 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది. అనువర్తనం మీ పరికరానికి పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"సెల్ ప్రసార సందేశాలను చదవడం"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"మీ పరికరం స్వీకరించిన సెల్ ప్రసార సందేశాలను చదవడానికి అనువర్తనాన్ని అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం స్వీకరించినప్పుడు హానికరమైన అనువర్తనాలు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"మీ ఖాతాలు"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"అందుబాటులో ఉన్న ఖాతాలను ప్రాప్యత చేయండి."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"చందా చేయబడిన ఫీడ్‌లను చదవడం"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ప్రస్తుతం సమకాలీకరించిన ఫీడ్‌ల గురించి వివరాలను పొందడానికి అనువర్తనాన్ని అనుమతిస్తుంది."</string>
-    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS సందేశాలను పంపడానికి మరియు వీక్షించడానికి అనుమతి"</string>
+    <string name="permlab_sendSms" msgid="7544599214260982981">"SMS సందేశాలను పంపడానికి మరియు వీక్షించడానికి"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"SMS సందేశాలు పంపడానికి అనువర్తనాన్ని అనుమతిస్తుంది. దీని వలన ఊహించని ఛార్జీలు విధించబడవచ్చు. హానికరమైన అనువర్తనాలు మీ నిర్ధారణ లేకుండానే సందేశాలను పంపడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"మీ వచన సందేశాలు (SMS లేదా MMS) చదవడం"</string>
     <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"మీ టాబ్లెట్ లేదా సిమ్ కార్డు‌లో నిల్వ చేయబడిన SMS సందేశాలను చదవడానికి అనువర్తనాన్ని అనుమతిస్తుంది. ఇది కంటెంట్ లేదా గోప్యతతో సంబంధం లేకుండా అన్ని SMS సందేశాలను చదవడానికి అనువర్తనాన్ని అనుమతిస్తుంది."</string>
@@ -356,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>
@@ -503,14 +505,14 @@
     <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="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>
+    <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="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>
@@ -587,7 +589,7 @@
     <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
     <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"కార్యాలయ మొబైల్"</string>
     <string name="phoneTypeWorkPager" msgid="649938731231157056">"కార్యాలయ పేజర్"</string>
-    <string name="phoneTypeAssistant" msgid="5596772636128562884">"సహాయకం"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"అసిస్టెంట్"</string>
     <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
     <string name="eventTypeCustom" msgid="7837586198458073404">"అనుకూలం"</string>
     <string name="eventTypeBirthday" msgid="2813379844211390740">"పుట్టినరోజు"</string>
@@ -630,7 +632,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ఇన్‌స్టాలర్‌గా కనెక్ట్ చేయబడింది"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB ఉపకరణానికి కనెక్ట్ చేయబడింది"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"మరిన్ని ఎంపికల కోసం తాకండి."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB నిల్వను ఫార్మాట్ చేయాలా?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD కార్డు‌ని ఫార్మాట్ చేయాలా?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"మీ USB నిల్వలో నిల్వ చేసిన అన్ని ఫైల్‌లు ఎరేజ్ చేయబడతాయి. ఈ చర్యను రద్దు చేసి పూర్వ స్థితికి తీసుకురావడం సాధ్యపడదు!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"మీ కార్డులోని మొత్తం డేటాను కోల్పోతారు."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ఫార్మాట్ చేయి"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB డీబగ్గింగ్ కనెక్ట్ చేయబడింది"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB డీబగ్గింగ్‌ను నిలిపివేయడానికి తాకండి."</string>
     <string name="select_input_method" msgid="8547250819326693584">"కీబోర్డ్‌ను మార్చు"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 813c61f..5474fff 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"อนุญาตให้แอปพลิเคชันรับและประมวลผลข้อความ MMS ซึ่งหมายความว่าแอปพลิเคชันจะสามารถตรวจสอบหรือลบข้อความที่ส่งมายังอุปกรณ์ของคุณได้โดยไม่ต้องแสดงให้คุณเห็น"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"อ่านข้อความที่ได้รับจากสถานีมือถือ"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"อนุญาตให้แอปอ่านข้อความจากสถานีมือถือที่อุปกรณ์ได้รับ การแจ้งเตือนทางมือถือมีให้บริการในบางพื้นที่ โดยจะแจ้งเตือนคุณเกี่ยวกับสถานการณ์ฉุกเฉิน แอปที่เป็นอันตรายอาจเข้าแทรกแซงการทำงานของอุปกรณ์เมื่อได้รับข้อความแจ้งเตือนฉุกเฉิน"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"บัญชีของคุณ"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"เข้าถึงบัญชีที่ใช้งานได้"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"อ่านฟีดข้อมูลที่สมัครไว้"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"อนุญาตให้แอปพลิเคชันดูรายละเอียดเกี่ยวกับฟีดที่ซิงค์ไว้ในปัจจุบัน"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"ส่งและดูข้อความ SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"เชื่อมต่อเป็นตัวติดตั้ง"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"เชื่อมต่อกับอุปกรณ์เสริม USB แล้ว"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"แตะเพื่อดูตัวเลือกเพิ่มเติม"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"ฟอร์แมต USB หรือไม่"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"ฟอร์แมตการ์ด SD หรือไม่"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ไฟล์ทั้งหมดที่เก็บไว้ในที่จัดเก็บข้อมูล USB ของคุณจะถูกลบทิ้ง การทำงานนี้ไม่สามารถย้อนกลับได้!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ข้อมูลทั้งหมดในการ์ดของคุณจะหายไป"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"รูปแบบ"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"เชื่อมต่อการแก้ไขข้อบกพร่อง USB แล้ว"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"แตะเพื่อปิดใช้งานการแก้ไขข้อบกพร่องของ USB"</string>
     <string name="select_input_method" msgid="8547250819326693584">"เปลี่ยนแป้นพิมพ์"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 4b0cba6..1fcc942 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -191,7 +191,7 @@
     <string name="reboot_to_update_prepare" msgid="6305853831955310890">"Naghahandang i-update…"</string>
     <string name="reboot_to_update_package" msgid="3871302324500927291">"Pinoproseso ang package ng update…"</string>
     <string name="reboot_to_update_reboot" msgid="6428441000951565185">"Nagre-restart…"</string>
-    <string name="reboot_to_reset_title" msgid="4142355915340627490">"Pag-reset ng factory data"</string>
+    <string name="reboot_to_reset_title" msgid="4142355915340627490">"I-reset ang data ng factory"</string>
     <string name="reboot_to_reset_message" msgid="2432077491101416345">"Nagre-restart…"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Nagsa-shut down…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Mag-shut down ang iyong tablet."</string>
@@ -210,7 +210,7 @@
     <string name="global_action_power_off" msgid="4471879440839879722">"I-off"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"Ulat sa bug"</string>
     <string name="bugreport_title" msgid="2667494803742548533">"Kunin ang ulat sa bug"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Mangongolekta ito ng impormasyon tungkol sa kasalukuyang katayuan ng iyong device, na ipapadala bilang mensaheng e-mail. Gugugol ito ng kaunting oras mula sa pagsisimula sa ulat sa bug hanggang sa handa na itong maipadala; mangyaring maging mapagpasensya."</string>
+    <string name="bugreport_message" msgid="398447048750350456">"Mangongolekta ito ng impormasyon tungkol sa kasalukuyang katayuan ng iyong device, na ipapadala bilang mensaheng e-mail. Gugugol ito ng kaunting oras mula sa pagsisimula ng ulat sa bug hanggang sa handa na itong maipadala; mangyaring magpasensya."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Silent mode"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Naka-OFF ang tunog"</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Naka-ON ang sound"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Pinapayagan ang app na tumanggap at magproseso ng mga mensaheng MMS. Nangangahulugan ito na maaaring sumubaybay o magtanggal ang app ng mga mensaheng ipinapadala sa iyong device nang hindi ipinapakita ang mga ito sa iyo."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"basahin ang mga mensahe ng cell broadcast"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Binibigyang-daan ang app na magbasa ng mga mensahe ng cell broadcast na natanggap ng iyong device. Inihahatid ang mga alerto ng cell broadcast sa ilang lokasyon upang balaan ka tungkol sa mga emergency na sitwasyon. Maaaring makaabala ang nakakahamak na apps sa pagganap o pagpapatakbo ng iyong device kapag nakatanggap ng emergency na cell broadcast."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Iyong mga account"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"I-access ang mga available na account."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"magbasa ng mga na-subscribe na feed"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Pinapayagan ang app na kumuha ng mga detalye tungkol sa kasalukuyang naka-sync na mga feed."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"magpadala at tumingin ng mga mensaheng SMS"</string>
@@ -356,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>
@@ -1042,15 +1044,10 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Nakakonekta bilang isang installer"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Nakakonekta sa isang accessory ng USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Pindutin para sa higit pang mga opsyon."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Iformat USB storage?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"I-format ang SD card?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Mabubura ang lahat ng file na nakaimbak sa iyong USB storage. Hindi mababawi ang pagkilos na ito!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Mawawala ang lahat ng data sa iyong card."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Konektado ang debugging ng USB"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Pindutin upang i-disable ang pagde-debug ng USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Baguhin ang keyboard"</string>
-    <string name="configure_input_methods" msgid="4769971288371946846">"Piliin ang mga keyboard"</string>
+    <string name="configure_input_methods" msgid="4769971288371946846">"Pumili ng mga keyboard"</string>
     <string name="show_ime" msgid="9157568568695230830">"Ipakita ang pamamaraan ng pag-input"</string>
     <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
     <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pumili ng layout ng keyboard"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index f6144c2..b956a60 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"fotoğraf çekme ve video kaydetme"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"telefon aramaları yapma ve çağrıları yönetme"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"Vücut Sensörleri"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"hayati belirtilerinizle ilgili sensör verilerine erişme"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pencere içeriğini alma"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Etkileşim kurduğunuz pencerenin içeriğini inceler."</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Uygulamaya MMS iletilerini alma ve işleme izni verir. Bu izin, uygulamanın cihazınıza gönderilen iletileri takip edip size göstermeden silebileceği anlamına gelir."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"hücre yayını mesajlarını oku"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Uygulamaya, cihazınız tarafından alınan hücre yayını mesajlarını okuma izni verir. Hücre yayını uyarıları bazı yerlerde acil durumlar konusunda sizi uyarmak için gönderilir. Kötü amaçlı uygulamalar acil hücre yayını alındığında cihazınızın performansına ya da çalışmasına engel olabilir."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Hesaplarınız"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Kullanılabilir hesaplara erişin."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"abone olunan yayınları okuma"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Uygulamaya, o anda senkronize olan özet akışları ile ilgili bilgi alma izni verir."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS iletileri gönderme ve görüntüleme"</string>
@@ -357,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>
@@ -579,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Yükleyici olarak bağlandı"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB aksesuarına bağlandı"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Daha fazla seçenek için dokunun."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB bellek biçimlendirilsin mi?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD kart biçimlendirilsin mi?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB belleğinizdeki tüm dosyalar silinecek. Bu işlem geri alınamaz!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kartınızdaki tüm veriler kaybolacak."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Biçimlendir"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB hata ayıklaması bağlandı"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"USB hata ayıklama özelliğini devre dışı bırakmak için dokunun."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Klavyeyi değiştir"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 0d23acd..cfd3bab 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -42,7 +42,7 @@
     <string name="untitled" msgid="4638956954852782576">"&lt;Без назви&gt;"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Немає номера тел.)"</string>
     <string name="unknownName" msgid="6867811765370350269">"Невідомо"</string>
-    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Голос. пошта"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Голосова пошта"</string>
     <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
     <string name="mmiError" msgid="5154499457739052907">"Пробл. підключення чи недійсний код MMI."</string>
     <string name="mmiFdnError" msgid="5224398216385316471">"Операція лише для номерів фіксованого набору."</string>
@@ -272,8 +272,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Дозволяє програмі отримувати й обробляти MMS-повідомлення. Це означає, що програма може відстежувати чи видаляти повідомлення, надіслані на ваш пристрій, навіть не показуючи їх вам."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"читати широкомовні повідомлення мережі"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Дозволяє програмі читати широкомовні повідомлення мережі, отримані пристроєм. Широкомовні сповіщення мережі надсилаються в деяких країнах для попередження про надзвичайні ситуації. Шкідливі програми можуть втручатися у швидкодію чи роботу пристрою під час отримання широкомовного повідомлення мережі про надзвичайну ситуацію."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ваші облікові записи"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ до доступних обл. записів."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"читати підписані канали"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Дозволяє програмі отримувати відомості про поточно синхронізовані канали."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"надсилати та переглядати SMS-повідомлення"</string>
@@ -358,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>
@@ -512,7 +514,7 @@
     <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="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>
@@ -592,7 +594,7 @@
     <string name="phoneTypeAssistant" msgid="5596772636128562884">"Помічник"</string>
     <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
     <string name="eventTypeCustom" msgid="7837586198458073404">"Указати"</string>
-    <string name="eventTypeBirthday" msgid="2813379844211390740">"День нар."</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"День народження"</string>
     <string name="eventTypeAnniversary" msgid="3876779744518284000">"Річниця"</string>
     <string name="eventTypeOther" msgid="7388178939010143077">"Інші"</string>
     <string name="emailTypeCustom" msgid="8525960257804213846">"Указати"</string>
@@ -1056,11 +1058,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Під’єднано як програму встановлення"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Під’єднано до аксесуара USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Торкніться, щоб побачити більше опцій."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Форматув. носій USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Форматувати карту SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Усі файли, збережені у вашому носії USB, буде стерто. Цю дію не можна скасувати!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Усі дані на вашій карті буде втрачено."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Форматув."</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Налагодження USB завершено"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Торкніться, щоб вимкнути налагодження USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Змінити клавіатуру"</string>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index ce3f2de..6cb0934 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -242,14 +242,13 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"تصاویر لیں اور ویڈیو ریکارڈ کریں"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"فون"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"فون کالز کریں اور ان کا نظم کریں"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"جسم سینسرز"</string>
     <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">"‏بہتر ویب accessibility کو آن کریں"</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"‏بہتر ویب accessibility کو آن کرنے کی"</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>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"‏ایپ کو MMS پیغامات حاصل اور ان پر کارروائی کرنے کی اجازت دیتا ہے۔ اس کا مطلب ہے کہ ایپ آپ کے آلے پر مرسلہ پیغامات آپ کو دکھائے بغیر ان پر نگاہ رکھ یا انہیں حذف کرسکتی ہے۔"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"سیل کے نشریاتی پیغامات پڑھیں"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ایپ کو آپ کے آلے کو موصولہ سیل کے نشریاتی پیغامات پڑھنے کی اجازت دیتا ہے۔ سیل کی نشریاتی الرٹس آپ کو ہنگامی حالات سے مطلع کرنے کیلئے کچھ مقامات میں مہیا کی جاتی ہیں۔ نقصان دہ ایپس کوئی ہنگامی سیل کا نشریہ موصول ہونے پر آپ کے آلے کی کارکردگی یا عمل میں خلل ڈال سکتی ہیں۔"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"آپ کے اکاؤنٹس"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"دستیاب اکاؤنٹس تک رسائی حاصل کریں۔"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"سبسکرائب کردہ فیڈز پڑھیں"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ایپ کو فی الحال مطابقت پذیر کیے ہوئے فیڈز کے بارے میں تفصیلات حاصل کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"‏SMS پیغامات بھیجیں اور دیکھیں"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ایک انسٹالر کے بطور مربوط ہے"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‏ایک USB لوازم سے مربوط ہے"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"مزید اختیارات کیلئے ٹچ کریں۔"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"‏USB اسٹوریج فارمیٹ کریں؟"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"‏SD کارڈ فارمیٹ کریں؟"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"‏آپ کی USB اسٹوریج میں اسٹور کردہ سبھی فائلوں کو ہٹا دیا جائے گا۔ اس کارروائی کو لوٹایا نہیں جا سکتا ہے!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"آپ کے کارڈ پر موجود سبھی ڈیٹا گم ہو جائے گا۔"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"فارمیٹ کریں"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"‏USB ڈیبگ کرنا مربوط ہو گیا"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"‏USB ڈیبگنگ کو غیر فعال کرنے کیلئے ٹچ کریں۔"</string>
     <string name="select_input_method" msgid="8547250819326693584">"کی بورڈ تبدیل کریں"</string>
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml
index 10d7661..72a0ca2 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz-rUZ/strings.xml
@@ -45,7 +45,7 @@
     <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Ovozli xabar"</string>
     <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
     <string name="mmiError" msgid="5154499457739052907">"Ulanishda xato yoki noto‘g‘ri MMI kodi."</string>
-    <string name="mmiFdnError" msgid="5224398216385316471">"Operatsiya faqat ruxsat berilgan raqamlarni terish uchun cheklangan."</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"Bu amal faqat ruxsat etilgan raqamlar uchun mavjud."</string>
     <string name="serviceEnabled" msgid="8147278346414714315">"Xizmat yoqildi."</string>
     <string name="serviceEnabledFor" msgid="6856228140453471041">"Xizmat quyidagi uchun yoqildi:"</string>
     <string name="serviceDisabled" msgid="1937553226592516411">"Xizmat o‘chirib qo‘yilgan."</string>
@@ -62,8 +62,8 @@
     <string name="needPuk2" msgid="4526033371987193070">"SIM kartani blokdan chiqarish uchun PUK2 raqamini kiriting."</string>
     <string name="enablePin" msgid="209412020907207950">"Ishlamadi, SIM/RUIM qulfni yoqish."</string>
     <plurals name="pinpuk_attempts" formatted="false" msgid="1251012001539225582">
-      <item quantity="other">Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta qulflanadi.</item>
-      <item quantity="one">Yana <xliff:g id="NUMBER_0">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta qulflanadi.</item>
+      <item quantity="other">Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM-karta qulflanadi.</item>
+      <item quantity="one">Yana <xliff:g id="NUMBER_0">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM-karta qulflanadi.</item>
     </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
@@ -246,10 +246,10 @@
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"asosiy belgilaringiz haqidagi sezgich ma’lumotlariga kirish"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Oynadagi kontentni o‘qiydi"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Joriy oynadagi kontent mazmunini aniqlaydi."</string>
-    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Tegib o‘rganish xizmatini yoqish"</string>
-    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"tegilgan elementlar ovoz chiqarib o‘qiladi va ekrandagi elementlarni barmoq harakatlari yordamida o‘rganish mumkin."</string>
-    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Kengaytirilgan veb qulayligini yoqish"</string>
-    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Ilova dasturning qulayroq bo‘lishi uchun skriptlar o‘rnatilgan bo‘lishi mumkin."</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Teginib o‘rganish xizmatini yoqadi"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Tegilgan elementlar nomini talaffuz qiladi va ekran bo‘ylab barmoq orqali kezish imkoniyatini yoqadi."</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Internet uchun maxsus imkoniyatlarni yoqadi"</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Qo‘shimcha skriptlar o‘rnatilishi mumkin."</string>
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Kiritilayotgan matnni kuzatadi"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Bunga kredit karta raqamlari va parollar kabi shaxsiy ma’lumotlar kiradi."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"holat panelini o‘zgartirish yoki o‘chirish"</string>
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Ilovaga MMS xabarlarini qabul qilish va ularni qayta ishlash uchun ruxsat beradi. Bu sizga yuborilgan xabarlarni ilova sizga ko‘rsatmasdan kuzatishi va o‘chirishi mumkinligini bildiradi."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"uyali tarmoq operatori xabarlarini o‘qish"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Ilovaga qurilmangiz tomonidan qabul qilingan uyali tarmoq operatori xabarlarini o‘qish uchun ruxsat beradi. Uyali tarmoq operatorining ogohlantiruvchi xabarlari ba’zi manzillarga favqulodda holatlar haqida ogohlantirish uchun jo‘natiladi. Zararli ilovalar uyali tarmoq orqali favqulodda xabar qabul qilinganda qurilmangizning ish faoliyati yoki amallariga xalaqit qilishi mumkin"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Hisoblaringiz"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Mavjud hisoblarga kirish."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"obunalarni o‘qish"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Ilova hozirgi vaqtda sinxronlanayotgan elementlar to‘g‘risidagi ma’lumotlarni olishi mumkin."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"SMS xabarlarni yuborish va ko‘rish"</string>
@@ -356,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>
@@ -508,9 +510,9 @@
     <string name="policylab_forceLock" msgid="2274085384704248431">"Ekranni qulflash"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Ekranning qachon va qanday qulflanishini boshqaradi."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Barcha ma’lumotlarni tozalash"</string>
-    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Planshet ma’lumotlarini ogohlantirishlarsiz ishlab chiqarilgan holatiga tiklash orqali o‘chirish"</string>
-    <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Zavod sozlamalarini qayta tiklash orqali televizordagi ma’lumotlarni ogohlantirishsiz o‘chirib tashlaydi."</string>
-    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Telefon ma’lumotlarini ogohlantirishlarsiz zavod sozlamalarini tiklash orqali o‘chirish"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Planshetdagi barcha ma’lumotlarni ogohlantirishsiz zavod sozlamalarini tiklash orqali o‘chirib tashlaydi."</string>
+    <string name="policydesc_wipeData" product="tv" msgid="5816221315214527028">"Zavod sozlamalarini tiklaydi va televizordagi barcha ma’lumotlarni ogohlantirishsiz o‘chirib tashlaydi."</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Telefondagi barcha ma’lumotlarni ogohlantirishsiz zavod sozlamalarini tiklash orqali o‘chirib tashlaydi."</string>
     <string name="policylab_wipeData_secondaryUser" msgid="8362863289455531813">"Foydalanuvchi ma’lumotlarini o‘chirish"</string>
     <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="6336255514635308054">"Ushbu planshetdagi foydalanuvchi ma’lumotlarini ogohlantirishsiz o‘chirib tashlaydi."</string>
     <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2086473496848351810">"Ushbu televizordagi foydalanuvchi ma’lumotlarini ogohlantirishsiz o‘chirib tashlaydi."</string>
@@ -646,7 +648,7 @@
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Parolni kiritish uchun bosing"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Qulfni ochish uchun parolni kiriting"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Qulfni ochish uchun PIN-kodni kiriting"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Noto‘g‘ri PIN kod."</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Noto‘g‘ri PIN-kod."</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"Qulfni ochish uchun avval \"Menu\"ni, so‘ngra 0 raqamini bosing."</string>
     <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Favqulodda raqam"</string>
     <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Aloqa yo‘q."</string>
@@ -660,14 +662,14 @@
     <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Qaytadan urining"</string>
     <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Qaytadan urining"</string>
     <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Yuzni tanitib qulfni ochishga urinish miqdoridan oshib ketdi"</string>
-    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM karta yo‘q"</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Planshetingizga SIM karta yo‘q."</string>
-    <string name="lockscreen_missing_sim_message" product="tv" msgid="1943633865476989599">"Televizorda SIM karta yo‘q."</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefoningizga SIM karta yo‘q."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM-karta yo‘q"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Planshetingizga SIM-karta yo‘q."</string>
+    <string name="lockscreen_missing_sim_message" product="tv" msgid="1943633865476989599">"Televizorda SIM-karta yo‘q."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefoningizga SIM-karta yo‘q."</string>
     <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM kartani soling."</string>
-    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM karta solinmagan yoki uni o‘qib bo‘lmaydi. SIM kartani soling."</string>
-    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Foydalanib bo‘lmaydigan SIM karta."</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM kartangiz butunlay bloklab qo‘yilgan.\n Yangi SIM karta olish uchun aloqa operatoringiz bilan bog‘laning."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-karta solinmagan yoki uni o‘qib bo‘lmaydi. SIM-kartani soling."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Foydalanib bo‘lmaydigan SIM-karta."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kartangiz butunlay bloklab qo‘yilgan.\n Yangi SIM-karta olish uchun aloqa operatoringiz bilan bog‘laning."</string>
     <string name="lockscreen_transport_prev_description" msgid="6300840251218161534">"Avvalgi musiqa"</string>
     <string name="lockscreen_transport_next_description" msgid="573285210424377338">"Keyingi musiqa"</string>
     <string name="lockscreen_transport_pause_description" msgid="3980308465056173363">"To‘xtatib turish"</string>
@@ -677,10 +679,10 @@
     <string name="lockscreen_transport_ffw_description" msgid="42987149870928985">"Tezkor oldinga o‘tkazish"</string>
     <string name="emergency_calls_only" msgid="6733978304386365407">"Faqat favqulodda chaqiruvlar"</string>
     <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Tarmoq qulflangan"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM karta PUK kod bilan qulflangan."</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-karta PUK kod bilan qulflangan."</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Foydalanuvchi qo‘llanmasiga qarang yoki Abonentlarni qo‘llab-quvvatlash markaziga murojaat qiling."</string>
-    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM karta qulflangan."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM karta qulfdan chiqarilmoqda…"</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM-karta qulflangan."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM-karta qulfdan chiqarilmoqda…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n<xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng qayta urining."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Siz parolni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng qayta urining."</string>
     <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Siz PIN-kodni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> soniyadan so‘ng qayta urining."</string>
@@ -949,7 +951,7 @@
     <string name="volume_icon_description_notification" msgid="7044986546477282274">"Eslatma tovushi"</string>
     <string name="ringtone_default" msgid="3789758980357696936">"Standart rington"</string>
     <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Standart rington (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
-    <string name="ringtone_silent" msgid="7937634392408977062">"Ovozsiz"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"Yo‘q"</string>
     <string name="ringtone_picker_title" msgid="3515143939175119094">"Ringtonlar"</string>
     <string name="ringtone_unknown" msgid="5477919988701784788">"Noma’lum rington"</string>
     <plurals name="wifi_available" formatted="false" msgid="7900333017752027322">
@@ -1001,10 +1003,10 @@
     <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Siz buni keyinroq sozlamalar &gt; ilovalar menusidan o‘zgartirishingiz mumkin"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Doimo ruxsat berilsin"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Hech qachon ruxsat berilmasin"</string>
-    <string name="sim_removed_title" msgid="6227712319223226185">"SIM karta olib tashlandi"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM-karta olib tashlandi"</string>
     <string name="sim_removed_message" msgid="5450336489923274918">"Mobil tarmoqqa ulanish uchun faol SIM kartani joylang va qurilmani o‘chirib yoqing."</string>
     <string name="sim_done_button" msgid="827949989369963775">"Tayyor"</string>
-    <string name="sim_added_title" msgid="3719670512889674693">"SIM karta qo‘shildi"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SIM-karta qo‘shildi"</string>
     <string name="sim_added_message" msgid="7797975656153714319">"Mobil tarmoqqa ulanish uchun qurilmangizni o‘chirib yoqing."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"O‘chirib-yoqish"</string>
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Vaqtni o‘rnatish"</string>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"O‘rnatgich sifatida ulandi"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB jihozga ulangan"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Boshqa variantlar"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB xotira formatlansinmi?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD karta formatlansinmi?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB xotiradagi barcha fayllar o‘chirib tashlanadi. Ushbu amalni ortga qaytarib bo‘lmaydi!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kartadagi barcha ma`lumotlar o‘chirib tashlanadi."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"USB orqali nosozlikni tuzatish"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"O‘chirib qo‘yish uchun bosing"</string>
     <string name="select_input_method" msgid="8547250819326693584">"Klaviaturani o‘zgartirish"</string>
@@ -1124,7 +1121,7 @@
     <string name="input_method_binding_label" msgid="1283557179944992649">"Kiritish uslubi"</string>
     <string name="sync_binding_label" msgid="3687969138375092423">"Sinx"</string>
     <string name="accessibility_binding_label" msgid="4148120742096474641">"Maxsus imkoniyatlar"</string>
-    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Orqa fon rasmi"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fon rasmi"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Fon rasmini o‘zgartirish"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Bildirishnoma tinglovchisi"</string>
     <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Shartlarni taqdim etuvchi"</string>
@@ -1183,7 +1180,7 @@
     <string name="sync_undo_deletes" msgid="2941317360600338602">"O‘chirilganlarni tiklash"</string>
     <string name="sync_do_nothing" msgid="3743764740430821845">"Hozir hech nima qilinmasin"</string>
     <string name="choose_account_label" msgid="5655203089746423927">"Hisobni tanlang"</string>
-    <string name="add_account_label" msgid="2935267344849993553">"Yangi hisob qo‘shish"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"Hisob qo‘shish"</string>
     <string name="add_account_button_label" msgid="3611982894853435874">"Hisob qo‘shish"</string>
     <string name="number_picker_increment_button" msgid="2412072272832284313">"Ko‘paytirish"</string>
     <string name="number_picker_decrement_button" msgid="476050778386779067">"Kamaytirish"</string>
@@ -1251,7 +1248,7 @@
     <string name="org_unit" msgid="7265981890422070383">"Tashkilotning bir qismi:"</string>
     <string name="issued_by" msgid="2647584988057481566">"Tegishli:"</string>
     <string name="validity_period" msgid="8818886137545983110">"Yaroqliligi:"</string>
-    <string name="issued_on" msgid="5895017404361397232">"Chiqarilgan sana:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"Chiqarilgan sanasi:"</string>
     <string name="expires_on" msgid="3676242949915959821">"Amal qilish muddati:"</string>
     <string name="serial_number" msgid="758814067660862493">"Serial raqam:"</string>
     <string name="fingerprints" msgid="4516019619850763049">"Barmoq izlari:"</string>
@@ -1301,10 +1298,10 @@
     <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM kartaning PIN kodini kiriting"</string>
     <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN kodni tering"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"Parol kiriting"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM karta hozir o‘chirilgan. Davom etish uchun PUK kodni kiriting. To‘liqroq ma’lumot olish uchun tarmoq operatori bilan bog‘laning."</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-karta hozir o‘chirilgan. Davom etish uchun PUK kodni kiriting. To‘liqroq ma’lumot olish uchun tarmoq operatori bilan bog‘laning."</string>
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"So‘ralgan PIN kodni kiriting"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"So‘ralgan PIN kodni tasdiqlang"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM karta qulfi ochilmoqda…"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-karta qulfi ochilmoqda…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Xato PIN kodi."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4 tadan 8 ta raqamgacha bo‘lgan PIN kodni kiriting."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK kod 8 ta raqam bo‘lishi shart."</string>
@@ -1435,12 +1432,12 @@
     <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administrator PIN kodini tering"</string>
     <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN kodni tering"</string>
     <string name="restr_pin_incorrect" msgid="8571512003955077924">"Noto‘g‘ri"</string>
-    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Joriy PIN kod"</string>
-    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Yangi PIN kod"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Joriy PIN-kod"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Yangi PIN-kod"</string>
     <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Yangi PIN kodni tasdiqlash"</string>
-    <string name="restr_pin_create_pin" msgid="8017600000263450337">"Cheklovlarni o‘zgartirish uchun PIN kod yaratish"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"Cheklovlarni o‘zgartirish uchun PIN-kod yaratish"</string>
     <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-kod mos kelmadi. Qayta urinib ko‘ring."</string>
-    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN kod juda qisqa. Kamida 4 raqamli bo‘lishi kerak."</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-kod juda qisqa. Kamida 4 raqamli bo‘lishi kerak."</string>
     <plurals name="restr_pin_countdown" formatted="false" msgid="9061246974881224688">
       <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring</item>
       <item quantity="one">1 soniyadan so‘ng qayta urinib ko‘ring</item>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 93994b6..5afd180 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Cho phép ứng dụng nhận và xử lý tin nhắn MMS. Điều này có nghĩa là ứng dụng có thể theo dõi hoặc xóa tin nhắn được gửi đến thiết bị của bạn mà không hiển thị chúng cho bạn."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"đọc tin nhắn quảng bá"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Cho phép ứng dụng đọc tin nhắn quảng bá mà thiết bị của bạn nhận được. Tin nhắn quảng bá cảnh báo được gửi ở một số địa điểm nhằm cảnh báo cho bạn về các tình huống khẩn cấp. Các ứng dụng độc hại có thể gây ảnh hưởng đến hiệu suất hoặc hoạt động của thiết bị của bạn khi nhận được tin nhắn quảng bá khẩn cấp."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Tài khoản của bạn"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Truy cập các tài khoản khả dụng."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"đọc nguồn cấp dữ liệu đã đăng ký"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Cho phép ứng dụng lấy thông tin chi tiết về nguồn cấp dữ liệu hiện được đồng bộ hóa."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"gửi và xem tin nhắn SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Được kết nối như trình cài đặt"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Đã kết nối với phụ kiện USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Chạm để có các tùy chọn khác."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Định dạng USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Định dạng thẻ SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Tất cả các tệp được lưu trữ trong bộ lưu trữ USB sẽ bị xóa. Không thể hoàn nguyên tác vụ này!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Tất cả dữ liệu trên thẻ của bạn sẽ bị mất."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Định dạng"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Gỡ lỗi USB đã được kết nối"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Chạm để vô hiệu hóa gỡ lỗi USB."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Thay đổi bàn phím"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 2322a4e..c55fa2d 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -242,10 +242,8 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"拍摄照片和录制视频"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"电话"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"拨打电话和管理通话"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
-    <!-- no translation found for permgroupdesc_sensors (7147968539346634043) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"身体传感器"</string>
+    <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>
@@ -272,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"允许该应用接收和处理彩信。这就意味着,该应用可能会监视发送到您设备的彩信,或删除发送到您设备的彩信而不向您显示。"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"读取小区广播消息"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"允许应用读取您的设备收到的小区广播消息。小区广播消息是在某些地区发送的、用于发布紧急情况警告的提醒信息。恶意应用可能会在您收到小区紧急广播时干扰您设备的性能或操作。"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帐户"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"访问可用的帐户。"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"读取订阅的供稿"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"允许应用获取有关当前同步的 Feed 的详情。"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"发送和查看短信"</string>
@@ -358,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>
@@ -1044,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"作为安装程序连接"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"已连接到USB配件"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"触摸以查看更多选项。"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"格式化USB存储设备吗?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"要格式化SD卡吗?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"您的USB存储设备中存储的所有文件都将清除。该操作无法撤消!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"您卡上的所有数据都会丢失。"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"格式化"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"已连接到USB调试"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"触摸可停用USB调试。"</string>
     <string name="select_input_method" msgid="8547250819326693584">"更改键盘"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 88667c9..45581d9 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -242,8 +242,7 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"拍照和錄製影片"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"電話"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"撥打電話及管理通話"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"人體感應器"</string>
     <string name="permgroupdesc_sensors" msgid="7147968539346634043">"存取與您生命體徵相關的感應器資料"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"擷取視窗內容"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"檢查您使用中的視窗內容。"</string>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"允許應用程式接收和處理 MMS 訊息。這表示應用程式可監控傳送至您裝置的訊息,或在您閱讀訊息前擅自刪除訊息。"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"讀取區域廣播訊息"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"允許應用程式讀取您裝置接收的區域廣播訊息。某些地點會發出區域廣播警報,警告您發生緊急狀況。惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的性能或運作。"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帳戶"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"存取可用帳戶。"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"讀取訂閱的資訊提供"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"允許應用程式取得目前已同步的資訊提供的詳細資料。"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"傳送和查看 SMS 短訊"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"已作為安裝程式連線"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"已連接到一個 USB 配件"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"輕觸以瀏覽更多選項。"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"格式化 USB 儲存裝置?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"格式化 SD 記憶卡?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"即將清除所有儲存在 USB 儲存裝置上的檔案。這項操作無法復原!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"儲存卡上的所有資料將會失去。"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"格式"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"已連接 USB 偵錯工具"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"輕觸即可停用 USB 偵錯。"</string>
     <string name="select_input_method" msgid="8547250819326693584">"變更鍵盤"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index de8cdde8..2d141db 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -242,9 +242,8 @@
     <string name="permgroupdesc_camera" msgid="3250611594678347720">"拍照及錄製影片"</string>
     <string name="permgrouplab_phone" msgid="5229115638567440675">"電話"</string>
     <string name="permgroupdesc_phone" msgid="6234224354060641055">"撥打電話及管理通話"</string>
-    <!-- no translation found for permgrouplab_sensors (416037179223226722) -->
-    <skip />
-    <string name="permgroupdesc_sensors" msgid="7147968539346634043">"存取生命徵象的相關感應器資料"</string>
+    <string name="permgrouplab_sensors" msgid="416037179223226722">"身體感應器"</string>
+    <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>
@@ -271,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"允許應用程式接收和處理多媒體訊息。這項設定可讓應用程式監控傳送至您裝置的訊息,或在您閱讀訊息前擅自刪除訊息。"</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"讀取區域廣播訊息"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"允許應用程式讀取您裝置收到的區域廣播訊息。某些地點會發出區域廣播警示,警告您有緊急狀況發生。請注意,惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的效能或運作。"</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"您的帳戶"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"存取可用帳戶。"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"讀取訂閱資訊提供"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"允許應用程式取得目前已同步處理的資訊提供詳細資料。"</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"傳送及查看簡訊"</string>
@@ -357,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>
@@ -1043,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"已視為安裝程式連線"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"已連接 USB 配件"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"輕觸即可顯示更多選項。"</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"將 USB 儲存裝置格式化?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"將 SD 卡格式化?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB 儲存裝置上儲存的所有檔案即將遭到清除。這項動作無法復原!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"儲存卡上的所有資料都會消失。"</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"格式化"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"已連接 USB 偵錯工具"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"輕觸即可停用 USB 偵錯。"</string>
     <string name="select_input_method" msgid="8547250819326693584">"變更鍵盤"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 355e746..19a9653 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -270,8 +270,6 @@
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Ivumela uhlelo lokusebenza ukuthola nokucubungula imilayezo ye-MMS. Loku kuchaza ukuthi uhlelo lokusebenza lungangamela noma lesuse imilayezo ethunyelwe kudivayisi yakho ngaphandle kokukubonisa yona."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"funda imilayezo yokusakaza yeselula"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Ivumela uhlelo lokusebenza ukufunda imilayezo yokusakaza yeselula etholwe idivayisi yakho. Izaziso zokusakaza zeselula zilethwa kwezinye izindawo ukukuxwayisa ngezimo ezisheshayo. Izinhlelo zokusebenza ezingalungile zingaphazamisana nokusebenza noma umsebenzi wedivayisi yakho uma ukusakaza kweselula kwesimo esisheshayo kutholwa."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Ama-akhawunti akho"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Finyelela kuma-akhawunti atholakalayo"</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"funda izifunzo ezikhokhelwayo"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Ivumela uhlelo lokusebenza ukuthi ithole imininingwane mayelana namafidi avumelnisiwe njengamanje."</string>
     <string name="permlab_sendSms" msgid="7544599214260982981">"thumela uphinde ubuke imilayezo ye-SMS"</string>
@@ -356,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>
@@ -1042,11 +1044,6 @@
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Ixhunywe njengesifaki"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ixhunywe ku-accessory ye-USB"</string>
     <string name="usb_notification_message" msgid="7347368030849048437">"Thinta ukuze uthole ezinye izinketho."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Fometha isitoreji se-USB"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Fometha ikhadi le-SD."</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Onke amafayela agcinwe kwi-USB yakho ayosuswa. Lesi senzo ngeke siququleke!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Yonke i-data esekhadini lakho iyolahleka."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Ifomethi"</string>
     <string name="adb_active_notification_title" msgid="6729044778949189918">"Ukulungisa iphutha le-USB kuxhunyiwe"</string>
     <string name="adb_active_notification_message" msgid="1016654627626476142">"Thinta ukwenza ukuthi ukudibhaga kwe-USB kungasebenzi."</string>
     <string name="select_input_method" msgid="8547250819326693584">"Shintsha ikhibhodi"</string>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 3cb4d7c..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. -->
@@ -215,6 +217,21 @@
         <!-- Additional flag from base permission type: this permission is closely
              associated with an app op for controlling access. -->
         <flag name="appop" value="0x40" />
+        <!-- Additional flag from base permission type: this permission can be automatically
+             granted to apps that target API levels below
+             {@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 451813c..82eb2c4 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -369,7 +369,7 @@
     <bool translatable="false" name="config_wifi_dual_band_support">false</bool>
 
     <!-- Boolean indicating whether Hotspot 2.0/Passpoint and ANQP queries is enabled -->
-    <bool translatable="false" name="config_wifi_hotspot2_enabled">true</bool>
+    <bool translatable="false" name="config_wifi_hotspot2_enabled">false</bool>
 
     <!-- Device type information conforming to Annex B format in WiFi Direct specification.
          The default represents a dual-mode smartphone -->
@@ -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/public.xml b/core/res/res/values/public.xml
index ab798bb..568e61e 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2606,115 +2606,50 @@
   <!-- ===============================================================
        Resources added in version MNC of the platform
        =============================================================== -->
-  <eat-comment />
+    <eat-comment />
 
-  <public type="attr" name="trackTint" />
-  <public type="attr" name="trackTintMode" />
-  <public type="attr" name="start" />
-  <public type="attr" name="end" />
-  <public type="attr" name="windowLightStatusBar" />
-  <public type="attr" name="numbersInnerTextColor" />
+    <public type="attr" name="trackTint" id="0x010104d9" />
+    <public type="attr" name="trackTintMode" id="0x010104da" />
+    <public type="attr" name="start" id="0x010104db" />
+    <public type="attr" name="end" id="0x010104dc" />
+    <public type="attr" name="breakStrategy" id="0x010104dd" />
+    <public type="attr" name="hyphenationFrequency" id="0x010104de" />
+    <public type="attr" name="allowUndo" id="0x010104df" />
+    <public type="attr" name="windowLightStatusBar" id="0x010104e0" />
+    <public type="attr" name="numbersInnerTextColor" id="0x010104e1" />
+    <public type="attr" name="colorBackgroundFloating" id="0x010104e2" />
+    <public type="attr" name="titleTextColor" id="0x010104e3" />
+    <public type="attr" name="subtitleTextColor" id="0x010104e4" />
+    <public type="attr" name="thumbPosition" id="0x010104e5" />
+    <public type="attr" name="scrollIndicators" id="0x010104e6" />
+    <public type="attr" name="contextClickable" id="0x010104e7" />
+    <public type="attr" name="fingerprintAuthDrawable" id="0x010104e8" />
+    <public type="attr" name="logoDescription" id="0x010104e9" />
+    <public type="attr" name="extractNativeLibs" id="0x010104ea" />
+    <public type="attr" name="fullBackupContent" id="0x010104eb" />
+    <public type="attr" name="usesCleartextTraffic" id="0x010104ec" />
+    <public type="attr" name="lockTaskMode" id="0x010104ed" />
+    <public type="attr" name="autoVerify" id="0x010104ee" />
+    <public type="attr" name="showForAllUsers" id="0x010104ef" />
+    <public type="attr" name="supportsAssist" id="0x010104f0" />
+    <public type="attr" name="supportsLaunchVoiceAssistFromKeyguard" id="0x010104f1" />
 
-  <attr name="__reserved2" format="boolean" />
-  <public type="attr" name="__reserved2" />
-  <attr name="__reserved3" format="boolean" />
-  <public type="attr" name="__reserved3" />
-  <attr name="__reserved4" format="boolean" />
-  <public type="attr" name="__reserved4" />
-  <attr name="__reserved5" format="boolean" />
-  <public type="attr" name="__reserved5" />
-  <attr name="__reserved6" format="boolean" />
-  <public type="attr" name="__reserved6" />
-  <attr name="__reserved7" format="boolean" />
-  <public type="attr" name="__reserved7" />
+    <public type="style" name="Widget.Material.Button.Colored" id="0x010302d3" />
+    <public type="style" name="TextAppearance.Material.Widget.Button.Inverse" id="0x010302d4" />
+    <public type="style" name="Theme.Material.Light.LightStatusBar" id="0x010302d5" />
+    <public type="style" name="ThemeOverlay.Material.Dialog" id="0x010302d6" />
+    <public type="style" name="ThemeOverlay.Material.Dialog.Alert" id="0x010302d7" />
 
-  <public type="attr" name="fullBackupContent" />
-
-  <public type="style" name="Widget.Material.Button.Colored" />
-
-  <style name="__reserved8" />
-  <public type="style" name="__reserved8" />
-  <style name="__reserved9" />
-  <public type="style" name="__reserved9" />
-  <style name="__reserved10" />
-  <public type="style" name="__reserved10" />
-  <style name="__reserved11" />
-  <public type="style" name="__reserved11" />
-  <style name="__reserved12" />
-  <public type="style" name="__reserved12" />
-  <style name="__reserved13" />
-  <public type="style" name="__reserved13" />
-  <style name="__reserved14" />
-  <public type="style" name="__reserved14" />
-  <style name="__reserved15" />
-  <public type="style" name="__reserved15" />
-  <style name="__reserved16" />
-  <public type="style" name="__reserved16" />
-  <style name="__reserved17" />
-  <public type="style" name="__reserved17" />
-  <style name="__reserved18" />
-  <public type="style" name="__reserved18" />
-  <style name="__reserved19" />
-  <public type="style" name="__reserved19" />
-  <style name="__reserved20" />
-  <public type="style" name="__reserved20" />
-  <style name="__reserved21" />
-  <public type="style" name="__reserved21" />
-  <style name="__reserved22" />
-  <public type="style" name="__reserved22" />
-  <public type="style" name="Theme.Material.Light.LightStatusBar" />
-  <public type="style" name="ThemeOverlay.Material.Dialog" />
-  <public type="style" name="TextAppearance.Material.Widget.Button.Inverse" />
-  <public type="style" name="ThemeOverlay.Material.Dialog.Alert" />
-
-  <public type="id" name="pasteAsPlainText" />
-  <public type="id" name="undo" />
-  <public type="id" name="redo" />
-  <public type="id" name="replaceText" />
-  <public type="id" name="accessibilityActionShowOnScreen" />
-  <public type="id" name="accessibilityActionScrollToPosition" />
-  <public type="id" name="accessibilityActionScrollUp" />
-  <public type="id" name="accessibilityActionScrollLeft" />
-  <public type="id" name="accessibilityActionScrollDown" />
-  <public type="id" name="accessibilityActionScrollRight" />
-  <public type="id" name="shareText" />
-  <public type="id" name="accessibilityActionContextClick" />
-
-  <public type="attr" name="allowUndo" />
-  <public type="attr" name="colorBackgroundFloating" />
-  <public type="attr" name="extractNativeLibs" />
-  <public type="attr" name="usesCleartextTraffic" />
-
-  <!--IntentFilter auto verification -->
-  <public type="attr" name="autoVerify" />
-  <public type="attr" name="breakStrategy" />
-
-  <public type="attr" name="supportsAssist" />
-  <public type="attr" name="thumbPosition" />
-
-  <!-- Placeholder for a removed attribute. Remove this before M release. -->
-  <public type="attr" name="removeBeforeMRelease" />
-
-  <public type="attr" name="lockTaskMode" />
-
-  <!-- Placeholder for a removed attribute. Remove this before M release. -->
-  <public type="attr" name="__removeBeforeMRelease_leftIndents" />
-  <public type="attr" name="__removeBeforeMRelease_rightIndents" />
-
-  <public type="attr" name="showForAllUsers" />
-
-  <attr name="__reserved1" format="boolean" />
-  <public type="attr" name="__reserved1" />
-
-  <attr name="__reserved0" format="boolean" />
-  <public type="attr" name="__reserved0" />
-
-  <public type="attr" name="contextClickable" />
-  <public type="attr" name="supportsLaunchVoiceAssistFromKeyguard" />
-  <public type="attr" name="scrollIndicators" />
-  <public type="attr" name="hyphenationFrequency" />
-  <public type="attr" name="fingerprintAuthDrawable" />
-  <public type="attr" name="logoDescription" />
-  <public type="attr" name="titleTextColor" />
-  <public type="attr" name="subtitleTextColor" />
+    <public type="id" name="pasteAsPlainText" id="0x01020031" />
+    <public type="id" name="undo" id="0x01020032" />
+    <public type="id" name="redo" id="0x01020033" />
+    <public type="id" name="replaceText" id="0x01020034" />
+    <public type="id" name="shareText" id="0x01020035" />
+    <public type="id" name="accessibilityActionShowOnScreen" id="0x01020036" />
+    <public type="id" name="accessibilityActionScrollToPosition" id="0x01020037" />
+    <public type="id" name="accessibilityActionScrollUp" id="0x01020038" />
+    <public type="id" name="accessibilityActionScrollLeft" id="0x01020039" />
+    <public type="id" name="accessibilityActionScrollDown" id="0x0102003a" />
+    <public type="id" name="accessibilityActionScrollRight" id="0x0102003b" />
+    <public type="id" name="accessibilityActionContextClick" id="0x0102003c" />
 </resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index bf6b015..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
@@ -2879,26 +2884,11 @@
     <string name="usb_ptp_notification_title">USB for photo transfer</string>
     <!-- USB_PREFERENCES: Notification for when the user connects the phone to a computer via USB in MIDI mode.  This is the title -->
     <string name="usb_midi_notification_title">USB for MIDI</string>
-    <!-- USB_PREFERENCES: Notification for when the user connects the phone to a computer via USB in mass storage mode (for installer CD image).  This is the title -->
-    <string name="usb_cd_installer_notification_title">Connected as an installer</string>
     <!-- USB_PREFERENCES: Notification for when a USB accessory is attached.  This is the title -->
     <string name="usb_accessory_notification_title">Connected to a USB accessory</string>
     <!-- See USB_PREFERENCES. This is the message. -->
     <string name="usb_notification_message">Touch for more options.</string>
 
-    <!-- External media format dialog strings -->
-    <!-- This is the label for the activity, and should never be visible to the user. -->
-    <!-- See EXTMEDIA_FORMAT.  EXTMEDIA_FORMAT_DIALOG:  After the user selects the notification, a dialog is shown asking if he wants to format the SD card.  This is the title. [CHAR LIMIT=20] -->
-    <string name="extmedia_format_title" product="nosdcard">Format USB storage?</string>
-    <!-- See EXTMEDIA_FORMAT.  EXTMEDIA_FORMAT_DIALOG:  After the user selects the notification, a dialog is shown asking if he wants to format the SD card.  This is the title. -->
-    <string name="extmedia_format_title" product="default">Format SD card?</string>
-    <!-- See EXTMEDIA_FORMAT.   This is the message. [CHAR LIMIT=NONE] -->
-    <string name="extmedia_format_message" product="nosdcard">All files stored in your USB storage will be erased. This action can\'t be reversed!</string>
-    <!-- See EXTMEDIA_FORMAT.   This is the message. -->
-    <string name="extmedia_format_message" product="default">All data on your card will be lost.</string>
-    <!-- See EXTMEDIA_FORMAT.    This is the button text to format the sd card. -->
-    <string name="extmedia_format_button_format">Format</string>
-
     <!-- Title of notification shown when ADB is actively connected to the phone. -->
     <string name="adb_active_notification_title">USB debugging connected</string>
     <!-- Message of notification shown when ADB is actively connected to the phone. -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 01ecba8..fcdaba2 100755
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -625,9 +625,6 @@
   <java-symbol type="string" name="eventTypeBirthday" />
   <java-symbol type="string" name="eventTypeCustom" />
   <java-symbol type="string" name="eventTypeOther" />
-  <java-symbol type="string" name="extmedia_format_button_format" />
-  <java-symbol type="string" name="extmedia_format_message" />
-  <java-symbol type="string" name="extmedia_format_title" />
   <java-symbol type="string" name="fileSizeSuffix" />
   <java-symbol type="string" name="force_close" />
   <java-symbol type="string" name="format_error" />
@@ -1802,7 +1799,6 @@
   <java-symbol type="string" name="tethered_notification_message" />
   <java-symbol type="string" name="tethered_notification_title" />
   <java-symbol type="string" name="usb_accessory_notification_title" />
-  <java-symbol type="string" name="usb_cd_installer_notification_title" />
   <java-symbol type="string" name="usb_mtp_notification_title" />
   <java-symbol type="string" name="usb_charging_notification_title" />
   <java-symbol type="string" name="usb_notification_message" />
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 377e6a16..579d2df 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -60,6 +60,7 @@
 
     <permission name="android.permission.WRITE_MEDIA_STORAGE" >
         <group gid="media_rw" />
+        <group gid="sdcard_rw" />
     </permission>
 
     <permission name="android.permission.ACCESS_MTP" >
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/design/get-started/principles.jd b/docs/html-intl/intl/es/design/get-started/principles.jd
new file mode 100644
index 0000000..351a4f7
--- /dev/null
+++ b/docs/html-intl/intl/es/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Principios de diseño para Android
+@jd:body
+
+<p>Estos principios de diseño fueron creados por el
+equipo de experiencia del usuario de Android para su propio uso, con el fin de tener siempre en cuenta lo mejor para los usuarios.
+En cuanto a los desarrolladores y diseñadores de Android, continúan
+utilizando las pautas de diseño más detalladas para los diferentes
+tipos de dispositivos.</p>
+
+<p>
+Tenga en cuenta estos principios cuando ponga en práctica su propia
+creatividad e ideas de diseño. Desvíese de lo tradicional con un propósito.
+</p>
+
+<h2 id="enchant-me">Cautívame</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="delight-me">Deléitame de formas sorprendentes</h4>
+<p>Una superficie atractiva, una animación colocada en el lugar correcto o un efecto de sonido bien sincronizado suelen ser experiencias
+placenteras. Los efectos sutiles contribuyen a crear un sentimiento de facilidad y la sensación de que se cuenta con una fuerza
+poderosa.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="real-objects-more-fun">Los objetos reales son más divertidos que los botones y los menús</h4>
+<p>Permita que los usuarios toquen y manipulen directamente los objetos de su aplicación. Esto reduce el esfuerzo cognitivo
+que se necesita para llevar a cabo una tarea que resulte satisfactoria a nivel emocional.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-it-mine">Permíteme darle un toque personal</h4>
+<p>A los usuarios les gusta agregar toques personales, ya que esto los ayuda a sentirse cómodos y a sentir que tienen el control. Ofrezca
+opciones predeterminadas prácticas y atractivas, pero también tenga en cuenta personalizaciones opcionales y divertidas que no entorpezcan las
+tareas principales.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="get-to-know-me">Conóceme</h4>
+<p>Con el paso del tiempo, conozca las preferencias de los usuarios. En lugar de pedirles a los usuarios que elijan las mismas cosas una y otra
+vez, permita que puedan acceder fácilmente a las opciones que ya eligieron antes.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2 id="simplify-my-life">Simplifica mi vida</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="keep-it-brief">Sé breve</h4>
+<p>Utilice frases cortas con palabras simples. Las personas tienden a omitir las oraciones largas.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="pictures-faster-than-words">Las imágenes son más prácticas que las palabras</h4>
+<p>Considere la idea de utilizar imágenes para explicar las ideas. Las imágenes atraen la atención de las personas y pueden ser mucho más eficientes
+que las palabras.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="decide-for-me">Decide por mí, pero permíteme tener la última palabra</h4>
+<p>Siga su instinto y actúe sin preguntar primero. Tener que elegir demasiadas veces y tomar muchas decisiones hace que las personas
+se sientan molestas. Permita que los usuarios puedan deshacer sus elecciones en caso de que no sean lo que ellos desean.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="only-show-when-i-need-it">Solo muéstrame lo que necesito, cuando lo necesito</h4>
+<p>Los usuarios se sienten abrumados cuando se les presenta demasiada información al mismo tiempo. Divida las tareas y la información en fragmentos pequeños
+y fáciles de digerir. Oculte las opciones que no son fundamentales en el momento y capacite a los usuarios sobre la marcha.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="always-know-where-i-am">Siempre debo saber dónde me encuentro</h4>
+<p>Haga que los usuarios sientan que conocen el camino de regreso. Para ello, diseñe las distintas partes de su aplicación de modo tal que se vean diferentes y
+utilice transiciones para mostrar la relación entre las pantallas. Proporcione comentarios sobre las tareas que están en curso.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="never-lose-my-stuff">Nunca pierdas lo que es mío</h4>
+<p>Guarde aquellas cosas que los usuarios crearon y permítales acceder a ellas desde cualquier lugar. Recuerde las configuraciones,
+los toques personales y las creaciones en todos los teléfonos, las tablets y las computadoras. Esta es la forma de hacer que las actualizaciones
+sean lo más simple del mundo.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="looks-same-should-act-same">Si se ve igual, debe funcionar de la misma manera</h4>
+<p>Ayude a los usuarios a distinguir las diferencias funcionales al lograr que se vean diferentes en lugar de sutiles.
+Evite los modos, que son sitios que lucen similar pero actúan diferente ante la misma entrada.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="interrupt-only-if-important">Solo interrúmpeme si es importante</h4>
+<p>Al igual que un buen asistente personal, evite a los usuarios los pormenores poco importantes. Las personas desean estar
+concentradas y, a menos que sea fundamental y esté sujeta a un plazo de tiempo, una interrupción puede resultar agobiante y frustrante.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2 id="make-me-amazing">Permíteme ser asombroso</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="give-me-tricks">Ofréceme trucos que funcionen en todos lados</h4>
+<p>Las personas se sienten muy bien cuando descubren cosas por sí mismos. Logre que su aplicación sea más simple de utilizar al
+aprovechar los patrones visuales y la memoria muscular de otras aplicaciones de Android. Por ejemplo, el gesto de deslizar rápidamente
+puede ser un buen acceso directo de navegación.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="its-not-my-fault">No es mi culpa</h4>
+<p>Sea sutil cuando les solicite a los usuarios que realicen correcciones. Ellos desean sentirse inteligentes cuando usan la
+aplicación que usted creó. Si hacen algo mal, bríndeles instrucciones claras de recuperación, pero evite darles detalles técnicos.
+Sería incluso mejor que usted lo solucione en segundo plano.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="sprinkle-encouragement">Fomenta lo simple</h4>
+<p>Desglose las tareas complejas en pasos más pequeños que se puedan cumplir fácilmente. Ofrezca comentarios sobre las acciones,
+incluso si es simplemente un halago sutil.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="do-heavy-lifting-for-me">Haz el trabajo pesado por mí</h4>
+<p>Haga que los principiantes se sientan como expertos al permitirles hacer cosas que pensaron que nunca podrían hacer. Por
+ejemplo, a través de los accesos directos en los que se combinan múltiples efectos de fotografías, puede lograr que las fotografías de principiantes se vean maravillosas
+en solo algunos pasos.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-important-things-fast">Haz que lo importante sea rápido</h4>
+<p>No todas las acciones son iguales. Decida qué es lo más importante en su aplicación y haga
+que los usuarios lo puedan encontrar fácilmente y utilizar de forma rápida, como el obturador de una cámara o el botón de pausa de un reproductor de música.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/es/design/material/index.jd b/docs/html-intl/intl/es/design/material/index.jd
new file mode 100644
index 0000000..8cd3428
--- /dev/null
+++ b/docs/html-intl/intl/es/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=Material Design
+page.tags=Material,design
+page.type=design
+page.image=design/material/images/MaterialLight.png
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+  <div>
+    <h3>Documentos para desarrolladores</h3>
+    <p>Creación de aplicaciones con Material Design</p>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+    <h3>Video</h3>
+    <p>Introducción a Material Design</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+    <h3>Video</h3>
+    <p>Papel y tinta: los materiales más importantes</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+    <h3>Video</h3>
+    <p>Material Design en la aplicación Google I/O</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">Material Design es una guía integral para el diseño visual, de movimientos y
+de interacción en distintas plataformas y dispositivos. Android ahora es compatible con las aplicaciones de
+Material Design. Para usar Material Design en sus aplicaciones de Android, siga las pautas descritas
+en la <a href="http://www.google.com/design/spec">especificación de Material Design</a> y use los
+nuevos componentes y funcionalidades disponibles en Android 5.0 (nivel de API 21) y versiones posteriores.</p>
+
+<p>En Android, se proporcionan los siguientes elementos que le permitirán crear aplicaciones en Material Design:</p>
+
+<ul>
+  <li>un tema nuevo;</li>
+  <li>nuevos widgets para vistas complejas;</li>
+  <li>nuevas API (interfaces de programación de aplicaciones) para sombras y animaciones personalizadas.</li>
+</ul>
+
+<p>Para obtener más información sobre la implementación de Material Design en Android, consulte
+<a href="{@docRoot}training/material/index.html">Creación de aplicaciones con Material Design</a>.</p>
+
+
+<h3>Tema Material</h3>
+
+<p>El tema Material le ofrece un nuevo estilo para su aplicación, widgets del sistema que le permiten configurar
+la paleta de colores y animaciones predeterminadas para información táctil y transiciones de actividades.</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">Tema Dark Material</p>
+  </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">Tema Light Material</p>
+  </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Para obtener más información, consulte <a href="{@docRoot}training/material/theme.html">Uso del tema
+Material</a>.</p>
+
+
+<h3>Listas y tarjetas</h3>
+
+<p>Android proporciona dos widgets nuevos para mostrar listas y tarjetas con estilos y
+animaciones de Material Design:</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+  <p>El nuevo widget <code>RecyclerView</code> es una versión más acoplable de <code>ListView</code>
+ que admite diferentes tipos de diseños y proporciona mejoras en el rendimiento.</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+  <p>El nuevo widget <code>CardView</code> le permite mostrar extractos de información importante dentro de
+ tarjetas que tienen apariencia y estilo coherentes.</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Para obtener más información, consulte <a href="{@docRoot}training/material/lists-cards.html">Creación de listas
+y tarjetas</a>.</p>
+
+
+<h3>Visualización de sombras</h3>
+
+<p>Además de las propiedades X e Y, las vistas de Android ahora poseen una
+propiedad Z. Esta propiedad nueva representa la elevación de una vista, que determina lo siguiente:</p>
+
+<ul>
+<li>El tamaño de la sombra: las vistas con valores Z más elevados proyectan sombras más grandes.</li>
+<li>El orden del dibujo: las vistas con valores Z más elevados aparecen sobre las otras vistas.</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+  <div class="framed-nexus5-port-span-5">
+  <video class="play-on-hover" autoplay>
+    <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+  </video>
+  </div>
+  <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+    <em>Para volver a reproducir la película, haga clic en la pantalla del dispositivo.</em>
+  </div>
+</div>
+
+<p>Para obtener más información, consulte <a href="{@docRoot}training/material/shadows-clipping.html">Definición
+de vistas de recorte y sombras</a>.</p>
+
+
+<h3>Animaciones</h3>
+
+<p>Las nuevas API de animaciones le permiten crear animaciones personalizadas para la información táctil en los controles de IU,
+además de realizar cambios en el estado de las vistas y transiciones entre actividades.</p>
+
+<p>Estas API le permiten hacer lo siguiente:</p>
+
+<ul>
+<li style="margin-bottom:15px">
+responder a los eventos táctiles de sus vistas mediante animaciones de <strong>información táctil</strong>;
+</li>
+<li style="margin-bottom:15px">
+ocultar y mostrar vistas con animaciones con <strong>efecto circular</strong>;
+</li>
+<li style="margin-bottom:15px">
+alternar entre actividades con animaciones personalizadas de <strong>transición de actividades</strong>;
+</li>
+<li style="margin-bottom:15px">
+crear animaciones más naturales con <strong>movimiento curvo</strong>;
+</li>
+<li style="margin-bottom:15px">
+animar los cambios en una o más propiedades de las vistas con las animaciones de <strong>cambio de estado de la vista</strong>;
+</li>
+<li style="margin-bottom:15px">
+mostrar animaciones en los <strong>elementos de diseño de la lista de estados</strong> entre los cambios de estado de las vistas.
+</li>
+</ul>
+
+<p>Las animaciones de la información táctil se concentran en diferentes vistas estándar, como los botones. Las nuevas API
+le permiten personalizar estas animaciones y agregarlas a sus vistas personalizadas.</p>
+
+<p>Para obtener más información, consulte <a href="{@docRoot}training/material/animations.html">Definición de animaciones
+personalizadas</a>.</p>
+
+
+<h3>Elementos de diseño</h3>
+
+<p>Estas nuevas capacidades para los elementos de diseño le permiten implementar aplicaciones de Material Design:</p>
+
+<ul>
+<li>Los <strong>dibujables en vector</strong> se pueden escalar sin perder definición y son perfectos
+para los iconos de las aplicaciones de un solo color.</li>
+<li>El <strong>teñido de los dibujables</strong> le permite definir mapas de bits como máscaras alfa y pintarlos con
+un color durante el tiempo de ejecución.</li>
+<li>La <strong>extracción de color</strong> le permite extraer automáticamente colores prominentes de una
+imagen del mapa de bits.</li>
+</ul>
+
+<p>Para obtener más información, consulte <a href="{@docRoot}training/material/drawables.html">Trabajo con
+elementos de diseño</a>.</p>
diff --git a/docs/html-intl/intl/es/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/es/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..fbaa060
--- /dev/null
+++ b/docs/html-intl/intl/es/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=Confirmación y reconocimiento
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>En algunos casos, cuando un usuario invoca una acción desde su aplicación, se recomienda <em>confirmar</em> o proporcionar un <em>reconocimiento</em> de dicha acción a través del texto.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+    <p><strong>Confirmación</strong> es solicitarle al usuario que verifique que realmente desea proceder con una acción que acaba de invocar. En algunos casos, la confirmación se presenta junto con una advertencia o mensaje con información importante relacionada con la acción que el usuario debe aprobar.</p>
+  </div>
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+    <p>El <strong>reconocimiento</strong> hace referencia al hecho de mostrar un determinado texto para informarle al usuario que la acción que acaba de invocar ya se completó. De este modo, se elimina la incertidumbre sobre las operaciones implícitas que lleva a cabo el sistema. En algunos casos, el reconocimiento se presenta junto con una opción para deshacer la acción.</p>
+  </div>
+</div>
+
+<p>Comunicarse con los usuarios de este modo permite reducir la incertidumbre respecto de acciones pasadas o futuras. Mediante la confirmación o el reconocimiento también se puede evitar que los usuarios cometan errores de los que podrían arrepentirse.</p>
+
+<h2>Cuándo se debe solicitar una confirmación o proporcionar un reconocimiento de las acciones de los usuarios</h2>
+<p>No es necesario que se solicite una confirmación o se proporcione un reconocimiento para todas las acciones. Utilice este diagrama de flujo cuando tenga que tomar decisiones relacionadas con el diseño.</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>Confirmación</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Ejemplo: Google Play Books</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+    <p>En este ejemplo, el usuario solicitó eliminar un libro de su biblioteca de Google Play. Aparecerá una <a href="{@docRoot}design/building-blocks/dialogs.html#alerts">alerta</a> para confirmar esta acción porque es importante que el usuario comprenda que el libro ya no estará disponible desde ningún dispositivo.</p>
+    <p>Cuando diseñe un cuadro de diálogo de confirmación, asegúrese de que el título sea significativo y que incluya la acción solicitada.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>Ejemplo: Android Beam</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+    <p>No es necesario que las confirmaciones se presenten en todas las alertas con dos botones. Luego de iniciar Android Beam, se le solicita al usuario que seleccione el contenido que desea compartir (en este ejemplo, se trata de una fotografía). Si el usuario decide no continuar, simplemente se descartará el teléfono de la lista.</p>
+  </div>
+</div>
+
+<h2>Reconocimiento</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Ejemplo: Borrador de Gmail abandonado y guardado</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+    <p>En este ejemplo, si el usuario navega con los botones Back o Up desde la pantalla de redacción de Gmail, posiblemente ocurrirá algo inesperado: el borrador actual se guardará automáticamente. Esto se mostrará a través de un reconocimiento en forma de aviso. Dicho aviso desaparece luego de algunos segundos.</p>
+    <p>En este caso, no se puede incluir la opción de deshacer porque el almacenamiento fue iniciado por la aplicación, no por el usuario. Gracias a esto, se puede continuar redactando el mensaje de forma rápida y fácil con solo navegar hasta la lista de borradores.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+    <h4>Ejemplo: Conversación de Gmail eliminada</h4>
+    <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+    <p>Después de que el usuario elimina una conversación de la lista de Gmail, aparece un mensaje de reconocimiento con la opción de deshacer la acción. Dicho reconocimiento seguirá en pantalla hasta que el usuario lleve a cabo una acción no relacionada, como desplazarse por la lista.</p>
+  </div>
+</div>
+
+<h2>Sin confirmación ni reconocimiento</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Ejemplo: Hacer +1</h4>
+    <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+    <p><strong>No se necesita confirmación</strong>. Si el usuario hizo +1 sin querer, esto no es un problema. Simplemente, puede tocar el botón de nuevo para deshacer la acción.</p>
+    <p><strong>No se necesita un reconocimiento</strong>. El usuario verá que el botón +1 parpadea y cambia a color rojo. Esa es una señal muy clara.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>Ejemplo: Eliminación de una aplicación de la pantalla de inicio</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+    <p><strong>No se necesita confirmación</strong>. Esta es una acción intencionada: el usuario debe arrastrar y colocar un elemento en un destino relativamente grande y aislado. Por lo tanto, es poco probable que se cometan errores. No obstante, si el usuario se arrepiente de la decisión que tomó, solo demorará algunos segundos en recuperar lo eliminado.</p>
+    <p><strong>No se necesita un reconocimiento</strong>. El usuario sabrá que la aplicación ya no aparecerá en la Pantalla de inicio porque él mismo la hizo desaparecer al arrastrarla.</p>
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/es/design/patterns/navigation.jd b/docs/html-intl/intl/es/design/patterns/navigation.jd
new file mode 100644
index 0000000..6332491
--- /dev/null
+++ b/docs/html-intl/intl/es/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=Navegación con los botones Back y Up
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+  <div>
+    <h3>Documentos para desarrolladores</h3>
+    <p>Implementación de la navegación eficiente</p>
+  </div>
+</a>
+
+<p itemprop="description">La navegación coherente es un componente fundamental de la experiencia general del usuario. Pocas situaciones frustran más a los
+usuarios que la navegación básica que se comporta de forma irregular e inesperada. En Android 3.0,
+se introdujeron cambios significativos en el comportamiento global de la navegación. Si sigue detalladamente
+las pautas de navegación con los botones Back y Up, la navegación en su aplicación será predecible y confiable para los usuarios.</p>
+<p>En Android 2.3 y versiones anteriores, se confió en el botón <em>Back</em> del sistema para respaldar la navegación dentro de una
+aplicación. Con la introducción de las barras de acciones en Android 3.0, apareció un segundo mecanismo de navegación:
+el botón <em>Up</em>, que consiste en el icono de la aplicación y una pequeña flecha a la izquierda.</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">Up en comparación con Back</h2>
+
+<p>El botón Up se utiliza para navegar dentro de una aplicación sobre la base de las relaciones jerárquicas
+entre pantallas. Por ejemplo, si en la pantalla A se muestra una lista de elementos y, si se selecciona un elemento, se conduce al usuario a la
+pantalla B (en la que se presenta ese elemento de forma más detallada), entonces en la pantalla B se debe mostrar el botón Up para regresar
+a la pantalla A.</p>
+<p>Si una pantalla aparece en la parte superior de una aplicación (es decir, en el inicio de la aplicación), no debe incluir el botón Up
+.</p>
+
+<p>El botón Back del sistema se utiliza para navegar, en orden cronológico inverso, por el historial
+de pantallas en las que recientemente trabajó el usuario. Generalmente, se basa en las relaciones temporales
+entre pantallas, y no en la jerarquía de la aplicación.</p>
+
+<p>Cuando la pantalla que se visitó anteriormente es también el componente jerárquico primario de la pantalla actual, si se presiona el botón
+Back, se obtendrá el mismo resultado que si se presiona el botón Up, y esto es algo que sucede a
+menudo. Sin embargo, a diferencia del botón Up, mediante el cual se garantiza que el usuario permanezca en la aplicación, el botón Back
+le permite al usuario regresar a la pantalla de inicio o, incluso, a otra aplicación.</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>El botón Back también permite diferentes comportamientos que no están vinculados directamente con la navegación entre pantallas:
+</p>
+<ul>
+<li>descartar las ventanas flotantes (cuadros de diálogo o emergentes);</li>
+<li>descartar las barras de acción contextuales y eliminar el resaltado de los elementos seleccionados;</li>
+<li>ocultar el teclado en la pantalla (IME [Editores de métodos de entrada]).</li>
+</ul>
+<h2 id="within-app">Navegación dentro de su aplicación</h2>
+
+<h4>Navegación hacia pantallas con múltiples puntos de entrada</h4>
+<p>En algunos casos, las pantallas no tienen una posición fija dentro de la jerarquía de la aplicación, y se puede acceder a ellas
+desde múltiples puntos de entrada (como la pantalla Configuración, a la que se puede acceder desde cualquier otra pantalla
+de la aplicación). En este caso, el botón Up debe permitir regresar a la pantalla remitente, por lo que se comportaría
+de forma idéntica al botón Back.</p>
+<h4>Cambio de vista dentro de una pantalla</h4>
+<p>Cambiar las opciones de vista de una pantalla no modifica el comportamiento de los botones Up o Back: la pantalla sigue estando
+en el mismo lugar dentro de la jerarquía de la aplicación y no se crea ningún historial de navegación nuevo.</p>
+<p>Entre los ejemplos de cambios en las vistas, se encuentran los siguientes:</p>
+<ul>
+<li>cambio de vistas mediante las pestañas o los deslizamientos de izquierda a derecha;</li>
+<li>cambio de vistas mediante un menú desplegable (también conocido como pestañas colapsadas);</li>
+<li>filtrado de listas;</li>
+<li>clasificación de listas;</li>
+<li>modificación de las características de la pantalla (como el zoom).</li>
+</ul>
+<h4>Navegación entre pantallas relacionadas</h4>
+<p>Si su aplicación es compatible con la navegación desde una lista de elementos hacia una vista de detalles de alguno de esos elementos, generalmente,
+es preferible respaldar la navegación de dirección desde ese elemento a otro anterior
+o siguiente en la lista. Por ejemplo, en Gmail, es fácil deslizarse hacia la izquierda o la derecha desde una conversación
+para ver una conversación anterior o más nueva en la misma bandeja de entrada. Al igual que cuando se cambia la vista dentro de una pantalla, en este tipo de
+navegación no se cambia el comportamiento de los botones Up o Back.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>Sin embargo, una excepción importante a este caso se presenta cuando se explora entre vistas de detalles relacionadas que no están vinculadas
+mediante la lista que se está utilizando; por ejemplo, cuando se explora en Play Store entre diferentes aplicaciones
+del mismo desarrollador o entre álbumes del mismo artista. En estos casos, si se sigue cada vínculo, esto queda registrado en el
+historial, por lo que, a través del botón Back, se regresa a cada pantalla que se visitó anteriormente. El botón Up debe seguir omitiendo
+estas pantallas relacionadas y navegar hacia la pantalla del contenedor visitada más recientemente.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>Usted puede lograr que el comportamiento del botón Up sea incluso más inteligente teniendo en cuenta sus conocimientos de la vista
+detallada. Si extendemos el ejemplo de Play Store mencionado antes, imaginemos que el usuario navegó desde el último
+libro visto hacia los detalles de la adaptación de la película. En ese caso, mediante el botón Up podrá regresar a un contenedor
+(Películas) por el que el usuario no navegó anteriormente.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">Navegación dentro de la aplicación a través de los widgets y las notificaciones de la pantalla de inicio</h2>
+
+<p>Podrá utilizar los widgets y las notificaciones de la pantalla de inicio para ayudar a los usuarios a navegar directamente hacia las pantallas
+que se encuentran en posiciones más profundas dentro de la jerarquía de su aplicación. Por ejemplo, tanto el widget de la bandeja de entrada de Gmail como las notificaciones de los mensajes nuevos
+ pueden omitir la pantalla Bandeja de entrada y llevar al usuario directamente hacia una vista de conversación.</p>
+
+<p>En ambos casos, el botón Up se debe utilizar de la siguiente manera:</p>
+
+<ul>
+<li><em>Si a la pantalla de destino generalmente se llega desde una determinada pantalla dentro de su
+aplicación</em>, el botón Up debe permitir la navegación hacia esa pantalla.</li>
+<li><em>De lo contrario, </em>el botón Up debe permitir la navegación hacia la pantalla que está en el nivel superior ("Inicio") de su aplicación.</li>
+</ul>
+
+<p>En el caso del botón Back, la navegación debe ser más predecible. Para ello, coloque en la
+pila de retroceso de la tarea la ruta completa de la navegación ascendente hacia la pantalla que se encuentra en el nivel superior de la aplicación. De este modo, los usuarios que
+no recuerdan cómo ingresaron a su aplicación podrán navegar hacia la pantalla del nivel superior de la aplicación antes de
+salir.</p>
+
+<p>A modo de ejemplo, el widget de la pantalla Inicio de Gmail posee un botón para llevar al usuario directamente a la pantalla de
+redacción. Mediante los botones Up o Back de la pantalla de redacción el usuario debería poder dirigirse hacia la Bandeja de entrada y, a partir de allí, continuar hacia la pantalla Inicio
+por medio del botón Back.</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>Notificaciones indirectas</h4>
+
+<p>Cuando su aplicación necesita presentar información sobre múltiples eventos de forma simultánea, puede utilizar una
+sola notificación que dirija al usuario a una pantalla intersticial. En esta pantalla, se resumen dichos
+eventos y se proporcionan rutas para que el usuario navegue más profundamente por la aplicación. Las notificaciones de este estilo se
+denominan <em>notificaciones indirectas</em>.</p>
+
+<p>A diferencia de las notificaciones estándar (directas), si se presiona Back desde una pantalla intersticial de una
+notificación indirecta, el usuario será dirigido hacia el punto en el que se desencadenó la notificación. No se incluyen
+pantallas adicionales en la pila de retroceso. Una vez que el usuario se dirige hacia la aplicación desde la
+pantalla intersticial, los botones Up y Back se comportan del mismo modo que lo hacen en las notificaciones estándar, como se describió antes:
+navegan dentro de la aplicación en lugar de regresar a la pantalla intersticial.</p>
+
+<p>Por ejemplo, supongamos que un usuario de Gmail recibe una notificación indirecta del calendario Si se toca
+esta notificación, se abrirá la pantalla intersticial, en la que se mostrarán recordatorios de varios
+eventos diferentes. Si se toca Back desde la pantalla intersticial, el usuario volverá a Gmail. Si se toca un evento
+en particular, el usuario saldrá de la pantalla intersticial e ingresará en la aplicación Calendario, donde se mostrarán detalles del
+evento. En la pantalla de detalles del evento, es posible navegar con los botones Up y Back hacia la vista superior del calendario.</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>Notificaciones emergentes</h4>
+
+<p><em>Las notificaciones emergentes</em> omiten el panel lateral de notificaciones y aparecen directamente 
+frente al usuario. Estas casi nunca se utilizan, y se <strong>deben reservar para ocasiones en las que es necesario proporcionar una
+respuesta oportuna y es necesario realizar una interrupción en el contexto del usuario</strong>. Por ejemplo,
+en Talk se utiliza este estilo para alertar al usuario sobre una invitación de un amigo para participar en una videocharla, ya que esta
+invitación caducará automáticamente luego de algunos segundos.</p>
+
+<p>En términos de comportamiento de la navegación, las notificaciones emergentes siguen, en gran medida, el comportamiento de la pantalla intersticial
+de una notificación indirecta. El botón Back le permite al usuario descartar la notificación emergente. Si el usuario navega
+desde la ventana emergente hacia la aplicación que genera las notificaciones, los botones Up y Back seguirán las reglas para las notificaciones estándar
+mientras se navega por la aplicación.</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">Navegación entre aplicaciones</h2>
+
+<p>Una de las principales ventajas del sistema Android es la capacidad de las aplicaciones de activarse
+mutuamente, por lo que el usuario puede navegar directamente desde una aplicación hacia otra. Por ejemplo, una
+aplicación que debe tomar una fotografía puede activar la aplicación de la cámara, la cual mostrará la fotografía
+en la aplicación que la activó. Esto representa una gran ventaja tanto para el desarrollador, quien puede aprovechar fácilmente el
+código de otras aplicaciones, y también para el usuario, quien disfruta de una experiencia coherente para acciones
+que se realizan comúnmente.</p>
+
+<p>Para comprender la navegación entre aplicaciones, es importante que entienda el comportamiento del marco de Android,
+que se explica a continuación.</p>
+
+<h4>Actividades, tareas e intentos</h4>
+
+<p>En Android, una <strong>actividad</strong> es un componente de la aplicación que define una pantalla de
+información y todas las acciones relacionadas que el usuario puede llevar a cabo. Su aplicación es un conjunto de
+actividades formado por las actividades que usted crea y aquellas que reutiliza de otras aplicaciones.</p>
+
+<p>Una <strong>tarea</strong> es la secuencia de actividades que un usuario realiza para lograr un objetivo. En
+una sola tarea, se pueden utilizar actividades de una sola aplicación o se pueden utilizar actividades de varias
+aplicaciones diferentes.</p>
+
+<p>Un <strong>intento</strong> es un mecanismo mediante el cual una aplicación indica que necesita la ayuda de
+otra aplicación para realizar una acción. Las actividades de una aplicación pueden indicar los intentos
+a los que pueden dar respuesta. En el caso de los intentos comunes, como "Compartir", es posible que el usuario tenga instaladas varias aplicaciones
+que pueden cumplir con esta solicitud.</p>
+
+<h4>Ejemplo: navegación entre aplicaciones para respaldar el uso compartido</h4>
+
+<p>Para comprender cómo las actividades, las tareas y los intentos funcionan en conjunto, considere cómo una aplicación les permite a los usuarios
+compartir contenido a través de otra aplicación. Por ejemplo, si ejecuta la aplicación Play Store desde la pantalla de inicio, se iniciará
+una nueva tarea A (vea la imagen a continuación). Después de navegar por Play Store y de tocar un libro promocionado
+para ver la información detallada, el usuario permanece en la misma tarea y la extiende al agregar actividades. Si se desencadena la acción
+Compartir, se le mostrará al usuario un cuadro de diálogo con una lista de todas las actividades (provenientes de diferentes aplicaciones)
+que se registraron para concretar el intento de compartir.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>Si el usuario decide compartir el contenido a través de Gmail, la actividad de redacción de Gmail se agrega como una continuación de la
+tarea A; no se crea una tarea nueva. Si Gmail estaba ejecutando su propia tarea en segundo plano, esta
+no debería verse afectada.</p>
+
+<p>Desde la actividad de redacción, si se envía el mensaje o se toca el botón Back, se dirigirá nuevamente al usuario hacia
+la actividad de detalles del libro. Si se sigue tocando el botón Back, el usuario seguirá navegando por Play
+Store y, finalmente, llegará a la pantalla de inicio.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>Sin embargo, si el usuario toca el botón Up desde la actividad de redacción, estará indicando su deseo de permanecer dentro de
+Gmail. Por consiguiente, aparecerá la actividad de la lista de conversaciones de Gmail y se creará una nueva tarea B para esto. La ruta raíz de las nuevas tareas siempre conduce
+a la pantalla Inicio, por lo que, si se toca el botón Back desde la lista de conversaciones, se regresará a dicha pantalla.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>La tarea A permanece en segundo plano, y el usuario podrá regresar a ella después (por ejemplo, a través de la pantalla
+Recientes). Si Gmail ya estaba ejecutando su propia tarea en segundo plano, esta se reemplazará con la
+tarea B, y el contexto anterior se abandonará para darle preferencia al nuevo objetivo del usuario.</p>
+
+<p>Cuando su aplicación se registre para manipular los intentos de una actividad que se encuentra en un nivel profundo dentro de la jerarquía de la aplicación,
+consulte <a href="#into-your-app">Navegación dentro de la aplicación a través de los widgets y
+las notificaciones de la pantalla de inicio</a> para obtener información sobre cómo especificar la navegación del botón Up.</p>
diff --git a/docs/html-intl/intl/es/design/patterns/notifications.jd b/docs/html-intl/intl/es/design/patterns/notifications.jd
new file mode 100644
index 0000000..bdbc77b
--- /dev/null
+++ b/docs/html-intl/intl/es/design/patterns/notifications.jd
@@ -0,0 +1,872 @@
+page.title=Notificaciones
+page.tags="notifications","design","L"
+@jd:body
+
+  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
+  <div>
+    <h3>Documentos para desarrolladores</h3>
+    <p>Cómo notificar al usuario</p>
+  </div>
+</a>
+
+<a class="notice-designers" href="notifications_k.html">
+  <div>
+    <h3>Notificaciones en Android 4.4 y versiones anteriores</h3>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
+<div>
+    <h3>Video</h3>
+    <p>DevBytes: Notificaciones en la vista previa para desarrolladores de Android L</p>
+</div>
+</a>
+
+<style>
+  .col-5, .col-6, .col-7 {
+    margin-left:0px;
+  }
+</style>
+
+<p>El sistema de notificaciones les permite a los usuarios mantenerse informados sobre eventos relevantes y
+oportunos
+de su aplicación, como nuevos mensajes de chat de un amigo o un evento del calendario.
+Piense en las notificaciones como un canal de noticias que alerta a los usuarios sobre eventos
+importantes
+a medida que se producen o como un registro en el que se relatan los eventos mientras el usuario no está prestando
+atención y que se sincroniza de forma correspondiente en todos los dispositivos de Android.</p>
+
+<h4 id="New"><strong>Novedades de Android 5.0</strong></h4>
+
+<p>En Android 5.0, las notificaciones reciben actualizaciones importantes a nivel estructural,
+visual y funcional.</p>
+
+<ul>
+  <li>En las notificaciones, se han realizado cambios visuales de forma coherente con el nuevo
+tema Material Design.</li>
+  <li> Las notificaciones ahora están disponibles en la pantalla de bloqueo del dispositivo y
+el contenido confidencial se puede seguir
+ ocultando detrás de dicha pantalla.</li>
+  <li>En las notificaciones de alta prioridad que se reciben cuando el dispositivo está en uso, ahora se utiliza un nuevo formato llamado
+ notificaciones emergentes.</li>
+  <li>Notificaciones sincronizadas en la nube: Si se omite una notificación en un dispositivo
+Android, esta se omitirá
+ también en los demás dispositivos.</li>
+</ul>
+
+<p class="note"><strong>Nota:</strong> El diseño de las notificaciones de esta versión de
+Android se diferencia 
+de manera significativa del diseño de las versiones anteriores. Para obtener información sobre el diseño de las notificaciones en versiones
+anteriores, consulte <a href="./notifications_k.html">Notificaciones en Android 4.4 y versiones anteriores</a>.</p>
+
+<h2 id="Anatomy">Anatomía de una notificación</h2>
+
+<p>En esta sección, se repasan las partes básicas de una notificación y cómo se pueden mostrar en
+diferentes tipos de dispositivos.</p>
+
+<h3 id="BaseLayout">Diseño básico</h3>
+
+<p>Como mínimo, todas las notificaciones poseen un diseño básico que incluye lo siguiente:</p>
+
+<ul>
+  <li> El <strong>icono</strong> de la notificación. El icono simboliza la
+aplicación que lo origina. También puede
+ indicar el tipo de notificación si la aplicación genera más de un
+tipo.</li>
+  <li> <strong>Título</strong> de la notificación y
+<strong>texto</strong> adicional.</li>
+  <li> Una <strong>marca de tiempo</strong>.</li>
+</ul>
+
+<p>Las notificaciones creadas con {@link android.app.Notification.Builder Notification.Builder}
+para versiones anteriores de la plataforma lucen y funcionan igual en Android
+5.0; solo presentan algunos cambios de estilo que el sistema realiza
+por usted. Para obtener más información sobre las notificaciones en versiones anteriores de
+Android, consulte
+<a href="./notifications_k.html">Notificaciones en Android 4.4 y versiones anteriores</a>.</p></p>
+
+
+    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
+
+
+<div style="clear:both;margin-top:20px">
+      <p class="img-caption">
+      Diseño básico de una notificación para dispositivos portátiles (izquierda) y la misma notificación en Wear (derecha),
+ con una fotografía del usuario y un icono de la notificación
+    </p>
+  </div>
+
+<h3 id="ExpandedLayouts">Diseños expandidos</h3>
+
+
+<p>Usted puede decidir cuántos detalles mostrarán las notificaciones
+de su aplicación. Las notificaciones pueden mostrar las primeras
+líneas de un mensaje o la vista previa de una imagen más grande. A través de la
+información adicional, se proporciona más
+contexto al usuario y, en algunos casos, se puede permitir que el usuario lea todo el
+mensaje. El usuario
+puede acercar o alejar la imagen, o deslizar la imagen con un solo dedo para alternar entre los diseños compacto
+y expandido.
+ En el caso de las notificaciones de un solo evento, Android proporciona tres plantillas de
+diseños expandidos (texto, bandeja de entrada e
+ imagen) para que usted utilice en su aplicación. En las siguientes imágenes, se muestra cómo
+se ven las notificaciones de un solo evento en los
+ dispositivos portátiles (izquierda) y los dispositivos con Wear (derecha).</p>
+
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
+    alt="" width="311px" height;="450px" />
+
+<h3 id="actions" style="clear:both; margin-top:40px">Acciones</h3>
+
+<p>Android es compatible con acciones opcionales que se muestran en la parte inferior
+de la notificación.
+A través de las acciones, los usuarios pueden administrar las tareas más comunes para una determinada
+notificación desde el interior del panel de notificaciones, sin tener que abrir la
+aplicación que la originó.
+Esto acelera la interacción y, junto con la función deslizar para descartar, ayuda a los usuarios a enfocarse en las
+notificaciones que les parecen importantes.</p>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
+
+
+
+<p style="clear:both">Sea moderado con la cantidad de acciones que incluye en una
+notificación. Mientras más
+acciones incluya, mayor complejidad cognitiva generará. Limítese a
+la menor cantidad posible
+de acciones al incluir solo las acciones más importantes
+y significativas.</p>
+
+<p>Las acciones recomendadas para las notificaciones son aquellas que:</p>
+
+<ul>
+  <li> Son fundamentales, frecuentes y típicas para el tipo de contenido que está
+mostrando.
+  <li> Les permiten a los usuarios realizar las tareas rápidamente.
+</ul>
+
+<p>Evite acciones que sean:</p>
+
+<ul>
+  <li> ambiguas;
+  <li> iguales que la acción predeterminada de la notificación (tales como "Leer" o
+"Abrir").
+</ul>
+
+
+
+<p>Puede especificar un máximo de tres acciones, cada una de ellas formada por un icono
+de la acción y un nombre.
+ Al agregarle acciones a un diseño básico simple, la notificación será expandible,
+incluso si no
+ cuenta con un diseño expandido. Como las acciones solo se muestran en las notificaciones
+expandidas
+ y, de lo contrario, se ocultan, asegúrese de que cualquier acción que el
+usuario invoque desde
+ una notificación esté disponible también desde la aplicación
+asociada.</p>
+
+<h2 style="clear:left">Notificación emergente</h2>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
+  <p class="img-caption">
+    Ejemplo de una notificación emergente (llamada telefónica entrante, alta prioridad)
+que aparece en la parte superior de una
+ aplicación inmersiva
+  </p>
+</div>
+
+<p>Cuando llega una notificación de alta prioridad (ver a la derecha), esta se presenta
+a los usuarios
+durante un período breve, con un diseño expandido que expone las posibles acciones.</p>
+<p> Luego de este período, la notificación se retira hacia el
+panel de notificaciones. Si la <a href="#correctly_set_and_manage_notification_priority">prioridad</a> de una notificación 
+se marca como Alta, Máxima o Pantalla completa, se obtiene una notificación emergente.</p>
+
+<p><b>Buenos ejemplos de notificaciones emergentes</b></p>
+
+<ul>
+  <li> Llamada telefónica entrante cuando se utiliza un dispositivo</li>
+  <li> Alarma cuando se utiliza un dispositivo</li>
+  <li> Nuevo mensaje SMS</li>
+  <li> Batería baja</li>
+</ul>
+
+<h2 style="clear:both" id="guidelines">Pautas</h2>
+
+
+<h3 id="MakeItPersonal">Personalización</h3>
+
+<p>En el caso de las notificaciones de los elementos que envía otra persona (como un mensaje o una
+actualización de estado), utilice
+{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()} para incluir la imagen de esa persona. Además, adjunte información sobre
+la persona en los metadatos de la notificación (consulte {@link android.app.Notification#EXTRA_PEOPLE}).</p>
+
+<p>El icono principal de su notificación seguirá estando visible, de modo que el usuario pueda asociarlo
+con el icono
+que se muestra en la barra de estado.</p>
+
+
+<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
+<p style="margin-top:10px" class="img-caption">
+  Notificación en la que se muestra la persona que la generó y el contenido que envió.
+</p>
+
+
+<h3 id="navigate_to_the_right_place">Navegación hacia el lugar correcto</h3>
+
+<p>Cuando el usuario toca el cuerpo de una notificación (fuera de los botones de acción
+), esta se abre
+en el lugar en el que el usuario puede visualizarla y utilizar los datos que se mencionan en la
+notificación. En la mayoría de los casos, se tratará de la vista detallada de un solo elemento de datos como un mensaje,
+pero también se podría tratar de una
+vista resumida si la notificación está apilada. Si la aplicación dirige al
+usuario a cualquier sitio que se encuentre debajo del nivel superior, incorpore la navegación en la pila de retroceso de la aplicación para que el
+usuario pueda presionar el botón Back del sistema y regresar al nivel superior. Para obtener más información, consulte
+<em>Navegación dentro de la aplicación a través de los widgets y las notificaciones de la pantalla de Inicio</em> en el patrón de
+diseño <a href="{@docRoot}design/patterns/navigation.html#into-your-app">Navegación</a>.</p>
+
+<h3 id="correctly_set_and_manage_notification_priority">Configuración y administración
+correctas de la prioridad
+de las notificaciones</h3>
+
+<p>Android admite el uso de una marca de prioridad en las notificaciones. Esta marca
+le permite influir en el lugar donde aparecerá la notificación, en relación con otras notificaciones, y
+lo ayuda a asegurarse de
+que los usuarios vean siempre primero las notificaciones más importantes. Cuando publica una notificación, puede elegir
+entre los
+siguientes niveles de prioridad:</p>
+<table>
+ <tr>
+    <td class="tab0">
+<p><strong>Prioridad</strong></p>
+</td>
+    <td class="tab0">
+<p><strong>Uso</strong></p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MAX</code></p>
+</td>
+    <td class="tab1">
+<p>Utilícelo para las notificaciones críticas y urgentes en las que se le informa al usuario sobre una condición
+que es
+crítica en el tiempo o que se debe resolver antes de que el usuario continúe con una
+tarea específica.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>HIGH</code></p>
+</td>
+    <td class="tab1">
+<p>Utilícelo, principalmente, para comunicaciones importantes, como eventos de mensajes o
+chats con contenido que sea particularmente interesante para el usuario.
+Las notificaciones de alta prioridad activan la pantalla de notificaciones emergentes.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>DEFAULT</code></p>
+</td>
+    <td class="tab1">
+<p>Utilícelo para todas las notificaciones que no pertenecen a ninguno de los otros tipos de prioridades que se describen aquí.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>LOW</code></p>
+</td>
+    <td class="tab1">
+<p>Utilícelo para las notificaciones que desea que el usuario reciba, pero
+que son menos urgentes. Las notificaciones de baja prioridad tienden a aparecer en la parte inferior de la lista,
+por lo que son ideales para
+eventos como actualizaciones sociales públicas o indirectas: El usuario solicitó que se le notifiquen 
+estas 
+actualizaciones, pero estas notificaciones nunca tendrán prioridad sobre las comunicaciones
+urgentes o directas.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MIN</code></p>
+</td>
+    <td class="tab1">
+<p>Utilícelo para la información contextual o de segundo plano, como información sobre el clima o la
+ubicación contextual.
+Las notificaciones cuya prioridad es mínima no aparecen en la barra de estado. El usuario
+las descubre al expandir el panel de notificaciones.</p>
+</td>
+ </tr>
+</table>
+
+
+<h4 id="how_to_choose_an_appropriate_priority"><strong>Cómo elegir la
+prioridad
+adecuada</strong></h4>
+
+<p><code>DEFAULT</code>, <code>HIGH</code> y <code>MAX</code> son niveles de prioridad interruptiva, y se corre el riesgo de
+interrumpir al usuario
+en el medio de su actividad. Para evitar incomodar a los usuarios de su aplicación, reserve los niveles de prioridad interruptiva para
+las notificaciones:</p>
+
+<ul>
+  <li> en las que participe otra persona;</li>
+  <li> en las que el tiempo sea importante;</li>
+  <li> que puedan modificar inmediatamente el comportamiento del usuario en el mundo real.</li>
+</ul>
+
+<p>Las notificaciones que se configuran en <code>LOW</code> y <code>MIN</code> pueden seguir siendo
+valiosas para el usuario: muchas, tal vez la mayoría, de las notificaciones simplemente no le piden al usuario que actúe de inmediato
+ni llaman su atención mediante una vibración, pero poseen información que será valiosa para el
+usuario
+cuando este decida ver las notificaciones. Entre los criterios de las notificaciones con prioridad <code>LOW</code> y <code>MIN</code>,
+se incluyen los siguientes:</p>
+
+<ul>
+  <li> No participan otras personas.</li>
+  <li> El tiempo no es importante.</li>
+  <li> Incluyen contenido que podría interesarle al usuario, pero que tal vez desee
+buscarlo cuando lo necesite.</li>
+</ul>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
+
+
+<h3 style="clear:both" id="set_a_notification_category">Configuración de una
+categoría de notificaciones</h3>
+
+<p>Si su notificación se puede clasificar dentro de alguna de las categorías predefinidas (consulte
+a continuación), asígnela
+según corresponda.  Esta información se puede utilizar en determinados aspectos de la IU del sistema, como el panel de notificaciones (o cualquier
+otro
+agente de escucha de la notificación), para realizar una clasificación y filtrar las decisiones.</p>
+<table>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
+</td>
+    <td>
+<p>Llamada entrante (voz o video) o una solicitud de comunicación
+sincrónica similar</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
+</td>
+    <td>
+<p>Mensaje entrante directo (SMS, mensaje instantáneo, etc.)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
+</td>
+    <td>
+<p>Mensaje en bloque asíncrono (correo electrónico)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
+</td>
+    <td>
+<p>Evento del calendario</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
+</td>
+    <td>
+<p>Promoción o anuncio</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
+</td>
+    <td>
+<p>Alarma o temporizador</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
+</td>
+    <td>
+<p>Progreso de una operación en segundo plano de larga ejecución</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
+</td>
+    <td>
+<p>Actualización de red social o uso compartido de datos</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
+</td>
+    <td>
+<p>Error en una operación en segundo plano o un estado de autenticación</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
+</td>
+    <td>
+<p>Control de transporte de medios para la reproducción</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
+</td>
+    <td>
+<p>Actualización del estado del dispositivo o el sistema.  Reservado para ser utilizado por el sistema</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
+</td>
+    <td>
+<p>Indicación de ejecución de servicio en segundo plano</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
+</td>
+    <td>
+<p>Una recomendación específica y oportuna para un solo evento.  Por ejemplo, en una
+aplicación de noticias tal vez se desee
+recomendar una historia que se considere que el usuario deseará leer luego</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
+</td>
+    <td>
+<p>Información constante sobre el estado contextual o del dispositivo</p>
+</td>
+ </tr>
+</table>
+
+<h3 id="summarize_your_notifications">Resumen de las notificaciones</h3>
+
+<p>Si una notificación de un determinado tipo ya está pendiente cuando su aplicación intenta enviar una nueva
+notificación del mismo tipo, combínelas en una misma notificación resumida para la aplicación. No
+cree un objeto nuevo.</p>
+
+<p>Las notificaciones resumidas incluirán una descripción resumida y le permitirán al usuario
+conocer cuántas
+notificaciones de un determinado tipo están pendientes.</p>
+
+<div class="col-6">
+
+<p><strong>Lo que no debe hacer</strong></p>
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
+</div>
+
+<div>
+<p><strong>Lo que debe hacer</strong></p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
+</div>
+
+<p style="clear:left; padding-top:30px; padding-bottom:20px">Puede proporcionar
+información más detallada sobre cada una de las notificaciones que conforman un
+ resumen al utilizar el diseño resumido expandido. Este enfoque les permite a los usuarios tener
+una idea más clara de las
+ notificaciones pendientes y determinar si están lo suficientemente interesados como para leer
+los detalles en la
+ aplicación asociada.</p>
+<div class="col-6">
+  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
+  <p class="img-caption">
+  Notificación contraída y expandida que es un resumen (mediante el uso de <code>InboxStyle</code>)
+  </p>
+</div>
+
+<h3 style="clear:both" id="make_notifications_optional">Uso de notificaciones
+opcionales</h3>
+
+<p>Los usuarios deben tener siempre el control sobre las notificaciones. Permítale al usuario
+deshabilitar las notificaciones
+de su aplicación o cambiar las propiedades de las alertas, como el sonido de una alerta y si desea
+utilizar la vibración,
+mediante la incorporación de un elemento de configuración de notificaciones en las configuraciones de la aplicación.</p>
+
+<h3 id="use_distinct_icons">Uso de iconos diferentes</h3>
+<p>Al mirar el área de notificaciones, el usuario debe poder diferenciar
+los tipos de
+notificaciones que están pendientes actualmente.</p>
+
+<div class="figure">
+  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
+</div>
+
+  <div><p><strong>Lo que debe hacer</strong></p>
+    <p>Mirar los iconos de notificaciones que ya se proporcionan en las aplicaciones de Android y crear
+iconos de notificaciones para
+ su aplicación que tengan una apariencia bastante diferente.</p>
+
+    <p><strong>Lo que debe hacer</strong></p>
+    <p>Utilizar el <a href="/design/style/iconography.html#notification">estilo de icono de notificación</a>
+ adecuado para los iconos pequeños y el 
+<a href="/design/style/iconography.html#action-bar">estilo
+de icono de barra de acción</a> del diseño Material Light para los iconos
+ de acciones.</p>
+<p ><strong>Lo que debe hacer</strong></p>
+<p >Hacer que los iconos sean simples y evitar incluir una cantidad excesiva de detalles difíciles de
+distinguir.</p>
+
+  <div><p><strong>Lo que no debe hacer</strong></p>
+    <p>Colocar valores alfa adicionales (que se oscurezcan o aclaren) en los
+iconos pequeños y los
+ iconos de acciones. Estos pueden tener bordes alisados, pero como en Android estos iconos se utilizan
+como máscaras (es decir, solo se
+ utiliza el canal alfa), por lo general, la imagen se debe dibujar con
+opacidad completa.</p>
+
+</div>
+<p style="clear:both"><strong>Lo que no debe hacer</strong></p>
+
+<p>Utilizar colores para diferenciar su aplicación de las demás. Los iconos de las notificaciones simplemente
+deben ser una imagen sobre un fondo blanco o transparente.</p>
+
+
+<h3 id="pulse_the_notification_led_appropriately">Pulsación adecuada del
+LED de notificaciones</h3>
+
+<p>Muchos dispositivos con Android incluyen un LED de notificaciones, que se utiliza para mantener al 
+usuario informado sobre los
+eventos cuando la pantalla está apagada. Las notificaciones con un nivel de prioridad <code>MAX</code>,
+<code>HIGH</code> o <code>DEFAULT</code> deben
+hacer que se encienda el LED, mientras que las de menor prioridad (<code>LOW</code> y
+<code>MIN</code>) no deben activar esta función.</p>
+
+<p>El control del usuario sobre las notificaciones debe extenderse al LED. Cuando se utilice
+DEFAULT_LIGHTS, el
+LED se iluminará en color blanco. Sus notificaciones no deberían utilizar un color
+diferente, a menos que el
+usuario lo haya personalizado explícitamente.</p>
+
+<h2 id="building_notifications_that_users_care_about">Creación de notificaciones
+importantes para los usuarios</h2>
+
+<p>Para crear una aplicación que les guste a los usuarios, es importante diseñar las notificaciones
+cuidadosamente.
+Las notificaciones son la voz de su aplicación y ayudan a definir su
+personalidad. Las notificaciones no deseadas
+o que no son importantes pueden hacer que el usuario se moleste o no se sienta cómodo con la cantidad de
+atención que le demanda la
+aplicación, por eso debe utilizarlas de forma moderada.</p>
+
+<h3 id="when_to_display_a_notification">Cuándo se deben mostrar las notificaciones</h3>
+
+<p>Para crear una aplicación que los usuarios disfruten, es importante
+reconocer que la atención
+y el enfoque del usuario son recursos que se deben proteger. Aunque el sistema de notificaciones de Android
+se diseñó
+para minimizar el impacto de las notificaciones en la atención del usuario,
+es
+importante tener en cuenta que las notificaciones interrumpen el
+flujo de tareas del usuario.
+Cuando planifique sus notificaciones, pregúntese si son lo suficiente importantes como para
+realizar una interrupción. Si no está seguro, permítale al usuario que elija las
+notificaciones mediante la configuración de notificaciones de su aplicación o que ajuste
+la marca de prioridad de las notificaciones en <code>LOW</code> o <code>MIN</code> para
+evitar distraer al usuario cuando realiza
+alguna otra tarea.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
+  <p style="margin-top:10px" class="img-caption">
+   Ejemplos de notificaciones sujetas a limitación temporal
+  </p>
+
+<p>Aunque las aplicaciones más eficientes para el usuario solo proporcionan una respuesta cuando se la solicita, en algunos casos,
+vale la pena que una aplicación interrumpa al usuario con una notificación no solicitada.</p>
+
+<p>Utilice las notificaciones principalmente para <strong>eventos sujetos a limitaciones temporales</strong>, en especial
+ si estos eventos sincrónicos <strong>involucran a otras personas</strong>. Por
+ejemplo, un chat entrante
+ es una forma de comunicación sincrónica y en tiempo real: otro usuario
+está esperando de forma activa su respuesta. Los eventos del calendario son otros buenos ejemplos de cuándo se debe utilizar una
+notificación y llamar la atención del usuario,
+ ya que los eventos son inminentes y, generalmente,
+involucran a otras personas.</p>
+
+<h3 style="clear:both" id="when_not_to_display_a_notification">Cuándo no se debe
+mostrar una notificación</h3>
+
+<div class="figure" style="margin-top:60px">
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
+</div>
+
+<p>En muchos otros casos, no es apropiado enviar notificaciones:</p>
+
+<ul>
+  <li> Evite notificarle al usuario acerca de información que no le enviaron
+específicamente a él o
+información que no está verdaderamente sujeta a una limitación temporal. Por ejemplo, las actualizaciones asíncronas
+e indirectas
+ que circulan por las redes sociales generalmente no justifican una interrupción en
+tiempo real. En el caso de los usuarios
+ interesados en dichas notificaciones, permítales elegir.</li>
+  <li> No cree una notificación si la información nueva y relevante se muestra actualmente
+en la pantalla. En su lugar,
+ utilice la IU de la aplicación para notificarle al usuario sobre la nueva información
+directamente en contexto.
+  Por ejemplo, una aplicación de chat no debe crear notificaciones del sistema mientras
+el usuario está chateando de forma activa con otro usuario.</li>
+  <li> No interrumpa al usuario para que ejecute operaciones técnicas de bajo nivel, como guardar
+o sincronizar información, o actualizar una aplicación si dicha aplicación o el sistema pueden resolver el problema
+sin la participación del usuario.</li>
+  <li> No interrumpa al usuario para informarle sobre un error si la
+aplicación puede solucionar el error por sus propios medios, sin que el usuario
+realice ninguna acción.</li>
+  <li> No cree notificaciones que no incluyan contenidos reales de notificación y que
+simplemente promocionen
+ su aplicación. Una notificación debe proporcionar información nueva, útil y oportuna, y
+no debe utilizarse
+ solo para lanzar una aplicación.</li>
+  <li> No cree notificaciones superfluas solo para mostrar su marca
+a los usuarios.
+  Dichas notificaciones frustran y aíslan a su público. La
+mejor forma de proporcionar
+ pequeñas cantidades de información actualizada y de mantener a los usuarios interesados
+en su
+ aplicación es desarrollar un widget que puedan colocar en la
+pantalla de inicio, si así lo desean.</li>
+</ul>
+
+<h2 style="clear:left" id="interacting_with_notifications">Interacción con
+las notificaciones</h2>
+
+<p>Las notificaciones se indican mediante iconos en la barra de estado, y se puede acceder a ellas
+al abrir el
+panel lateral de notificaciones.</p>
+
+<p>Al tocar una notificación, se abre la aplicación asociada con el contenido detallado
+que coincide con el de la notificación.
+Si dicha notificación se desplaza hacia la izquierda o la derecha, esta se eliminará del panel lateral.</p>
+
+<h3 id="ongoing_notifications">Notificaciones constantes</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
+      <p class="img-caption">
+    Notificaciones constantes relacionadas con la reproducción de música
+  </p>
+</div>
+<p>Mediante las notificaciones constantes, se mantiene a los usuarios informados sobre un proceso en curso en
+segundo plano.
+Por ejemplo, los reproductores de música anuncian la pista que se está reproduciendo actualmente en el
+sistema de notificaciones y
+siguen haciéndolo hasta que el usuario detiene la reproducción. Mediante las notificaciones constantes también se le pueden
+mostrar al usuario
+comentarios sobre tareas más extensas, como descargar un archivo o codificar un video. Los usuarios no podrán
+eliminar las notificaciones constantes del panel lateral de notificaciones.</p>
+
+<h3 id="ongoing_notifications">Reproducción de medios</h3>
+<p>En Android 5.0, la pantalla de bloqueo no muestra los controles de transporte para la clase 
+{@link android.media.RemoteControlClient} obsoleta. Sin embargo, <em>sí</em> muestra las notificaciones, de modo que las notificaciones de reproducción de cada
+aplicación ahora son la forma principal
+en la que los usuarios controlan la reproducción desde el estado bloqueado. A través de este comportamiento, se le otorga más control
+a la aplicación sobre los
+botones que se deben mostrar, y la forma en que debe mostrarlos, al mismo tiempo que se proporciona
+al usuario una experiencia coherente, independientemente de si la pantalla está bloqueada o no.</p>
+
+<h3 style="clear:both"
+id="dialogs_and_toasts_are_for_feedback_not_notification">Diálogos
+y avisos</h3>
+
+<p>Su aplicación no debe crear un diálogo o un aviso si actualmente no se muestra en la
+pantalla. Los diálogos o los avisos se deben
+ mostrar únicamente como una respuesta inmediata a una acción que realiza el usuario
+dentro de su aplicación.
+Para obtener más información sobre cómo utilizar los diálogos y los avisos, consulte
+<a href="/design/patterns/confirming-acknowledging.html">Confirmación y reconocimiento</a>.</p>
+
+<h3>Orden y clasificación</h3>
+
+<p>Las notificaciones son noticias que, como tales, se muestran, básicamente, en
+orden cronológico inverso, prestando
+especial atención a la
+<a href="#correctly_set_and_manage_notification_priority">prioridad</a> de la notificación especificada en la aplicación.</p>
+
+<p>Las notificaciones son una parte clave de la pantalla de bloqueo y se muestran de forma prominente
+cada vez
+que se enciende la pantalla del dispositivo. El espacio en la pantalla de bloqueo es reducido, por lo que
+es sumamente importante
+que se identifiquen las notificaciones más urgentes o relevantes. Por este
+motivo, Android cuenta
+con un algoritmo de clasificación más sofisticado para las notificaciones, que tiene en cuenta lo siguiente:</p>
+
+<ul>
+  <li> La marca de tiempo y la prioridad especificada en la aplicación.</li>
+  <li> Si la notificación interrumpió al usuario recientemente con un sonido o una
+vibración. (Es decir,
+ si el teléfono emitió un sonido y el usuario desea saber "¿Qué
+pasó?", en la pantalla de bloqueo se debe
+ proporcionar una respuesta a simple vista).</li>
+  <li> Todas aquellas personas involucradas en la notificación mediante{@link android.app.Notification#EXTRA_PEOPLE}
+ y, especialmente, si son contactos preferidos.</li>
+</ul>
+
+<p>Para aprovechar aún más esta función de clasificación, enfóquese en la
+experiencia del usuario que desea
+crear, en lugar de centrarse en algún punto importante de la lista.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
+
+  <p class="img-caption" style="margin-top:10px">Las notificaciones de Gmail
+poseen una prioridad predeterminada, por lo que
+ normalmente clasifican los mensajes de una aplicación de mensajería instantánea como Hangouts, pero
+realizan
+ un cambio de prioridad temporal cuando ingresan nuevos mensajes.
+  </p>
+
+
+<h3>En la pantalla de bloqueo</h3>
+
+<p>Como las notificaciones son visibles en la pantalla de bloqueo, la privacidad del usuario es un aspecto
+especialmente
+importante. Por lo general, las notificaciones contienen información confidencial y
+no necesariamente deben ser visibles
+para cualquier persona que agarre el dispositivo y encienda la pantalla.</p>
+
+<ul>
+  <li> En el caso de los dispositivos que posean una pantalla de bloqueo segura (PIN, patrón o contraseña), la interface está formada por
+ partes públicas y privadas. La interfaz pública se puede mostrar en una pantalla de bloqueo segura y,
+ por ende, cualquier persona puede verla. La interfaz privada es el mundo detrás de esa pantalla de bloqueo y 
+ solo se revela cuando el usuario se registra en el dispositivo.</li>
+</ul>
+
+<h3>Control del usuario sobre la información que se muestra en la pantalla de bloqueo segura</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
+      <p class="img-caption">
+    Notificaciones en la pantalla de bloqueo, en la que el contenido se revela luego de que el usuario desbloquea el dispositivo
+  </p>
+</div>
+
+<p>Cuando se configura una pantalla de bloqueo segura, el usuario puede decidir ocultar los
+detalles confidenciales de dicha pantalla. En este caso, la IU del sistema
+analiza el <em>nivel de visibilidad</em> de la notificación para decidir
+qué información se puede mostrar de forma segura.</p>
+<p> Para controlar el nivel de visibilidad, realice una llamada a
+<code><a
+href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>
+ y especifique uno de los siguientes valores:</p>
+
+<ul>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>.
+Se muestra todo el contenido de la notificación.
+  Esta es la opción predeterminada del sistema si no se especificó el grado de visibilidad.</li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
+En la pantalla de bloqueo se muestra la información básica sobre la existencia de esta notificación, incluido 
+el icono y el nombre de la aplicación a través de la cual se publicó. No se muestra el resto de los detalles de la notificación.
+A continuación, especificamos algunos puntos que se deben tener en cuenta:
+  <ul>
+    <li> Si desea proporcionar una versión pública diferente de su notificación
+para que el sistema la muestre en una pantalla de bloqueo segura, suministre un
+objeto de notificación de reemplazo en el campo <code><a
+href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>
+.
+    <li> Mediante esta configuración, su aplicación puede crear una versión resumida del
+contenido que sigue siendo útil, pero que no revela información personal. Considere el ejemplo de una
+aplicación de SMS cuyas notificaciones incluyen el texto del SMS, el nombre del remitente y el icono del contacto.
+Esta notificación debe ser <code>VISIBILITY_PRIVATE</code>, pero <code>publicVersion</code> podría
+seguir conteniendo información útil como "3 mensajes nuevos", sin que se muestren otros detalles
+de identificación.
+  </ul>
+  </li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>. Se muestra solo la menor cantidad de información posible; se excluye incluso
+el icono de la notificación.</li>
+</ul>
+<h2 style="clear:both" id="notifications_on_android_wear">Notificaciones en
+Android Wear</h2>
+
+<p>Las notificaciones y sus <em>acciones</em> se conectan de forma predeterminada con los dispositivos con Wear.
+Los desarrolladores pueden controlar qué notificaciones se conectan desde el
+teléfono hacia el reloj
+y viceversa. Los desarrolladores también pueden controlar qué acciones se conectan. Si
+en su aplicación se incluyen
+acciones que no se pueden realizar con una sola pulsación, oculte dichas acciones
+en su notificación para Wear
+o considere anclarlas a una aplicación de Wear. De este modo, el usuario podrá
+finalizar con la acción desde el
+reloj.</p>
+
+<h4>Conexión entre notificaciones y acciones</h4>
+
+<p>Mediante un dispositivo conectado, como un teléfono, es posible conectar las notificaciones con un dispositivo con Wear, para que las
+notificaciones se muestren allí. De modo similar, también es posible conectar acciones para que el usuario pueda ejecutarlas
+directamente desde las notificaciones en los dispositivos con Wear.</p>
+
+<p><strong>Conexión</strong></p>
+
+<ul>
+  <li> Nuevos mensajes instantáneos</li>
+  <li> Acciones de una sola pulsación como Hacer +1, Me gusta o Favorito</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
+
+<p><strong>Sin conexión</strong></p>
+
+<ul>
+  <li> Notificaciones de podcasts que llegaron recientemente</li>
+  <li> Acciones que se asignan a funciones que no se pueden ejecutar desde el reloj</li>
+</ul>
+
+
+
+<p><h4>Acciones únicas diseñadas para Wear</h4></p>
+
+<p>Existen algunas acciones que solo puede realizar en Wear. Entre estas, se incluyen las siguientes:</p>
+
+<ul>
+  <li> listas rápidas de respuestas predeterminadas como "Vuelvo enseguida";</li>
+  <li> acciones que se abren desde el teléfono;</li>
+  <li> un "Comentario" o una acción de "Respuesta" que activa la pantalla de entrada de voz;</li>
+  <li> acciones que lanzan aplicaciones específicas de Wear.</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
diff --git a/docs/html-intl/intl/es/distribute/googleplay/about.jd b/docs/html-intl/intl/es/distribute/googleplay/about.jd
new file mode 100644
index 0000000..96faf49
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/about.jd
@@ -0,0 +1,367 @@
+page.title=La oportunidad de Google Play
+meta.tags="visibility, growth, distributing"
+page.tags="play, apps, distributing, publishing"
+page.metaDescription=Miles de millones de descargas por mes y en aumento. Exhibe tus aplicaciones a los usuarios en la escala de Google.
+page.image=/distribute/images/about-play.jpg
+
+@jd:body
+
+    <div id="qv-wrapper">           
+  <div id="qv">
+  <h2>Acerca de Google Play</h2>
+    <ol style="list-style-type:none;">
+      <li><a href="#reach">Alcance mundial, crecimiento rápido</a></li>
+      <li><a href="#ratings-reviews">Calificaciones y reseñas de usuarios</a></li>
+      <li><a href="#category-browsing">Exploración por categoría</a></li>
+      <li><a href="#search">Búsqueda</a></li>
+      <li><a href="#top-charts-and-lists">Cuadros y listas principales</a></li>
+      <li><a href="#featured-staff-picks">Aplicaciones destacadas, seleccionadas por el equipo, colecciones e insignias</a></li>
+      <li><a href="#product-detail-pages">Páginas de directorio de la tienda</a></li>
+      <li><a href="#related-resources">Recursos relacionados</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  Google Play es la tienda más importante de distribución de aplicaciones para Android. Cuando
+ publicas en Google Play, exhibes tus aplicaciones a una enorme base de clientes activos
+ de Android en más de 190 países y territorios de todo el
+ mundo.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-about-0.jpg" alt="Google Play on an Android Tablet" style="width:480px;position:relative" />
+</div>
+
+<p>
+  Google Play es una parte central de la experiencia Android. Los nuevos usuarios
+ personalizan su contenido con aplicaciones, juegos y otros contenidos de Google Play.
+  Los usuarios existentes regresan con frecuencia para ver qué hay de nuevo y las últimas tendencias. Descargar
+ nuevas aplicaciones es extremadamente cómodo y rápido; Google Play envía aplicaciones a los
+ dispositivos del usuario instantáneamente de forma inalámbrica.
+</p>
+
+<p>
+  Google Play es también el destino principal de los usuarios web. Cualquier persona que tenga un explorador
+ puede explorar Google Play en la Web. Los usuarios de Android incluso pueden comprar e instalar
+ las aplicaciones que deseen y Google Play las inserta automáticamente en sus dispositivos
+ sin la necesidad de utilizar cables.
+</p>
+
+<p>
+  La accesibilidad y conveniencia del sitio web de Google Play te ofrece nuevas
+ formas de dirigir tráfico a tus productos desde diferentes orígenes, como anuncios en línea,
+ búsquedas en la Web e interconexión. Google Play fue diseñado para conectar a los usuarios con
+ aplicaciones y juegos increíbles. Proporciona canales clave para que tu aplicación se destaque y
+ gane terreno en el mercado.
+</p>
+
+<div class="headerLine">
+  <h2 id="ratings-reviews">
+    Calificaciones y reseñas de usuarios
+  </h2>
+
+
+</div>
+
+<p>
+  Los usuarios potenciales toman en cuenta las calificaciones y las reseñas como indicadores clave de la calidad de una
+ aplicación. Mediante la calificación de aplicaciones en una escala de una a cinco estrellas y la publicación de reseñas, los usuarios de
+ Android muestran su agradecimiento por las aplicaciones que descargaron.
+</p>
+
+<p>
+  <strong>La calificación de tu aplicación es uno de los factores más importantes que influyen en
+ su clasificación</strong> en las listas de Google Play y en los resultados de búsqueda. También es
+ una de las métricas clave en las que se pone su atención el personal editorial para seleccionar aplicaciones
+ y juegos con el objetivo de promocionarlos en la tienda.
+</p>
+
+<div class="img" style="padding: 1em auto;width:96%;">
+  <img src="{@docRoot}images/gp-rating-web.png" style="border:1px solid #ddd;">
+</div>
+
+<div class="headerLine">
+  <h2 id="category-browsing">
+    Exploración por categoría
+  </h2>
+
+
+</div>
+
+<p>
+  Cuando publicas una aplicación en Google Play, seleccionas la categoría en la que quieres que los
+ usuarios encuentren tu aplicación. Hay más de 30 categorías disponibles. Dentro de cada
+ categoría, las aplicaciones se clasifican según una combinación de calificaciones, reseñas,
+ descargas, país y otros factores.
+</p>
+
+<div class="headerLine">
+  <h2 id="search">
+    Búsqueda
+  </h2>
+
+
+</div>
+
+<p>
+  La búsqueda en Google Play permite a los usuarios encontrar una aplicación o un juego rápidamente. La búsqueda utiliza
+ una heurística potente para sugerir términos a medida que el usuario escribe, y ofrece vínculos
+ directos a aplicaciones en forma de sugerencias. En los resultados, los usuarios encuentran en primer lugar las aplicaciones
+ más relevantes y populares.
+</p>
+
+<div class="headerLine">
+  <h2 id="top-charts-and-lists">
+    Cuadros y listas principales
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-top.jpg">
+</div>
+
+<p>
+  Los cuadros de las aplicaciones principales mantienen a los usuarios en contacto con lo que es popular y con las tendencias entre los usuarios de
+ Android, directamente desde las páginas de inicio de aplicaciones y juegos. Los cuadros se actualizan
+ varias veces por día en función de la actividad de descarga reciente. A medida que
+ aumentan las calificaciones y la actividad de descarga de una aplicación, esa aplicación puede ascender de posición en los cuadros.
+</p>
+
+<p>
+  Para lograr que los cuadros sean lo más relevantes posible para los usuarios alrededor del mundo, en los
+ países donde Google Play es más popular también hay cuadros específicos para el país. A medida que tus
+ aplicaciones van ganando terreno y generan un impulso en las descargas y las calificaciones, ascienden en
+ uno o más de los cuadros de las aplicaciones principales, e incluso adquieren mayor exposición.
+</p>
+
+<table style="width:50%;">
+  <tr>
+    <td>
+      Principales gratis
+    </td>
+    <td>
+      Listas de aplicaciones y juegos gratuitos
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Principales pagas
+    </td>
+    <td>
+      Listas de aplicaciones y juegos pagos
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Principales en ingresos
+    </td>
+    <td>
+      Ingresos brutos, gratis o pagas
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Principales nuevas gratis
+    </td>
+    <td>
+      Menos de 30 días de antigüedad
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Principales nuevas pagas
+    </td>
+    <td>
+      Menos de 30 días de antigüedad
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Tendencia
+    </td>
+    <td>
+      Recién llegadas con gran cantidad de instalaciones
+    </td>
+  </tr>
+</table>
+
+<div class="headerLine">
+  <h2 id="featured-staff-picks">
+    Destacadas, seleccionadas por el equipo, colecciones e insignias
+  </h2>
+
+
+</div>
+
+<p>
+  El equipo editorial de Google Play se dedica a captar la atención de los usuarios
+ con las mejores aplicaciones y marcar la pauta para la calidad de las aplicaciones en toda la tienda.
+  Evalúan constantemente aplicaciones en todo Google Play para encontrar no solo las
+ mejores aplicaciones y juegos, sino también "diamantes en bruto" que
+ desean que más personas vean. El equipo promociona aplicaciones excelentes en las colecciones
+ <em>Destacadas</em>, <em>Seleccionadas por el equipo</em>, y otras.
+</p>
+
+<p>
+  Tú no puedes nominar tu aplicación para que aparezca entre las destacadas, pero el equipo supervisa constantemente
+ Google Play para detectar aplicaciones de excelencia. Si creas una aplicación que los usuarios encuentren genial y que
+ se vea increíble en los dispositivos Android, el equipo editorial lo notará.
+</p>
+
+<h3 id="featured-staff-picks2">
+  Destacadas y seleccionadas por el equipo
+</h3>
+
+<p>
+  Cada semana, el personal editorial de Google Play selecciona un nuevo grupo de aplicaciones para
+ promocionar en sus colecciones populares <em>Destacadas</em> y <em>Seleccionadas por el equipo</em>
+.
+</p>
+
+<p>
+  Las colecciones <em>Destacadas</em> resaltan los títulos de aplicaciones y juegos más nuevos e increíbles
+ disponibles para Android. La lista también incluye las mejores aplicaciones y las
+ más populares en las principales categorías. <em>Seleccionadas por el equipo</em>
+ incluye todas las aplicaciones y los juegos recientemente destacados en Google Play. A fin de incluir a los
+ usuarios de tablets, una colección especial de <em>Seleccionadas por el equipo</em> destaca las mejores
+ aplicaciones para tablets Android.
+</p>
+
+<table style="text-align:center;margin:1.5em 0;">
+  <tr>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks1.jpg">
+      <p>
+        Destacadas
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks2.jpg">
+      <p>
+        Colección
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks3.jpg">
+      <p>
+        Selección de los editores
+      </p>
+    </td>
+  </tr>
+</table>
+
+<h3 id="collections">
+  Colecciones de aplicaciones
+</h3>
+
+<p>
+  De vez en cuando, el personal editorial reúne una colección de aplicaciones y
+ juegos en función de un tema o evento de temporada. Los usuarios, atraídos por la exactitud de la colección,
+ con frecuencia usan esas listas para seleccionar aplicaciones.
+</p>
+
+<p>
+  El personal editorial selecciona aplicaciones para la promoción de colecciones;
+ se trata de aplicaciones de alta calidad que exhiben lo mejor de Android en teléfonos y tablets. El
+ personal también busca aplicaciones que puedan realizar una contribución interesante o única
+ a la colección en su totalidad.
+</p>
+
+<h3 id="editors-choice">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/editorschoice_ann.png"> Selección de los editores
+</h3>
+
+<p>
+  <em>Selección de los editores</em> es una colección exclusiva de aplicaciones que destaca algunas
+ de las mejores aplicaciones disponibles en Android. Los editores seleccionan las aplicaciones por su
+ calidad y excelente interfaz de usuario, gran popularidad y uso innovador de las
+ funciones de Android.
+</p>
+
+<p>
+  Las aplicaciones escogidas para <em>Selección de los editores</em> también reciben una insignia que se
+ exhibe cada vez que se visualiza el nombre de la aplicación en Google Play.
+</p>
+
+<h3 id="top-developer">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/topdev_ann.png"> Desarrollador principal
+</h3>
+
+<p>
+  Desarrollador principal es una insignia que reconoce a los desarrolladores establecidos y respetados por su
+ compromiso con el lanzamiento de aplicaciones innovadoras y de alta calidad en Android.
+  El personal editorial de Google Play otorga la insignia de Desarrollador principal
+ periódicamente en función del historial de trabajo del desarrollador.
+</p>
+
+<p>
+  La insignia de Desarrollador principal aparece junto al nombre del desarrollador dondequiera que
+ se exhiba en Google Play. La insignia denota el reconocimiento continuo de todas las
+ aplicaciones del desarrollador. Implica un nivel adicional de confianza y seguridad
+ por parte de los usuarios en los productos de un desarrollador.
+</p>
+
+<div class="headerLine">
+  <h2 id="product-detail-pages">
+    Páginas de directorio de la tienda
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-listing.jpg">
+</div>
+
+<p>
+  La vidriera de tu aplicación en Google Play es su <em>página de directorio de la tienda</em>: una página
+ colorida y llena de contenido que te permite promocionar tu aplicación, que destaca sus calificaciones y
+ reseñas y muestra lo que tu aplicación puede hacer.
+</p>
+
+<p>
+  El directorio de tu tienda es a donde acuden tus usuarios para averiguar todo sobre la
+ aplicación. Cuando ven tu aplicación en los resultados de búsqueda, en los cuadros de las principales, en las listas
+ de categorías y en las colecciones, un solo toque los lleva directamente al directorio de la tienda.
+</p>
+
+<p>
+  Administra tu página de detalles del producto en la <a href="https://play.google.com/apps/publish/">Consola para desarrolladores de Google Play</a>
+ desde cualquier explorador. Inicia sesión para cargar o actualizar tus recursos de marca e
+ ingresa los detalles de tu producto en los idiomas de los mercados donde distribuyes.
+</p>
+
+<p>
+  Cuando realizas una publicación, Google Play agrega la calificación y las reseñas de tu aplicación, así como vínculos a tus
+ otros productos y más. También se asegura de que la página de directorio de tu tienda se vea
+ genial en teléfonos, tablets y en un explorador web.
+</p>
+
+<p>
+  Puedes vincular usuarios web directamente a tu página de detalles del producto desde fuera de
+ Google Play; por ejemplo, desde tu sitio web, y agregar campañas, reseñas, publicaciones en
+ redes sociales y más. Consulta <a href="{@docRoot}distribute/tools/promote/linking.html">Cómo vincular tus
+ productos</a> para averiguar cómo hacerlo.
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="headerLine">
+<h2>Recursos relacionados</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="4"></div>
+    </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/distribute/googleplay/auto.jd b/docs/html-intl/intl/es/distribute/googleplay/auto.jd
new file mode 100644
index 0000000..a2a2943
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/auto.jd
@@ -0,0 +1,230 @@
+page.title=Distribución para Android Auto
+page.image=/design/auto/images/auto-overview.png
+meta.tags="auto", "publish", "quality"
+page.tags="auto", "publish", "googleplay"
+page.metaDescription=Distribuye tus aplicaciones y contenido para Android Auto.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Cómo participar</h2>
+<ol>
+<li><a href="#understand_guidelines">Comprende las pautas</a></li>
+<li><a href="#develop_app">Desarrolla una aplicación excelente para Auto</a></li>
+<li><a href="#test_app">Prueba la calidad de tu aplicación para Auto</a></li>
+<li><a href="#opt_in">Acepta los términos</a></li>
+<li><a href="#track_review">Realiza un seguimiento de tu revisión</a></li>
+</ol>
+
+<h2>También deberías leer</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las aplicaciones para Auto</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Si desarrollaste una aplicación excelente, Android Auto y Google Play pueden ayudarte a
+ llevarla directo a los vehículos de los usuarios. Puedes
+ ampliar tus aplicaciones nuevas o existentes para que sean compatibles con Auto y luego publicarlas en Google Play usando
+ herramientas y procesos ya conocidos.
+</p>
+
+<p>
+  Para comenzar, repasa las secciones de este documento para aprender a
+ distribuir a los usuarios tus aplicaciones para Auto a través de Google Play. Asegúrate de leer
+ <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las aplicaciones para Auto</a>
+ para obtener información sobre las pautas de utilidad, calidad y seguridad que tu aplicación debe
+ cumplir. Cuando tu aplicación esté lista, puedes aceptar los términos en la Consola para desarrolladores y cargar tu
+ APK para someterlo a revisión.
+</p>
+
+<h2 id="how_to_participate">
+  Cómo participar
+</h2>
+
+<p>
+  Google Play te permite distribuir aplicaciones para utilizar en vehículos. Puedes desarrollar y publicar mediante el uso de tu
+ cuenta existente en la Consola para desarrolladores y tu configuración actual para distribución y fijación de precios. Participar
+ es fácil; las siguientes secciones describen el proceso.
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-auto-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1. Comprende las pautas y los requisitos
+</h3>
+
+<p>
+  Si quieres prepararte para un lanzamiento exitoso en Android Auto, comienza por revisar las
+ pautas para crear experiencias excelentes en Auto. Consulta las <a href="{@docRoot}design/auto/index.html">Pautas de diseño para Android Auto</a> para obtener ideas acerca de
+ cómo ampliar tu aplicación para que sea compatible con Auto y detalles sobre diseño y utilidad.
+</p>
+
+<p>
+  Cuando comiences a diseñar tu experiencia para Auto, asegúrate de leer y
+ comprender los criterios de calidad de las aplicaciones para Auto. Únicamente las aplicaciones compatibles con Auto
+ se designarán como aplicaciones para Auto en Google Play; tus aplicaciones pueden participar
+ si cumplen con un conjunto de criterios de calidad básicos. Consulta
+ <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad
+ de las aplicaciones para Auto</a> para obtener información detallada.
+</p>
+
+<h3 id="develop_app">2. Desarrolla una aplicación excelente para Auto</h3>
+
+<p>
+  Una aplicación excelente para Auto es aquella que se diseña para utilizar en vehículos y aprovecha las
+ capacidades de Android Auto. La aplicación ofrece una experiencia de alta calidad mientras el usuario está conduciendo;
+ por ejemplo, permite reproducir contenido de audio o acceder a mensajes.
+</p>
+
+<p>
+  Mientras consideras la posibilidad de desarrollar una aplicación para Auto, lee la <a href="{@docRoot}training/auto/start/index.html">documentación para desarrolladores</a> y las
+ pautas de utilidad, y considera aplicarlas en la mayor medida
+ posible. Asegúrate de diseñar una gran experiencia y cumplir nuestras pautas para evitar la
+ distracción del conductor.
+</p>
+
+<p>
+  Debes ofrecer tu experiencia para Auto como parte de tu aplicación actual para teléfonos, tablets y otros
+ dispositivos, con el mismo nombre de paquete y el mismo directorio de la tienda.
+</p>
+
+<h3 id="test_app">3. Prueba la calidad de tu aplicación para Auto</h3>
+
+<p>
+  Tus aplicaciones para Auto deben estar diseñadas para que funcionen bien, se vean increíbles en el vehículo
+ y ofrezcan la mejor experiencia de usuario posible. Google Play exhibirá aplicaciones para Auto seleccionadas de
+ alta calidad a fin de que los usuarios puedan encontrarlas fácilmente en Google Play. Aquí te mostramos
+ cómo puedes participar y ofrecer una aplicación para Android Auto que los usuarios disfrutarán:
+</p>
+
+<ul>
+  <li>Cumple con las pautas de <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las
+ aplicaciones para Auto</a>.
+    <ul>
+      <li>Sigue nuestras mejores prácticas en el <a href="{@docRoot}training/auto/index.html">
+ Desarrollo de aplicaciones para Auto</a>.</li>
+      <li>Asegúrate de que tu aplicación cumpla con los criterios de <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las aplicaciones para Auto</a>.</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4. Acepta los términos de Android Auto y publica</h3>
+
+<p>
+  Antes de que puedas cargar tu APK y publicar la aplicación para someterla a revisión, el propietario de la cuenta de desarrollador
+ debe aceptar los términos de
+ <a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html">Android
+ Auto</a> en la sección <strong>Fijación de precios y distribución</strong> de la
+ Consola para desarrolladores. Aceptar los términos significa que quieres que tu aplicación esté disponible
+ para los usuarios de Android Auto a través de Google Play, y que
+ tu aplicación cumple las pautas de <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad
+ de las aplicaciones para Auto</a>.
+</p>
+
+<p>
+  Solo podrás cargar tu aplicación para Auto después de haber aceptado los términos. A continuación se indica
+ qué aplicaciones están destinadas a ser aplicaciones para Auto:
+</p>
+
+<ul>
+  <li>El manifiesto de tu aplicación debe declarar la entrada de metadatos <code>com.google.android.gms.car.application</code>
+ con las capacidades de Auto que usa la aplicación. Para obtener más información
+ acerca de cómo configurar tu aplicación para utilizar con Android Auto, consulta
+ <a href="{@docRoot}training/auto/start/index.html#auto-metadata">Primeros pasos con Auto</a>.
+  </li>
+</ul>
+
+<p>
+  Una vez que hayas creado tu APK, esté listo para el lanzamiento y lo hayas probado para asegurarte de que cumple
+ todas las pautas de <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las
+ aplicaciones para Auto</a>, carga la aplicación a la Consola para desarrolladores. Actualiza el directorio de tu
+ tienda con información adicional sobre la funcionalidad Auto y establece opciones de distribución según
+ sea necesario. Si no sabes cómo prepararte para el lanzamiento en Google Play,
+ consulta la <a href="{@docRoot}distribute/googleplay/publish/preparing.html">Lista de comprobación
+ para el lanzamiento.</a>
+</p>
+
+<p>
+  Después de aceptar los términos y guardar los cambios, puedes cargar y publicar tu aplicación como lo haces habitualmente.
+  Antes de que tu aplicación esté disponible para los usuarios de Android Auto, Google Play envía
+ tu aplicación para revisión conforme a los criterios de <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las aplicaciones para Auto</a>
+ y te notifica el resultado. Si se aprueba tu aplicación, Google Play la exhibe
+ a los usuarios de Android Auto. Consulta la siguiente sección para obtener información detallada acerca de cómo realizar un seguimiento del estado
+ de aprobación de tu aplicación.
+</p>
+
+<p>
+  Ten en cuenta que la revisión afecta la disponibilidad de tu aplicación para otros dispositivos en la 
+ Play Store de Google; por ejemplo, para teléfonos y tablets.
+  Si tienes una aplicación actual que incluya actualizaciones para el componente de teléfono/tablet,
+ el componente de Android Auto debe pasar la revisión antes de que la aplicación actualizada
+ esté disponible en la Play Store de Google.
+</p>
+
+<p>
+  Aquí te mostramos los pasos que debes seguir para aceptar los términos de Android Auto en la Consola para desarrolladores:
+</p>
+
+<ol>
+  <li>Asegúrate de que tu aplicación cumpla con los criterios de <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las aplicaciones para Auto</a>.
+  </li>
+
+  <li>En la página <strong>Todas las aplicaciones</strong>, haz clic en la aplicación que quieres publicar.
+  </li>
+
+  <li>En <strong>Fijación de precios y distribución</strong>, desplázate hacia abajo hasta que encuentres <em>Android Auto</em> y el
+ vínculo a los términos.
+  </li>
+
+  <li>Haz clic en el vínculo <em>términos</em>.
+  </li>
+
+  <li>Lee los términos y haz clic en <em>Acepto</em>.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png">
+  <p class="caption">
+    <strong>Acepta los términos para Auto:</strong> Incluye tu aplicación en Android Auto; para ello, debes aceptar los
+ términos en la Consola para desarrolladores.
+  </p>
+</div>
+
+<h3 id="track_review">5. Realiza un seguimiento de tu revisión</h3>
+
+<p>
+  Tu aplicación se someterá a revisión para determinar si cumple con las pautas de distracción del conductor y con los
+ criterios técnicos y de calidad que se describen más arriba. Este proceso de revisión detallada puede demorar
+ más tiempo que el que se demora habitualmente cuando envías aplicaciones para teléfono/tablet.
+  Hasta que se apruebe la aplicación, no podrás publicar en la Play Store de Google la aplicación ni actualizaciones para la aplicación.
+  Después de una revisión exitosa, se publicará tu aplicación y estará disponible en la Play
+ Store de Google.
+</p>
+
+<p>Si no se acepta tu aplicación, recibirás una <strong>notificación por correo electrónico enviada a tu
+ cuenta de desarrollador</strong> con un resumen de las áreas que debes abordar. Una vez que
+ realices los ajustes necesarios, puedes cargar una nueva versión de tu aplicación a la Consola para
+ desarrolladores.
+</p>
+
+<p>
+  Ten en cuenta que si la aplicación enviada es una actualización para una aplicación existente y tu aplicación actualizada no cumple
+ los criterios de revisión, se rechazará la actualización y la aplicación existente continuará publicada en la Play
+ Store de Google.
+</p>
+
+<p>Para comprender cómo se evalúan tus aplicaciones, consulta el documento <a href="{@docRoot}distribute/essentials/quality/auto.html">Calidad de las aplicaciones para Auto</a>. </p>
+
+
+  <h3>Recursos relacionados</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:autolanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/es/distribute/googleplay/developer-console.jd
new file mode 100644
index 0000000..fcf5e44d
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/developer-console.jd
@@ -0,0 +1,584 @@
+page.title=Consola para desarrolladores
+page.metaDescription=Aprende acerca de la Consola para desarrolladores, el lugar desde donde publicarás tu aplicación en Google Play.
+page.image=/distribute/images/developer-console.jpg
+Xnonavpage=true
+
+@jd:body
+    
+    <div id="qv-wrapper">           
+  <div id="qv">
+    <h2>Características de la publicación</h2>
+    <ol>
+      <li><a href="#allapps">Todas las aplicaciones</a></li>
+      <li><a href="#account-details">Detalles de tu cuenta</a></li>
+      <li><a href="#merchant-account">Cómo vincular tu cuenta de comerciante</a></li>
+      <li><a href="#multiple-user-accounts">Múltiples cuentas de usuario</a></li>
+      <li><a href="#alpha-beta">Pruebas alfa y beta</a></li>
+      <li><a href="#staged-rollouts">Implementaciones por fases</a></li>
+      <li><a href="#multiple-apk">Compatibilidad con múltiples APK</a></li>
+      <li><a href="#selling-pricing-your-products">Venta y fijación de precios</a></li>
+      <li><a href="#in-app-products">Productos ofrecidos en la aplicación</a></li>
+      <li><a href="#distribution-controls">Controles de distribución</a></li>
+      <li><a href="#reviews-reports">Reseñas de usuarios, informes de errores</a></li>
+      <li><a href="#app-stats">Estadísticas de la aplicación</a></li>
+      <li><a href="#related-resources">Recursos relacionados</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  La <a href="https://play.google.com/apps/publish/">Consola para desarrolladores de
+ Google Play</a> es el lugar donde realizas las operaciones de publicación y donde tienes tus herramientas.
+</p>
+<!-- <img src="{@docRoot}images/gp-dc-startscreen.jpg" style="width:480px;" /> -->
+<img src="{@docRoot}images/gp-devconsole-home.png" style="width:480px;">
+<p>
+  Carga aplicaciones, crea páginas para tus productos, configura precios y distribución, y
+ publica. Puedes administrar todas las fases de publicación en Google Play a través de la
+ Consola para desarrolladores, desde cualquier explorador web.
+</p>
+
+<p>
+  Una vez que te hayas <a href="{@docRoot}distribute/googleplay/start.html">registrado</a> y recibas la
+ verificación por correo electrónico, puedes iniciar sesión en tu Consola para desarrolladores de Google Play.
+</p>
+
+<div class="headerLine">
+  <h2 id="allapps">
+    Todas las aplicaciones
+  </h2>
+
+
+</div>
+
+<p>
+  Comienza en Todas las aplicaciones, que te proporciona un vistazo rápido de tus aplicaciones y
+ te permite saltar a estadísticas, reseñas y detalles del producto, o cargar una aplicación nueva.
+</p>
+
+<div style="padding:1em 0em 0em 0em;">
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine" style="margin-top:-6px">
+  <h2 id="account-details">
+    Detalles de tu cuenta
+  </h2>
+
+
+</div>
+
+<p>
+  Especifica información básica del perfil de desarrollador sobre ti o tu compañía en la
+ página de detalles de la cuenta. Esto te identifica ante Google Play y tus
+ clientes. Puedes volver en cualquier momento para editar la información y cambiar tu
+ configuración.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-profile.png" class="frame">
+</div>
+
+<p>
+  Tu perfil de desarrollador contiene lo siguiente:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Nombre del desarrollador, exhibido en la página del directorio de tu tienda y en otras partes de
+ Google Play.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Información de contacto, que solo Google utiliza y no está visible para tus
+ clientes.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      URL del sitio web, exhibida en la página del directorio de tu tienda.
+    </p>
+  </li>
+</ul>
+
+<p>
+  En la página de detalles de la cuenta, también puedes agregar acceso restringido para comerciantes
+ y otros equipos, registrar una cuenta de comerciante o configurar cuentas de prueba para obtener
+ licencias de Google Play.
+</p>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    Cómo vincular tu cuenta de comerciante
+  </h2>
+
+
+</div>
+
+<p>
+  Si quieres vender aplicaciones y productos integrados en la aplicación, vincula tu cuenta de comerciante en Google Wallet
+ a tu perfil de desarrollador. Google Play utiliza la cuenta de comerciante
+ vinculada para la identificación financiera e impositiva, como también para el procesamiento mensual de los pagos
+ provenientes de las ventas.
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-user-accounts">
+    Múltiples cuentas de usuario
+  </h2>
+
+
+</div>
+
+<p>
+  Configura cuentas de usuario para que otros miembros del equipo puedan acceder a diferentes partes de tu
+ Consola para desarrolladores.
+</p>
+
+<div style="width:550px;">
+  <img src="{@docRoot}images/gp-dc-invite.png" class="frame">
+</div>
+
+<p>
+  La primera cuenta registrada es la del <em>propietario de la cuenta</em>, con acceso pleno
+ a todas las partes de la consola. El propietario puede agregar <em>cuentas de usuario</em> y
+ administrar el acceso a la consola.
+</p>
+
+<p>
+  Por ejemplo, un propietario puede permitir el acceso de los usuarios a la configuración de publicación y de la
+ aplicación, pero no a los informes financieros. Aprende ahora a <a href="https://support.google.com/googleplay/android-developer/answer/2528691">configurar
+ múltiples cuentas</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="store-listing-details">
+    Detalles del directorio de la tienda
+  </h2>
+
+
+</div>
+
+<p>
+  Utiliza la Consola para desarrolladores para configurar una <em>página de Directorio de la tienda</em>. Esa página será
+ la página de inicio de tu aplicación en Google Play. Es la página que los usuarios ven en sus teléfonos
+ celulares o en la Web y donde obtienen información sobre tu aplicación y la descargan.
+</p>
+
+<p>
+  Carga recursos personalizados de la marca, capturas de pantalla y videos para destacar las
+ mejores características de tu aplicación. Proporciona una descripción localizada, agrega notas acerca de la última
+ versión y más. Puedes actualizar el directorio de tu tienda en cualquier momento.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-details.png" class="frame">
+</div>
+
+<div class="headerLine">
+  <h2 id="upload-instantly-publish">
+    Carga y publica instantáneamente
+  </h2>
+
+
+</div>
+
+<p>
+  Desde la Consola para desarrolladores, puedes cargar y publicar rápidamente un archivo de paquete de
+ una aplicación para Android lista para su lanzamiento. La aplicación es un <em>borrador</em> hasta que la
+ publicas, y en ese momento Google Play comienza a exhibir la página de directorio de tu tienda y la aplicación
+ a los usuarios; tu aplicación aparece en los directorios de tiendas en solo horas,
+ no semanas.
+</p>
+
+<p>
+  Una vez que se publica tu aplicación, puedes actualizarla cuantas veces quieras: Cambia
+ los precios, la configuración y las opciones de distribución en cualquier momento, sin la necesidad
+ de actualizar el archivo binario de la aplicación.
+</p>
+
+<p>
+  A medida que agregas funciones o abordas problemas de código, puedes publicar un archivo binario actualizado
+ en cualquier momento. La nueva versión estará disponible prácticamente de inmediato, y se les comunicará
+ a los clientes existentes que hay una actualización lista para descargar. Los usuarios también pueden
+ aceptar actualizaciones automáticas para tu aplicación, de modo que tus actualizaciones se entregan
+ e instalan ni bien las publicas. Puedes cancelar la publicación de tu aplicación en cualquier
+ momento.
+</p>
+
+<div class="headerLine">
+  <h2 id="alpha-beta">
+    Pruebas alfa y beta
+  </h2>
+
+
+</div>
+
+<p>
+  Siempre es bueno obtener la opinión real de los usuarios, especialmente antes del
+ lanzamiento. Google Play facilita la distribución de versiones de tu aplicación
+ previas al lanzamiento a grupos de prueba alfa y beta en cualquier parte del mundo.
+</p>
+
+<p>
+  En la sección <strong>APK</strong> de tu Consola para desarrolladores de Google Play
+ encontrarás las pestañas <strong>Pruebas alfa</strong> y <strong>Pruebas
+ beta</strong>. Aquí puedes cargar versiones de los archivos APK de tus aplicaciones
+ y definir una lista de evaluadores como un <a href="https://support.google.com/groups/answer/46601">Grupo de Google</a> o una <a href="https://support.google.com/plus/topic/2888488">Comunidad de Google+</a>. Una vez
+ que hagas esto, recibirás una URL que enviarás a tus evaluadores,
+ desde la cual podrán acceder al programa de prueba.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-ab.png" class="frame">
+</div>
+
+<p>
+  Una vez que accedan, los evaluadores se dirigirán a la página de producto de tu aplicación, y cuando
+ descarguen la aplicación, Google Play les proporcionará la versión alfa o beta
+, según corresponda. Por cierto, si un usuario accede a ambos grupos
+ de prueba, Google Play siempre les proporcionará la versión de prueba alfa.
+</p>
+
+<p>
+  Recuerda que los usuarios no pueden proporcionar comentarios ni reseñas en las versiones alfa
+ y beta de tus aplicaciones. Para obtener sus opiniones, puedes usar el <a href="https://support.google.com/groups/answer/46601">Grupo de Google</a> o la <a href="https://support.google.com/plus/topic/2888488">Comunidad de Google+</a>, o bien
+ configurar una dirección de correo electrónico o tu propio sitio web.
+</p>
+
+<p>
+  Puedes usar estos programas de prueba para <a href="{@docRoot}distribute/essentials/optimizing-your-app.html">optimizar tus
+ aplicaciones</a>, ayudar con la <a href="{@docRoot}distribute/users/expand-to-new-markets.html">implementación en nuevos
+ mercados</a> y comenzar <a href="{@docRoot}distribute/users/build-community.html">a crear tu
+ comunidad</a>. Puedes encontrar más información acerca de cómo usar la prueba beta en la
+ <a href="{@docRoot}distribute/tools/launch-checklist.html">Lista de comprobación
+ para el lanzamiento</a> y la <a href="{@docRoot}distribute/tools/localization-checklist.html">Lista de comprobación
+ para la localización</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="staged-rollouts">
+    Implementaciones por fases
+  </h2>
+
+
+</div>
+
+<p>
+  También puedes dividir la implementación de tus aplicaciones en fases mediante la pestaña Producción en la sección
+ APK de tu Consola para desarrolladores de Google Play. Allí podrás definir el
+ porcentaje de usuarios que podrán descargar tu aplicación.
+</p>
+
+<p>
+  Organizar tu implementación en fases te ayudará a limitar el impacto de errores imprevistos o de la carga del
+ servidor y te permitirá medir la respuesta de los usuarios a través de una muestra imparcial de usuarios.
+  Durante las implementaciones en fases, los usuarios pueden calificar y reseñar tus aplicaciones, de modo que
+ si estás indeciso, comienza la implementación en un porcentaje pequeño de usuarios. Asegúrate de estar atento
+ a las reseñas negativas y responderlas.
+</p>
+
+<p>
+  Ten en cuenta que no se admiten reversiones debido a los <a href="{@docRoot}tools/publishing/versioning.html">requisitos de versión para la aplicación</a>
+ de la plataforma Android. Si necesitas realizar una reversión, considera la posibilidad de lanzar un
+ APK anterior con un nuevo número de versión. No obstante, solo se debe recurrir a esta
+ práctica como último recurso ya que los usuarios perderán el acceso a las funciones nuevas y es posible
+ que tu aplicación anterior no sea directamente compatible con los cambios realizados en el servidor o los formatos de datos,
+ por lo que debes asegurarte de ejecutar <a href="#alpha-beta">pruebas alfa y beta</a> de tus
+ actualizaciones.
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-apk">
+    Compatibilidad con múltiples APK
+  </h2>
+
+
+</div>
+
+<p>
+  En la mayoría de los casos, todo lo que necesitas es un solo paquete de aplicaciones (APK), y generalmente es la manera
+ más sencilla de administrar y mantener la aplicación. Sin embargo, si necesitas
+ proporcionar un APK distinto para diferentes dispositivos, Google Play te 
+ permite hacerlo.
+</p>
+
+<p>
+  <em>Compatibilidad con múltiples APK</em> te permite crear múltiples paquetes de aplicaciones que utilizan
+ el mismo nombre de paquete pero difieren en sus formatos de compresión de texturas OpenGL,
+ en la compatibilidad con diferentes tamaños de pantalla o en las versiones de la plataforma Android admitidas. Puedes simplemente
+ cargar todos los APK en una misma lista de productos y Google Play seleccionará
+ los mejores para proporcionárselos a los usuarios en función de las características de sus
+ dispositivos.
+</p>
+
+<p>
+  También puedes cargar hasta dos descargas secundarias para cada APK publicado,
+ incluidos múltiples APK, mediante la opción <em>Archivos de expansión de APK</em>. Cada
+ archivo de expansión puede tener un tamaño máximo de 2 GB y contener cualquier tipo de código o recursos.
+  Google Play los aloja de forma gratuita y administra la descarga de los archivos como parte
+ de la instalación habitual de la aplicación.
+</p>
+
+<div class="headerLine">
+  <h2 id="selling-pricing-your-products">
+    Venta y fijación de precios de tus productos
+  </h2>
+
+
+</div>
+
+<div class="figure-right">
+  <img src="{@docRoot}images/gp-buyer-currency.png" class="frame">
+</div>
+
+<p>
+  Tienes las herramientas que necesitas para fijar los precios de tu aplicación y de los productos que ofreces en la aplicación. La descarga
+ de tu aplicación puede ser gratuita o paga, en cuyo caso se requerirá el pago antes de poder descargarla.
+</p>
+
+<ul>
+  <li>Si publicas tu aplicación como gratuita, debe <strong>continuar siendo gratuita durante toda su
+ vida útil</strong>. Todos los usuarios en Google Play pueden descargar aplicaciones gratuitas.
+  </li>
+
+  <li>Si la publicas como paga, más adelante puedes cambiarla a gratuita. Solo los usuarios
+ que hayan registrado un método de pago en Google Play pueden comprar
+ y descargar aplicaciones pagas.
+  </li>
+</ul>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <p>
+      Consulta <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294&amp;topic=2365624&amp;ctx=topic">
+ Países admitidos para la distribución de aplicaciones</a> para obtener una lista de
+ los países donde puedes distribuir o vender tus aplicaciones.
+    </p>
+  </div>
+</div>
+
+<p>
+  También puedes ofrecer productos y suscripciones en la aplicación, independientemente
+ de que la aplicación sea gratuita o paga.  Fija precios de forma independiente para las aplicaciones pagas, los productos que se ofrecen en la aplicación y las
+ suscripciones.
+</p>
+
+<p>
+  Cuando los usuarios examinan las páginas de productos de tu aplicación o inician una compra, Google Play
+ les muestra el precio que deberán pagar en su moneda local.
+</p>
+
+<p>
+  Para cada producto, debes fijar inicialmente un precio predeterminado en tu propia moneda. Si
+ no haces más que eso, Google Play fijará automáticamente los precios locales para tu aplicación una vez al mes
+ en función del precio del dólar estadounidense.
+</p>
+
+<p>
+  No obstante, Google Play te ofrece el control total de la fijación de precios para tus
+ productos en cada país. Para comenzar, puedes establecer manualmente precios locales fijos
+ a partir del precio predeterminado mediante la función <strong>convertir precios automáticamente ahora</strong>
+. Luego puedes revisar esos precios y fijar precios nuevos para los países
+ que desees; el precio para cada país es independiente, por lo que puedes ajustar
+ un precio sin afectar los demás. Para la mayoría de los países, el precio que fijas es
+ el precio final que se cobra a los usuarios, con impuestos incluidos.
+</p>
+
+<p>
+  Para obtener más información sobre cómo fijar precios para tus aplicaciones, consulta <a href="{@docRoot}distribute/users/expand-to-new-markets.html#localize-your-google-play-listing">
+Expansión a nuevos mercados</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="in-app-products">
+    Productos ofrecidos en la aplicación
+  </h2>
+
+
+</div>
+
+<p>
+  Puedes vender productos y suscripciones en la aplicación mediante el uso de la <a href="{@docRoot}google/play/billing/index.html">Facturación integrada en la aplicación de Google Play</a> como
+ una forma de monetizar tus aplicaciones. Los productos que se ofrecen en la aplicación constituyen compras únicas, mientras que
+ las suscripciones son cargos recurrentes que se aplican mensualmente o anualmente.
+</p>
+
+<p>
+  En la sección <strong>Productos ofrecidos en la aplicación</strong> para un APK específico publicado o
+ en borrador, puedes:
+</p>
+
+<ul>
+  <li>Crear listas de productos para productos y suscripciones ofrecidos en la aplicación.
+  </li>
+
+  <li>Fijar precios.
+  </li>
+
+  <li>Publicar los productos en la aplicación o retirar los productos obsoletos.
+  </li>
+</ul>
+
+<p>
+  Para obtener información detallada acerca de cómo implementar la facturación integrada en la aplicación, consulta la documentación para desarrolladores <a href="{@docRoot}google/play/billing/index.html">Facturación integrada en la aplicación</a>
+. Puedes utilizar los productos que ofreces en la aplicación en los modelos de monetización <a href="{@docRoot}distribute/monetize/premium.html">Premium</a>, <a href="{@docRoot}distribute/monetize/freemium.html">Gratuitos</a> y <a href="{@docRoot}distribute/monetize/subscriptions.html">Suscripción</a>
+.
+</p>
+
+<div class="headerLine">
+  <h2 id="distribution-controls">
+    Controles de distribución
+  </h2>
+
+
+</div>
+
+<p>
+  Administra en qué países y territorios distribuirás tus aplicaciones. Para algunos
+ países, puedes elegir los operadores a los que quieres apuntar. También puedes ver
+ la lista de dispositivos compatibles con tu aplicación conforme a las
+ reglas de distribución declaradas en su archivo de manifiesto.
+</p>
+
+<h3 id="geotargeting">
+  Perfilamiento geográfico
+</h3>
+
+<p>
+  Puedes usar los controles de la Consola para desarrolladores de Google Play para administrar fácilmente
+ la distribución geográfica de tus aplicaciones, sin realizar ningún cambio en el
+ archivo binario de tu aplicación. Puedes especificar los países y territorios donde quieres
+ distribuir, e incluso los operadores (para algunos países).
+</p>
+
+<p>
+  Cuando los usuarios visitan la tienda, Google Play se asegura de que se encuentren en
+ uno de los países que seleccionaste antes de que puedan descargar tu aplicación. Puedes cambiar tu
+ selección de países y operadores en cualquier momento, para lo que simplemente deberás guardar los cambios en la
+ Consola para desarrolladores de Google Play.
+</p>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-supported-dev-requirements.png" class="frame">
+</div>
+
+<p>
+  Para optimizar la comercialización a usuarios alrededor del mundo, puedes <a href="{@docRoot}distribute/tools/launch-checklist.html#start-localization">localizar
+ el directorio de tu tienda</a> e incluir detalles y la descripción de tu aplicación, gráficos
+ promocionales, capturas de pantalla y más.
+</p>
+
+<h3 id="captargeting">
+  Perfilamiento de funcionalidades
+</h3>
+
+<p>
+  Google Play también te permite controlar la distribución de acuerdo con las funciones o capacidades de
+ los dispositivos en las que se base tu aplicación. Existen diversos tipos de
+ dependencias que la aplicación puede definir en su manifiesto, como características de
+ hardware, formatos de compresión de texturas OpenGL, bibliotecas, versiones de la plataforma Android
+ y otras.
+</p>
+
+<p>
+  Cuando cargas tu aplicación, Google Play lee las dependencias y configura las
+ reglas de distribución necesarias. Para obtener información técnica acerca de cómo declarar
+ dependencias, lee <a href="{@docRoot}google/play/filters.html">Filtros
+ en Google Play</a>.
+</p>
+
+<p>
+  Para determinar con precisión el control de la distribución, Google Play te permite ver todos los
+ dispositivos para los que tu aplicación está disponible en función de sus dependencias (si las hubiera). Desde la
+ Consola para desarrolladores de Google Play, puedes indicar los dispositivos admitidos e incluso
+ excluir dispositivos específicos si fuera necesario.
+</p>
+
+<div class="headerLine">
+  <h2 id="reviews-reports">
+    Reseñas de usuarios e informes de errores
+  </h2>
+
+
+</div>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-dc-reviews.png" class="frame">
+  <p class="img-caption">
+    La sección Reseñas de los usuarios te permite acceder a las reseñas de los usuarios para una aplicación
+ específica. Puedes filtrar reseñas de diversas maneras para identificar problemas con
+ mayor facilidad y brindar soporte a tus clientes de forma más eficaz.
+  </p>
+</div>
+
+<p>
+  Google Play permite a los usuarios enviar reseñas de tu aplicación de forma fácil
+ para el beneficio de otros usuarios. Las reseñas te brindan información sobre utilidad, solicitudes
+ de soporte y detalles acerca de problemas importantes de funcionalidad que
+ proporcionan tus clientes.
+</p>
+
+<p>
+  Utiliza informes de errores para depurar y mejorar tu aplicación. Puedes ver los informes
+ de errores mediante el seguimiento de la pila y otros datos, enviados automáticamente desde dispositivos
+ Android.
+</p>
+
+<div class="headerLine">
+  <h2 id="app-stats">
+    Estadísticas de la aplicación
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:500px">
+  <img src="{@docRoot}images/gp-dc-stats.png">
+  <p class="img-caption">
+    <b>Página de estadísticas de la aplicación</b>: Te muestra una variedad de estadísticas acerca del
+ rendimiento de una instalación específica de la aplicación.
+  </p>
+</div>
+
+<p>
+  Puedes obtener estadísticas detalladas acerca del rendimiento de la instalación de tu aplicación.
+</p>
+
+<p>
+  Consulta las métricas de instalación obtenidas por usuarios y por dispositivos
+ exclusivos. Visualiza la cantidad de instalaciones activas, instalaciones totales, actualizaciones, instalaciones y
+ desinstalaciones diarias, y métricas acerca de las calificaciones.
+</p>
+
+<p>
+  Sumérgete en los números de instalación por métrica, incluida la versión de
+ plataforma de Android, el dispositivo, el país, el idioma, la versión de la aplicación y el operador. Visualiza los
+ datos de instalación para cada dimensión en cuadros con línea de tiempo.
+</p>
+
+<p>
+  Esos cuadros resaltan los picos de instalación de tu aplicación y las tendencias a largo plazo,
+  y te ayudan a comprender el comportamiento de aceptación del usuario, a relacionar estadísticas con
+ promociones, a observar el efecto de las mejoras realizadas a la aplicación y otros factores. Concéntrate
+ en los datos de una dimensión al agregar puntos específicos a la línea de tiempo.
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="dynamic-grid">
+<div class="headerLine">
+<h2 id="related-resources">Recursos relacionados</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/developerconsole"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+  </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/distribute/googleplay/families/about.jd b/docs/html-intl/intl/es/distribute/googleplay/families/about.jd
new file mode 100644
index 0000000..05e1724
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/families/about.jd
@@ -0,0 +1,61 @@
+page.title=Diseñado para la familia
+page.metaDescription=Diseñado para la familia te ayuda a que cualquier familia pueda descubrir más fácilmente tus aplicaciones y juegos.
+page.image=/distribute/images/about-dff-sm.jpg
+meta.tags="families, googleplay, distribution"
+page.tags="families"
+
+@jd:body
+
+<p>
+  En algunas semanas, una nueva experiencia en Google Play centrada en la familia les ofrecerá a los
+ usuarios nuevas maneras de examinar, buscar y descubrir aplicaciones y juegos de alta calidad
+ para sus familias.
+</p>
+
+<p>
+  A fin de construir una tienda más accesible para toda la familia, se invita a los desarrolladores a incluir
+ aplicaciones y juegos orientados a la familia en el nuevo programa Diseñado para la familia. Las aplicaciones
+ que cumplan con los <a href="https://support.google.com/googleplay/android-developer/answer/6184502">requisitos
+ del programa</a> se mostrarán en la nueva experiencia para la familia, de modo que los
+ padres puedan encontrar más fácilmente aplicaciones y juegos adecuados, confiables y de alta calidad.
+</p>
+
+<img src="{@docRoot}distribute/images/about-dff-sm.jpg">
+
+<p>
+  Incluye tus aplicaciones y juegos hoy mismo con las herramientas y los procesos que actualmente
+ usas para administrar tus aplicaciones en la Consola para desarrolladores. Al incluir tus aplicaciones en el programa
+ puedes beneficiarte de una mayor capacidad de detección y de la posibilidad de mantener sus
+ categorías, calificaciones y reseñas existentes en cualquier otra parte de la Play Store
+ de Google.
+</p>
+
+<h2 id="elibibility">Elegibilidad</h2>
+
+<p>
+  Las aplicaciones que forman parte de la experiencia para toda la familia en Google Play serán más fáciles
+ de descubrir para los padres y las familias que esperan que las aplicaciones sean aptas para
+ determinadas edades. El programa Diseñado para la familia tiene como objetivo la inclusión de
+ aplicaciones creadas para niños como también aquellas que puede disfrutar
+ toda la familia. Para poder abordar ese público, existen pautas y políticas
+ específicas que tus aplicaciones deben cumplir y que se evaluarán en una revisión de contenido de
+ las aplicaciones.
+</p>
+
+<p>
+  Asegúrate de conocer las políticas que tu aplicación debe
+ cumplir. Esas políticas incluyen <a href="http://play.google.com/about/developer-content-policy.html">políticas
+ de contenido</a>, el <a href="http://play.google.com/about/developer-distribution-agreement.html">Acuerdo de
+ distribución para desarrolladores</a> y el <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">
+Anexo de DDA para Diseñado para la familia</a>.
+</p>
+
+<p>
+  Tu aplicación también debe cumplir los requisitos del <a href="https://support.google.com/googleplay/android-developer/answer/6184502">programa Diseñado
+ para la familia</a> que se indican en el Centro de ayuda para desarrolladores de
+ Google Play.
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">A continuación: Inclusión</a>
+</div>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/es/distribute/googleplay/families/faq.jd
new file mode 100644
index 0000000..ecad47c
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/families/faq.jd
@@ -0,0 +1,329 @@
+page.title=Preguntas frecuentes
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=Preguntas y respuestas acerca de Diseñado para familias
+
+@jd:body
+
+    <style>
+  dt {
+    font-weight:bold;
+  }
+  </style>
+  
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>En este documento:</h2>
+<ol>
+  <li><a href="#review">Reseña e inclusión de aplicaciones</a></li>
+  <li><a href="#monetization">Monetización</a></li>
+  <li><a href="#other">Otras preguntas</a></li>
+</ol>
+</div>
+
+<p>
+  Las secciones a continuación proporcionan más información acerca de Diseñado para familias
+ y responde preguntas comunes que podrías tener.
+</p>
+
+
+<h2 id="review">Reseña e inclusión de aplicaciones</h2>
+
+<dl>
+<dt>¿Cómo incluyo mis aplicaciones?</dt>
+
+<dl>
+  <dd>
+    Puedes incluir tus aplicaciones en Diseñado para familias a través de la pestaña Fijación de precios y distribución
+ para tu aplicación en la Consola para desarrolladores de Google Play. Aquí te mostramos <a href="{@docRoot}distribute/googleplay/families/start.html">paso a paso
+ cómo hacerlo</a>.
+  </dd>
+
+  <dt>
+    ¿Dónde anuncio las funciones interactivas de mi aplicación? ¿Por qué recopilan
+ esta información?
+  </dt>
+
+  <dd>
+    El anuncio de las funciones interactivas forma parte del cuestionario sobre
+ clasificación de contenido. Tienes la oportunidad de revisar tus anuncios como
+ parte del flujo de inclusión en el programa Diseñado para familias. Recopilamos esta
+ información para que los usuarios puedan tomar decisiones informadas mientras evalúan tu
+ aplicación.
+  </dd>
+
+  <dt>
+    ¿Qué es COPPA?
+  </dt>
+
+  <dd>
+    COPPA es la Ley de Protección de la Privacidad Infantil en Internet de la
+ Comisión Federal de Comercio (FTC). Puedes encontrar más información en las <a href="http://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions">
+ Preguntas frecuentes de la FTC acerca de COPPA</a>. Ten en cuenta que Google Play no puede proporcionar asesoramiento legal a los desarrolladores
+ acerca de cómo cumplir con COPPA u otros estatutos en relación con niños.
+  </dd>
+
+  <dt>
+    ¿Debo proporcionar una política de privacidad actualizada y dónde lo hago?
+  </dt>
+
+  <dd>
+    Sí, debes proporcionar un vínculo a una política de privacidad constante en
+ el directorio de tu tienda y confirmar el cumplimiento con los estatutos de privacidad locales
+ en la Consola para desarrolladores. Para agregar o revisar tu política de privacidad, selecciona tu
+ aplicación en la Consola para desarrolladores y luego desplázate a la parte inferior de la sección
+ <strong>Directorio de la tienda</strong>.
+  </dd>
+
+  <dt>
+    ¿Cuántos grupos de edades puedo seleccionar?
+  </dt>
+
+  <dd>
+    Puedes seleccionar hasta dos grupos de edades adyacentes. Los grupos de edades son los siguientes: 5 años y
+ menores, de 6 a 8 años y de 9 a 12 años. No obstante, si tu aplicación está orientada a públicos
+ de niños y adultos, debes seleccionar la categoría <em>Público
+ general</em>.
+  </dd>
+
+  <dt>
+    ¿Cuántas categorías de contenido puedo seleccionar en el programa
+ Diseñado para familias?
+  </dt>
+
+  <dd>
+    Puedes seleccionar una categoría como parte del programa Diseñado para familias
+ y otra categoría para la tienda general de Google Play.
+  </dd>
+
+  <dt>
+    ¿Cuáles son las categorías de Diseñado para familias?
+  </dt>
+
+<ul>
+<li><strong>Acción y aventura</strong>: Se trata de aplicaciones o juegos orientados a la acción e incluyen de todo
+ desde juegos de carreras, aventuras de cuentos de hadas y más.
+  </li>
+
+  <li style="list-style: none"><strong>Juegos de ingenio</strong>: Esta categoría incluye juegos que
+ hacen pensar al usuario e incluye rompecabezas, juegos de coincidencias y otros juegos
+ similares.
+  </li>
+
+  <li><strong>Creatividad</strong>: Se trata de aplicaciones o juegos que estimulan la creatividad.
+  Algunos ejemplos de los tipos de aplicaciones y juegos que esperamos ver en esta categoría incluyen dibujo,
+ pintura y otros juegos donde puedas crear cosas.
+  </li>
+
+  <li><strong>Educación</strong>: Se trata de aplicaciones o juegos con valor educativo e incluyen
+ matemática, ciencia, aprender el alfabeto, aprender a contar y muchos otros tipos de
+ contenido educativo, como geografía e historia.
+  </li>
+
+  <li><strong>Música y videos</strong> Se trata de aplicaciones o juegos que contienen un elemento musical o un
+ componente de video, e incluyen de todo desde tocar el
+ piano hasta ver videos y más.
+  </li>
+
+  <li><strong>Juego de roles</strong>: Se trata de aplicaciones o juegos en los que una persona puede fingir un
+ rol, como simular ser un cocinero o un médico.
+  </li>
+</ul>
+
+<dl>
+  <dt>
+    ¿Demorará mucho tiempo más la publicación de mi aplicación si decido incluirla en el programa
+ Diseñado para familias?
+  </dt>
+
+  <dd>
+    Cuando accedes a Diseñado para familias, Google Play revisa tu aplicación para
+ confirmar que es apta para familias. Suponiendo que tu aplicación cumple con todos los requisitos
+ del programa, prevemos que el tiempo de publicación no debería prolongarse
+ más allá de lo habitual; no obstante, puede haber una demora en la publicación de la aplicación si se
+ rechaza durante la revisión para la inclusión en Diseñado para familias. 
+  </dd>
+
+  <dt>
+    ¿Qué ocurre si se rechaza mi aplicación del programa Diseñado para familias?
+  </dt>
+
+  <dd>
+    Si se rechaza tu aplicación del programa Diseñado para familias, te
+ indicaremos el motivo en la Consola para desarrolladores y en detalle en un correo electrónico. Tendrás
+ la oportunidad de corregir los problemas y volver a enviar tu aplicación al programa,
+ o cambiar tu respuesta de inclusión. Ten en cuenta que si tienes una aplicación existente que
+ está activa en Google Play, solo se rechazará la actualización de la aplicación (la aplicación
+ continuará activa en la Play Store de Google). Si enviaste una nueva aplicación al
+ programa Diseñado para familias y no cumple con los requisitos,
+ se rechazará la presentación completa de la aplicación y no se publicará en
+ Google Play. Luego podrás abordar los problemas identificados y volver a enviar la aplicación al
+ programa Diseñado para familias o abandonar la idea de incluirla.
+  </dd>
+
+  <dt>
+    ¿Qué ocurre si se determina que mi aplicación no cumple con los
+ requisitos del programa Diseñado para familias después de haberse publicado?
+  </dt>
+
+  <dd>
+    Se puede eliminar o suspender tu aplicación de la Play Store de Google,
+ no solo del programa Diseñado para familias. En las aplicaciones eliminadas se pueden
+ utilizar las mismas soluciones que en las aplicaciones rechazadas. Las aplicaciones suspendidas se pueden apelar mediante el
+ proceso de apelación para desarrolladores.
+  </dd>
+
+  <dt>
+    ¿Si logro acceder al programa Diseñado para familias, puedo retirarme más adelante?
+  </dt>
+
+  <dd>
+    Sí, puedes retirarte del programa en cualquier momento. Ten en cuenta que al
+ retirarte perderás tu lugar en la nueva experiencia para la familia
+ y también los demás beneficios del programa.
+  </dd>
+
+  <dt>
+    ¿Qué ocurre cuando actualizo mi aplicación después de haber sido aceptada en el
+ programa?
+  </dt>
+
+  <dd>
+    Las aplicaciones que forman parte del programa Diseñado para familias deben
+ cumplir los requisitos de elegibilidad en todo momento. Si necesitas
+ editar los metadatos de Diseñado para familias asociados con tu aplicación, dirígete
+ a la sección Fijación de precios y distribución de la Consola para desarrolladores de Google Play
+ y edita esa información. Si la actualización de tu aplicación implica un
+ cambio de público, te recomendamos que alertes a los usuarios que ya
+ instalaron tu aplicación.
+  </dd>
+
+  <dt>
+    ¿Se pueden incluir las aplicaciones y los juegos que utilizan los servicios Google Sign-In o
+ Google Play Game en el programa Diseñado para familias?
+  </dt>
+
+  <dd>
+    Las aplicaciones que participan en el programa Diseñado para familias están centradas
+ exclusivamente en los niños; es decir, están orientadas a los siguientes grupos de edades: Los niños de 5 años y menores,
+ de 6 a 8 años o de 9 a 12 años <strong>no pueden</strong> usar los servicios Google+ Sign-in
+ o Google Play Game como experiencia de inicio de sesión para su
+ aplicación.
+
+    <p>
+      Las aplicaciones que participan en Diseñado para familias orientadas a un público
+ infantil y adulto pueden usar los servicios Google+ Sign-in o Google Play Game
+ como una función <strong>opcional</strong>. Los niños deben poder acceder a la totalidad de la aplicación
+ o el juego sin la necesidad de iniciar sesión en los servicios Google+ o Google Play Game.
+    </p>
+  </dd>
+
+  <dt>
+    Mi aplicación está incluida en Google Play for Education y está integrada a Google Sign-in
+; por lo tanto, los estudiantes pueden iniciar sesión con sus cuentas escolares. ¿Debo cambiar la manera en la que
+ funciona Google Sign-in en mi aplicación?
+   </dt>
+
+  <dd>
+    Las aplicaciones que participan en Google Play for Education pueden utilizar Google Sign-in para
+ las cuentas de estudiantes siempre que no sea un requisito limitador para todos los usuarios de la aplicación
+  </dd>
+</dl>
+
+<h2 id="monetization">
+  Monetización del programa Diseñado para familias
+</h2>
+
+<dl>
+  <dt>
+    ¿Pueden darme más detalles acerca de las políticas de publicidad para Diseñado
+ para familias?
+  </dt>
+
+  <dd>
+    Lee la <a href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">
+política de anuncios publicitarios para Diseñado para familias</a>.
+  </dd>
+
+  <dt>
+    ¿Puede mi aplicación exhibir anuncios intersticiales?
+  </dt>
+
+  <dd>
+    Los anuncios intersticiales pueden ser adecuados para algunas aplicaciones. No obstante, el usuario debe
+ poder navegar a la actividad principal antes de que se exhiban anuncios publicitarios.
+  </dd>
+
+  <dt>
+    ¿Cómo sé si mi red de anuncios cumple con las políticas de
+ publicidad de Diseñado para familias?
+  </dt>
+
+  <dd>
+    Comunícate con tu red de publicidad para consultar acerca de sus políticas de contenido
+ y prácticas publicitarias. Si usas AdMob, consulta el <a href="https://support.google.com/admob/answer/3248194">Centro de ayuda de AdMob</a> para
+ obtener información detallada acerca de cómo etiquetar tu aplicación o una unidad de publicidad específica para indicar que
+ está orientada a niños. Es responsabilidad del desarrollador garantizar que la experiencia
+ de usuario global con publicidad en la aplicación cumpla con los requisitos del programa <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Diseñado
+ para familias</a>.
+  </dd>
+
+  <dt>
+    ¿Puedo incluir compras integradas en la aplicación en mi aplicación?
+  </dt>
+
+  <dd>
+    No hay restricciones específicas con respecto a las compras integradas en la aplicación (IAP) para
+ las aplicaciones que participan del programa Diseñado para familias además del
+ cumplimiento con el <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">
+ DDA de Diseñado para familias</a> y otros requisitos legales correspondientes, pero
+ Google Play se reserva el derecho de rechazar aplicaciones que empleen tácticas comerciales
+ extremadamente agresivas. Google Play aplicará la protección de IAP con contraseña en todas las aplicaciones
+ que participen del programa Diseñado para familias y que apunten principalmente
+ a un público infantil a fin de garantizar que los padres, no los niños, estén autorizando
+ las compras. Ten en cuenta que este tratamiento no se extiende a las aplicaciones
+ orientadas al público en general.
+  </dd>
+</dl>
+
+<h2 id="other">
+  Otras preguntas
+</h2>
+
+<dl>
+  <dt>
+    ¿Cuál es el público previsto para las aplicaciones que participan en Diseñado para
+ familias?
+  </dt>
+
+  <dd>
+    Nuestro objetivo es proporcionar una excelente experiencia de usuario en la Play Store de Google para
+ que padres y tutores descubran aplicaciones maravillosas para niños y
+ familias creadas por desarrolladores y marcas confiables.
+  </dd>
+
+  <dt>
+    ¿Está el programa Diseñado para familias disponible únicamente para desarrolladores
+ en ciertos países?
+  </dt>
+
+  <dd>
+    Diseñado para familias es un programa global.
+  </dd>
+
+  <dt>
+    ¿Qué ocurre con las aplicaciones que se publican en la categoría actual
+ Juegos para la familia?
+  </dt>
+
+  <dd>
+    La categoría actual Juegos para la familia quedará obsoleta en mayo de 2015. Las aplicaciones
+ que actualmente se encuentren en la categoría Juegos para la familia deberán
+ trasladarse a otra categoría en la tienda de Google Play. Las aplicaciones para las que no se haya seleccionado otra
+ categoría se asignarán a la categoría Juegos casuales.
+  </dd>
+</dl>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="https://docs.google.com/forms/d/1EtvUWqlkxS6RxHJjeI-3-7uzdbIZx6n9Cocy2D369B8/viewform" class="next-class-link">A continuación: Mantente en contacto</a>
+</div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/distribute/googleplay/families/start.jd b/docs/html-intl/intl/es/distribute/googleplay/families/start.jd
new file mode 100644
index 0000000..3ed1eb3
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/families/start.jd
@@ -0,0 +1,106 @@
+page.title=Accede a Diseñado para familias
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=Únete a Diseñado para familias en pocos pasos sencillos.
+
+@jd:body
+
+<p>
+  Si estás creando una aplicación diseñada para niños y familias, hay algunas
+ cosas que debes hacer <em>antes</em> de que estés listo para acceder al programa Diseñado para
+ familias:
+</p>
+
+<ul>
+  <li>Completa el cuestionario de calificación de contenido para tu aplicación y cumple con una calificación
+ de ESRB, que puede ser Todos o Todos 10+.
+  </li>
+
+  <li>Agrega un vínculo de la política de privacidad a la página <strong>Directorio de la tienda</strong>
+ de tu aplicación.
+  </li>
+
+  <li>Asegúrate de que tu aplicación cumpla todos los <a href="https://support.google.com/googleplay/android-developer/answer/6184502">requisito
+ del programa Diseñado para familias.</a>
+  </li>
+</ul>
+
+<p>
+  Ahora que tu aplicación está lista para la publicación, puedes acceder a Diseñado para
+ familias directamente desde la <a href="https://play.google.com/apps/publish/">Consola para desarrolladores</a>. Acceder al programa
+ significa que quieres que tu aplicación esté disponible en la nueva experiencia
+ para la familia en Google Play, además de la categoría que hayas seleccionado en la
+ Play Store de Google.
+</p>
+
+<p>
+  La inclusión en el programa también confirma que tu aplicación cumple con las <a href="http://play.google.com/about/developer-content-policy.html">Políticas del programa para desarrolladores de
+ Google Play</a> y con el <a href="http://play.google.com/about/developer-distribution-agreement.html">Acuerdo de
+ distribución para desarrolladores</a>, incluido el<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">
+ Anexo de DDA para Diseñado para familias</a>. Si no estás familiarizado con los documentos de
+ estas políticas o con el anexo, asegúrate de leerlos antes de solicitar la inclusión.
+</p>
+
+<p>
+  Cuando estés listo, sigue estas instrucciones de inclusión en Diseñado para familias para una aplicación específica:
+</p>
+
+<ol>
+<li>En la página <strong>Todas las aplicaciones</strong> de la Consola para desarrolladores, haz clic en la aplicación que quieres
+ incluir. En Fijación de precios y distribución, desplázate hacia abajo hasta encontrar <strong>Diseñado para
+ familias</strong> y la casilla de verificación para la inclusión.<img src="/images/gp-dff-optin.png" style="border:2px solid #ddd;margin:1em 0;">
+  </li>
+
+  <li>Comienza el flujo de inclusión y confirma que tu aplicación cumple los requisitos de
+ elegibilidad.</li>
+  <li>Si tu aplicación tiene anuncios publicitarios, confirma que cumplen con la política de anuncios publicitarios.
+<img src="/images/gp-dff-appinfo.png" style="border:2px solid #ddd;margin:1em 0;"></li>
+  <li>Selecciona tus grupos etarios objetivo entre los siguientes: 5 años y menores, de 6 a 8 años, de 9
+ a 12 años o Público general (para aplicaciones orientadas a niños y a públicos
+ mayores). Si tu aplicación está orientada a más de un grupo etario, puedes seleccionar hasta
+ dos grupos etarios adyacentes. Las aplicaciones con una calificación de ESRB de 10+ solo pueden seleccionar la
+ edad objetivo de 9 a 12 años o Público general.
+  </li>
+
+  <li>Selecciona una categoría para tu aplicación para la nueva experiencia centrada en la familia en
+ Google Play. Los usuarios también podrán encontrar tu aplicación en su categoría actual en
+ Google Play.</li>
+  <li>Lee y acepta los documentos vinculados y luego haz clic en
+ <strong>Incluir</strong>. Por último, haz clic en <strong>Enviar actualización</strong> en la página
+ Fijación de precios y distribución para publicar o actualizar tu aplicación.
+  </li>
+</ol>
+
+<p>
+  Una vez que hayas incluido tu aplicación, se la someterá a una revisión exhaustiva antes de recibir la
+ aprobación para el programa Diseñado para familias.
+</p>
+
+<p class="note">
+  <strong>Nota</strong>: Las aplicaciones publicadas en el programa Diseñado para familias
+ también están disponibles para todos los usuarios en Google Play. 
+</p>
+
+<p>
+  Si incluyes una aplicación que estás publicando por primera vez y no cumple
+ los requisitos del programa Diseñado para familias, no estará disponible
+ en Google Play hasta que actualices la aplicación para que cumpla
+ los requisitos del programa <strong>o</strong> canceles la selección de la casilla de verificación para la inclusión y
+ apruebes la revisión estándar de Google Play.
+</p>
+
+<p>
+  Si incluyes una aplicación que ya está publicada en Google Play y no cumple
+ los requisitos del programa, continuará estando disponible para todos los usuarios, pero no
+ se agregará a la nueva experiencia para la familia hasta que actualices la aplicación de modo que cumpla los
+ requisitos del programa.
+</p>
+
+<p>
+  Si publicas una actualización para una aplicación que ya forma parte de Diseñado para familias,
+ la actualización de la aplicación debe aprobar la revisión de Diseñado para familias antes de que
+ esté disponible para todos los usuarios en Google Play.</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">A continuación: Preguntas frecuentes</a>
+</div>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/guide.jd b/docs/html-intl/intl/es/distribute/googleplay/guide.jd
new file mode 100644
index 0000000..6308edc
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/guide.jd
@@ -0,0 +1,70 @@
+page.title=Cómo tener éxito en Google Play
+page.metaDescription=Una guía que te ayudará a tener éxito con tu aplicación o juego en Google Play.
+meta.tags="distribute", "bestpractices"
+page.tags="google play", "business", "monetize", "engagement"
+page.image=distribute/images/play_dev_guide.png
+
+@jd:body
+
+<p>
+  Creamos una guía para descargar que te ayudará a tener éxito con tu aplicación o
+ juego en Google Play. En la guía encontrarás funciones, sugerencias y mejores
+ prácticas que te ayudarán a crear una estrategia eficaz.
+</p>
+
+<p>
+  La guía se divide en las siguientes secciones:
+</p>
+<ul>
+  <li>
+    <strong>Publicación en Google Play</strong> &mdash; Mediante la Consola para desarrolladores de Google Play
+ podrás distribuir tu aplicación a más de mil millones de usuarios de Android
+ en todo el mundo.
+  </li>
+
+  <li>
+    <strong>Calidad</strong> &mdash; Los aspectos básicos para crear una excelente aplicación
+ e información acerca de las pautas y las políticas de Google Play.
+  </li>
+
+  <li>
+    <strong>Capacidad de detección y alcance</strong> &mdash; Optimización de la
+ capacidad de detección de tu aplicación y llegada al público más amplio posible.
+  </li>
+
+  <li>
+    <strong>Atracción y retención</strong> &mdash; Transformación de
+ las instalaciones en usuarios activos y optimización de la retención de usuarios.
+  </li>
+
+  <li>
+    <strong>Monetización</strong> &mdash; Estrategias de monetización para generar
+ flujos de ingresos constantes y en aumento.
+  </li>
+
+  <li>
+    <strong>Medición con Google Analytics</strong> &mdash; Comprensión
+ de tus usuarios y optimización de la experiencia, las conversiones y la comercialización de tu aplicación.
+  </li>
+
+  <li>
+    <strong>Alcance global</strong> &mdash; Lanzamiento de tu aplicación en mercados locales
+ alrededor del mundo.
+  </li>
+</ul>
+
+<p>
+  Para descargar la guía, haz clic en la imagen a continuación o <a href="http://goo.gl/DFjbrS">consíguela en Google Play</a>.
+</p>
+
+<p>
+  En los próximos meses, publicaremos la guía en más idiomas. Regresa a este
+ sitio web con frecuencia para consultar la información que publiquemos acerca de nuevas funciones y mejores
+ prácticas que te ayudarán a distribuir y monetizar tu aplicación.
+</p>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:play_dev_guide"
+    data-cardSizes="9x6"
+    data-maxResults="1">
+  </div>
+
diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/auto.jd
new file mode 100644
index 0000000..c7cb65d
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/quality/auto.jd
@@ -0,0 +1,488 @@
+
+page.title=Calidad de las aplicaciones para Auto
+page.metaDescription=Las aplicaciones para Auto se integran con los controles de entrada y la pantalla del vehículo, y minimizan la distracción del conductor para crear una excelente experiencia.
+page.image=/distribute/images/gp-auto-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Criterios de calidad</h2>
+  <ol>
+    <li><a href="#core">Calidad de la aplicación principal</a></li>
+    <li><a href="#ux">Diseño visual e interacción</a></li>
+    <li><a href="#fn">Funcionalidad</a></li>
+    <li><a href="#faq">Preguntas frecuentes</a></li>
+  </ol>
+
+  <h2>También deberías leer</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+Calidad de la aplicación principal</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+Optimiza tu aplicación</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Pautas de la Experiencia de usuario de Android Auto
+ para aplicaciones de audio</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">Pautas de la Experiencia de usuario de Android Auto
+ para aplicaciones de mensajería</a></li>
+  </ol>
+</div>
+</div>
+
+
+  <img src="{@docRoot}distribute/images/gp-auto-quality.png" style="width:480px;">
+
+
+<p>Al abordar la compatibilidad de tu aplicación con Android Auto, evita la distracción del conductor por sobre todas las cosas.
+  Las aplicaciones que funcionan con la interfaz de usuario Auto deben minimizar las distracciones a las que está expuesto el conductor;
+ esto se logra mediante la aplicación de las mejores prácticas, como comandos de voz y un diseño visual muy simple.
+</p>
+
+<p>
+  Las mejores experiencias para Auto son predictivas y predecibles.  Las aplicaciones compatibles con Android Auto
+ deben mostrar información oportuna al conductor solo cuando sea relevante, y deben usar
+ patrones simples y predecibles para las tareas comunes.
+</p>
+
+<p class="caution">
+  <strong>Importante:</strong> Los criterios que se indican en esta página corresponden a la interfaz de usuario y al comportamiento
+ de tu aplicación cuando se ejecuta en dispositivos conectados a una pantalla de Android Auto. Las aplicaciones deben cumplir esos
+ criterios para poder calificar como una aplicación Android Auto en Google Play.
+</p>
+
+
+<div class="headerLine">
+  <h2 id="core">
+  Calidad de la aplicación principal
+  </h2>
+
+<p>
+ Además de los criterios específicos para Auto antes mencionados, las aplicaciones para Auto deben cumplir todos los criterios de calidad
+ de la aplicación principal para la plataforma Android, tal como se detalla en los
+ criterios de <a href="{@docRoot}distribute/essentials/quality/core.html">Calidad de la aplicación principal</a>. Prueba
+ tu aplicación en función de esos criterios para asegurarte de que cumple con los estándares de Android para navegación y
+ diseño. Luego prueba tu aplicación nuevamente en función de los criterios específicos para Auto, y recuerda que
+ al ejecutar la aplicación en un dispositivo conectado a Android Auto, esta debe cumplir los requisitos
+ que se indican en esta página.
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  Diseño visual e interacción del usuario
+  </h2>
+
+</div>
+
+<p>
+  Estos criterios permiten que te asegures de que tu aplicación cumpla con los patrones clave de diseño e interacción
+ a fin de garantizar una experiencia de usuario uniforme, intuitiva y agradable en Android Auto. Muchos elementos,
+ como cajón de navegación, fondos de tarjetas, fuentes y colores de iconos, son establecidos y proporcionados
+ por el sistema. Tus elementos de diseño propios, específicos para la aplicación, deben cumplir los siguientes criterios.
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    Tipo
+  </th>
+  <th style="width:54px;">
+    Prueba
+  </th>
+  <th>
+    Descripción
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="safety">
+    Atención del conductor
+  </td>
+
+  <td id="AU-MV">
+    AU-MV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación no se muestra en los elementos animados de la pantalla Auto, como gráficos animados, juegos, video o
+ barras de progreso.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VA">
+    AU-VA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación no muestra ningún tipo de publicidad visual o textual en la pantalla Auto.  Solo se aceptan
+ anuncios publicitarios en audio.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-IM">
+    AU-IM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Los elementos de la aplicación no muestran imágenes en la pantalla Auto. Excepciones: la aplicación puede mostrar
+ una sola imagen fija como
+ contexto del contenido en el fondo de la pantalla de consumo, como la tapa de un álbum, y la aplicación puede
+ mostrar iconos en el cajón de navegación del contenido.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-DS">
+    AU-DS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación no incluye funciones que pueden distraer al conductor.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VI">
+    AU-VI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación no presenta ninguna forma de información visual (notificaciones, alertas, video, imágenes,
+ publicidad, etc.) en la pantalla del teléfono mientras se encuentra activa en Android Auto.
+    </p>
+  </td>
+</tr>
+
+
+
+<tr>
+  <td rowspan="3" id="layout">
+    Diseño
+  </td>
+
+  <td id="AU-SC">
+    AU-SC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación no muestra texto con desplazamiento automático.
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td id="AU-FT">
+    AU-FT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación muestra todas las cadenas con las fuentes Roboto predeterminadas en los dos tamaños aprobados.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-ST">
+    AU-ST
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación no muestra una cadena individual que contenga más de 120 caracteres.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="contrast">
+    Contraste visual
+  </td>
+
+  <td id="AU-DM">
+    AU-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación admite el modo día, que muestra texto y controles oscuros sobre un fondo claro.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NM">
+    AU-NM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación admite el modo noche, que muestra texto y controles claros sobre un fondo oscuro.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-WI">
+    AU-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación ofrece conjuntos de iconos blancos que el sistema colorea para proporcionar
+ compensación de contraste automática.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-OC">
+    AU-OC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación ofrece colores que el sistema puede optimizar para facilitar la lectura en el vehículo.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="interaction">
+    Interacción
+  </td>
+
+  <td id="AU-VC">
+    AU-VC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación debe admitir comandos de voz.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-AB">
+    AU-AB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Los botones específicos de la aplicación responden a las acciones del usuario en no más de dos segundos.
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  Funcionalidad
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios garantizan que tu aplicación esté correctamente configurada y proporcione el comportamiento
+ funcional previsto.
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    Tipo
+  </th>
+  <th style="width:54px;">
+    Prueba
+  </th>
+  <th>
+    Descripción
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="general">
+   General
+  </td>
+
+  <td id="AU-LT">
+    AU-LT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación se carga en 10 segundos como máximo.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-FP">
+    AU-FP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La funcionalidad Auto de la aplicación funciona según lo previsto o descrito en el directorio de la tienda de la aplicación en la Play Store de Google.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-RL">
+    AU-RL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Cuando se reinicia la aplicación desde la pantalla de inicio, esta restaura su estado al estado anterior
+ con la mayor precisión posible.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SS">
+    AU-SS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Ninguna de las tareas de la aplicación requieren más de seis pasos para completarse.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-GO">
+    AU-GO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Los botones de la aplicación que no funcionen o estén inhabilitados deben visualizarse de color gris.
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="media">
+    Medios
+  </td>
+
+
+  <td id="AU-PA">
+    AU-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación no tiene más de cuatro acciones principales más una alternancia de desbordamiento de acciones optativa (o cinco si
+ no se utiliza el desbordamiento de acciones).
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SA">
+    AU-SA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación no tiene más de cuatro acciones secundarias opcionales más una alternancia de desbordamiento de acciones.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="notifications">
+    Notificaciones
+  </td>
+
+  <td id="AU-NA">
+    AU-NA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación no presenta anuncios publicitarios mediante notificaciones.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NT">
+    AU-NT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     La aplicación muestra notificaciones solo cuando es relevante para las necesidades del conductor.
+   </p>
+   <p>
+    Ejemplos:<br />
+    Está bien: Notificar al usuario acerca de un nuevo mensaje que acaba de recibir.<br />
+    Está mal: Notificar al usuario acerca del lanzamiento de un nuevo álbum.
+    </p>
+  </td>
+</tr>
+
+</table>
+
+<!--
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+-->
+
+<div class="headerLine">
+  <h2 id="faq">
+  Preguntas frecuentes
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>Después de enviar mi aplicación, ¿cómo sabré si mi aplicación no cumple todos
+ los requisitos para Android Auto?</strong>
+</p>
+<p>Si estás pensando en desarrollar aplicaciones para Auto, te alentamos a que empieces a habilitar y probar
+ tus aplicaciones ahora mismo. No obstante, en este momento no se pueden publicar aplicaciones compatibles con Auto. Únete a la
+ <a href="http://g.co/AndroidAutoDev" class="external-link">comunidad de
+ desarrolladores de Auto en Google+</a> para acceder a actualizaciones acerca de cuándo podrás enviar
+ tus aplicaciones compatibles con Auto.</p>
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Mi aplicación abarca más allá de Android Auto. Si mi aplicación no cumple con los
+ requisitos de Auto, ¿aún aparecerá mi aplicación nueva o actualizada en Google Play para teléfonos y
+ tablets?</strong>
+</p>
+<p>
+  No. Cuando Google inicie el proceso de aprobación, tu aplicación para Auto se someterá a una revisión de
+ seguridad del conductor y no estará
+ disponible para distribución hasta que se apruebe. Dado que es el mismo APK que el
+ que utilizas para teléfonos y tablets, tus actualizaciones en la Play Store para esos dispositivos no estará disponible hasta que 
+ finalice el proceso de aprobación para Auto.
+</p>
+
+<p class="caution">
+  <strong>Importante:</strong> Debido a esta restricción, no debes utilizar tu APK
+ de producción en las pruebas de compatibilidad con Auto.
+</p>
+
diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..8588c6b
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/quality/core.jd
@@ -0,0 +1,1148 @@
+page.title=Calidad de la aplicación principal
+page.metaDescription=La calidad de la aplicación afecta directamente el éxito a largo plazo de tu aplicación en términos de instalaciones, calificación y reseñas de los usuarios, interactividad y retención del usuario.
+page.image=/distribute/images/core-quality-guidelines.jpg
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Criterios de calidad</h2>
+  <ol>
+    <li><a href="#ux">Diseño e interacción</a></li>
+        <li><a href="#fn">Funcionalidad</a></li>
+        <li><a href="#ps">Rendimiento y estabilidad</a></li>
+        <li><a href="#listing">Google Play</a></li>
+
+  </ol>
+  
+  <h2>Prueba</h2>
+  <ol>
+    <li><a href="#test-environment">Configuración de un entorno de prueba</a></li>
+        <li><a href="#tests">Procedimientos de prueba</a></li>
+        </ol>
+
+  <h2>También deberías leer</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">Calidad de las aplicaciones para tablets</a></li>
+        <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">Optimiza tu aplicación</a></li>
+  </ol>
+  
+
+</div>
+</div>
+
+<div class="top-right-float">
+  <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;">
+</div>
+
+<p>
+  Los usuarios de Android esperan aplicaciones de alta calidad. La calidad de la aplicación afecta
+ directamente el éxito a largo plazo de tu aplicación en términos de instalaciones, calificación y reseñas de los usuarios,
+ interactividad y retención del usuario.
+</p>
+
+<p>
+  Este documento te ayuda a evaluar los aspectos básicos de calidad en tu aplicación mediante un
+ conjunto compacto de criterios de calidad y pruebas relacionadas para la aplicación principal. Todas las aplicaciones para Android
+ deben cumplir esos criterios.
+</p>
+
+<p>
+  Antes de publicar tus aplicaciones, somételas a prueba de acuerdo con estos criterios para garantizar que
+ funcionen bien en diferentes dispositivos, cumplan las normas de Android para navegación
+ y diseño, y estén preparadas para las oportunidades de promoción en la Play Store
+ de Google. Tu prueba deberá abarcar más de lo que se describe aquí;
+ este documento tiene como objetivo especificar las características de calidad fundamentales que todas las aplicaciones
+ deben exhibir, de modo que puedas incluirlas en tus pruebas.
+</p>
+
+<p>
+  Si estás creando aplicaciones para tablets o Google Play for Education, hay
+ criterios de calidad adicionales que debes considerar y que se definen en las pautas de
+ <a href="{@docRoot}distribute/essentials/quality/tablets.html">Calidad de las aplicaciones
+ para tablets</a> y en las pautas para <a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">Educación
+</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="ux">
+  Diseño visual e interacción del usuario
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios permiten que te asegures de que tu aplicación proporcione patrones estándar de diseño visual
+ e interacción para Android, cuando corresponda, a fin de garantizar una experiencia de usuario
+ uniforme e intuitiva.
+</p>
+
+<table>
+  <tr>
+    <th style="width:2px;">
+      Área
+    </th>
+    <th style="width:54px;">
+      ID
+    </th>
+    
+
+    <th>
+      Descripción
+    </th>
+    <th style="width:54px;">
+      Pruebas
+    </th>
+  </tr>
+  <tr id="UX-B1">
+  <td>Diseño estándar</td>
+  <td>
+    UX-B1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación cumple con las pautas de <a href="{@docRoot}design/index.html">Diseño Android</a>
+ y utiliza <a href="{@docRoot}design/patterns/index.html">patrones e iconos de IU</a> comunes:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>La aplicación no redefine la función prevista de un icono del sistema (como
+ el botón Atrás).
+    </li>
+
+    <li>La aplicación no reemplaza un icono del sistema con un icono completamente diferente
+ si este activa el comportamiento estándar de la IU.
+    </li>
+
+    <li>Si la aplicación proporciona una versión personalizada de un icono estándar del sistema,
+ el icono debe parecerse al icono estándar del sistema y desencadenar el comportamiento estándar
+ del sistema.
+    </li>
+
+    <li>La aplicación no redefine ni utiliza de forma inadecuada patrones de la IU de Android, de modo que los
+ iconos o los comportamientos pudieran desorientar o confundir a los usuarios.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td rowspan="3">
+    Navegación
+  </td>
+  <td id="UX-N1">
+    UX-N1
+  </td>
+  <td>
+    <p>
+    La aplicación admite la <a href="{@docRoot}design/patterns/navigation.html">navegación estándar del sistema con el botón Atrás</a>
+ y no utiliza avisos personalizados en pantalla para el "botón Atrás".
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td id="UX-N2">
+    UX-N2
+  </td>
+  <td>
+    <p>
+    Todos los diálogos pueden descartarse con el botón Atrás.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr id="UX-N3">
+  <td>
+    UX-N3
+  </td>
+  <td>
+    Al presionar el botón de inicio en cualquier momento, se navega a la pantalla de inicio del
+ dispositivo.
+  </td>
+  <td>
+    <a href="#core">CR-1</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S1">
+  <td rowspan="2">
+    Notificaciones
+  </td>
+  <td>
+    UX-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Las notificaciones siguen las <a href="{@docRoot}design/patterns/notifications.html">pautas</a> de Diseño Android. En
+ especial:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Se deben agrupar múltiples notificaciones en un solo objeto de
+ notificación, cuando sea posible.
+    </li>
+
+    <li>Las notificaciones solo son recurrentes si están relacionadas con eventos actuales
+ (como la reproducción de música o una llamada telefónica).
+    </li>
+
+    <li>Las notificaciones no contienen publicidad ni contenido que no esté relacionado con
+ la función central de la aplicación, a menos que el usuario lo permita.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S2">
+  <td>
+    UX-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación utiliza notificaciones únicamente para lo siguiente:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Indicar un cambio de contexto relacionado con el usuario (como
+ un mensaje recibido) o
+    </li>
+
+    <li>Exponer información/controles relacionados con un evento actual (como la
+ reproducción de música o una llamada telefónica).
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="fn">
+  Funcionalidad
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios garantizan que tu aplicación proporcione el comportamiento funcional previsto
+ con el nivel adecuado de permisos.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Área
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    Descripción
+  </th>
+  <th style="width:54px;">
+    Pruebas
+  </th>
+  </tr>
+
+  <tr id="FN-P1">
+  <td rowspan="2">
+    Permisos
+  </td>
+  <td>
+    FN-P1
+  </td>
+  <td>
+    La aplicación solicita solo la cantidad <em>mínima absoluta</em> de permisos necesarios
+ para respaldar la funcionalidad central.
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="FN-P2">
+  <td>
+    FN-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación no solicita permisos para acceder a datos confidenciales (como
+ contratos o el registro del sistema) ni a servicios que puedan costarle dinero al usuario
+ (como el marcador o SMS), a menos que esté relacionado con una capacidad central de la
+ aplicación.
+    </p>
+  </td>
+  </tr>
+
+  <tr id="FN-L1">
+  <td>
+    Ubicación de la instalación
+  </td>
+  <td>
+    FN-L1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación funciona normalmente cuando se la instala en una tarjeta SD (si la aplicación lo admite).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Se recomienda admitir la instalación en tarjetas SD para las aplicaciones más grandes
+ (10MB+). Consulta la guía para desarrolladores <a href="{@docRoot}guide/topics/data/install-location.html">Ubicación de la instalación
+ de la aplicación</a> para obtener información acerca de los tipos de aplicaciones
+ que deben admitir la instalación en tarjetas SD.
+    </p>
+  </td>
+  <td>
+    <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A1">
+  <td rowspan="4">
+    Audio
+  </td>
+  <td>
+    FN-A1
+  </td>
+  <td>
+    No se reproduce audio cuando la pantalla está apagada, a menos que sea una función central
+ (por ejemplo, la aplicación es un reproductor de música).
+  </td>
+  <td>
+    <a href="#core">CR-7</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A2">
+  <td>
+    FN-A2
+  </td>
+  <td>
+    No se reproduce<a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">
+ audio cuando la pantalla está bloqueada</a>, a menos que sea una función central.
+  </td>
+  <td>
+    <a href="#core">CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A3">
+  <td>
+    FN-A3
+  </td>
+  <td>
+    No se reproduce audio en la pantalla de inicio ni cuando está activa otra aplicación, a menos que sea
+ una función central.
+  </td>
+  <td>
+    <a href="#core">CR-1,<br>
+    CR-2</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A4">
+  <td>
+    FN-A4
+  </td>
+  <td>
+    La reproducción de audio continúa cuando la aplicación regresa a primer plano, o le indica al
+ usuario que la reproducción está pausada.
+  </td>
+  <td>
+    <a href="#core">CR-1, CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U1">
+  <td rowspan="3">
+    IU y gráficos
+  </td>
+  <td>
+    FN-U1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación admite tanto la orientación horizontal como vertical (si fuera posible).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Las orientaciones exponen ampliamente las mismas funciones y acciones, y conservan
+ la paridad funcional. Se aceptan cambios mínimos en el contenido o las vistas.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U2">
+  <td>
+    FN-U2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación utiliza toda la pantalla en ambas orientaciones y no usa formato de pantalla ancha
+ para compensar los cambios de orientación.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Se acepta el uso mínimo de formato de pantalla ancha para compensar
+ pequeñas variaciones en la geometría de la pantalla.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U3">
+  <td>
+    FN-U3
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación resuelve correctamente las transiciones rápidas entre las orientaciones
+ de la pantalla sin presentar problemas.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S1">
+  <td rowspan="2">
+    Estado del usuario/la aplicación
+  </td>
+  <td>
+    FN-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación no debe dejar ningún servicio en ejecución mientras se encuentre en
+ segundo plano, a menos que se relacione con una capacidad central de la aplicación.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Por ejemplo, la aplicación no debe dejar servicios en ejecución para mantener una
+ conexión de red para recibir notificaciones, para mantener una conexión
+ Bluetooth ni para mantener el GPS activado.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-6</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S2">
+  <td>
+    FN-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación preserva y restaura correctamente el estado del usuario o la aplicación.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    La aplicación preserva el estado del usuario o la aplicación cuando abandona el primer plano y
+ evita la pérdida accidental de datos a causa de la navegación hacia atrás y otros cambios
+ de estado. Cuando regresa al primer plano, la aplicación debe restaurar el
+ estado preservado y toda transacción de estado importante que haya quedado
+ pendiente, como cambios en campos editables, el progreso de un juego, menús,
+ videos y otras secciones de la aplicación o el juego.
+    </p>
+
+    <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+    <li>Cuando se reanuda la aplicación desde el conmutador de Aplicaciones recientes, la aplicación
+ regresa al usuario al estado exacto en que se encontraba la última vez que este la utilizó.
+    </li>
+
+    <li>Cuando se reanuda la aplicación después de la reactivación del dispositivo
+ (después de haber estado bloqueado), la aplicación regresa al usuario
+ al estado exacto en que se encontraba la última vez que este la utilizó.
+    </li>
+
+    <li>Cuando se reinicia desde el inicio o Todas las aplicaciones, la aplicación
+ restaura el estado de la aplicación al estado anterior con la mayor precisión posible.
+    </li>
+
+    <li>Cuando se presiona Atrás, la aplicación le da la opción al usuario de guardar el
+ estado de la aplicación o el usuario que, de lo contrario, se perdería al navegar hacia atrás.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-1, CR-3, CR-5</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ps">
+  Rendimiento y estabilidad
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios garantizan que las aplicaciones proporcionen el rendimiento,
+ la estabilidad y la capacidad de respuesta que los usuarios esperan.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Área
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    Descripción
+  </th>
+  <th style="width:54px;">
+    Pruebas
+  </th>
+  </tr>
+
+  <tr id="PS-S1">
+  <td>
+    Estabilidad
+  </td>
+  <td>
+    PS-S1
+  </td>
+  <td>
+    La aplicación no colapsa, no impone el cierre, no se inmoviliza ni funciona de ningún otro modo anormal
+ en ninguno de los dispositivos donde esté instalada.
+  </td>
+  <td>
+    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P1">
+  <td rowspan="2">
+    Rendimiento
+  </td>
+  <td>
+    PS-P1
+  </td>
+  <td>
+    La aplicación se carga rápidamente o le proporciona al usuario información en pantalla (un indicador
+ de progreso o una señal similar) en caso de que demore más de dos segundos en
+ cargarse.
+  </td>
+  <td>
+    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P2">
+  <td>
+    PS-P2
+  </td>
+  <td>
+    Cuando StrictMode está activado (consulta <a href="#strictmode">Prueba
+ StrictMode</a>, a continuación), no hay destellos rojos (advertencias de rendimiento de
+ StrictMode) visibles al ejecutar la aplicación, incluso durante un juego,
+ transiciones de animaciones y la IU, y cualquier otra parte de la aplicación.
+  </td>
+  <td>
+    <a href="#PM-1">PM-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-M1">
+  <td>
+    Medios
+  </td>
+  <td>
+    PS-M1
+  </td>
+  <td>
+    La reproducción de música y video es uniforme, sin quiebres, intermitencias ni otros
+ defectos durante el uso y la carga normales de la aplicación.
+  </td>
+  <td>
+    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V1">
+  <td rowspan="2">
+    Calidad visual
+  </td>
+  <td>
+    PS-V1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación muestra gráficos, texto, imágenes y otros elementos de la IU sin
+ distorsión, esfumado ni pixelado notables.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>La aplicación ofrece gráficos de alta calidad para todos los tamaños de pantalla y
+ formatos admitidos, incluidos aquellos para dispositivos con <a href="{@docRoot}distribute/essentials/quality/tablet.html">pantallas más grandes
+ como las tablets</a>.
+    </li>
+
+    <li>No se observa suavizado en los bordes de los menús, los botones ni otros
+ elementos de la IU.
+    </li>
+    </ol>
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V2">
+  <td>
+    PS-V2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    La aplicación muestra texto y bloques de texto de forma aceptable.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Se acepta la composición en todos los formatos admitidos, incluidos
+ aquellos para dispositivos con pantallas más grandes como las tablets.
+    </li>
+
+    <li>No se visualizan letras ni palabras cortadas.
+    </li>
+
+    <li>No se visualizan ajustes automáticos de línea incorrectos en botones ni iconos.
+    </li>
+
+    <li>Hay espacio suficiente entre el texto y los elementos que lo rodean.
+    </li>
+    </ol>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/performance" data-sortorder="-timestamp"
+data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="listing">
+  Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios garantizan que tus aplicaciones estén listas para su publicación en Google Play.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Área
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    Descripción
+  </th>
+  <th style="width:54px;">
+    Pruebas
+  </th>
+  </tr>
+
+  <tr id="GP-P1">
+  <td rowspan="2">
+    Políticas
+  </td>
+  <td>
+    GP-P1
+  </td>
+  <td>
+    La aplicación cumple estrictamente con los términos de la <a href="http://play.google.com/about/developer-content-policy.html">Política de contenido para desarrolladores
+ de Google Play</a> y no ofrece contenido inapropiado,
+ no utiliza propiedad intelectual ni marcas de otros, etc.
+  </td>
+  <td>
+    <a href="#gp">GP-all</a>
+  </td>
+  </tr>
+
+  <tr id="GP-P2">
+  <td>
+    GP-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    El nivel de madurez de la aplicación está establecido de forma correcta en función de las <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=188189">
+Pautas de calificación de contenido</a>.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Ten en cuenta especialmente que las aplicaciones que solicitan permiso
+ para usar la ubicación del dispositivo no pueden recibir el nivel de madurez "Todos".
+    </p>
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D1">
+  <td rowspan="3">
+    Página de detalles de la&nbsp; aplicación
+  </td>
+  <td>
+    GP-D1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    El gráfico central de la aplicación sigue las pautas que se describen en esta <a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">
+publicación del blog</a>. Asegúrate de lo siguiente:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>El directorio de la aplicación incluye un gráfico central de alta calidad.
+    </li>
+
+    <li>El gráfico central no contiene imágenes de dispositivos, capturas de pantalla ni
+ texto pequeño que resulte ilegible cuando la aplicación se reduzca en tamaño para visualizarse en el
+ tamaño más pequeño de pantalla que tu aplicación admita.
+    </li>
+
+    <li>El gráfico central no se parece a un anuncio publicitario.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#gp">GP-1, GP-2</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D2">
+  <td>
+    GP-D2
+  </td>
+  <td>
+    Las capturas de pantalla y los videos de la aplicación no muestran ni hacen referencia a dispositivos que no sean Android.
+  </td>
+  <td rowspan="2">
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D3">
+  <td>
+    GP-D3
+  </td>
+  <td>
+    Las capturas de pantalla o los videos de la aplicación no representan el contenido ni la experiencia que ofrece
+ tu aplicación de forma confusa.
+  </td>
+  </tr>
+
+  <tr id="GP-X1">
+  <td>
+    Soporte para el usuario
+  </td>
+  <td>
+    GP-X1
+  </td>
+  <td>
+    Los errores comunes informados por los usuarios en la pestaña Reseñas de la página de Google Play se
+ abordan siempre que se puedan reproducir y ocurran en muchos dispositivos diferentes.
+    Si se produce un error en unos pocos dispositivos, aún debes abordarlo en
+ caso de que esos dispositivos sean especialmente populares o nuevos.
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/play" data-sortorder="-timestamp"
+data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-environment">
+  Configuración de un entorno de prueba
+  </h2>
+
+
+</div>
+
+<p>
+  Para evaluar la calidad de tu aplicación, debes configurar un entorno de hardware o
+ de simulación adecuado para la prueba.
+</p>
+
+<p>
+  El entorno de prueba ideal debería incluir poca cantidad de dispositivos de
+ hardware que representen formatos y combinaciones de hardware y software clave
+ actualmente disponibles para los consumidores. No es necesario realizar pruebas en
+ <em>todos</em> los dispositivos disponibles en el mercado, sino que debes concentrarte
+ en una pequeña cantidad de dispositivos representativos, incluso puedes usar uno o dos dispositivos
+ por formato.
+</p>
+
+<p>
+  Si no puedes obtener dispositivos de hardware reales para realizar las pruebas, debes
+ <a href="{@docRoot}tools/devices/index.html">configurar simuladores de dispositivos
+ (AVD)</a> para representar los formatos y las combinaciones de hardware y software más
+ comunes.
+</p>
+
+<p>
+  Para ir más allá de las pruebas básicas, puedes agregar más dispositivos, más formatos o
+ nuevas combinaciones de hardware y software a tu entorno de prueba. También puedes
+ aumentar la cantidad o la complejidad de las pruebas y los criterios de calidad.
+</p>
+
+<div class="headerLine">
+  <h2 id="tests">
+  Procedimientos de prueba
+  </h2>
+
+
+</div>
+
+<p>
+  Estos procedimientos de prueba te ayudan a descubrir varios tipos de problemas de calidad en
+ tu aplicación. Puedes combinar las pruebas o integrar grupos de pruebas en
+ tus propios planes de prueba. Consulta las secciones anteriores para obtener referencias que asocian
+ criterios específicos con pruebas específicas.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Tipo
+  </th>
+  <th style="width:54px;">
+    Prueba
+  </th>
+  <th>
+    Descripción
+  </th>
+  </tr>
+
+  <tr>
+  <td rowspan="12" id="core">
+    Conjunto central
+  </td>
+  <td>
+    CR-0
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Navega a todas las partes de la aplicación; es decir, a todas las pantallas, los diálogos,
+ las configuraciones y a todos los flujos de usuarios.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Si la aplicación admite la edición o la creación de contenido, jugar a un
+ juego o la reproducción multimedia, asegúrate de ingresar esos flujos para crear o
+ modificar contenido.
+    </li>
+
+    <li>Mientras pruebas la aplicación, introduce cambios transitorios en la conectividad
+ de red, la función de la batería, la disponibilidad de ubicación o GPS, la carga del
+ sistema, etc.
+    </li>
+    </ol>
+  </td>
+  </tr>
+
+  <tr id="tg2">
+  <td id="core2">
+    CR-1
+  </td>
+  <td>
+    Desde cada una de las pantallas de la aplicación, presiona la tecla de Inicio del dispositivo y luego reinicia la aplicación
+ desde la pantalla Todas las aplicaciones.
+  </td>
+  </tr>
+
+  <tr id="CR-2">
+  <td>
+    CR-2
+  </td>
+  <td>
+    Desde cada una de las pantallas de la aplicación, pasa a otra aplicación que se esté ejecutando y luego regresa a
+ la aplicación que estás probando con el conmutador de Aplicaciones recientes.
+  </td>
+  </tr>
+
+  <tr id="CR-3">
+  <td>
+    CR-3
+  </td>
+  <td>
+    Desde cada una de las pantallas (y diálogos) de la aplicación, presiona el botón Atrás.
+  </td>
+  </tr>
+
+  <tr id="CR-5">
+  <td>
+    CR-5
+  </td>
+  <td>
+    Desde cada una de las pantallas de la aplicación, gira el dispositivo entre las orientaciones horizontal y
+ vertical al menos tres veces.
+  </td>
+  </tr>
+
+  <tr id="CR-6">
+  <td>
+    CR-6
+  </td>
+  <td>
+    Cambia a otra aplicación para enviar la aplicación que estás probando a segundo plano. Ingresa en
+ Configuración y comprueba si la aplicación que estás probando tiene servicios ejecutándose mientras se encuentra
+ en segundo plano. En Android 4.0 y versiones posteriores, ingresa a la pantalla Aplicaciones y busca la
+ aplicación en la pestaña "En ejecución". En versiones anteriores, utiliza "Administrar
+ aplicaciones" para comprobar si hay servicios que se estén ejecutando.
+  </td>
+  </tr>
+
+  <tr id="CR-7">
+  <td>
+    CR-7
+  </td>
+  <td>
+    Presiona el botón de encendido para colocar el dispositivo en modo de hibernación y luego presiona nuevamente el botón
+ de encendido para reactivar la pantalla.
+  </td>
+  </tr>
+
+  <tr id="CR-8">
+  <td>
+    CR-8
+  </td>
+  <td>
+    Configura el dispositivo para que se bloquee al presionar el botón de encendido. Presiona el botón de
+ encendido para colocar el dispositivo en modo de hibernación, luego presiona nuevamente el botón de
+ encendido para reactivar la pantalla y desbloquea el dispositivo.
+  </td>
+  </tr>
+
+  <tr id="CR-9">
+  <!-- Hardware features -->
+
+  <td>
+    CR-9
+  </td>
+  <td>
+    Para los dispositivos que tienen teclados deslizantes, desliza el teclado hacia dentro y hacia fuera
+ al menos una vez. Para los dispositivos que tienen teclados acoplados, conecta el dispositivo
+ al teclado.
+  </td>
+  </tr>
+
+  <tr id="CR-10">
+  <td>
+    CR-10
+  </td>
+  <td>
+    Para los dispositivos que tienen un puerto para pantalla externa, conecta la pantalla
+ externa.
+  </td>
+  </tr>
+
+  <tr id="CR-11">
+  <td>
+    CR-11
+  </td>
+  <td>
+    Inicia la aplicación y observa en el cajón de notificaciones todos los tipos de notificaciones
+ que la aplicación puede mostrar. Cuando sea posible, expande las notificaciones (Android
+ 4.1 y superior) y toca todas las acciones ofrecidas.
+  </td>
+  </tr>
+
+  <tr id="CR-12">
+  <td>
+    CR-12
+  </td>
+  <td>
+    Examina los permisos que solicita la aplicación; para ello, ingresa a Configuración &gt;
+ Información de la aplicación.
+  </td>
+  </tr>
+
+  <tr id="tg3">
+  <td>
+    Instalación en tarjetas SD
+  </td>
+  <td>
+    SD-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Repite el <em>Conjunto central</em> con la aplicación instalada en la <a href="{@docRoot}guide/topics/data/install-location.html">tarjeta SD del dispositivo</a>
+ (si la aplicación lo admite).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Para mover la aplicación a la tarjeta SD puedes usar Configuración &gt; Información de la aplicación &gt;
+ Mover a tarjeta SD.
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg32">
+  <td>
+    Aceleración de hardware
+  </td>
+  <td>
+    HA-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Repite el <em>Conjunto central</em> con la aceleración de hardware habilitada.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Para forzar la habilitación de la aceleración de hardware (cuando el dispositivo lo admita), agrega
+ <code>hardware-accelerated="true"</code> a
+ <code>&lt;application&gt;</code> en el manifiesto de la aplicación y vuelve a compilarla.
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg33">
+  <td>
+    Control del rendimiento
+  </td>
+  <td>
+    PM-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Repite el <em>Conjunto central</em> con la generación de perfiles de StrictMode habilitada <a href="#strictmode">como se describe a continuación</a>.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Presta mucha atención a la recolección de basura y su impacto en la
+ experiencia del usuario.
+    </p>
+  </td>
+  </tr>
+
+  <tr id="gp">
+  <td rowspan="3">
+    Google Play
+  </td>
+  <td>
+    GP-1
+  </td>
+  <td>
+    Inicia sesión en la <a href="https://play.google.com/apps/publish/">Consola
+ para desarrolladores</a> para revisar tu perfil de desarrollador, la descripción de la aplicación,
+ las capturas de pantalla, el gráfico central, la configuración de madurez y los comentarios de los usuarios.
+  </td>
+  </tr>
+
+  <tr id="GP-2">
+  <td>
+    GP-2
+  </td>
+  <td>
+    Descarga tu gráfico central y tus capturas de pantalla, y reduce su tamaño para que
+ coincidan con los tamaños de pantalla de los dispositivos y formatos que estás
+ probando.
+  </td>
+  </tr>
+
+  <tr id="GP-3">
+  <td>
+    GP-3
+  </td>
+  <td>
+    Revisa todos los elementos gráficos, los medios, el texto, las bibliotecas de códigos y otros
+ contenidos incluidos en la descarga de la aplicación o el archivo de expansión.
+  </td>
+  </tr>
+
+  <tr id="GP-4">
+  <td>
+    Pagos
+  </td>
+  <td>
+    GP-4
+  </td>
+  <td>
+    Navega a todas las pantallas de tu aplicación e ingresa a todos los flujos de compra integrados en la aplicación.
+  </td>
+  </tr>
+</table>
+
+<h3 id="strictmode">
+  Prueba con StrictMode
+</h3>
+
+<p>
+  Para la prueba de rendimiento, te recomendamos que habilites {@link android.os.StrictMode}
+ en tu aplicación y lo uses para detectar operaciones en el subproceso principal y en otros
+ subprocesos que podrían afectar el rendimiento, el acceso a la red, la lectura/escritura de archivos,
+ etc.
+</p>
+
+<p>
+  Puedes configurar una política de control por subproceso mediante {@link
+ android.os.StrictMode.ThreadPolicy.Builder} y habilitar todo el control
+ admitido en <code>ThreadPolicy</code> con {@link
+ android.os.StrictMode.ThreadPolicy.Builder#detectAll()}.
+</p>
+
+<p>
+  Asegúrate de habilitar la <strong>notificación visual</strong> de violaciones de la política
+ para <code>ThreadPolicy</code> mediante {@link
+ android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen()
+ penaltyFlashScreen()}.
+</p>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/tablets.jd
new file mode 100644
index 0000000..62c6f87
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/quality/tablets.jd
@@ -0,0 +1,846 @@
+page.title=Calidad de las aplicaciones para tablets
+page.metaDescription=Las tablets son un componente de rápido crecimiento en la base de instalaciones de Android, que ofrece nuevas oportunidades para tus aplicaciones.
+page.image=/distribute/images/tablet-guidelines-color.jpg
+Xnonavpage=true
+
+@jd:body
+<div id="qv-wrapper"><div id="qv">
+<h2>Lista de comprobación</h2>
+<ol>
+<li><a href="#core-app-quality">1. Realiza una prueba de Calidad básica de las aplicaciones para tablets</a></li>
+<li><a href="#optimize-layouts">2. Optimiza los diseños</a></li>
+<li><a href="#use-extra-space">3. Utiliza el área adicional de la pantalla</a></li>
+<li><a href="#use-tablet-icons">4. Utiliza recursos diseñados para tablets</a></li>
+<li><a href="#adjust-font-sizes">5. Ajusta las fuentes y los controles táctiles objetivo</a></li>
+<li><a href="#adjust-widgets">6. Ajusta los widgets de la pantalla de inicio</a></li>
+<li><a href="#offer-full-feature-set">7. Ofrece un conjunto completo de funciones</a></li>
+<li><a href="#android-versions">8. Aborda correctamente las versiones de Android</a></li>
+<li><a href="#hardware-requirements">9. Declara dependencias correctamente</a></li>
+<li><a href="#support-screens">10. Declara la compatibilidad con pantallas de tablets</a></li>
+<li><a href="#google-play">11. Presenta tu IU para tablets</a></li>
+<li><a href="#google-play-best-practices">12. Sigue las mejores prácticas para publicar en Google Play</a></li>
+
+</ol>
+<h2>Prueba</h2>
+<ol>
+<li><a href="#test-environment">Configuración de un entorno de prueba</a></li>
+</ol>
+</div></div>
+
+<div class="todp-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/tablet-guidelines-color.jpg" style="width:480px;">
+</div>
+
+<p>
+  Las tablets son un componente en aumento de la base de instalaciones de Android y ofrecen nuevas
+ oportunidades de interacción con los <a href="{@docRoot}distribute/stories/tablets.html">usuarios
+ y monetización</a>. Las pautas que se indican en este documento te ayudarán
+ a cumplir las expectativas de los usuarios de tablets a través de funciones atractivas y
+ una IU intuitiva y bien diseñada.
+</p>
+
+<p>
+  Si bien las pautas están numeradas, puedes abordarlas en cualquier orden. Debes
+ abordar cada una de las recomendaciones que se proporcionan en las pautas en la medida en que
+ resulte apropiado para tu aplicación; no obstante, para poder proporcionar el mejor
+ producto a tus clientes, sigue las recomendaciones en la mayor medida
+ posible.
+</p>
+
+<p>
+  A lo largo del documento, encontrarás vínculos a recursos que pueden
+ ayudarte a abordar cada una de las recomendaciones incluidas.
+</p>
+
+<div class="headerLine"><h2 id="core-app-quality">1. Realiza una prueba de Calidad básica de las aplicaciones para tablets</h2></div>
+
+<p>El primer paso en la provisión de una excelente experiencia con la aplicación en tablets es asegurarte
+ de que la aplicación cumpla con los <em>criterios de calidad de la aplicación principal</em> en todos los dispositivos
+ y formatos a los que apunte. Para obtener información completa, consulta las <a href="{@docRoot}distribute/essentials/quality/core.html">Pautas de calidad de la aplicación principal</a>. 
+</p>
+
+<p>
+Antes de publicar, asegúrate también de que tu aplicación apruebe los controles técnicos básicos y los criterios de lanzamiento, como los siguientes:
+</p>
+
+<ul>
+  <li><a href="#android-versions">Apunta a las versiones de Android adecuadas</a></li>
+  <li><a href="#hardware-requirements">Especifica correctamente las dependencias de hardware</a></li>
+  <li><a href="#support-screens">Declara la compatibilidad con las pantallas adecuadas</a></li>
+  <li><a href="#use-extra-space">Utiliza todo el espacio de pantalla disponible</a></li>
+  <li><a href="#google-play">Las capturas de pantalla se cargan a Google Play</a></li>
+</ul>
+
+<p>Si tu aplicación está cargada en la Consola para desarrolladores de Google Play, puedes
+ ver cómo le está yendo en función de esos controles
+ al visitar la página <a href="#google-play-optimization-tips">Sugerencias para
+ la optimización</a>.</p>
+
+
+<div class="headerLine">
+<h2 id="optimize-layouts">2. Optimiza los diseños para pantallas más grandes</h2></div>
+
+<p>
+  Android facilita el desarrollo de una aplicación que se ejecute bien en una amplio rango de
+ tamaños de pantalla y formatos de dispositivos. Esta amplia compatibilidad funciona a tu favor,
+ ya que te ayuda a diseñar una aplicación única que puedes distribuir extensamente
+ a todos los dispositivos a los que apuntes. No obstante, para ofrecer a tus usuarios la mejor
+ experiencia posible en cada configuración de pantalla, en especial en
+ tablets, debes optimizar tus diseños y otros componentes de la IU para
+ cada configuración de pantalla que admitas. En las tablets, la optimización de tu IU te permite
+ aprovechar al máximo el espacio de pantalla adicional disponible, por ejemplo, para ofrecer nuevas
+ funciones, presentar contenido nuevo o mejorar la experiencia de otras maneras con el objetivo
+ de aumentar la interacción del cliente.
+</p>
+
+<p>
+  Si desarrollaste tu aplicación para teléfonos celulares y ahora quieres distribuirla a
+ tablets, puedes comenzar por realizar ajustes menores en tus diseños, fuentes
+ y espaciado. En algunos casos, como para tablets de 7 pulgadas o para un juego
+ con lienzos grandes, esos ajustes podrían ser todo lo que necesitas hacer para que tu
+ aplicación se vea genial. En otros casos, como para tablets más grandes, puedes rediseñar
+ partes de tu IU para reemplazar la "IU estirada" con una IU multipanel eficaz,
+ navegación más simple y contenido adicional.
+</p>
+
+
+<div style="width:500px;margin:1.5em;margin-top:-16px;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">Despídete de tu IU "estirada"</span>: En las tablets, los diseños
+ de panel único generan un espacio en blanco raro y líneas demasiado extensas. Utiliza relleno
+ para reducir el ancho de los elementos de la IU y considera la posibilidad de usar diseños multipanel.</p>
+</div>
+
+<p>Aquí te proporcionamos alguna sugerencias:</p>
+
+
+<ul>
+  <li>Proporciona diseños personalizados, según sea necesario, para las pantallas <code>large</code> y
+ <code>xlarge</code>. También puedes proporcionar diseños que se cargarán
+ en función de la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">dimensión
+ más corta</a> de la pantalla o la <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">altura y el ancho 
+ mínimos disponibles</a>.
+  </li>
+
+  <li>Como mínimo, personaliza las dimensiones, como los tamaños de las fuentes, los márgenes, el espaciado
+ para pantallas más grandes, para mejorar el uso del espacio y la legibilidad del contenido.
+  </li>
+
+  <li>Ajusta el posicionamiento de los controles de la IU de modo que los usuarios puedan
+ acceder fácilmente a ellos mientras sujetan una tablet, como hacia los laterales cuando se encuentre en posición
+ horizontal.
+  </li>
+
+  <li>El relleno de los elementos de la IU normalmente debería ser más voluminoso en las tablets que en
+ los teléfonos celulares. Se recomienda un ritmo de<a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm">
+ 48 dp</a> (y una cuadrícula de 16 dp).
+  </li>
+
+  <li>Rellena correctamente el contenido de texto de modo que no se alinee directamente a lo largo de
+ los bordes de la pantalla. Usa un relleno <code>16dp</code> mínimo alrededor del contenido cercano a los
+ bordes de la pantalla.
+  </li>
+</ul>
+
+<p>En especial, asegúrate de que tus diseños no aparezcan "estirados"
+ a lo ancho de la pantalla:</p>
+
+<ul>
+<li>Las líneas de texto no deben ser excesivamente largas; optimízalas para que tengan una cantidad máxima de
+100 caracteres por línea, con mejores resultados entre 50 y 75.</li>
+<li>Los menús y ListViews no deben usar el ancho completo de la pantalla.</li>
+<li>Usa relleno para manejar los anchos de los elementos en pantalla o cambiar a una
+ IU multipanel para tablets (consulta la siguiente sección).</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/optimize"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="use-extra-space">3. Aprovecha el área adicional de la pantalla</h2></div>
+
+<div style="width:340px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">Los diseños multipanel</span> proporcionan un mejor equilibrio
+ visual en pantallas de tablets, y ofrecen una mayor utilidad y legibilidad.</p>
+</div>
+
+<p>Las pantallas de las tablets proporcionan un estado mucho más real de pantalla para tu aplicación,
+especialmente cuando se sujeta en posición horizontal. Principalmente, las tablets de 10 pulgadas ofrecen un
+área enormemente expandida, pero incluso las tablets de 7 pulgadas te proporcionan más espacio
+ para mostrar contenido e interactuar con los usuarios. </p>
+
+<p>Mientras consideras la IU de tu aplicación para ejecutarse en tablets, asegúrate de que
+ esté aprovechando completamente el área de pantalla adicional disponible en las tablets. Aquí te proporcionamos
+ algunas sugerencias:</p>
+
+<ul>
+<li>Busca oportunidades de incluir contenido adicional o usar un tratamiento
+ alternativo del contenido existente.</li>
+<li>Usa <a href="{@docRoot}design/patterns/multi-pane-layouts.html">diseños
+ multipanel</a> en las pantallas de las tablets para combinar vistas individuales en una vista compuesta. Esto
+ te permite usar el área de pantalla adicional de forma más eficiente y facilitar para
+ los usuarios la navegación en tu aplicación. </li>
+<li>Piensa cómo quieres que se reorganicen los paneles de las vistas compuestas
+ cuando la pantalla cambie de orientación.</li>
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+<div style="">
+<img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
+<img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Las vistas compuestas</span> combinan varias vistas individuales de la
+ IU de un teléfono celular <em>(antes mencionado)</em> en una IU enriquecida y más eficaz para tablets
+<em>(a continuación)</em>. </p>
+</div>
+</div>
+
+<li>Si bien una pantalla individual se implementa como una subclase {@link android.app.Activity}
+, considera la implementación de paneles de contenido individuales como subclases {@link
+android.app.Fragment}. Esto te permite
+ maximizar la reutilización de códigos entre diferentes factores y pantallas que
+ compartan contenido.</li>
+<li>Decide en qué tamaños de pantalla usarás una IU multipanel y luego proporciona los
+ diferentes diseños en los depósitos para el tamaño de pantalla correspondiente (como 
+<code>large</code>/<code>xlarge</code>) o anchos mínimos de pantalla (como
+<code>sw600dp</code>/<code>sw720</code>).</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/extrascreen"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="use-tablet-icons">4. Utiliza recursos diseñados para pantallas de tablets</h2></div>
+
+<div><img src="{@docRoot}design/media/devices_displays_density@2x.png"></div>
+
+<p>Para garantizar que tu aplicación se vea lo mejor posible, proporciona iconos y otros recursos
+ de mapa de bits para cada densidad en el rango que comúnmente admiten las tablets. Específicamente, debes
+ diseñar tus iconos para la barra de acciones, las notificaciones y el menú de inicio de acuerdo con las pautas de
+<a href="{@docRoot}design/style/iconography.html">Iconografía</a>, y proporcionarlos
+ en múltiples densidades de modo que se visualicen en el tamaño adecuado en todas las pantallas
+ sin verse borrosos y sin otros defectos de escala.</p>
+
+<p class="table-caption"><strong>Tabla 1</strong>. Tamaños de recursos sin formato para los tipos de icono.<table>
+<tr>
+<th>Densidad</th>
+<th>Lanzador</th>
+<th>Barra de acciones</th>
+<th>Notificación</th>
+<th>pequeña/contextual</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48 px</td>
+<td>32x32 px</td>
+<td>16x16 px</td>
+<td>24x24 px</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72 px</td>
+<td>48x48 px</td>
+<td>24x24 px</td>
+<td>36x36 px</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(usar hdpi)</em></td>
+<td><em>(usar hdpi)</em></td>
+<td><em>(usar hdpi)</em></td>
+<td><em>(usar hdpi)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96 px</td>
+<td>64x64 px</td>
+<td>32x32 px</td>
+<td>48x48 px</td>
+</tr>
+<tr>
+<td><code>xxhdpi</code></td>
+<td>144x144 px</td>
+<td>96x96 px</td>
+<td>48x48 px</td>
+<td>72x72 px</td>
+</tr>
+
+</table>
+
+<p>
+  Como mínimo, proporciona una versión de cada icono y recurso de mapa de bits optimizada
+ para <strong>al menos</strong> las siguientes densidades comunes de pantalla
+ de tablets:
+</p>
+<ul>
+  <li><code>hdpi</code></li>
+  <li><code>xhdpi</code></li>
+  <li><code>xxhdpi</code></li>
+</ul>
+
+<p>Otras sugerencias:</p>
+
+<ul>
+<li>Cuando diseñes iconos, usa formas vectoriales de modo que puedas escalarlos sin perder nitidez en los detalles ni los bordes.</li>
+<li>Usa <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+calificadores de recursos</a> específicos para la densidad a fin de garantizar que se carguen los iconos correctos para cada densidad de pantalla.</li>
+<li>Las tablets y otros dispositivos con pantallas grandes a menudo requieren un icono para el menú de inicio que sea un tamaño de densidad
+ más grande que la densidad real del dispositivo, de modo que debes proporcionar el icono del
+ menú de inicio en la mayor densidad posible. Por ejemplo, si una tablet tiene una pantalla de {@code xhdpi},
+ requerirá la versión {@code xxhdpi} del icono del menú de inicio.</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/assets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-font-sizes">5.
+Ajusta las fuentes y los controles táctiles objetivo</h2></div>
+
+<p>Para asegurarte de que tu aplicación sea fácil de usar en tablets, dedica un tiempo a ajustar los
+ tamaños de fuente y los controles táctiles en la IU para tablets para todas las configuraciones
+ de pantalla que admitas. Puedes ajustar los tamaños de fuente mediante <a href="{@docRoot}guide/topics/ui/themes.html">atributos modificables</a> o <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">recursos
+ de dimensión</a>, y puedes ajustar los controles táctiles mediante diseños y recursos de mapa de bits
+ dibujables, como se mencionó más arriba. </p>
+
+<p>Aquí te proporcionamos algunas consideraciones:</p>
+<ul>
+<li>El texto no debe ser excesivamente grande ni pequeño en los tamaños y densidades de pantalla de las
+ tablets. Asegúrate de que las etiquetas estén dimensionadas correctamente para los elementos de la IU con los que se
+ corresponden, y comprueba que no haya saltos de línea
+ inadecuados en las etiquetas, los títulos y otros elementos.</li>
+<li>El tamaño recomendado para los controles táctiles en pantalla es de 48dp (32dp
+ como mínimo); puede ser necesario que realices algunos ajustes en tu IU para tablets. Lee <a href="{@docRoot}design/style/metrics-grids.html">Métricas y
+ cuadrículas
+</a> para obtener más información acerca de la implementación de estrategias para ayudar a la mayoría de los usuarios. Para
+ satisfacer las necesidades de accesibilidad de ciertos usuarios, puede ser conveniente que uses
+ controles táctiles más grandes. </li>
+<li>Cuando sea posible, para los iconos más pequeños, expande el área táctil a más de
+ 48dp con {@link android.view.TouchDelegate}
+o simplemente centrando el icono dentro del botón transparente.</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/fonts"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-widgets">6. Ajusta el tamaño de los widgets de la pantalla de inicio</h2></div>
+
+<p>Si tu aplicación incluye un widget en la pantalla de inicio, aquí te mostramos algunos puntos que debes considerar
+ para garantizar una excelente experiencia de usuario en las pantallas de tablets: </p>
+
+<ul>
+<li>Configura la altura y el ancho predeterminados del widget de forma correcta
+ para las pantallas de tablets, como también la altura y el ancho mínimos y máximos.
+</li>
+<li>El tamaño del widget se debe poder modificar hasta los 420 dp o más para abarcar 5 o más
+ filas (si se trata de un widget vertical o cuadrado) o columnas (si se trata de un
+ widget horizontal o cuadrado) de la pantalla de inicio. </li>
+<li>Asegúrate de que las imágenes de 9-patch se visualicen correctamente.</li>
+<li>Usa los márgenes predeterminados del sistema.</li>
+<li>Configura el <code>targetSdkVersion</code> de la aplicación en 14 o más, si es
+ posible.</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/widgets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="offer-full-feature-set">7. Conjunto completo de funciones para usuarios de tablets</h2></div>
+
+<div class="centered-full-image" style="width:600px;margin:1.5em"><img src="{@docRoot}images/gp-tablets-full-feature-set.png" alt="Tablet feature sets"></div>
+
+<p>Permite que tus usuarios accedan a las mejores funciones de tu aplicación. Aquí te proporcionamos
+ algunas recomendaciones:</p>
+
+<ul>
+  <li>Diseña tu aplicación para que ofrezca al menos el mismo conjunto de funciones en tablets y
+ en teléfonos.
+  </li>
+
+  <li>En casos excepcionales, tu aplicación podría omitir o reemplazar ciertas funciones en
+ las tablets si no son compatibles con el hardware o el caso de uso de la mayoría de las
+ tablets. Por ejemplo:
+    <ul>
+      <li>Si el teléfono celular utiliza funciones de telefonía pero el servicio de telefonía no está disponible
+ en la tablet actual, puedes omitir o reemplazar la funcionalidad relacionada.
+      </li>
+
+      <li>Muchas tablets tienen un sensor GPS, pero la mayoría de los usuarios generalmente
+ no llevarían sus tablets con ellos mientras corren. Si tu aplicación para teléfonos proporciona
+ una funcionalidad que permite a los usuarios grabar un registro de GPS de sus carreras
+ mientras llevan sus teléfonos con ellos, no será necesario que la aplicación proporcione esa
+ funcionalidad en las tablets ya que el caso de uso no lo requiere.
+      </li>
+    </ul>
+  </li>
+
+  <li>Si piensas omitir una función o capacidad de tu IU para tablets, asegúrate
+ de que los usuarios no puedan acceder o que ofrezca “degradación estable”
+ a una función de reemplazo (consulta también la sección a continuación acerca de las funciones de hardware).
+  </li>
+</ul>
+
+<div class="headerLine"><h2 id="android-versions">8. Aborda correctamente las versiones de Android</h2></div>
+
+<p>
+  Para garantizar la distribución más amplia posible para tablets, asegúrate de que tu
+ aplicación aborde correctamente las versiones de Android compatibles con tablets. La compatibilidad
+ inicial con tablets se agregó en <a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a> (Nivel de API 11).
+  La compatibilidad unificada en el marco de la IU para tablets, teléfonos y otros dispositivos se
+ introdujo en <a href="{@docRoot}about/versions/android-4.0.html">Android
+ 4.0</a>
+</p>
+
+<p>
+  Puedes configurar el rango de versiones de Android admitidas por tu aplicación en el archivo de
+ manifiesto en el elemento <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+. En la mayoría de los casos, puedes abordar versiones de Android correctamente al configurar
+ el atributo <code>targetSdkVersion</code> del elemento en el nivel de API más
+ alto posible.
+</p>
+
+<p style="margin-bottom:.5em;">
+  Como mínimo, comprueba el elemento <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+ para asegurarte de lo siguiente:
+</p>
+
+<ol style="list-style-type:lower-alpha;margin-top:0em;">
+  <li>
+    <code>targetSdkVersion</code> está declarado con un valor de 11 o superior (se recomienda 14 o
+ superior), O
+  </li>
+
+  <li>
+    <code>minSdkVersion</code> está declarado con un valor de 11 o superior.
+  </li>
+
+  <li>Si se declara un atributo <code>maxSdkVersion</code>, debe tener un
+ valor de 11 o superior. Ten en cuenta que, en general,
+ <em>no se recomienda</em> el uso de <code>maxSdkVersion</code>.
+  </li>
+</ol>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/versions"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="hardware-requirements">9. Declara correctamente dependencias de características de hardware</h2></div>
+
+<p>
+  Los teléfonos celulares y las tablets generalmente ofrecen compatibilidad de hardware para
+ sensores, cámara, telefonía y otras funciones algo diferente. Por ejemplo, muchas tablets
+ se encuentran disponibles en una configuración "Wi-Fi" que no incluye compatibilidad con telefonía.
+</p>
+
+<p>
+  A fin de que puedas distribuir un APK único de forma extensiva a toda tu base de
+ clientes de teléfonos y tablets, asegúrate de que tu aplicación no declare
+ requisitos para características de hardware que no se ofrezcan comúnmente en las tablets.
+  En su lugar, declara la características de hardware como <em>no obligatorias</em> en el manifiesto de la
+ aplicación, como se describe a continuación.
+</p>
+
+<ul>
+<li>En el manifiesto de tu aplicación, busca elementos <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+. Específicamente, busca características de hardware que podrían no estar
+ disponibles en algunas tablets, como por ejemplo:
+
+<ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code> (hace referencia a la cámara posterior), o</li>
+<li><code>android.hardware.camera.front</code></li>
+</ul></li>
+
+<li>Declara los elementos <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+ como <em>no obligatorios</em> al incluir el atributo <code>android:required=”false”</code>
+.
+
+<p>
+  Por ejemplo, aquí te mostramos la manera correcta de declarar una dependencia en
+ <code>android.hardware.telephony</code> de modo que aún puedas
+ distribuir tu aplicación de forma extensiva, incluso a dispositivos que no ofrezcan telefonía:
+</p>
+
+<pre>&lt;uses-feature android:name="android.hardware.telephony" android:required="false" /&gt;</pre></li>
+
+<li>En forma similar, revisa el manifiesto para detectar elementos <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permission&gt;</code></a> que 
+<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">impliquen requisitos
+ de características de hardware</a> que no sean adecuadas para tablets. Si encuentras esos
+ permisos, asegúrate de declarar explícitamente un elemento
+ <code>&lt;uses-feature&gt;</code> correspondiente para las características e incluye el
+ atributo <code>android:required=”false”</code>.</li>
+</ul>
+
+
+<p>
+  Después de declarar las características de hardware como <em>no obligatorias</em>, prueba
+ tu aplicación en diferentes dispositivos. La aplicación debe funcionar normalmente cuando las
+ características de hardware que utiliza no estén disponibles, y debe ofrecer "degradación
+ estable" y funcionalidades alternativas cuando corresponda.
+</p>
+
+<p>
+  Por ejemplo, si una aplicación utiliza normalmente GPS para establecer la ubicación, pero el
+ dispositivo no admite GPS, la aplicación podría permitirle al usuario establecer la ubicación manualmente
+. La aplicación puede comprobar la presencia de capacidades de hardware en el dispositivo durante el runtime y manipularlas
+ según resulte necesario.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/hardware"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="support-screens">10. Declara la compatibilidad con pantallas de tablets</h2></div>
+
+<p>Para garantizar que puedes distribuir tu aplicación a una amplia gama de tablets, la aplicación debe
+ declarar la compatibilidad con diferentes tamaños de pantalla de tablets en su archivo de manifiesto de la siguiente manera:</p>
+
+<ul>
+  <li>Un
+ elemento <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+, si se declara, no debe especificar <code>android:largeScreens="false"</code>
+ ni <code>android:xlargeScreens="false"</code>.</li>
+  <li>Para las aplicaciones que apuntan a un valor de <code>minSdkVersion</code> inferior a 13, se debe declarar un elemento
+ <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+ con <code>android:largeScreens="true"</code> y
+ <code>android:xlargeScreens="true"</code>.</li>
+</ul>
+
+<p>Si la aplicación declara un elemento
+ <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>
+ en el manifiesto, el elemento debe incluir atributos que especifiquen
+ <em>todas las combinaciones de tamaño y densidad para pantallas de tablets</em> que admita
+ la aplicación. Recuerda que, si fuera posible, debes evitar el uso del
+ elemento <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>
+ en tu aplicación.</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/tabletscreens"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="google-play">11. Presenta tu IU para tablets en Google Play</h2></div>
+
+<p>
+  Cuando termines de crear una IU enriquecida y optimizada para tu aplicación
+ para tablets, asegúrate de que tus clientes lo sepan. Aquí te ofrecemos algunas
+ estrategias clave para promocionar tu aplicación para tablets a los usuarios en Google Play.
+</p>
+
+<div><img class="border-img" src="{@docRoot}images/gp-tablet-quality-4.jpg"></div>
+
+
+<h4>
+  Carga capturas de pantalla de tu IU para tablets
+</h4>
+
+<p>
+  Los usuarios de tablets quieren saber cómo se ve tu aplicación en una tablet, no en un
+ teléfono. Si desarrollaste una aplicación para tablets, asegúrate de cargar capturas de pantalla
+ de tu IU para tablets a la Consola para desarrolladores de Google Play. Aquí te proporcionamos algunas pautas:
+  </p>
+
+<ul style="margin-top:0;">
+  <li>Exhibe la funcionalidad central de tu aplicación, no
+ una página de inicio ni de inicio de sesión. Dondequiera que los usuarios pasen la mayor parte del tiempo, eso
+ es lo que debes mostrar en tus capturas de pantalla.
+  </li>
+
+  <li>Agrega capturas de pantalla tomadas en tablets de 7 y 10 pulgadas.
+  </li>
+
+  <li>Agrega capturas de pantalla tomadas en orientación vertical
+ y horizontal, si fuera posible.
+  </li>
+
+  <li>Usa imágenes de la pantalla si fuera posible. Evita mostrar el hardware del dispositivo en tus
+ capturas de pantalla.</li>
+
+  <li>La resolución recomendada para las capturas de pantalla de tu tablet es <strong>1280 x 720</strong>
+ o superior en cada orientación.
+  </li>
+
+  <li>Carga hasta 8 capturas de pantalla de tu IU para tablets para tablets de 7 pulgadas
+ y 8 capturas de pantalla para tablets de 10 pulgadas.
+  </li>
+</ul>
+
+<h4>
+  Actualiza la descripción y las notas de distribución de tu aplicación
+</h4>
+
+<ul>
+  <li>En la descripción de tu aplicación, asegúrate de resaltar que la aplicación ofrece
+ una IU optimizada para tablets y excelentes funciones para los usuarios de tablets. Agrega algunos
+ detalles acerca de cómo funciona tu IU para tablets y por qué les gustará a los usuarios.
+  </li>
+
+  <li>Incluye información acerca de la compatibilidad para tablets en las notas de distribución de la tablet y
+ actualiza la información.
+  </li>
+</ul>
+
+<h4>
+  Actualiza tu video promocional
+</h4>
+
+<p>
+  Muchos usuarios miran el video promocional de una aplicación para tener una idea de cómo se ve la
+ aplicación y si la disfrutarán. En el caso de los usuarios de tablets, aprovecha este
+ interés al resaltar la IU para tablets de tu aplicación en tu video promocional. Aquí
+ te proporcionamos algunas sugerencias y pautas:
+</p>
+
+<ul>
+  <li>Agrega una o más capturas de tu aplicación ejecutándose en una tablet. Para atraer a los
+ usuarios de tablets de forma más eficaz, se recomienda que promociones tu IU para
+ tablets en una proporción aproximadamente similar a la de tu IU para teléfonos.
+  </li>
+
+  <li>Muestra tu IU para tablets al comienzo del video, si fuera posible. No des por sentado que
+ los usuarios de tablets esperarán pacientemente que finalice el recorrido por las funciones de una IU para teléfonos.
+ Lo ideal es que captes su interés de inmediato al mostrarles la IU de para tablets durante
+ los primeros 10 segundos, o en el mismo momento que presentas la IU para teléfonos.
+  </li>
+
+  <li>Para dejar en claro que estás mostrando una IU para tablets, incluye imágenes de tu
+ aplicación ejecutándose en una tablet.
+  </li>
+
+  <li>Resalta la IU para tablets de tu aplicación en el relato o la narración grabada del video.
+  </li>
+</ul>
+
+<h4>
+  Presenta la IU para tablets en tus campañas promocionales
+</h4>
+
+<p>
+  Asegúrate de dar a conocer tu IU para tablets a los usuarios de tablets a través de tus
+ campañas promocionales, sitio web, publicaciones en redes sociales, anuncios publicitarios y en otros sitios. Aquí te proporcionamos
+ algunas sugerencias:
+</p>
+
+<ul>
+  <li>Planifica una campaña publicitaria o de comercialización que resalte el uso de tu
+ aplicación en tablets.</li>
+
+  <li>Muestra los mejores aspectos de tu aplicación para tablets en tus campañas promocionales; utiliza el <a href="{@docRoot}distribute/tools/promote/device-art.html">Generador de material gráfico para dispositivos</a> para
+ crear rápidamente una imagen promocional de alta calidad de tu aplicación ejecutándose
+ en una tablet de 7 o 10 pulgadas, en la orientación que prefieras, con o sin
+ sombra paralela y brillo de pantalla. Es tan sencillo como realizar una captura, arrastrar y soltar.
+  </li>
+
+  <li>Incluye una insignia de Google Play en tus promociones por Internet para que los usuarios
+ puedan acceder directamente al directorio de tienda de tu aplicación. Puedes generar una insignia en
+ diferentes idiomas con el <a href="{@docRoot}distribute/tools/promote/badges.html">Generador de insignias</a>.
+  </li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/showcase"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine">
+  <h2 id="google-play-best-practices">
+    12. Sigue las mejores prácticas para publicar en Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  Aquí te mostramos algunas mejores prácticas para distribuir una aplicación para tablets exitosa en Google
+ Play.
+</p>
+
+<div>
+  <img class="border-img" src="{@docRoot}images/gp-tablet-quality-5.jpg" style="1px solid #ddd">
+</div>
+
+<h4 id="google-play-optimization-tips">
+  Repasa las sugerencias de optimización para tu aplicación
+</h4>
+
+<p>La Consola para desarrolladores de Google Play ahora ofrece una página de Sugerencias para la optimización
+ que te permite comprobar rápidamente cómo le está yendo a tu aplicación en función de pautas básicas para la calidad
+ y distribución de aplicaciones para tablets. Para visitar la página, inicia sesión en la Consola para desarrolladores,
+ carga la aplicación desde Todas las aplicaciones y haz clic en Sugerencias para la optimización en el
+ panel de navegación de la izquierda.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Cómo enviar comentarios</h2>
+
+<p>Utiliza en vínculo que se proporciona a continuación para enviar
+ comentarios o solicitar una revisión manual de tus Sugerencias para la optimización.</p>
+
+<p>Antes de enviar comentarios, asegúrate de leer las secciones relevantes de las
+ pautas de calidad de las aplicaciones para tablets.</p>
+
+<p><strong><a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">Formulario de contacto de Diseñado para tablets &raquo;</a></strong></p>
+</div>
+</div>
+
+<p>La Consola para desarrolladores crea la página de Sugerencias para la optimización de tu aplicación
+ al ejecutar una serie de comprobaciones para verificar los criterios básicos
+ de calidad. Si detecta problemas, te los notificará como elementos "Pendientes"
+ en la página de Sugerencias para la optimización.</p>
+
+<p>Si desarrollaste una experiencia de tablet para tu aplicación, asegúrate de
+ visitar la página de Sugerencias para la optimización para ver cómo le está yendo a la aplicación
+ en relación con las comprobaciones básicas.  Si se indican errores, te
+ recomendamos que los abordes en tu aplicación y, si fuera necesario, cargues un nuevo archivo binario para
+ distribución. </p>
+
+<p>Si la página de Sugerencias para la optimización indica problemas "Pendientes" que crees que no
+ corresponden a tu aplicación o afectan la calidad de la aplicación en las tablets, 
+usa el <a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">Formulario de contacto de Diseñado para tablets&raquo;</a> para comunicárnoslo. Revisaremos
+ tu aplicación y actualizaremos tu página de Sugerencias para la optimización
+ según corresponda.</p>
+
+
+<h4>Confirma el filtrado de la aplicación</h4>
+
+<p>
+  Después de cargar la aplicación a la <a href="https://play.google.com/apps/publish/">Consola para desarrolladores</a>, examina la
+ lista de dispositivos admitidos por el APK para asegurarte de que la aplicación no se haya excluido de la filtración
+ de tablets a las que quieres apuntar.
+</p>
+
+<h4>Distribuye un solo APK</h4>
+
+<p>
+  Se recomienda que publiques tu aplicación como un solo APK para todos los
+ tamaños de pantalla (teléfonos y tablets), con un solo directorio en Google Play. Este enfoque
+ ofrece muchas ventajas importantes.
+</p>
+
+<ul style="margin-top:.25em;">
+  <li>Es más fácil para los usuarios encontrar tu aplicación en búsquedas, exploraciones o promociones.
+  </li>
+
+  <li>Es más fácil para los usuarios restaurar tu aplicación automáticamente si adquieren un
+ dispositivo nuevo.
+  </li>
+
+  <li>Tus estadísticas de descarga y calificaciones se consolidan a través de todos los dispositivos.
+  </li>
+
+  <li>Si publicas una aplicación para tablets en un segundo directorio, esto puede reducir las calificaciones para
+ tu marca.
+  </li>
+</ul>
+
+<p>
+  Si fuera necesario, puedes seleccionar, como alternativa, distribuir tu aplicación con <a href="{@docRoot}google/play/publishing/multiple-apks.html">Compatibilidad con múltiples APK</a>,
+ aunque en la mayoría de los casos se recomienda firmemente usar un solo APK
+ que abarque todos los dispositivos.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine">
+  <h2 id="test-environment">
+    Configuración de un entorno de prueba para tablets
+  </h2>
+
+
+</div>
+
+<p>
+  Evalúa la calidad de tu aplicación en tablets; tanto la calidad de la aplicación principal
+ como la calidad de la aplicación para tablets, con un hardware adecuado o un entorno de simulación
+ para la realización de pruebas.
+</p>
+
+<p>
+  En comparación con el <a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">entorno de prueba
+ recomendado</a> para probar la aplicación en función de los criterios de calidad para la aplicación principal,
+ incluye tablets de tamaño mediano y tablets con más o menos características de
+ hardware/software.
+</p>
+
+<p class="table-caption"><strong>Tabla 1</strong>. Un entorno de prueba típico para tablets
+ debería incluir uno o más dispositivos de cada fila de la tabla que aparece a continuación, con una de las
+ versiones de plataforma, configuraciones de pantalla y configuraciones de características de hardware indicadas.</p>
+
+<table>
+<tr>
+<th>Tipo</th>
+<th>Tamaño</th>
+<th>Densidad</th>
+<th>Versión</th>
+<th>Máscara del AVD</th>
+</tr>
+
+<tr>
+<td>Tablet de 7 pulgadas</td>
+<td><span style="white-space:nowrap"><code>large</code> o</span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
+<td>Android 4.0+ (nivel de API 14 o superior)</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">Tablet de</span> 10 pulgadas</td>
+<td><span style="white-space:nowrap"><code>xlarge</code> o</span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>,<br /><code>hdpi</code>,<br /><code>xhdpi</code></td>
+<td>Android 3.2+ (nivel de API 13 o superior)</td>
+<td>WXGA800</td>
+</tr>
+</table>
+
+<div class="headerLine"><h2 id="related-resources">Recursos relacionados</h2></div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/tv.jd
new file mode 100644
index 0000000..8645858
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/quality/tv.jd
@@ -0,0 +1,509 @@
+page.title=Calidad de las aplicaciones para TV
+page.metaDescription=La televisión es un segmento en aumento de dispositivos Android que requiere atención específica en el diseño y la funcionalidad de las aplicaciones a fin de crear una excelente experiencia.
+page.image=/distribute/images/gp-tv-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Criterios de calidad</h2>
+  <ol>
+    <li><a href="#ux">Diseño e interacción</a></li>
+    <li><a href="#fn">Funcionalidad</a></li>
+    <li><a href="#faq">Preguntas frecuentes</a></li>
+  </ol>
+
+  <h2>También deberías leer</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+Calidad de la aplicación principal</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+Optimiza tu aplicación</a></li>
+  </ol>
+</div>
+</div>
+
+<div class="top-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/gp-tv-quality.png" style="width:480px;">
+</div>
+
+<p>
+  Los usuarios tienen diferentes expectativas cuando miran televisión, en comparación con el uso de un teléfono o una tablet.
+  Un usuario de TV típico se sienta a aproximadamente 3 metros de distancia de la pantalla, por lo que los detalles pequeños son menos perceptibles
+ y el texto pequeño resulta difícil de leer. Dado que los usuarios se sientan lejos del televisor, deben usar un dispositivo de mando
+ a distancia para navegar y seleccionar, en lugar de tocar los elementos que aparecen en pantalla. Esas
+ diferencias cambian significativamente los requisitos de lo que sería una buena experiencia del usuario de TV.
+</p>
+
+<p>
+  El primer paso para crear una excelente experiencia para usuarios de TV es leer y seguir las
+ <a href="{@docRoot}design/tv/index.html">pautas de diseño para Android TV</a>, que proporcionan
+ instrucciones acerca de cómo crear aplicaciones para TV que proporcionen la mejor experiencia del usuario. También debes leer la capacitación
+ <a href="{@docRoot}training/tv/start/index.html">Cómo crear aplicaciones para TV</a> a fin de comprender
+ los requisitos de implementación básicos de una aplicación para TV.
+</p>
+
+<p class="caution">
+  <strong>Importante:</strong> Para garantizar una excelente experiencia del usuario, las aplicaciones para dispositivos de TV deben cumplir algunos
+ requisitos de utilidad específicos. Solo las aplicaciones que cumplan con los siguientes criterios de calidad
+ calificarán como una aplicación de Android TV en Google Play.
+</p>
+
+<p class="note"><strong>Nota:</strong> Para obtener información acerca de cómo publicar tus aplicaciones para TV en Google Play,
+ consulta <a href="{@docRoot}distribute/googleplay/tv.html">Distribución para Android TV</a>.</p>
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  Diseño visual e interacción del usuario
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios permiten que te asegures de que tu aplicación cumpla con los patrones clave de diseño e interacción
+ a fin de garantizar una experiencia del usuario uniforme, intuitiva y agradable en dispositivos de TV.
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    Tipo
+  </th>
+  <th style="width:54px;">
+    Prueba
+  </th>
+  <th>
+    Descripción
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="4" id="launcher">
+    Lanzador
+  </td>
+
+  <td id="TV-LM">
+    TV-LM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación exhibe un icono del Lanzador de Android TV después de la instalación.
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LB">
+    TV-LB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación exhibe un banner de 320 px x 180 px como su icono de Lanzador de Android TV.
+      (<a href="{@docRoot}design/tv/patterns.html#banner">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-BN">
+    TV-BN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      El banner de inicio de la aplicación contiene el nombre de la aplicación.
+      (<a href="{@docRoot}design/tv/patterns.html#banner">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LG">
+    TV-LG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Si la aplicación es un juego, aparece en la fila Juegos del Lanzador de Android TV.<br>
+      (<a href="{@docRoot}training/tv/games/index.html#manifest">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="layout">
+    Diseño
+  </td>
+
+  <td id="TV-LO">
+    TV-LO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las interfaces de la aplicación se presentan en orientación horizontal.
+      (<a href="{@docRoot}training/tv/start/layouts.html#structure">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TC">
+    TV-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación exhibe el texto central en un tamaño de 16 sp o más grande.
+      (<a href="{@docRoot}design/tv/style.html#typography">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TA">
+    TV-TA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación exhibe todo el texto en un tamaño de 12 sp o más grande.
+      (<a href="{@docRoot}design/tv/style.html#typography">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-OV">
+    TV-OV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación no exhibe texto ni funcionalidades que estén parcialmente
+ cortados por los bordes de la pantalla.
+      (<a href="{@docRoot}training/tv/start/layouts.html#overscan">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TR">
+    TV-TR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación no opaca parcialmente otras aplicaciones. La aplicación ocupa toda la pantalla y tiene
+ un fondo que no es transparente.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="navigation">
+    Navegación
+  </td>
+
+  <td id="TV-DP">
+    TV-DP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La funcionalidad de la aplicación se puede navegar con los controles del mando de 5 direcciones, a menos que la aplicación
+ requiera un controlador para juegos como se especifica en <a href="#TV-GP">TV-GP</a>.
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DK">
+    TV-DK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación requiere un controlador para juegos, como se especifica en <a href="#TV-GP">TV-GP</a>; se puede
+ navegar por toda la funcionalidad con las teclas de un controlador para juegos de Android estándar.
+      (<a href="{@docRoot}training/game-controllers/controller-input.html#button">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DM">
+    TV-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación no requiere que el mando a distancia tenga un botón de Menú para acceder a los controles de la
+ interfaz de usuario.
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  Funcionalidad
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios garantizan que tu aplicación esté correctamente configurada y proporcione el comportamiento
+ funcional previsto.
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    Tipo
+  </th>
+  <th style="width:54px;">
+    Prueba
+  </th>
+  <th>
+    Descripción
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="2" id="manifest">
+   Manifiesto
+  </td>
+
+  <td id="TV-ML">
+    TV-ML
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      El manifiesto de la aplicación establece un tipo previsto de {@link android.content.Intent#ACTION_MAIN} con la categoría
+ {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER}.
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+</tr>
+  <td id="TV-MT">
+    TV-MT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      El manifiesto de la aplicación establece la característica de hardware {@code android.hardware.touchscreen} como no obligatoria.
+      (<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">Obtén
+ más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="game-controllers">
+    Controladores para juegos
+  </td>
+
+  <td id="TV-GP">
+    TV-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Si la aplicación utiliza un controlador para juegos como su método de entrada principal, debe declarar el requisito
+ correspondiente con la etiqueta del manifiesto <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>.
+      (<a href="{@docRoot}training/tv/games/index.html#gamepad">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-GC">
+    TV-GC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Si la aplicación proporciona instrucciones visuales para el uso de controladores para juegos, las instrucciones
+ no deben contener recursos de marca y deben exhibir un diseño de botones compatible.
+      (<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="advertising">
+    Publicidad
+  </td>
+
+  <td id="TV-AP">
+    TV-AP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación permite la interacción con anuncios publicitarios mediante el uso de los controles del mando de dirección.
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AD">
+    TV-AD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Para la publicidad que utilice anuncios en pantalla completa que no sean en video, la aplicación le
+ permite al usuario omitir de inmediato el anuncio con los controles del mando de dirección.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AU">
+    TV-AU
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Para la publicidad que utilice anuncios que admitan clics, no ocupen la pantalla completa y no sean en video, la aplicación no permite que los
+ anuncios vinculen a una URL.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AA">
+    TV-AA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Para la publicidad que utilice anuncios que admitan clics, no ocupen la pantalla completa y no sean en video, la aplicación no permite que los
+ anuncios vinculen a otra aplicación que no está disponible para dispositivos de TV.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="web">
+    Contenido web
+  </td>
+
+  <td id="TV-WB">
+    TV-WB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Para el contenido web, la aplicación utiliza componentes {@link android.webkit.WebView} y no intenta
+ ejecutar una aplicación de explorador web.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="media-playback">
+    Reproducción multimedia
+  </td>
+
+  <td id="TV-NP">
+    TV-NP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Si la aplicación continúa reproduciendo sonido después de que el usuario sale de ella, la aplicación proporciona una tarjeta <em>Reproduciendo
+ ahora</em> en la fila de recomendación de la pantalla de inicio de modo que los usuarios puedan regresar a la aplicación
+ para controlar la reproducción.
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PA">
+    TV-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Si la aplicación proporciona una tarjeta <em>Reproduciendo ahora</em>, cuando el usuario la seleccione pasará a una
+ pantalla que permite pausar la reproducción.
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PP">
+    TV-PP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Si la aplicación reproduce contenido de video o música, alternará entre reproducción y pausado del contenido
+ multimedia cuando se envíe un evento clave de reproducción o pausado durante la reproducción.<br>
+      (<a href="{@docRoot}reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE">Obtén
+ más información</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+<div class="headerLine">
+  <h2 id="faq">
+  Preguntas frecuentes
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>Después de enviar mi aplicación, ¿cómo sabré si mi aplicación no cumple todos los requisitos para
+ dispositivos de TV?</strong>
+</p>
+<p>
+  Si tu aplicación no cumple los requisitos de utilidad que se describen en esta página, el equipo de la Play Store
+ se comunicará contigo a la dirección de correo electrónico que especificaste en la cuenta principal de la <a href="https://play.google.com/apps/publish/">Consola para desarrolladores de Google Play</a> asociada con
+ la aplicación.
+</p>
+<p class="caution">
+  <strong>Advertencia:</strong> Asegúrate de que tu aplicación incluya las <a href="{@docRoot}preview/tv/start/index.html#tv-activity">entradas obligatorias del manifiesto</a> para dispositivos de TV;
+ de lo contrario, la aplicación no se considerará una aplicación para TV y no se revisará conforme a los requisitos de utilidad para
+ TV.
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Mi aplicación abarca más que dispositivos de TV. Si mi aplicación no cumple con los
+ requisitos para dispositivos de TV, ¿aparecerá todavía mi aplicación nueva o actualizada en Google Play para teléfonos y
+ tablets?</strong>
+</p>
+<p>
+  Sí. Los requisitos que se describen más arriba solo restringen la distribución en la Play Store de Google para dispositivos
+ de TV. La distribución a otros tipos de dispositivos, como teléfonos, tablets, etc., no se verá
+ afectada.
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Si mi aplicación cumple los requisitos de publicación, ¿cuándo estará disponible en la Play Store
+ de Google para dispositivos de TV?</strong>
+</p>
+
+<p>
+  Las aplicaciones que cumplen los requisitos para TV aparecerán en la Play Store de Google para dispositivos de TV
+ <em>después</em> del lanzamiento oficial de Android 5.0.
+</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/wear.jd
new file mode 100644
index 0000000..a625f7b
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/quality/wear.jd
@@ -0,0 +1,452 @@
+page.title=Calidad de las aplicaciones para Wear
+page.tags="wear","wearables","quality","guidelines"
+page.metaDescription=Los dispositivos portátiles (wearables) son dispositivos más pequeños diseñados para permitir la captura de información de un vistazo y requieren aplicaciones exclusivas que proporcionen la información correcta en el momento adecuado.
+page.image=/distribute/images/gp-wear-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Criterios de calidad</h2>
+  <ol>
+    <li><a href="#ux">Diseño e interacción</a></li>
+    <li><a href="#fn">Funcionalidad</a></li>
+    <li><a href="#faq">Preguntas frecuentes</a></li>
+  </ol>
+
+  <h2>También deberías leer</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+Calidad de la aplicación principal</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+Optimiza tu aplicación</a></li>
+    <li><a href="{@docRoot}design/patterns/notifications.html">
+Notificaciones</a></li>
+  </ol>
+</div>
+</div>
+
+<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;">
+
+<p>
+  Android Wear tiene como objetivo proporcionar a los usuarios la información correcta en el momento adecuado. Las increíbles
+ experiencias de Android Wear se inician automáticamente, permiten captar información de un vistazo y prácticamente no requieren la interacción del
+ usuario. Diseñar aplicaciones para wearables es muy diferente a diseñar para teléfonos o
+ tablets. Hay fortalezas y debilidades diferentes, casos de uso diferentes y ergonomías
+ diferentes que se deben tener en cuenta.
+</p>
+
+<p>
+  El primer paso para crear una excelente experiencia para usuarios de Wear es leer las
+ <a href="{@docRoot}design/wear/index.html">pautas de diseño para Android Wear</a>, que proporcionan
+ instrucciones acerca de cómo crear aplicaciones para Wear que proporcionen la mejor experiencia de usuario. También debes leer la capacitación
+ <a href="{@docRoot}training/building-wearables.html">Cómo crear aplicaciones para dispositivos portátiles (wearables)</a> a fin de
+ comprender los requisitos de implementación básicos de una aplicación para Wear.
+</p>
+
+<p class="caution">
+  <strong>Importante:</strong> Para garantizar una excelente experiencia de usuario, las aplicaciones para wearables deben cumplir algunos
+ requisitos de utilidad específicos. Solo las aplicaciones que cumplan con los siguientes criterios de calidad
+ calificarán como una aplicación de Android Wear en Google Play. Si califica como aplicación de Wear, los usuarios de
+ Android Wear podrán descubrir de forma más fácil tu aplicación en Google Play.
+</p>
+
+<p class="note">
+ <strong>Nota:</strong> Para obtener información acerca de cómo publicar tus aplicaciones para Wear en Google Play, consulta <a href="{@docRoot}distribute/googleplay/wear.html">Distribución para Android Wear</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="fn">
+  Funcionalidad
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios garantizan que tu aplicación esté correctamente configurada y proporcione el comportamiento
+ funcional previsto.
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    Tipo
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    Descripción
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="general">
+   General
+  </td>
+
+  <td id="WR-GL">
+    WR-GL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación para dispositivos portátiles incluye notificaciones con funcionalidad específica para wearables o una aplicación
+ para wearables que se ejecuta directamente en el dispositivo Wear.
+      (<a href="{@docRoot}training/building-wearables.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-VF">
+    WR-VF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación posee funcionalidad Wear visible para el usuario.
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-BF">
+    WR-BF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La funcionalidad Wear funciona según lo previsto o descrito en el directorio de la tienda en la Play Store de Google.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="packaging">
+   Integración
+  </td>
+
+  <td id="WR-PK">
+    WR-PK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las aplicaciones para wearables que dependen de una aplicación para dispositivos portátiles para adquirir su plena funcionalidad están integradas dentro de esa
+ aplicación para wearables.
+      (<a href="{@docRoot}training/wearables/apps/packaging.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="functional-notifications">
+    Notificaciones
+  </td>
+
+  <td id="WR-FW">
+    WR-FW
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las notificaciones con funcionalidad específica para wearables usan un {@code RemoteInput} o
+ {@code WearableExtender}.
+      (<a href="{@docRoot}training/wearables/notifications/index.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FR">
+    WR-FR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las notificaciones para aplicaciones de mensajería permiten a los usuarios responder mediante entradas de voz o respuestas rápidas.
+      (<a href="{@docRoot}training/wearables/notifications/voice-input.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FG">
+    WR-FG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las notificaciones similares se agrupan en una pila.
+      (<a href="{@docRoot}training/wearables/notifications/stacks.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="gestures">
+    Gestos
+  </td>
+
+  <td id="WR-GP">
+    WR-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las actividades en pantalla completa usan el gesto de presión prolongada únicamente para salir.
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/exit.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-GD">
+    WR-GD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Si la aplicación deshabilita el gesto “deslizar para descartar” en una actividad en pantalla completa, responderá al
+ gesto “presionar de forma prolongada para descartar” en esa actividad.
+      (<a href="{@docRoot}training/wearables/ui/exit.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="watchface">
+    Cara de reloj
+  </td>
+
+  <td id="WR-WF">
+    WR-WF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las aplicaciones que incluyen caras de reloj usan la API oficial de Cara de reloj.
+      (<a href="{@docRoot}training/wearables/watch-faces/index.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ux">
+  Diseño visual e interacción con el usuario
+  </h2>
+
+
+</div>
+
+<p>
+  Estos criterios permiten que te asegures de que tu aplicación cumpla con los patrones clave de diseño e interacción a fin de proporcionar
+ una experiencia de usuario uniforme, intuitiva y agradable en wearables.
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    Tipo
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    Descripción
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="layout">
+    Diseño
+  </td>
+
+  <td id="WR-LS">
+    WR-LS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La interfaz de usuario de la aplicación tiene el formato correcto para pantallas cuadradas. El contenido de la aplicación
+ se ajusta al área física de la pantalla y no se visualiza texto ni controles cortados por los bordes de la pantalla.
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-LR">
+    WR-LR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La interfaz de usuario de la aplicación tiene el formato correcto para pantallas circulares, incluidos dispositivos con un
+ bajorrelieve (o “mentón”) en la parte inferior de la pantalla. El contenido de la aplicación se ajusta al área física
+ de la pantalla y no se visualiza texto ni controles cortados por los bordes de la pantalla.
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-TC">
+    WR-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      El texto en pantalla es grande y permite captar la información de un vistazo con un tamaño mínimo sugerido de 16 sp.
+      (<a href="{@docRoot}design/wear/style.html#Typography">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="launcher">
+    Lanzador
+  </td>
+
+  <td id="WR-LN">
+    WR-LN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La cadena del selector de la aplicación es el nombre de la aplicación y no una frase de comando.
+      (<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="notifications">
+    Notificaciones
+  </td>
+
+  <td id="WR-NC">
+    WR-NC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Cuando corresponde, la aplicación muestra animaciones de confirmación.
+      (<a href="{@docRoot}design/wear/patterns.html#Countdown">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-NR">
+    WR-NR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las tarjetas de notificación tienen el icono de la aplicación visible en el borde superior derecho. La única excepción es
+ cuando la tarjeta de notificación tiene controles de acción individual; por ejemplo, una tarjeta de reproducción multimedia.
+      <br/>
+      (<a href="{@docRoot}design/wear/style.html#Assets">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-WI">
+    WR-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Las acciones de notificación tienen un icono blanco, un título de acción y fondo transparente.
+      <br/>
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PB">
+    WR-PB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Los fondos de las notificaciones con foto se utilizan únicamente para proporcionar información, no para exhibir una marca en una tarjeta.
+      (<a href="{@docRoot}design/wear/style.html#Branding">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PR">
+    WR-PR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Los fondos de las notificaciones con foto tienen una resolución de 400x400 como mínimo.
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="googleplay">
+    Google Play
+  </td>
+
+  <td id="WR-GS">
+    WR-GS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      La aplicación incluye al menos una captura de pantalla de Wear en su directorio en la Play Store.
+      (<a href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">Obtén más información</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="faq">
+  Preguntas frecuentes
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>Después de enviar mi aplicación para la revisión de Android Wear, ¿cómo sabré si mi aplicación no
+ cumple todos los requisitos para Wear?</strong>
+</p>
+<p>
+  Si tu aplicación no cumple los requisitos de utilidad que se describen en esta página, el equipo de la Play Store
+ se comunicará contigo a la dirección de correo electrónico que especificaste en la cuenta de la <a href="https://play.google.com/apps/publish/">Consola para desarrolladores de Google Play</a> asociada con
+ la aplicación.
+</p>
+<p class="caution">
+  <strong>Advertencia:</strong> Asegúrate de que tu aplicación cumpla los <a href="#fn">requisitos de
+ funcionalidad</a>, de lo contrario, la aplicación no se considerará una aplicación para Wear y no se revisará
+ para determinar si cumple con los requisitos de <a href="#ux">diseño e interacción</a> de Wear.
+</p>
+<p class="note">
+ <strong>Nota:</strong> Para obtener información acerca de cómo publicar tus aplicaciones para Wear en Google Play, consulta <a href="{@docRoot}distribute/googleplay/wear.html">Distribución para Android Wear</a>.
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Si mi aplicación no cumple con los requisitos de Wear, ¿aparecerá todavía mi aplicación nueva o actualizada en
+ Google Play para teléfonos y tablets, y aún se podrá instalar en wearables?</strong>
+</p>
+<p>
+  Sí. Los requisitos antes descritos solo determinan si tu aplicación se identificará como una aplicación de
+ Android Wear en Google Play y si los usuarios de Android Wear podrán descubrirla de forma más fácil. Si tu aplicación no
+ se acepta como una aplicación para Wear, aún estará disponible para otros dispositivos, como teléfonos y
+ tablets, y aún podrá instalarse en wearables.
+</p>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/start.jd b/docs/html-intl/intl/es/distribute/googleplay/start.jd
new file mode 100644
index 0000000..72c65cd
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/start.jd
@@ -0,0 +1,156 @@
+page.title=Comienza a publicar
+page.metaDescription=Comienza a publicar en Google Play en minutos al crear una cuenta de desarrollador.
+meta.tags="publishing"
+page.tags="google play", "publishing", "register", "signup"
+page.image=/distribute/images/getting-started.jpg
+
+@jd:body
+
+<div class="top-right-float" style="margin-right:24px;margin-top:-18px">
+  <a href="https://play.google.com/apps/publish/"><img src="{@docRoot}images/gp-start-button.png"></a>
+</div>
+
+<p>
+  Comienza a publicar en Google Play en minutos de la siguiente manera:
+</p>
+
+<ul>
+  <li>Regístrate para una cuenta de publicador en Google Play.
+  </li>
+
+  <li>Si piensas vender aplicaciones o productos integrados en la aplicación,
+ configura una cuenta de comerciante en Google Wallet.
+  </li>
+
+  <li>Explora la <a href="https://play.google.com/apps/publish/">Consola para desarrolladores
+ en Google Play</a> y las herramientas de publicación.
+  </li>
+</ul>
+
+<p>
+  Cuando estés listo, usa el botón Inicio para ingresar a la Consola para desarrolladores.
+</p>
+
+<div class="headerLine">
+  <h2>
+    Regístrate para una cuenta de publicador
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Sugerencias
+    </h2>
+
+    <ul>
+      <li>Para poder registrarte, necesitas una cuenta de Google. Puedes crear una durante el
+ proceso.
+      </li>
+
+      <li>Si eres una organización, considera la opción de registrar una nueva cuenta de Google
+ en lugar de usar una cuenta personal.
+      </li>
+
+      <li>Consulta los <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294">
+ países para desarrolladores</a> y los <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">
+países para comerciantes</a> en los que puedes distribuir y vender aplicaciones.
+      </li>
+    </ul>
+  </div>
+</div>
+
+<ol>
+  <li>Visita la <a href="https://play.google.com/apps/publish/">Consola para desarrolladores
+ de Google Play</a>.
+  </li>
+
+  <li>Ingresa información básica acerca de tu <strong>identidad como desarrollador </strong>
+  &mdash; por ejemplo, nombre, dirección de correo electrónico, etc. Puedes modificar esa información
+ más adelante.
+  </li>
+
+  <li>Lee y acepta el <strong>Acuerdo de distribución para desarrolladores</strong> para
+ tu país o región. Ten en cuenta que las aplicaciones y los directorios de tienda que publiques en
+ Google Play deben cumplir las políticas del programa para desarrolladores y las leyes de exportación de los
+ EE. UU.
+  </li>
+
+  <li>Paga un <strong>cargo de registro de $25 USD</strong> mediante Google Wallet. Si
+ no tienes una cuenta de Google Wallet, puedes configurar una rápidamente durante el
+ proceso.
+  </li>
+
+  <li>Una vez que se verifique tu registro, recibirás una notificación en la
+ dirección de correo electrónico que ingresaste durante el registro.
+  </li>
+</ol>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    Configura una cuenta de comerciante en Google Wallet
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:200px;">
+  <img src="{@docRoot}images/gp-start-wallet-icon.png">
+</div>
+
+<p>
+  Si quieres vender aplicaciones pagas, productos integrados en la aplicación o suscripciones, necesitarás
+ una cuenta de comerciante en Google Wallet. Puedes configurar una en cualquier momento, pero
+ primero consulta la lista de <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">
+ países para comerciantes</a>.<br>
+  <br>
+  Para configurar una cuenta de comerciante en Google Wallet:<br>
+  <br>
+</p>
+
+<ol>
+  <li>
+    <strong>Inicia sesión</strong> en tu Consola para desarrolladores de Google Play en <a href="https://play.google.com/apps/publish/" target="_blank">https://play.google.com/apps/publish/</a>.
+  </li>
+
+  <li>Abre <strong>Informes financieros</strong> <img src="{@docRoot}images/distribute/console-reports.png"> en el panel de navegación lateral.
+  </li>
+
+  <li>Haz clic en <strong>Configurar una cuenta de comerciante ahora</strong>.
+  </li>
+</ol>
+
+<p>
+  Esto te llevará al sitio de Google Wallet; para completar este paso, necesitarás información
+ acerca de tu negocio.
+</p>
+
+<div class="headerLine">
+  <h2>
+    Explora la Consola para desarrolladores
+  </h2>
+
+
+</div>
+
+<p>
+  Una vez que se haya verificado tu registro, podrás iniciar sesión en la Consola para
+ desarrolladores, que es el lugar de Google Play desde donde realizarás las operaciones de publicación de tu aplicación y donde encontrarás
+ herramientas.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine">
+<h2 id="related-resources">Recursos relacionados</h2><hr />
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/gettingstarted"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/tv.jd b/docs/html-intl/intl/es/distribute/googleplay/tv.jd
new file mode 100644
index 0000000..e3a95bc
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/tv.jd
@@ -0,0 +1,305 @@
+page.title=Distribución para Android TV
+page.image=/design/tv/images/atv-home.jpg
+meta.tags="tv", "publish", "quality"
+page.tags="tv", "publish", "googleplay"
+page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Android TV.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Cómo participar</h2>
+<ol>
+<li><a href="#understand_guidelines">Comprende las pautas</a></li>
+<li><a href="#develop_app">Desarrolla una aplicación excelente para TV</a></li>
+<li><a href="#test_app">Prueba la calidad de la aplicación para TV</a></li>
+<li><a href="#opt_in">Incluye la aplicación</a></li>
+<li><a href="#track_review">Realiza un seguimiento de tu revisión</a></li>
+</ol>
+
+<h2>También deberías leer</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las aplicaciones para TV</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">Calidad de la aplicación principal</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Si creaste una aplicación o un juego genial, Android TV y Google Play pueden ayudarte
+ a llevarla directo a las salas de los usuarios. Podrás ofrecer tus
+ aplicaciones y juegos en una experiencia de vidriera optimizada para TV. Puedes
+ ampliar tus aplicaciones nuevas o existentes para TV y luego publicarlas en Google Play usando herramientas
+ y procesos ya conocidos.
+</p>
+
+<p>
+  Para comenzar, repasa las secciones de este documento para aprender a
+ distribuir a los usuarios tus aplicaciones para TV a través de Google Play. Asegúrate de leer
+ <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las aplicaciones para TV</a>
+ para obtener información sobre las pautas de utilidad y calidad que tu aplicación debe
+ cumplir. Cuando tu aplicación esté lista, puedes incluirla para su publicación en la vidriera de Android TV
+ de la Consola para desarrolladores.
+</p>
+
+<h2 id="how_to_participate">
+  Cómo participar
+</h2>
+
+<p>
+  Google Play te permite exhibir tus aplicaciones para TV frente a un nuevo público de usuarios en
+ sus salas. Puedes desarrollar y publicar mediante el uso de tu cuenta existente
+ de la Consola para desarrolladores y tu configuración actual para distribución y fijación de precios. Participar
+ es fácil; las siguientes secciones describen el proceso.
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-tv-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1. Comprende las pautas y los requisitos
+</h3>
+
+<p>
+  Para prepararte para un lanzamiento exitoso en Android TV, comienza por revisar las
+ pautas para crear experiencias de aplicación excelentes en TV. Consulta las <a href="{@docRoot}design/tv/index.html">pautas de diseño para Android TV</a> para obtener ideas
+ acerca de cómo ampliar tu aplicación para que sea compatible con TV y detalles sobre diseño y utilidad.
+</p>
+
+<p>
+  Cuando comiences a diseñar tu experiencia para TV, asegúrate de leer y
+ comprender los criterios de calidad de las aplicaciones para TV. La experiencia de Google Play para
+ Android TV <strong>solo exhibe aplicaciones que pueden usarse en un televisor</strong>
+  &mdash; tus aplicaciones pueden participar siempre que cumplan con un grupo de criterios de calidad
+ básicos. Consulta <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad
+ de las aplicaciones para TV</a> para obtener información detallada.
+</p>
+
+<h3 id="develop_app">2. Desarrolla una aplicación excelente para TV</h3>
+
+<p>
+  Una aplicación excelente para TV es la que se diseña para utilizar en la sala y aprovecha las
+ capacidades de Android TV y recursos de entrada relacionados como controladores
+ de juegos, mandos de dirección y mandos a distancia. La aplicación se pule para ofrecer una experiencia
+ nítida y de alta calidad en pantallas grandes y proporciona un conjunto de funciones
+ atractivas para los usuarios.
+</p>
+
+<p>
+  Mientras consideras la posibilidad de desarrollar una aplicación para TV, lee la <a href="{@docRoot}training/tv/start/index.html">documentación para desarrolladores</a> y las
+ pautas de utilidad, y considera aplicarlas en la mayor medida
+ posible. Asegúrate de diseñar una excelente experiencia relajada para los usuarios y créala
+ con la biblioteca Leanback que se incluye en el SDK. Te recomendamos que optimices
+ otras partes de tu aplicación para que puedan usarse en la TV y que las identifiques
+ al principio del proceso de desarrollo.
+</p>
+
+<p>
+  En la mayoría de los casos, recomendamos que ofrezcas tu experiencia para TV como parte de tu
+ aplicación actual para teléfonos, tablets y otros dispositivos con el mismo nombre de paquete
+ y el mismo directorio de la tienda. Este enfoque permite a los usuarios cambiar a tu experiencia de TV
+ sin inconvenientes y también te permite aprovechar las reseñas y calificaciones que obtuviste
+ en tu aplicación para teléfonos y tablets.
+</p>
+
+<p>
+  Puedes agrupar tus intentos para TV, la biblioteca Leanback, el código específico
+ para TV y los recursos en una sola solución de APK para todos los dispositivos admitidos. Si
+ fuera necesario, puedes usar la <a href="{@docRoot}google/play/publishing/multiple-apks.html">Compatibilidad con múltiples
+ APK</a> para proporcionar un archivo binario personalizado para dispositivos Android TV con el mismo nombre
+ de paquete y directorio de la tienda que usas para teléfonos y tablets.
+</p>
+
+<p>
+  Durante la fase de diseño y desarrollo, es importante que cuentes con un dispositivo adecuado
+ en el que puedas experimentar y probar tu experiencia de usuario. Debes adquirir uno
+ o más dispositivos Android TV o emuladores y configurar tu entorno de prueba
+ lo antes posible. El dispositivo de hardware recomendado para realizar las pruebas en el
+ entorno Android TV es Nexus Player, que está <a href="http://www.google.com/intl/all/nexus/player/">disponible en Google Play</a>
+ y en otras tiendas, y también debes adquirir un controlador para juegos y otros dispositivos de
+ entrada para TV.
+</p>
+
+<h3 id="test_app">3. Prueba la calidad de la aplicación para TV</h3>
+
+<p>
+  Tus aplicaciones para TV deben estar diseñadas para que funcionen bien, se vean increíbles en Android TV
+ y ofrezcan la mejor experiencia de usuario posible. Google Play exhibe
+ aplicaciones de alta calidad para que los usuarios puedan encontrarlas fácilmente en Google Play. Aquí te mostramos
+ cómo puedes participar y ofrecer una aplicación para Android TV que los usuarios disfrutarán.
+</p>
+
+<ul>
+  <li>Cumple las pautas de Calidad de la aplicación principal
+    <ul>
+      <li>Sigue las <a href="{@docRoot}design/index.html">pautas de 
+ Diseño Android</a>. Presta especial atención al uso de <a href="http://www.google.com/design/spec/material-design/introduction.html">Material
+ Design</a> en tu aplicación.
+      </li>
+
+      <li>Prueba tus aplicaciones conforme a las <a href="{@docRoot}distribute/essentials/quality/core.html">pautas de calidad de la aplicación
+ principal</a>.
+      </li>
+    </ul>
+  </li>
+  <li>Cumple las pautas de <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las aplicaciones
+ para TV</a>
+    <ul>
+      <li>Sigue nuestras mejores prácticas para el<a href="{@docRoot}training/tv/index.html">
+ desarrollo de aplicaciones para TV</a></li>
+      <li>Asegúrate de que tu aplicación cumpla todos los criterios de <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las aplicaciones para TV</a>.</li>
+    </ul>
+  </li>
+  <li>Apunta a la sencillez y la máxima utilidad</li>
+</ul>
+
+<h3 id="opt_in">4. Incluye tu aplicación en Android TV y publícala</h3>
+
+<p>
+  Una vez que hayas creado tu APK listo para el lanzamiento y lo hayas probado para asegurarte de que cumple
+ todas las pautas de <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las
+ aplicaciones para TV</a>, cárgalo a la Consola para desarrolladores. Actualiza el directorio de tu
+ tienda con capturas de pantalla y banners de tu aplicación para TV, y configura opciones de distribución,
+ según sea necesario. Si no sabes cómo prepararte para el lanzamiento en Google Play,
+ consulta la <a href="{@docRoot}distribute/googleplay/publish/preparing.html">Lista de comprobación
+ para el lanzamiento.</a>
+</p>
+
+<p>
+  Antes de que puedas publicar para usuarios de Android TV, debes acceder a Android
+ TV desde la sección <strong>Fijación de precios y distribución</strong> de la
+ Consola para desarrolladores. Acceder significa que quieres que tu aplicación esté disponible
+ para los usuarios de Android TV a través de Google Play, y que
+ tu aplicación cumple las pautas de <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad
+ de las aplicaciones para TV</a>.
+</p>
+
+<p>
+  Puedes acceder únicamente si tu aplicación cumple dos criterios
+ de calidad preliminares que se verifican automáticamente al cargar al APK:
+</p>
+
+<ul>
+  <li>El manifiesto de tu aplicación debe incluir un tipo de intento <a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a>
+ con la categoría <a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER">
+ <code>CATEGORY_LEANBACK_LAUNCHER</code></a>. Obtén más información <a href="{@docRoot}training/tv/start/start.html#tv-activity">aquí</a>.
+  </li>
+
+  <li>Tu aplicación debe declarar que no requiere una pantalla táctil. El
+ manifiesto debe declarar el hardware <code>android.hardware.touchscreen</code>
+ con <code>android:required="false”</code>. Obtén más información <a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">aquí</a>.
+  </li>
+</ul>
+
+<p>
+  Si tu aplicación cumple los criterios preliminares, verás una casilla de verificación para inclusión para
+ Android TV, como se muestra a continuación. Si la casilla de verificación para inclusión no está habilitada, revisa
+ tu APK para asegurarte de que cumpla con los criterios preliminares.
+</p>
+
+<p>
+  Después de realizar la inclusión y guardar los cambios, puedes publicar tu aplicación como lo haces habitualmente.
+  Antes de que tu aplicación esté disponible para los usuarios de Android TV, Google Play envía
+ tu aplicación para revisión conforme a los criterios de <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las aplicaciones para TV</a>
+ y te notifica el resultado. Consulta la siguiente sección para obtener información detallada
+ sobre cómo realizar un seguimiento del estado de aprobación de tu aplicación.
+</p>
+
+<p>
+  Si tu aplicación cumple los criterios de <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las
+ aplicaciones para TV</a>, Google Play la exhibe a los usuarios de
+ Android TV. Tu aplicación también es elegible para acceder a una mayor visibilidad si se exhibe en
+ colecciones de aplicaciones y promociones. Para que los usuarios de todas partes sepan que tu aplicación está
+ diseñada para Android TV, Google Play decora el directorio de tienda de la aplicación con una
+ insignia de TV.
+</p>
+
+<p>
+  Ten en cuenta que la inclusión y la revisión no afectan la disponibilidad de tu aplicación para
+ otros dispositivos en la Play Store de Google; por
+ ejemplo, para teléfonos y tablets tu aplicación estará disponible ni bien la publiques.
+</p>
+
+<p>
+  Aquí te mostramos los pasos que debes seguir en la Consola para desarrolladores para incluir tu aplicación en Android TV:
+</p>
+
+<ol>
+  <li>Asegúrate de que tu aplicación cumpla todos los criterios de <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las aplicaciones para TV</a>.
+  </li>
+
+  <li>Agrega capturas de pantalla de tu aplicación para TV y gráficos de banner al directorio de tienda de la aplicación
+  </li>
+
+  <li>En la página <strong>Todas las aplicaciones</strong>, haz clic en la aplicación que quieres incluir.
+  </li>
+
+  <li>En <strong>Fijación de precios y distribución</strong>, desplázate hacia abajo hasta encontrar <em>Android TV</em> y la
+ casilla de verificación para la inclusión.
+  </li>
+
+  <li>Haz clic en la casilla de verificación junto a <em>Distribuye tu aplicación para Android TV</em>.
+  </li>
+
+  <li>Haz clic en <strong>Guardar</strong> para guardar tus cambios.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-tv-opt-in.png">
+  <p class="caption">
+    <strong>Incluye la aplicación para TV:</strong> Incluye tu aplicación en Android TV desde la
+ Consola para desarrolladores.
+  </p>
+</div>
+
+<h3 id="track_review">5. Realiza un seguimiento de tu revisión y aprobación</h3>
+
+<p>
+  Si tu aplicación cumple los requisitos técnicos y de calidad para Android TV, como se describe más arriba,
+ estará disponible para que los usuarios la disfruten en Android TV. Si la aplicación no cumple
+ los criterios, recibirás una <strong>notificación por correo electrónico enviada a tu cuenta
+ de desarrollador</strong> con un resumen de las áreas que debes abordar. Una vez que realices
+ los ajustes necesarios, puedes cargar una nueva versión de tu aplicación a la Consola para
+ desarrolladores. 
+</p>
+
+<p>
+  En cualquier momento, puedes comprobar el estado de revisión y aprobación de tu aplicación en la
+ Consola para desarrolladores, bajo <em>Android TV</em> en la página <strong>Fijación de precios y distribución</strong>
+ de la aplicación.
+</p>
+
+<p>
+  Existen tres estados de aprobación:
+</p>
+
+<ul>
+  <li>
+    <em>Pendiente</em>: tu aplicación se envió a revisión pero la revisión aún no ha
+ finalizado.
+  </li>
+
+  <li>
+    <em>Aprobada</em>: se revisó tu aplicación y se aprobó. La aplicación
+ estará disponible de forma directa para los usuarios de Android TV. 
+  </li>
+
+  <li>
+    <em>No aprobada</em>: se revisó tu aplicación y no se aprobó. Lee el
+ correo electrónico de notificación para obtener información acerca de los motivos por los que no se aprobó la aplicación. Puedes
+ solucionar los problemas e incluirla y publicarla nuevamente para iniciar otra
+ revisión.
+  </li>
+</ul>
+
+<p>Para comprender cómo se evalúan tus aplicaciones, consulta el documento <a href="{@docRoot}distribute/essentials/quality/tv.html">Calidad de las aplicaciones para TV</a>. </p>
+
+
+  <h3>Recursos relacionados</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:tvlanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/wear.jd b/docs/html-intl/intl/es/distribute/googleplay/wear.jd
new file mode 100644
index 0000000..f23315d
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/googleplay/wear.jd
@@ -0,0 +1,262 @@
+page.title=Distribución para Android Wear
+page.image=/design/media/wear/ContextualExample.008_2x.png
+meta.tags="wear", "publish", "quality"
+page.tags="wear", "publish", "googleplay"
+page.metaDescription=Distribuye tus aplicaciones, juegos y contenido para Android Wear.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Cómo participar</h2>
+<ol>
+<li><a href="#understand_guidelines">Comprende las pautas</a></li>
+<li><a href="#develop_app">Desarrolla una aplicación excelente para Wear</a></li>
+<li><a href="#test_app">Prueba la calidad de la aplicación para Wear</a></li>
+<li><a href="#opt_in">Incluye la aplicación</a></li>
+<li><a href="#track_review">Realiza un seguimiento de tu revisión</a></li>
+</ol>
+
+<h2>También deberías leer</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">Calidad de la aplicación principal</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Si desarrollaste una aplicación excelente, Android Wear y Google Play pueden ayudarte a acercarla a los usuarios. Si bien todas las
+ aplicaciones pueden enviar notificaciones básicas para dispositivos Android Wear, puedes ir mucho más allá.
+  Extiende tus aplicaciones para que admitan interacciones personalizadas con Wear y ofrezcan una experiencia de usuario refinada e
+ interactiva en todos los dispositivos Wear. Si tu aplicación cumple las pautas de calidad de la aplicación principal en dispositivos portátiles y
+ proporciona una experiencia de alta calidad para los dispositivos Android Wear, Google Play exhibirá tus aplicaciones
+ y facilitará su descubrimiento.
+</p>
+
+<p>
+  Para comenzar, repasa las secciones de este documento para aprender a distribuir a los usuarios tus aplicaciones
+ para Wear a través de Google Play. Asegúrate de leer <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a> para obtener información sobre
+ las pautas de utilidad y calidad que tus aplicaciones deben cumplir. Cuando tu aplicación esté lista, puedes
+ incluirla para su designación como aplicación de Android Wear en la Consola para desarrolladores.
+</p>
+
+<h2 id="how_to_participate">
+  Cómo participar
+</h2>
+
+<p>
+  Google Play permite que tus aplicaciones para Wear sean más fáciles de descubrir para los usuarios de Wear. Puedes desarrollar y
+ publicar mediante el uso de tu cuenta existente de la Consola para desarrolladores y tu configuración actual para distribución y fijación de
+ precios. Participar es fácil; las siguientes secciones describen el proceso.
+</p>
+
+<h3 id="understand_guidelines">
+  1. Comprende las pautas y los requisitos
+</h3>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-wear-process.png">
+</div>
+
+<p>
+  Si quieres prepararte para un lanzamiento exitoso en Android Wear, comienza por revisar las pautas para
+ crear experiencias excelentes en Wear. Consulta las <a href="{@docRoot}design/wear/index.html">Pautas
+ de diseño para Android Wear</a> para obtener ideas acerca de cómo ampliar tu aplicación para que sea compatible con Wear y detalles sobre diseño y
+ utilidad.
+</p>
+
+<p>
+  Cuando comiences a diseñar tu experiencia para Wear, asegúrate de leer y comprender los criterios
+ de calidad de las aplicaciones para Wear. Únicamente las aplicaciones compatibles con Wear se designarán aplicaciones Wear en
+ Google Play; tus aplicaciones pueden participar si cumplen con un conjunto de criterios de calidad básicos. Consulta <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a> para obtener información detallada.
+</p>
+
+<h3 id="develop_app">2. Desarrolla una aplicación excelente para Wear</h3>
+
+<p>
+Una vez que hayas leído las pautas, el paso siguientes es desarrollar tu aplicación. Las siguientes secciones
+ describen cómo comenzar a crear una aplicación para Wear que proporcione una excelente experiencia.
+</p>
+
+<h4>Primero el diseño</h4>
+
+<p>
+  Android Wear tiene como objetivo proporcionar a los usuarios la información correcta en el momento adecuado. Las increíbles
+ experiencias de Android Wear se inician automáticamente, permiten captar de información de un solo vistazo y
+ prácticamente no requieren la interacción del usuario. Si bien todas las aplicaciones pueden enviar notificaciones básicas a dispositivos Wear
+ sin la necesidad de realizar modificaciones, las aplicaciones excelentes creadas para Wear se refinan para ofrecer una experiencia pulida y
+ de alta calidad, admitir diferentes diseños de pantalla y proporcionar a los usuarios un conjunto de aplicaciones
+ atractivas.
+</p>
+
+<p>
+  Mientras consideras la posibilidad de desarrollar una aplicación para Wear, lee la <a href="{@docRoot}training/building-wearables.html">documentación para desarrolladores</a> y las<a href="{@docRoot}design/wear/index.html"> pautas de utilidad</a>, y considera aplicarlas en la
+ mayor medida posible. Puedes diseñar una magnífica experiencia de notificación para los usuarios con las API
+ que se proporcionan en el SDK y la biblioteca de soporte. También puedes optar por crear una aplicación que
+ pueda ejecutarse directamente en el wearable.
+</p>
+
+<h4>Integra tu aplicación</h4>
+
+<p>
+  Te recomendamos que ofrezcas tu experiencia para Wear como parte de tu aplicación actual para teléfonos,
+ tablets y otros dispositivos con el mismo nombre de paquete y el mismo directorio de la tienda. Este enfoque
+ permite a los usuarios cambiar a tu experiencia de Wear sin inconvenientes, y también te permite aprovechar las reseñas y
+ calificaciones que obtuviste en tu aplicación para teléfonos y tablets. Las aplicaciones para wearables que dependen de una
+ aplicación para adquirir su plena funcionalidad deben estar integradas a esa aplicación. Para aprender a hacerlo, lee <a href="{@docRoot}training/wearables/apps/packaging.html">Integración de aplicaciones para wearables</a>.
+</p>
+
+<h4>Realiza pruebas en diferentes dispositivos</h4>
+
+<p>
+  Durante la fase de diseño y desarrollo, es importante que cuentes con dispositivos adecuados en los que puedas
+ experimentar y probar tu experiencia de usuario. Te recomendamos enfáticamente que adquieras uno o más dispositivos Android Wear
+ o desarrolles con diferentes configuraciones de simulación y configures tu entorno de prueba
+ lo antes posible. Es importante que optimices tu diseño para formatos cuadrados y circulares.
+</p>
+
+<h3 id="test_app">3. Prueba la calidad de la aplicación para Wear</h3>
+
+<p>
+  Tus aplicaciones para Wear deben estar diseñadas para que funcionen bien y se vean increíbles en Android Wear
+, y deben ofrecer la mejor experiencia de usuario posible. Google Play exhibirá aplicaciones para Wear
+ seleccionadas de alta calidad a fin de que los usuarios puedan encontrarlas fácilmente. Aquí te mostramos cómo puedes participar y ofrecer una aplicación para Android Wear que
+ los usuarios disfrutarán:
+</p>
+
+<ul>
+  <li>Cumple las pautas de Calidad de la aplicación principal.
+    <ul>
+      <li>Sigue las <a href="{@docRoot}design/index.html">pautas de 
+Diseño Android</a>. Presta especial atención al uso de <a href="http://www.google.com/design/spec/material-design/introduction.html">Material
+ Design</a> en tu aplicación.
+      </li>
+
+      <li>Prueba tus aplicaciones conforme a las <a href="{@docRoot}distribute/essentials/quality/core.html">pautas de calidad de la aplicación
+ principal</a>.
+      </li>
+    </ul>
+  </li>
+  <li>Cumple los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las
+ aplicaciones para Wear</a>.
+    <ul>
+      <li>Sigue nuestras mejores prácticas para el <a href="{@docRoot}training/building-wearables.html">
+desarrollo de aplicaciones para Wear</a>.</li>
+      <li>Asegúrate de que tu aplicación cumpla todos los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a>.</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4. Incluye tu aplicación en Android Wear y publícala</h3>
+
+<p>
+  Una vez que hayas creado tu APK listo para el lanzamiento y lo hayas probado para asegurarte de que cumple todos los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a>, cárgalo
+ a la Consola para desarrolladores. Actualiza el directorio de tu tienda con capturas de pantalla de tu aplicación para Wear y configura opciones
+ de distribución, según sea necesario. Si no sabes cómo prepararte para el lanzamiento en Google Play, consulta la 
+<a href="{@docRoot}distribute/googleplay/publish/preparing.html">Lista de comprobación para el lanzamiento.</a>
+</p>
+
+<p>
+  Antes de que puedas publicar para los usuarios, debes incluir la aplicación para Android Wear desde la sección <strong>Fijación de precios
+ y distribución</strong> de la Consola para desarrolladores. Inclusión significa que quieres que tu aplicación sea
+ más fácil de encontrar para los usuarios de Android Wear a través de Google Play, y que tu aplicación cumple los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a>.
+</p>
+
+<p>
+  Después de realizar la inclusión y guardar los cambios, puedes publicar tu aplicación como lo haces habitualmente. Además, Google
+ Play envía tu aplicación para revisión conforme a los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a> y
+ te notifica el resultado. Consulta la siguiente sección para obtener información detallada sobre cómo realizar un seguimiento del estado de aprobación
+ de tu aplicación.
+</p>
+
+<p>
+  Si tu aplicación cumple todos los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las
+ aplicaciones para Wear</a>, Google Play permite que sea más fácil de descubrir para los usuarios de Android Wear. Tu aplicación también
+ es elegible para acceder a una mayor visibilidad si se exhibe en colecciones de aplicaciones y promociones.
+</p>
+
+<p>
+  Ten en cuenta que la inclusión y la revisión no afectan la disponibilidad de tu aplicación en la Play Store de Google;
+ es decir, tu aplicación estará disponible ni bien la publiques.
+</p>
+
+<p>
+  Aquí te mostramos los pasos que debes seguir en la Consola para desarrolladores para incluir tu aplicación en Android Wear:
+</p>
+
+<ol>
+  <li>Asegúrate de que tu aplicación cumpla todos los criterios de <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a>.
+  </li>
+
+  <li>Agrega capturas de pantalla de tu aplicación para Wear al directorio de tienda de la aplicación
+  </li>
+
+  <li>En la página <strong>Todas las aplicaciones</strong>, haz clic en la aplicación que quieres incluir.
+  </li>
+
+  <li>En <strong>Fijación de precios y distribución</strong>, desplázate hacia abajo hasta encontrar <em>Android Wear</em>
+ y la casilla de verificación para la inclusión.
+  </li>
+
+  <li>Haz clic en la casilla de verificación junto a <em>Distribuye tu aplicación para Android Wear</em>.
+  </li>
+
+  <li>Haz clic en <strong>Guardar</strong> para guardar los cambios que realizaste en Fijación de precios y distribución.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-wear-opt-in.png">
+  <p class="caption">
+    <strong>Incluye la aplicación para Wear:</strong> Incluye tu aplicación en Android Wear desde la
+ Consola para desarrolladores.
+  </p>
+</div>
+
+<h3 id="track_review">5. Realiza un seguimiento de tu revisión y aprobación</h3>
+
+<p>
+  Si tu aplicación cumple los requisitos técnicos y de calidad para Android Wear, como se describe más arriba,
+ será más fácil de descubrir para los usuarios en Android Wear. Si la aplicación no cumple los
+ criterios, recibirás una <strong>notificación por correo electrónico enviada a tu cuenta
+ de desarrollador</strong> con un resumen de las áreas que debes abordar. Una vez que realices
+ los ajustes necesarios, puedes cargar una nueva versión de tu aplicación a la Consola para desarrolladores.
+</p>
+
+<p>
+  En cualquier momento, puedes comprobar el estado de revisión y aprobación de tu aplicación en la Consola para desarrolladores,
+ bajo <em>Android Wear</em> en la página <strong>Fijación de precios y distribución</strong>
+ de la aplicación.
+</p>
+
+<p>
+  Existen tres estados de aprobación:
+</p>
+
+<ul>
+  <li>
+    <em>Pendiente</em>: tu aplicación se envió a revisión pero la revisión aún no ha finalizado.
+  </li>
+
+  <li>
+    <em>Aprobada</em>: se revisó tu aplicación y se aprobó. La aplicación será más fácil de descubrir
+ para los usuarios de Android Wear.
+  </li>
+
+  <li>
+    <em>No aprobada</em>: se revisó tu aplicación y no se aprobó. Lee el correo electrónico de notificación
+ para obtener información acerca de los motivos por los que no se aprobó la aplicación. Puedes solucionar los problemas e incluirla y
+ publicarla nuevamente para iniciar otra revisión.
+  </li>
+</ul>
+
+<p>Para comprender cómo se evalúan tus aplicaciones, consulta el documento <a href="{@docRoot}distribute/essentials/quality/wear.html">Calidad de las aplicaciones para Wear</a>. </p>
+
+
+  <h3>Recursos relacionados</h3>
+
+  <div class="resource-widget resource-flow-layout col-13"
+    data-query="collection:wearlanding"
+    data-cardSizes="6x2"
+    data-maxResults="3">
+  </div>
diff --git a/docs/html-intl/intl/es/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/es/distribute/tools/launch-checklist.jd
new file mode 100644
index 0000000..ad42663
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/tools/launch-checklist.jd
@@ -0,0 +1,1023 @@
+page.title=Lista de comprobación para el lanzamiento
+page.metaDescription=Información general fundamental acerca del proceso completo de provisión de tu aplicación a los usuarios. Lee esta lista de comprobación desde el inicio del proceso de desarrollo para ayudarte con tu plan y así poder realizar un lanzamiento exitoso en Google Play.
+meta.tags="localizing, publishing, disttools"
+page.tags="launch, publishing, Google Play"
+page.image=/distribute/images/launch-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>Lista de comprobación</h2>
+    <ol>
+      <li><a href="#understand-publishing">1. Comprende el proceso de publicación</a></li>
+      <li><a href="#understand-policies">2. Comprende las políticas de Google Play</a></li>
+      <li><a href="#test-quality">3. Prueba la calidad de la aplicación principal</a></li>
+      <li><a href="#determine-rating">4. Determina la clasificación del contenido</a></li>
+      <li><a href="#determine-country">5. Determina los países de distribución</a></li>
+      <li><a href="#confirm-size">6. Confirma el tamaño general</a></li>
+      <li><a href="#confirm-platform">7. Confirma la plataforma y los rangos de pantalla</a></li>
+      <li><a href="#decide-price">8. Decide si será gratuita o paga</a></li>
+      <li><a href="#consider-billing">9. Utiliza Facturación integrada en la aplicación</a></li>
+      <li><a href="#set-prices">10. Fija los precios para tus productos</a></li>
+      <li><a href="#start-localization">11. Comienza la localización</a></li>
+      <li><a href="#prepare-graphics">12. Prepara gráficos, capturas de pantalla y videos promocionales</a></li>
+      <li><a href="#build-upload">13. Crea el APK listo para el lanzamiento</a></li>
+      <li><a href="#plan-beta">14. Planifica un lanzamiento beta</a></li>
+      <li><a href="#complete-details">15. Completa el directorio de tu tienda</a></li>
+      <li><a href="#use-badges">16. Utiliza insignias y vínculos de Google Play</a></li>
+      <li><a href="#final-checks">17. Comprobaciones finales y publicación</a></li>
+      <li><a href="#support-users">18. Brinda soporte a los usuarios después del lanzamiento</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg"></div>
+
+<p>
+  Antes de publicar tus aplicaciones en Google Play y distribuirlas a los usuarios, debes
+ tener listas las aplicaciones, probarlas y preparar el material
+ promocional.
+</p>
+
+<p>
+  Esta página te ayuda a comprender el proceso de publicación y a prepararte para un
+ lanzamiento exitoso de tu producto en Google Play. Aquí se resumen algunas de las tareas
+ que deberás realizar antes de publicar tu aplicación en Google Play, como
+ crear un paquete de la aplicación (APK) firmado y listo para el lanzamiento, comprender los
+ requisitos de la aplicación y crear la página de productos y recursos gráficos para
+ cada una de tus aplicaciones.
+</p>
+
+<p>
+  Las tareas de preparación y publicación están numeradas para brindarte una idea general de
+ secuencia. No obstante, puedes abordar las tareas en cualquier orden que funcione
+ para ti, o puedes omitir pasos según corresponda.
+</p>
+
+<p>
+  A medida que avances hacia la publicación, encontrarás una variedad de recursos de apoyo
+ disponibles. En cada paso se proporcionan vínculos relevantes.
+</p>
+
+<div class="headerLine">
+  <h2 id="understand-publishing">
+    1. Comprende el proceso de publicación
+  </h2>
+
+
+</div>
+
+<p>
+  Antes de comenzar los pasos que se indican en esta lista de comprobación, dedica un momento a
+ leer y comprender el flujo de trabajo general para la publicación y familiarízate con
+ el funcionamiento del proceso. En especial, tú o tu equipo de desarrollo deberán
+ preparar las aplicaciones para el lanzamiento mediante el uso de un proceso común para todas las aplicaciones de Android.
+  Los documentos acerca del flujo de trabajo de la <a href="{@docRoot}tools/publishing/publishing_overview.html">Publicación
+ </a>proporcionan información detallada acerca de cómo funciona la publicación y cómo
+ crear un APK listo para el lanzamiento.
+</p>
+
+<p>
+  Una vez que te familiarices con la publicación en general, continúa leyendo para
+ comprender los problemas que debes considerar al publicar aplicaciones en Google
+ Play.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/understanding"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="understand-policies">
+    2. Comprende las políticas y los acuerdos de Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  Asegúrate de comprender y cumplir las políticas del programa
+ Google Play que aceptaste al registrarte. Google Play implementa activamente las
+ políticas; las violaciones de esas políticas pueden dar lugar a la suspensión de tus aplicaciones y
+ las violaciones reiteradas pueden generar la cancelación de tu cuenta de desarrollador.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/policies" data-sortorder=
+"-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-quality">
+    3. Prueba de calidad
+  </h2>
+
+
+</div>
+
+<p>
+  Antes de publicar tus aplicaciones en Google Play, es importante que te asegures de que
+ cumplen las expectativas de calidad básicas para todas las aplicaciones de Android en todos
+ los dispositivos que quieras admitir. Puedes comprobar la calidad de tu aplicación al configurar
+ un entorno de prueba y someter a prueba la aplicación de acuerdo con un grupo reducido de
+ <strong>criterios de calidad que se aplican a todas las aplicaciones</strong>. Para obtener información
+ completa, consulta las pautas de <a href="{@docRoot}distribute/essentials/quality/core.html">Calidad de la aplicación principal</a>
+.
+</p>
+
+<p>
+  Si tu aplicación está orientada a tablets, asegúrate de que proporcione una experiencia
+ enriquecedora y atractiva a tus clientes de tablets. Consulta las pautas de <a href="{@docRoot}distribute/essentials/quality/tablets.html">Calidad de las aplicaciones para tablets</a>
+ para obtener recomendaciones acerca de cómo optimizar tu aplicación para tablets.
+</p>
+
+<p>
+  Si quieres que tus aplicaciones estén disponibles para Google Play for Education, deberás
+ asegurarte de que sean aptas para una clase K-12 y ofrezcan un
+ valor educativo excepcional. Consulta las <a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">pautas para
+ Education</a> para obtener información acerca de las características que tus aplicaciones educativas
+ deben exhibir.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/quality" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-rating">
+    4. Determina la calificación del contenido de tu aplicación
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play requiere que establezcas una clasificación de contenido para tu aplicación, que le informa a los
+ usuarios de Google Play su nivel de madurez. Antes de publicar, debes
+ confirmar el nivel de madurez que quieres usar. Los niveles de clasificación de contenido
+ disponibles son los siguientes:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Todos
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Madurez baja
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Madurez media
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Madurez alta
+    </p>
+  </li>
+</ul>
+
+<p>
+  Los usuarios de Android pueden ajustar en sus dispositivos Android el nivel de madurez
+ deseado para la exploración. Luego, Google Play filtra aplicaciones en función de ese ajuste, de modo que la
+ clasificación de contenido que selecciones puede afectar la distribución de la aplicación a los usuarios. Puedes
+ asignar (o cambiar) la clasificación de contenido para tus aplicaciones en la Consola para desarrolladores.
+ No es necesario que realices cambios en el archivo binario de tu aplicación.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/rating" data-sortorder=
+"-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-country">
+    5. Determina los países de distribución
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play te permite controlar los países y territorios en los que
+ distribuirás tus aplicaciones. Para tener el mayor alcance y la base de clientes potenciales más amplia,
+ te recomendamos que distribuyas a todos los países y territorios disponibles.
+  No obstante, debido a necesidades comerciales, requisitos de la aplicación o dependencias de lanzamiento,
+ podría ser conveniente que excluyas uno o más países de tu distribución.
+</p>
+
+<p>
+  Es importante que determines los países de distribución exactos de forma temprana ya que
+ que esto puede afectar:
+</p>
+
+<ul>
+  <li>
+    <p>
+      La necesidad de recursos localizados en la aplicación.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      La necesidad de una descripción localizada de la aplicación en la Consola para desarrolladores.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Requisitos legales para la aplicación que podrían ser específicos de determinados países.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Soporte de zona horaria, fijación de precios en moneda local, etc.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Con los países donde quieres distribuir en mente, debes evaluar tus necesidades de
+ localización, tanto para tus aplicaciones como para los detalles de sus directorios en Google Play, y comenzar
+ las tareas de localización mucho antes de la fecha de lanzamiento prevista.
+</p>
+
+<p>
+  Consulta <a href="{@docRoot}distribute/tools/localization-checklist.html">Lista de comprobación
+ para la localización</a> para acceder a pasos y consideraciones clave en el proceso de localización.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/country" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-size">
+    6. Confirma el tamaño total de la aplicación
+  </h2>
+
+
+</div>
+
+<p>
+  El tamaño total de tu aplicación puede afectar su diseño y la manera en la que la publicas en
+ Google Play. Actualmente, el tamaño máximo permitido de un APK publicado en Google Play
+ es de <strong>50 MB</strong>. Si tu aplicación supera ese tamaño, o si quieres
+ ofrecer una descarga secundaria, puedes usar <a href="{@docRoot}google/play/expansion-files.html">Archivos de expansión del APK</a>, que
+ Google Play alojará de forma gratuita en su infraestructura de servidores y administrará
+ automáticamente la descarga a los dispositivos.
+</p>
+
+<ul>
+  <li>
+    <p>
+      El tamaño máximo permitido para un APK publicado en Google Play es de 50 MB.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Para cada APK, puedes usar hasta dos (2) archivos de expansión de APK, cada uno de un tamaño máximo
+ de 2 GB.
+    </p>
+  </li>
+</ul>
+
+<p>
+  El uso de archivos de expansión del APK es un método conveniente y redituable
+ para la distribución de aplicaciones de gran tamaño. No obstante, el uso de archivos de expansión del APK requiere
+ que realices algunos cambios en el archivo binario de tu aplicación, de modo que deberás realizar esos cambios
+ antes de crear el APK listo para el lanzamiento.
+</p>
+
+<p>
+  Para minimizar el tamaño del archivo binario de tu aplicación, asegúrate de ejecutar la herramienta <a href="{@docRoot}tools/help/proguard.html">Proguard</a> o un ofuscador similar
+ en tu código al crear el APK listo para el lanzamiento.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/size" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-platform">
+    7. Confirma la plataforma de la aplicación y los rangos de compatibilidad de pantalla
+  </h2>
+
+
+</div>
+
+<p>
+  Antes de publicar, es importante que te asegures de que tus aplicaciones estén diseñadas para
+ ejecutarse correctamente en las diferentes versiones de la plataforma Android y en los tamaños de pantalla de los dispositivos
+ para los que quieres distribuir.
+</p>
+
+<p>
+  Desde una perspectiva de compatibilidad de la aplicación, las versiones de la plataforma Android se definen
+ por nivel de <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API
+</a>. Debes confirmar la versión mínima que admite tu aplicación
+ con <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;minSdkVersion&gt;</a>,
+ ya que eso afectará su distribución a dispositivos Android una vez que se publique.
+</p>
+
+<p>
+  Para los tamaños de pantalla, debes confirmar que la aplicación se ejecute correctamente y se vea
+ bien en el rango de tamaños de pantalla y densidades de píxeles que quieres
+ admitir. Debes seguir las sugerencias que se proporcionan en <a href="{@docRoot}guide/practices/screens_support.html">Admisión de múltiples
+ pantallas</a> para proporcionar soporte escalable para diferentes tamaños de pantalla. No obstante,
+ si no has podido hacerlo, declara el tamaño mínimo de pantalla que admiten
+ tus aplicaciones mediante <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a>.
+  Google Play luego limitará la disponibilidad de tus aplicaciones en función de esa información,
+ y las ofrecerá a los dispositivos con el tamaño de pantalla declarado o uno más grande.
+</p>
+
+<p>
+  Para comprender mejor la presencia actual de las versiones de la plataforma Android
+ y los tamaños de pantalla en todos los dispositivos Android, consulta los cuadros del
+ <a href="{@docRoot}about/dashboards/index.html">Panel de dispositivos</a>.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/platform" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="decide-price">
+    8. Decide si tu aplicación será de uso gratuito o pago
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-launch-checklist-1.png">
+</div>
+
+<p>
+  En Google Play, puedes publicar aplicaciones de descarga gratuita o paga. Todos los usuarios
+ de Android pueden descargar las aplicaciones gratuitas en Google Play. A las aplicaciones pagas
+ solo pueden descargarlas los usuarios de un país que admita descargas pagas
+ y quienes tengan un método de pago registrado en Google Play, como una tarjeta de crédito
+ o Facturación directa del operador.
+</p>
+
+<p>
+  Es importante que decidas si tus aplicaciones serán gratuitas o pagas ya que en
+ Google Play <strong>las aplicaciones gratuitas deben continuar siendo gratuitas</strong>.
+</p>
+
+<ul>
+  <li>
+    <p>
+      Una vez que publicas una aplicación como gratuita, no puedes cambiarla a
+ paga. Sin embargo, aún puedes vender <a href="{@docRoot}google/play/billing/billing_overview.html#products">productos
+</a> y <a href="{@docRoot}google/play/billing/billing_subscriptions.html">suscripciones en la aplicación</a>
+ mediante el servicio de <a href="{@docRoot}google/play/billing/index.html">Facturación integrada en la aplicación</a> de Google Play.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Si publicas tu aplicación como paga, <em>puedes</em> convertirla en
+ cualquier momento en una aplicación gratuita (<strong>pero no podrás revertir este cambio para que vuelva a ser
+ paga</strong>). También puedes ofrecer productos y suscripciones integrados en la aplicación.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Si tu aplicación será paga o si piensas vender productos integrados en la aplicación, deberás
+ <a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">
+configurar una cuenta de comerciante en Google Wallet</a> antes de publicar.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/price" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="consider-billing">
+    9. Considera la posibilidad de usar facturación integrada en la aplicación
+  </h2>
+
+
+</div>
+
+<p>
+  La <a href="{@docRoot}google/play/billing/index.html">Facturación integrada
+ en la aplicación</a> de Google Play te permite vender contenido digital en tus aplicaciones. Puedes usar
+ el servicio para vender una amplia variedad de contenido, incluido contenido apto para descargar,
+ como archivos multimedia o fotos, y contenido virtual, como niveles o partes de
+ juegos. El servicio de Facturación integrada en la aplicación te permite realizar ventas únicas y
+ ofrecer suscripciones dentro de la aplicación. Esto puede ayudarte a monetizar la aplicación
+ mientras el usuario la tenga instalada.
+</p>
+
+<p>
+  Si buscas otras maneras de monetizar tu aplicación e interactuar con los usuarios,
+ deberías considerar la Facturación integrada en la aplicación o la Compra inmediata. Estos servicios se han vuelto
+ muy populares entre usuarios y desarrolladores. Para usar la Facturación integrada en la aplicación o la Compra
+ inmediata, deberás realizar cambios en el archivo binario de tu aplicación, de modo que necesitarás
+ completar y probar tu implementación antes de crear el APK listo para el lanzamiento.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/purchasemethod"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="set-prices">
+    10. Fija los precios para tus productos
+  </h2>
+
+
+</div>
+
+<p>
+  Si tus aplicaciones son pagas o piensas vender productos físicos o integrados en la aplicación, Google
+ Play te permite fijar precios para tus productos en una variedad de monedas para los
+ usuarios de diferentes mercados del mundo. Puedes fijar precios de forma individual en
+ diferentes monedas, de modo que tienes la flexibilidad de ajustar el precio
+ de acuerdo con las condiciones del mercado y las tasas de cambio.
+</p>
+
+<p>
+  Antes de publicar, considera cómo vas a fijar los precios de tus productos y cuáles serán
+ los precios en las diferentes monedas. Más adelante, podrás fijar precios en
+ todas las monedas disponibles a través de la Consola para desarrolladores.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/setprice" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="start-localization">
+    11. Comienza la localización
+  </h2>
+
+
+</div>
+
+<p>
+  Con los países donde quieres distribuir en mente, te recomendamos que evalúes tus
+ necesidades de localización, que te asegures de que tus aplicaciones tengan alcance internacional y que
+ comiences las tareas de localización mucho antes de la fecha de lanzamiento prevista.
+</p>
+
+<p>
+  Además del diseño de tu aplicación, hay al menos tres aspectos de
+ localización que debes considerar:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Localización de las cadenas, las imágenes y otros recursos en tus aplicaciones.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Localización de los detalles del directorio de la tienda de tus aplicaciones en Google Play.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Localización de los recursos gráficos, las capturas de pantalla y los videos de tus aplicaciones
+ que acompañan el directorio de tu tienda.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Consulta <a href="{@docRoot}distribute/tools/localization-checklist.html">Lista de comprobación
+ para la localización</a> para acceder a pasos y consideraciones clave en el proceso de localización.
+</p>
+
+<p>
+  Para localizar el directorio de tu tienda, primero debes crear y finalizar el título,
+ la descripción y el texto promocional de tu aplicación. Reúne y envía todo eso para
+ localización. Opcionalmente, también puedes traducir el texto de "Cambios recientes"
+ para las actualizaciones de la aplicación. Luego puedes agregar los detalles del directorio localizados en la
+ Consola para desarrolladores, o puedes permitir que Google Play traduzca los
+ detalles de tu directorio a los idiomas que admites.
+</p>
+
+<p>
+  Una parte fundamental para que tu directorio resulte atractivo a una base de clientes global es
+ la creación de versiones localizadas de tus gráficos, capturas de pantalla y videos
+ promocionales. Por ejemplo, el gráfico central de tu aplicación podría incluir
+ texto que debes traducir para lograr la máxima eficacia. Puedes crear diferentes
+ versiones de tus gráficos promocionales para cada idioma y cargarlos a la
+ Consola para desarrolladores. Si ofreces un video promocional, puedes crear
+ versiones localizadas y luego agregar un vínculo al video localizado correspondiente
+ para cada idioma que admitas.
+</p>
+
+<p>
+  Una vez que hayas finalizado las traducciones, trasládalas a los recursos de tu aplicación según
+ sea necesario y verifica que se hayan cargado correctamente. Guarda los detalles del directorio de tu aplicación
+ traducidos para más adelante, cuando cargues recursos y configures el directorio de la
+ tienda.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/localization"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="prepare-graphics">
+    12. Prepara gráficos, capturas de pantalla y videos promocionales
+  </h2>
+
+
+</div>
+
+<p>
+  Cuando publicas en Google Play, puedes proporcionar una variedad de recursos
+ gráficos de alta calidad para presentar tu aplicación o tu marca. Una vez que publiques, estos aparecerán
+ en la página de directorio de tu tienda, en los resultados de búsqueda y en otros lugares. Esos recursos
+ gráficos son partes fundamentales de una página de directorio de tienda exitosa que atraiga
+ e involucre a los usuarios, de modo que deberías considerar la posibilidad de que un profesional los produzca por
+ ti. Las capturas de pantalla y los videos también son muy importantes, ya que muestran
+ cómo se ven tus aplicaciones, cómo se usan o cómo se juega, y lo que las hace diferentes.
+</p>
+
+<p>
+  Todos tus recursos gráficos deben estar diseñados de forma tal que sean fáciles de
+ visualizar y resalten tus aplicaciones o tu marca de una forma colorida e interesante. Los recursos
+ deben hacer referencia al mismo logotipo e icono que los usuarios encontrarán en el selector
+ de Todas las aplicaciones una vez que descarguen la aplicación. Tus recursos gráficos también deben
+ ajustarse correctamente a los recursos gráficos de todas las aplicaciones que publicas, que
+ también se mostrarán a los usuarios en la página del directorio de tu tienda.
+</p>
+
+<p>
+  Para ayudarte a comercializar tus aplicaciones de forma más eficaz para un público global, Google
+ Play te permite crear versiones localizadas de tus gráficos, capturas
+ de pantalla y videos promocionales, y cargarlos a la Consola para desarrolladores. Cuando un usuario
+ visita el directorio de la tienda de tu aplicación, Google Play exhibe el gráfico, las capturas
+ de pantalla y los videos promocionales que proporcionaste en el idioma del usuario.
+</p>
+
+<p>
+  Para localizar tus gráficos promocionales, puedes traducir el texto integrado,
+ usar diferentes imágenes o presentaciones, o cambiar tu enfoque de comercialización para
+ abordar mejor las necesidades de los usuarios en idiomas específicos. Por ejemplo, si tu
+ gráfico central o promocional incluye un lema o un nombre de producto integrado,
+ puedes traducir ese texto para agregarlo a una versión localizada del
+ gráfico promocional.
+</p>
+
+<p>
+  Dado que tus videos y tus recursos gráficos localizados son tan importantes, debes
+ comenzar a crearlos y localizarlos mucho antes de la fecha de
+ publicación prevista.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/graphics" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="build-upload">
+    13. Crea y carga el APK listo para el lanzamiento
+  </h2>
+
+
+</div>
+
+<p>
+  Una vez que te asegures de que tus aplicaciones cumplen los requisitos de tu IU, compatibilidad
+ y calidad, puedes crear las versiones de las aplicaciones listas para el lanzamiento.
+  Cargas los APK listos para el lanzamiento a tu Consola para desarrolladores y los distribuyes a los
+ usuarios.
+</p>
+
+<p>
+  El proceso de preparación de un APK listo para el lanzamiento es el mismo que el que sigues para las aplicaciones,
+ independientemente de cómo se distribuyan. Generalmente, el proceso incluye la limpieza
+ y optimización de código básicas, la creación y la firma con tu clave de lanzamiento,
+ y la prueba final.
+</p>
+
+<p>
+  Para obtener información detallada completa acerca de cómo crear una versión de tu aplicación lista para el lanzamiento,
+ lee <a href="{@docRoot}tools/publishing/preparing.html">Preparación para el
+ lanzamiento</a>.
+</p>
+
+<p>
+  Una vez que tengas los APK listos para el lanzamiento a mano, puedes cargarlos en la
+ Consola para desarrolladores. Si fuera necesario, puedes reemplazar un APK con una versión
+ más recientes antes de la publicación.
+</p>
+<!--<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/build"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>-->
+
+<div class="headerLine">
+  <h2 id="plan-beta">
+    14. Planifica un lanzamiento beta
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Prueba beta sencilla
+    </h2>
+
+    <p>
+      Google Play te permite configurar grupos de evaluadores alfa y beta ubicados en cualquier
+ lugar del mundo. La próxima vez que inicies sesión en la Consola para
+ desarrolladores, échale un vistazo a esta función.
+    </p>
+  </div>
+</div>
+
+<p>
+  Antes de lanzar tus aplicaciones, te recomendamos que obtengas la opinión real
+ de los usuarios; más aún cuando estés lanzando aplicaciones nuevas. Es altamente
+ recomendable que distribuyas una versión previa al lanzamiento de tu aplicación a los
+ usuarios de tus mercados clave y les proporciones medios sencillos para que puedan
+ brindarte su opinión e informar errores.
+</p>
+
+<p>
+  Google Play puede ayudarte a configurar un programa beta para tu aplicación. Después de iniciar sesión
+ en tu Consola para desarrolladores y cargar tus APK, puedes configurar grupos
+ de usuarios alfa y beta que prueben tus aplicaciones. Puedes comenzar con un grupo pequeño
+ de evaluadores alfa y luego avanzar a un grupo más grande de evaluadores beta. Una vez que
+ agregues los usuarios, estos podrán acceder al directorio de la tienda de tu aplicación e instalarla.
+ <strong>Los usuarios que utilicen las versiones alfa o beta no podrán escribir reseñas ni
+ calificar la aplicación</strong>, por lo que <strong>no corre riesgo tu calificación</strong> en
+ Google Play. Deberás idear un mecanismo para poder recibir comentarios acerca de la evaluación,
+ como un Foro de Google o Google+.
+</p>
+
+<p>
+  Los comentarios que recibas te ayudarán a ajustar tu IU, las traducciones y el
+ directorio de la tienda para garantizar una excelente experiencia para los usuarios.
+</p>
+<!-- Related resources
+
+<table>
+  <tr>
+    <td>Beta-testing and Staged Rollouts
+See how you can facilitate testing with Google Play.</td>
+  </tr>
+</table> -->
+
+<div class="headerLine">
+  <h2 id="complete-details">
+    15. Completa el directorio de tienda de tus aplicaciones
+  </h2>
+
+
+</div>
+
+<p>
+  En Google Play, la información de los productos de tus aplicaciones se muestra en las
+páginas de directorio de la tienda, las páginas que tus usuarios visitan para obtener más información acerca de tus aplicaciones
+ y las páginas en las que decidirán comprar o descargar tus aplicaciones
+ en sus dispositivos Android o en la Web.
+</p>
+
+<p>
+  Google Play te ofrece una variedad de métodos para promover tus aplicaciones e interactuar con los
+ usuarios en las páginas de directorio de la tienda, desde gráficos coloridos, capturas de pantalla y
+ videos hasta descripciones localizadas, detalles del lanzamiento y vínculos a tus otras
+ aplicaciones. Mientras te preparas para publicar tus aplicaciones, asegúrate de aprovechar
+ todo lo que te ofrecen las páginas de detalles del producto, y haz que tus aplicaciones sean lo más
+ atractivas posible.
+</p>
+
+<p>
+  Debes comenzar a planificar tus páginas de productos mucho tiempo antes de la fecha de lanzamiento
+ prevista y asegurarte de contar con una descripción localizada, recursos gráficos de alta calidad,
+ capturas de pantalla y video, etc.
+</p>
+
+<p>
+  A medida que te acercas a la fecha de publicación prevista, debes familiarizarte con
+ todos los campos, las opciones y los recursos asociados con la página de configuración
+ del directorio de la tienda en la Consola para desarrolladores. Mientras reúnes la información
+ y los recursos para la página, asegúrate de que puedas ingresar a ella o cargarla a la
+ Consola para desarrolladores hasta que la página esté completa y lista para su publicación.
+</p>
+
+<p>
+  Una vez que configures el perfilamiento geográfico de tus aplicaciones en la Consola para desarrolladores,
+ recuerda agregar tu directorio de la tienda localizado, gráficos promocionales, etc.
+ para todos los idiomas que admites.
+</p>
+
+<p>
+  Si tu aplicación está orientada a las tablets, asegúrate de incluir al menos una
+ captura de pantalla de la aplicación ejecutándose en una tablet, y resalta la compatibilidad de tus aplicaciones
+ con las tablets en la descripción de la aplicación, las notas de lanzamiento, las campañas promocionales y
+ en cualquier otro sitio.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/productdetails"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="use-badges">
+    16. Utiliza insignias y vínculos de Google Play en tus campañas promocionales
+  </h2>
+
+
+</div>
+
+<p>
+  Las insignias de Google Play te proporcionan método con respaldo oficial para promocionar tus aplicaciones
+ a los usuarios de Android. Utiliza el generador de <a href="{@docRoot}distribute/tools/promote/badges.html">Insignias de Google Play
+</a> para crear rápidamente insignias que vincularán a tus usuarios con tus productos desde
+ páginas web, anuncios publicitarios, reseñas y más. También puedes usar <a href="{@docRoot}distribute/tools/promote/linking.html">formatos de vínculos</a> especiales para establecer un
+ vínculo directo a la página del directorio de tu tienda, a una lista de tus productos o a resultados
+ de búsqueda.
+</p>
+
+<p>
+  Para impulsar tus aplicaciones después de su lanzamiento, te recomendamos firmemente que
+ respaldes el lanzamiento con una campaña promocionar que anuncie tu producto
+ a través de la mayor cantidad de canales y en la mayor cantidad de países posible. Por
+ ejemplo, puedes promover un lanzamiento mediante anuncios publicitarios, publicaciones en redes sociales o blogs,
+ videos y otros medios, entrevistas y reseñas o cualquier otro canal
+ disponible.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/badges" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="final-checks">
+    17. Comprobaciones finales y publicación
+  </h2>
+
+
+</div>
+
+<p>
+  Cuando creas que estás listo para publicar, inicia sesión en la Consola para desarrolladores y
+ dedica un momento a realizar revisiones finales.
+</p>
+
+<p>
+  Asegúrate de lo siguiente:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Tu perfil de desarrollador contiene información correcta y está vinculado a la
+ cuenta de comerciante de Google Wallet adecuada (si vendes productos).
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Cargaste la versión correcta de las aplicaciones.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Están listas todas las partes del directorio de tu tienda, incluidos todos los recursos gráficos,
+ las capturas de pantalla, los videos, las descripciones localizadas, etc.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Configuraste tu aplicación para que sea gratuita o paga.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Configuraste tus países (y operadores) objetivo y fijaste los precios de tus productos (si
+ corresponde) en las monedas de los compradores.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      "Dispositivos compatibles" indica que tus aplicaciones están llegando a los dispositivos
+ a los que pretendías llegar. De lo contrario, deberás verificar con tu equipo de desarrollo 
+ los requisitos y las reglas de filtrado de las aplicaciones.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Proporcionaste el vínculo a tu sitio web correcto en
+ los requisitos y las reglas de filtrado de las aplicaciones.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Tus aplicaciones no violan las pautas de la política de contenido.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Aceptaste que tus aplicaciones cumplen con las pautas para contenido de Android
+ en Google Play y también con las leyes de exportación de los EE. UU.
+    </p>
+  </li>
+</ul>
+
+<p>
+  ¡Tus aplicaciones ya están listas para publicarse!
+</p>
+
+<p>
+  Si estás lanzando una actualización, asegúrate de leer los <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=113476&amp;topic=2365760&amp;ctx=topic">
+requisitos para la publicación de actualizaciones</a>.
+</p>
+
+<p>
+  Cuando estés listo, haz clic en el botón <strong>Publicar</strong> de la Consola para
+ desarrolladores. En pocas horas, tus aplicaciones estarán disponibles para los usuarios
+ y tu página de productos aparecerá en Google Play
+ para que puedan explorarla, realizar búsquedas o acceder a ella a través de tus campañas promocionales.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/finalchecks"
+data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    18. Brinda soporte a los usuarios después del lanzamiento
+  </h2>
+
+
+</div>
+
+<p>
+  Después de publicar aplicaciones o actualizaciones para las aplicaciones, es fundamental que brindes soporte a tus
+ clientes. El soporte puntual y atento puede proporcionar una mejor experiencia para los
+ usuarios, que se traduce en mejores calificaciones y reseñas más positivas para tus
+ productos. Es probable que los usuarios interactúen más con tu aplicación y la recomienden
+ si respondes a sus necesidades y comentarios. Debes tener en cuenta esto especialmente
+ después de publicar si estás utilizando una campaña promocional coordinada.
+</p>
+
+<p>
+  Existen diferentes maneras de mantenerte en contacto con los usuarios y ofrecerles
+ soporte. Es fundamental que proporciones tu <em>dirección de correo electrónico
+ de soporte</em> en las páginas de directorio de tu tienda. Además, puedes ofrecer
+ soporte de cualquier forma que elijas, como un foro, lista de correo o una página de Google+
+. El equipo de Google Play ofrece soporte a los usuarios en relación con problemas de descarga, instalación
+ y pagos, pero tú serás responsable de los problemas que no pertenezcan a
+ estos temas. Algunos ejemplos de problemas para los que puedes ofrecer soporte incluyen: solicitudes de funciones,
+ preguntas acerca del uso de las aplicaciones y preguntas acerca de la configuración de compatibilidad.
+</p>
+
+<p>
+  Después de publicar, haz lo siguiente:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Revisa tus calificaciones y reseñas con frecuencia en las páginas de directorio de la tienda
+ de tus aplicaciones. Presta atención a los temas recurrentes que podrían indicar la presencia de errores u otros problemas.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Presta atención a los lanzamientos de nuevas versiones de la plataforma Android, ya que quizá debas
+ actualizar la configuración de compatibilidad de tus aplicaciones.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Incluye un vínculo a tus recursos de soporte en tu sitio web y configura cualquier otro
+ medio de soporte, como foros.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Proporciona una dirección de correo electrónico de soporte adecuada en las páginas de directorio de la tienda
+ y respóndeles a los usuarios cuando estos dediquen tiempo a escribirte un correo electrónico.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Además de la ventana de reembolso automático que ofrece Google Play, sé generoso
+ con tu propia política de reembolso, ya que los usuarios satisfechos son más propensos a
+ comprar en el futuro.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Reconoce y soluciona los problemas que presenten tus aplicaciones Te recomendamos que seas transparente e
+ indiques de forma proactiva los problemas conocidos en las páginas de directorio de tu tienda.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Publica actualizaciones con la mayor frecuencia que puedas, sin sacrificar calidad
+ ni molestar a los usuarios con actualizaciones demasiado frecuentes.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Con cada actualización, asegúrate de proporcionar un resumen de lo que ha cambiado. Puedes
+ ingresar esa información en la Consola para desarrolladores. Los usuarios la leerán
+ y valorarán que seas serio con respecto a mejorar la calidad de tus
+ aplicaciones.
+    </p>
+  </li>
+</ul>
+</ul>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/es/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/es/distribute/tools/localization-checklist.jd
new file mode 100644
index 0000000..7cb3ccb
--- /dev/null
+++ b/docs/html-intl/intl/es/distribute/tools/localization-checklist.jd
@@ -0,0 +1,937 @@
+page.title=Lista de comprobación para la localización
+page.metaDescription=Aprovecha el público mundial que te ofrecen Android y Google Play. Lee esta lista de comprobación para obtener información general acerca de cómo distribuir tu producto en los mercados de todo el mundo.
+meta.tags="localizing, publishing, disttools"
+page.tags="local, l10n, translation, language"
+page.image=/distribute/images/localization-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>Lista de comprobación</h2>
+    <ol>
+      <li><a href="#identify-languages">1. Identifica idiomas y configuraciones regionales de destino</a></li>
+      <li><a href="#design">2. Diseña con la localización en mente</a></li>
+      <li><a href="#manage-strings">3. Administra cadenas para localización</a></li>
+      <li><a href="#translate-strings">4. Traduce las cadenas de la IU y otros recursos</a></li>
+      <li><a href="#test">5. Prueba tu aplicación localizada</a></li>
+      <li><a href="#prepare-launch">6. Prepárate para el lanzamiento internacional</a></li>
+      <li><a href="#support-users">7. Brinda soporte a los usuarios internacionales después del lanzamiento</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px">
+  <img src="{@docRoot}distribute/images/localization-checklist.jpg">
+</div>
+
+<p>
+  Android y Google Play te ofrecen un público global para tus aplicaciones con una
+ base de usuarios que puedes usar y que crece muy rápidamente en países como Japón,
+ Corea, India, Brasil y Rusia. Te alentamos firmemente a que localices, ya que
+ puede maximizar las posibilidades de distribución de tus aplicaciones y dar lugar a la obtención de calificaciones
+ de usuarios de todo el mundo.
+</p>
+
+<p>
+  La localización comprende una variedad de tareas durante el ciclo de
+ desarrollo de la aplicación, y la planificación anticipada es fundamental. Este documento te ayuda a identificar
+ aspectos clave de la localización para que dejes tu aplicación lista y capaz de un lanzamiento
+ exitoso en Google Play.
+</p>
+
+<div class="headerLine">
+  <h2 id="identify-languages">
+    1. Identifica idiomas y configuraciones regionales de destino
+  </h2>
+
+
+</div>
+
+<p>
+  Un paso básico pero importante en la preparación para la localización es identificar los
+ países en los que distribuirás tus aplicaciones y los idiomas que allí se hablan.
+  Es especialmente importante que localices tus aplicaciones en países donde
+ exista una gran oportunidad de mercado y no se use ampliamente el
+ inglés u otro idioma internacional.
+</p>
+
+<p>
+  Para los usuarios internacionales, puedes administrar tus aplicaciones en tres dimensiones principales:
+ país, configuración regional e idioma. De esas dimensiones, el idioma constituye una consideración clave
+ para la localización (la configuración regional también puede ser importante dadas las diferencias en
+ formatos de fecha, hora, moneda e información similar). Los usuarios controlan
+ el idioma y la configuración regional de sus dispositivos Android, y estos afectan
+ la manera en la que se visualiza tu aplicación.
+</p>
+
+<p>
+  Generalmente, primero deberás decidir en qué países quieres distribuir en función del tamaño del
+ mercado y las oportunidades, la categoría de la aplicación, el panorama competitivo, los precios
+ locales, factores financieros, etc. Luego, en función de tu selección de
+ países, deberás determinar los idiomas que debes admitir en tus
+ aplicaciones.
+</p>
+
+<p>
+  A continuación podrás decidir localizar en algunos o todos los idiomas del país de
+ destino. Quizá te convenga comenzar con un idioma regional principal y agregar
+ más idiomas a medida que crece la base de usuarios.
+</p>
+
+<p>
+  Una vez que identifiques tus idiomas objetivo, puedes concentrarte en el
+ desarrollo, la traducción, la prueba y la comercialización en esos mercados.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/identifylocales"
+data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="design">
+    2. Diseña con la localización en mente
+  </h2>
+
+
+</div>
+
+<p>
+  Después de que determines tus idiomas objetivo para la localización, evalúa
+ qué necesitas hacer para admitirlos en tus aplicaciones y planifica el trabajo de forma temprana.
+  Ten en cuenta la expansión del vocabulario, los requisitos de script, el espaciado entre caracteres y las
+ limitaciones de ajuste de texto, admisión de texto de izquierda a derecha y de derecha a izquierda, y otros
+ factores potenciales en cada idioma.
+</p>
+
+<h4>
+  <strong>Crea un conjunto único de diseños flexibles</strong>
+</h4>
+
+<p>
+  Mientras creas tus diseños, asegúrate de que los elementos de la IU que contienen texto
+ se diseñen sin restricciones. Se recomienda dejar más espacio que el necesario
+ (hasta un 30% más es normal) para que tu idioma incorpore otros idiomas.
+</p>
+
+<p>
+  Asimismo, los elementos deben poder expandirse horizontalmente o verticalmente para
+ adaptarse a las variaciones en el ancho y la altura de las cadenas de la IU o el texto de entrada.
+  Las cadenas de texto no deben superponerse a los bordes ni al límite de la pantalla en ninguno de tus
+ idiomas objetivo.
+</p>
+
+<p>
+  Si diseñas la IU cuidadosamente, generalmente podrás usar un solo conjunto de
+ diseños para todos los idiomas que admitas. Consulta <a href="{@docRoot}training/basics/fragments/fragment-ui.html">Creación de una IU
+ flexible</a> para obtener más información.
+</p>
+
+<h4>
+  <strong>Cuando sea necesario, usa diseños alternativos</strong>
+</h4>
+
+<p>
+  Cuando tu IU no pueda incluir texto en uno de tus idiomas
+ objetivo, puedes crear un <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+diseño alternativo</a> solo para ese idioma. Android facilita la
+ declaración de la carga de conjuntos de diseños y otros recursos para idiomas,
+ configuraciones regionales, tamaños de pantalla específicos, etc., al etiquetarlos con los
+ calificadores de recursos adecuados. Si bien la flexibilidad de diseños alternativos es real, también
+ podría hacer que tus aplicaciones sean más difíciles de mantener con el paso del tiempo. En general, se prefiere el uso
+ de un solo diseño más flexible.
+</p>
+
+<h4>
+  <strong>Admite diseños y texto RTL</strong>
+</h4>
+
+<p>
+  Si estás distribuyendo a países donde se usan scripts de derecha a izquierda (RTL),
+ debes considerar la implementación de compatibilidad con diseños y
+ visualización y edición de texto RTL en la mayor medida posible.
+</p>
+
+<p>
+  Android 4.1 introdujo compatibilidad limitada con texto bidireccional, que permite que las aplicaciones
+ exhiban y editen texto tanto en scripts de izquierda a derecha (LTR) como de derecha a izquierda (RTL)
+. Android 4.2 agregó <a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">
+compatibilidad nativa plena para diseños RTL</a>, que incluye la duplicación del diseño, de modo que
+ puedas proporcionar las mismas excelentes experiencias con la aplicación a todos tus usuarios.
+</p>
+
+<p>
+  Como mínimo, para los usuarios de Android 4.2, es fácil agregar duplicación básica de diseño
+ RTL, que es un gran avance hacia la satisfacción de las necesidades de los usuarios de RTL.
+</p>
+
+<h4>
+  <strong>Usa formatos proporcionados por el sistema para fechas, horas, números y
+ monedas</strong>
+</h4>
+
+<p>
+  Cuando tus aplicaciones especifiquen fechas, horas, números, monedas y otras entidades
+ que puedan variar según la configuración regional, asegúrate de usar los formatos proporcionados por el sistema, en lugar
+ de formatos específicos de la aplicación. Recuerda que no todas las configuraciones regionales usan el mismo
+ separador de miles, separador decimal o signo de porcentaje.
+</p>
+
+<p>
+  Android ofrece una variedad de utilidades para dar formatear y convertir
+ patrones entre diferentes configuraciones regionales, como <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> y
+ <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a> para
+ fechas, <a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)">
+String.format()</a> o <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a> para
+ números y monedas, <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a>
+ para números de teléfono, y otros.
+</p>
+
+<p>
+  Codificar tus formatos en función de suposiciones acerca de la configuración regional del usuario puede
+ provocar problemas cuando el usuario pase a otra configuración regional. Se recomienda firmemente usar
+ los formatos y las utilidades que proporciona el sistema.
+</p>
+
+<h4>
+  <strong>Incluye un conjunto completo de recursos predeterminados</strong>
+</h4>
+
+<p>
+  Asegúrate de que tus aplicaciones puedan ejecutarse correctamente independientemente del idioma o la
+ configuración adicional al proporcionar un conjunto completo de recursos predeterminados. Los recursos predeterminados de la aplicación
+ son aquellos que <em>no están marcados</em> con ningún calificador de idioma o configuración regional;
+ por ejemplo, los que se guardan en res/drawable/ y res/values/. Si
+ tus aplicaciones intentan cargar un recurso que no está disponible en el idioma
+ actual o en el conjunto predeterminado, colapsarán.
+</p>
+
+<p>
+  Cualquiera sea el idioma predeterminado que uses en tus aplicaciones, asegúrate de
+ guardar los diseños, los recursos dibujables y las cadenas asociados en directorios
+ de recursos predeterminados, sin calificadores de idioma o configuraciones regionales.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/tools/loc/designforloc" data-sortorder="-timestamp"
+data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="manage-strings">
+    3. Administra cadenas para localización
+  </h2>
+
+
+</div>
+
+<p>
+  Es importante que administres correctamente las cadenas de la IU de tus aplicaciones de modo
+ que puedas proporcionar una excelente experiencia para los usuarios y permitir que la localización se realice sin inconvenientes.
+</p>
+
+<h4>
+  <strong>Mueve todas las cadenas a strings.xml</strong>
+</h4>
+
+<p>
+  Mientras creas aplicaciones, recuerda no codificar las cadenas. En su lugar, declara
+ <em>todas</em> las cadenas como recursos en un archivo strings.xml predeterminado que
+ facilite la actualización y la localización. Las cadenas en el archivo strings.xml se pueden
+ extraer, traducir y volver a integrar en tu aplicación (con los calificadores
+ adecuados) sin la necesidad de realizar cambios en el código compilado.
+</p>
+
+<p>
+  Si creas imágenes con texto, coloca también esas cadenas en el archivo strings.xml
+ y vuelve a generar las imágenes después de la traducción.
+</p>
+
+<h4>
+  <strong>Sigue las pautas de Android para las cadenas de la IU</strong>
+</h4>
+
+<p>
+  Mientras diseñas y desarrollas tus IU, asegúrate de prestar mucha atención a
+ <em>cómo</em> te diriges al usuario. En general, utiliza un <a href="{@docRoot}design/style/writing.html">estilo conciso y comprimido</a> que sea
+ amigable pero breve, y usa un estilo uniforme en todas tus IU.
+</p>
+
+<p>
+  Asegúrate de leer y seguir las recomendaciones de Diseño Android para el
+ <a href="{@docRoot}design/style/writing.html">estilo de escritura y la elección de
+ palabras</a>. Al hacerlo, tus aplicaciones se verán más pulidas y
+ esto ayudará a los usuarios a comprender tu IU más rápidamente.
+</p>
+
+<p>
+  Siempre que sea posible, usa la terminología estándar de Android; por ejemplo,
+ para los elementos de la IU como la "barra de acciones", el "menú de opciones", la "barra del sistema"
+, las "notificaciones", etc. El uso correcto y uniforme de los términos de Android
+ facilita la traducción y permite ofrecer un mejor producto final para los usuarios.
+</p>
+
+<h4>
+  <strong>Proporciona suficiente contexto para las cadenas declaradas</strong>
+</h4>
+
+<p>
+  Cuando declares cadenas en tu archivo strings.xml, asegúrate de describir
+ el contexto en el que se usa la cadena. Esta información será muy valiosa para los
+ traductores, dará lugar a una traducción de mejor calidad y también te ayudará a
+ administrar tus cadenas de forma más eficiente con el paso del tiempo.
+</p>
+
+<p>
+  Aquí te mostramos un ejemplo:
+</p>
+
+<pre class="prettyprint">
+&lt;!-- The action for submitting a form. This text is on a button that can fit 30 chars --&gt;
+&lt;string name="login_submit_button"&gt;Sign in&lt;/string&gt;
+</pre>
+<p>
+  Considera la posibilidad de proporcionar información contextual, que podría incluir:
+</p>
+
+<ul>
+  <li>
+    <p>
+      ¿Para qué sirve esta cadena? ¿Cuándo/dónde se le presenta al usuario?
+    </p>
+  </li>
+
+  <li>
+    <p>
+      ¿En qué parte del diseño se encuentra? Por ejemplo, si se trata de un botón, las traducciones
+ son menos flexibles que las de un cuadro de texto.
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>Marca las partes de un mensaje que no deben traducirse</strong>
+</h4>
+
+<p>
+  A menudo, las cadenas contienen texto que no se debe traducir a otros
+ idiomas. Algunos ejemplos comunes podrían incluir un código, un marcador de posición para un
+ valor, un símbolo especial o un nombre. Mientras preparas tus cadenas para la
+ traducción, busca y marca el texto que no debe traducirse
+ de modo que los traductores no lo cambien.
+</p>
+
+<p>
+  Para marcar texto que no debe traducirse, utiliza una etiqueta de marcador de posición
+ <code>&lt;xliff:g&gt;</code>. Aquí te mostramos un ejemplo de etiqueta que
+ garantiza que el texto "%1$s" no se modificará durante la traducción (de lo contrario,
+ rompería el mensaje):
+</p>
+
+<pre class="prettyprint">
+&lt;string name="countdown"&gt;
+    &lt;xliff:g id="time" example="5 days&gt;%1$s&lt;/xliff:g&gt;until holiday
+&lt;/string&gt;
+</pre>
+<p>
+  Cuando declaras una etiqueta de marcador de posición, agrega siempre un atributo de identificación que explique
+ para qué sirve el marcador de posición. Si tus aplicaciones luego reemplazarán el valor del
+ marcador de posición, asegúrate de proporcionar un atributo de ejemplo para aclarar el uso previsto.
+</p>
+
+<p>
+  Aquí te mostramos algunos ejemplos de etiquetas de marcadores de posición:
+</p>
+
+<pre>
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+
+&lt;!-- Example placeholder for a special unicode symbol --&gt;
+
+&lt;string name="star_rating"&gt;Check out our 5
+
+    &lt;xliff:g id="star"&gt;\u2605&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a for a URL --&gt;
+
+&lt;string name="app_homeurl"&gt;
+
+    Visit us at &lt;xliff:g id="application_homepage"&gt;http://my/app/home.html&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a name --&gt;
+
+&lt;string name="prod_name"&gt;
+
+    Learn more at &lt;xliff:g id="prod_gamegroup"&gt;Game Group&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a literal --&gt;
+
+&lt;string name="promo_message"&gt;
+
+    Please use the "&lt;xliff:g id="promotion_code"&gt;ABCDEFG&lt;/xliff:g&gt;” to get a discount.
+
+&lt;/string&gt;
+
+...
+
+&lt;/resources&gt;
+</pre>
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/managestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="translate-strings">
+    4. Traduce las cadenas de la IU y otros recursos
+  </h2>
+
+
+</div>
+
+<p>
+  Traducir las cadenas de la IU y los recursos de tus aplicaciones a tus idiomas objetivo es
+ la fase clave de la localización y es la que requiere la mayor cantidad de atención
+ y planificación.
+</p>
+
+<p>
+  Te recomendamos que trabajes con un traductor profesional (consulta <a href="#gp-trans">Compra traducciones profesionales</a>) para asegurarte de contar con traducciones
+ de alta calidad que aumenten el valor de tu aplicación. Si bien las traducciones automáticas
+ son una opción, es posible que no produzcan una experiencia igual de buena para los usuarios.
+</p>
+
+<h4>
+  <strong>Prepárate para la traducción</strong>
+</h4>
+
+<p>
+  La calidad de la traducción dependerá, en parte, de la información que proporciones; por lo tanto, asegúrate
+ de que tu archivo strings.xml esté bien organizado, bien comentado y sea
+ preciso.
+</p>
+
+<p>
+  Aquí te indicamos algunas maneras de preparar tus cadenas para la traducción:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Asegúrate de haber formateado tus cadenas de forma correcta y uniforme.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Sigue las recomendaciones para cadenas que se indican más arriba en <a href="#manage-strings">Administra cadenas para localización</a>.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Limpia el archivo strings.xml y elimina las cadenas que no se utilicen.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Proporciona comentarios en el archivo para identificar al propietario, el origen y la versión
+ del archivo, y también instrucciones especiales para los traductores.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Identifica las traducciones existentes, si las hubiera, e inclúyelas en un archivo
+ comprimido saliente u otro paquete que envíes a los traductores.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Identifica los recursos dibujables u otros recursos que requieran traducción e
+ inclúyelos en el paquete para los traductores.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Además, considera la posibilidad de traducir los detalles del directorio de tienda de tus aplicaciones
+ (título y descripción de la aplicación, notas de lanzamiento, etc.)
+ y otros materiales de comercialización internacional.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Crea una lista terminológica que explique el significado y el uso de términos clave
+ que se encuentren en tu producto, tu mercado o la tecnología subyacente. Agrega la
+ lista al paquete para los traductores.
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>Envía tus cadenas para traducción</strong>
+</h4>
+
+<p>
+  Al inicio del ciclo de desarrollo, comunícate con traductores profesionales para tener
+ una idea del costo y el tiempo de entrega. Asegúrate de incluir múltiples
+ repeticiones acerca del costo. Puedes buscar traductores en línea o utilizar los
+ servicios de traducción disponibles directamente desde la Consola para desarrolladores de Google Play
+ (consulta <a href="#gp-trans">Compra traducciones profesionales</a>).
+</p>
+
+<p>
+  Cuando tus traducciones estén terminadas, échales un vistazo preliminar
+. Comprueba que se hayan traducido todos los archivos, busca posibles
+ problemas de codificación y asegúrate de que los formatos de la declaración estén intactos.
+</p>
+
+<p>
+  Si todo se ve bien, traslada cuidadosamente los directorios y archivos localizados
+ nuevamente a los recursos de tus aplicaciones. Asegúrate de etiquetar los directorios con
+ los calificadores de idioma y configuración regional correctos de modo que luego se carguen
+ de forma adecuada.
+</p>
+
+<p>
+  Después de insertar las traducciones en tu aplicación, comienza a <a href="#test">probar la aplicación localizada</a>.
+</p>
+
+<h4 id="gp-trans">
+  <strong>Compra traducciones profesionales en Google Play</strong>
+</h4>
+
+<p>
+  El Servicio de traducción de aplicaciones de Google Play puede ayudarte a encontrar y comprar
+ rápidamente traducciones de tu aplicación. En la Consola para desarrolladores, puedes examinar una lista de
+ proveedores externos precalificados por Google para ofrecer traducciones de
+ alta calidad a precios competitivos. Puedes cargar las cadenas que quieres
+ traducir, seleccionar los idiomas en los que quieres que se traduzcan y seleccionar el
+ traductor en función del tiempo y el precio.
+</p>
+
+<p>
+  Cuando compres traducciones, recibirás un correo electrónico del traductor.
+  Tus traducciones son un acuerdo comercial directo entre tú y tu
+ proveedor; deberás trabajar directamente con el traductor para administrar el
+ proceso de traducción y las entregas, y solucionar cualquier problema de soporte.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-localization-trans-0.png" class="border-img">
+</div>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/translatestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test">
+    5. Prueba tu aplicación localizada
+  </h2>
+
+
+</div>
+
+<p>
+  Una vez que recibas tus cadenas y recursos traducidos y los insertes en
+ tus aplicaciones, debes probar las aplicaciones para asegurarte de que estén
+ listas para distribución a tus usuarios internacionales.
+</p>
+
+<p>
+  La prueba manual puede ayudarte a detectar problemas de localización en tus diseños y
+ en las cadenas que puedan afectar la satisfacción del usuario y, en última instancia, la calificación del usuario para
+ tus aplicaciones.
+</p>
+
+<h4>
+  <strong>Configura un entorno de prueba</strong>
+</h4>
+
+<p>
+  Para probar tu aplicación localizada, debes configurar un entorno que conste
+ de múltiples dispositivos (o dispositivos virtuales) y tamaños de pantalla, en función de los
+ mercados y formatos a los que apuntes. Ten en cuenta que el rango de dispositivos en
+ regiones específicas podría ser diferente. Si fuera posible, empareja tus dispositivos de prueba a
+ los dispositivos reales que probablemente estén disponibles para los usuarios.
+</p>
+
+<h4>
+  <strong>Busca problemas comunes de localización</strong>
+</h4>
+
+<p>
+  En cada dispositivo de prueba, establece el idioma o la configuración regional en Configuración. Instala e
+ inicia la aplicación, y luego navega por todos los flujos de la IU, los diálogos y las
+ interacciones con los usuarios. Ingresa texto en las entradas. Algunas cosas que debes buscar incluyen:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Texto recortado o texto que se superpone al borde de los elementos de la IU o a la pantalla.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Ajuste de línea insuficiente
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Separación de palabras o puntuación incorrectas
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Orden alfabético incorrecto
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Orientación incorrecta del diseño o el texto
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Texto sin traducir: si se muestran tus cadenas predeterminadas en lugar
+ de cadenas traducidas, es posible que te hayas salteado esas cadenas
+ en la traducción o hayas marcado el directorio de recursos con un calificador de idioma
+ incorrecto.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Cuando tus cadenas se hayan extendido debido a la traducción y ya no se ajusten a
+ tus diseños, te recomendamos que intentes simplificar el texto predeterminado, simplificar
+ el texto traducido o ajustar tus diseños predeterminados. Si ninguna de esas
+ opciones soluciona el problema, puedes crear un diseño personalizado para el idioma.
+</p>
+
+<h4>
+  <strong>Prueba tus recursos predeterminados</strong>
+</h4>
+
+<p>
+  Después de haber probado tus aplicaciones en todos los idiomas y las configuraciones regionales admitidos,
+ asegúrate de probarlas nuevamente en un <em>idioma y una configuración regional</em> no admitidos.
+  Esto te ayudará a asegurarte de que tus aplicaciones incluyen un conjunto completo de cadenas
+ y recursos predeterminados, de modo que todos los usuarios puedan utilizarlas, independientemente
+ de su idioma preferido.
+</p>
+
+<h4>
+  <strong>Realiza una revisión con hablantes nativos</strong>
+</h4>
+
+<p>
+  Durante o después de la prueba, se recomienda que hablantes nativos revisen
+ tus aplicaciones localizadas. Una forma de hacerlo es a través de pruebas beta con usuarios
+ regionales; Google Play puede ayudarte. <!-- </p>
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/test"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> -->
+</p>
+
+<div class="headerLine">
+  <h2 id="prepare-launch">
+    6. Prepárate para el lanzamiento internacional
+  </h2>
+
+
+</div>
+
+<p>
+  Traducir tus aplicaciones es una parte fundamental de la localización, pero para ayudar a tu
+ producto a atraer usuarios y ganar visibilidad, debes prepararte para el lanzamiento
+ en tus países objetivo y crear un lanzamiento y un plan de comercialización más amplios para
+ los usuarios internacionales.
+</p>
+
+<h4>
+  <strong>Localiza tu directorio en Google Play</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Localiza tu directorio en Google Play
+    </h2>
+
+    <p>
+      El directorio de la tienda en la Play Store de Google es la primera impresión que los usuarios internacionales
+ tendrán de tu aplicación. Debes resaltar qué hace que tu aplicación sea excelente
+ para todos tus usuarios. Localiza tu directorio en la Consola para desarrolladores,
+ incluido lo siguiente:
+    </p>
+
+    <ul>
+      <li>Título y descripción de la aplicación
+      </li>
+
+      <li>Capturas de pantalla de la aplicación en teléfonos y tablets
+      </li>
+
+      <li>Gráficos y videos promocionales
+      </li>
+    </ul>
+  </div>
+</div>
+
+<p>
+  Si quieres que tus aplicaciones tengan éxito en mercados internacionales, es fundamental
+ que localices el directorio de tu tienda en Google Play. Puedes administrar tu
+ directorio localizado en la Consola para desarrolladores.
+</p>
+
+<p>
+  Mucho tiempo antes del lanzamiento, decide el título de tu aplicación, una descripción, texto promocional,
+ nombres y programas de comercialización, y otros textos e imágenes. Envía el texto y las
+ imágenes de tu directorio para traducción con mucho tiempo de anticipación, de modo que estén listos cuando comiencen las
+ pruebas beta. Cuando recibas el texto traducido, puedes agregarlo
+ a través de la Consola para desarrolladores.
+</p>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Traducción del directorio de la tienda en Google Play
+    </h2>
+
+    <p>
+      Puedes usar el servicio de traducción de aplicaciones de Google Play para traducir
+ el directorio de tu tienda. Prepara un archivo XML con la información del directorio de la tienda
+ y cárgalo como lo harías con el archivo strings.xml file (consulta <a href="#gp-trans">Compra traducciones profesionales</a>).
+    </p>
+  </div>
+</div>
+
+<p>
+  Y ya que hiciste el esfuerzo de crear una excelente aplicación localizada, ¡haz
+ que los usuarios la conozcan! Toma capturas de pantalla de tu IU en cada idioma, para teléfonos y
+ tablets de 7 y 10 pulgadas. Puedes cargar capturas de pantalla a la Consola para desarrolladores
+ para cada idioma que admitas. Serán un recurso muy valioso para los usuarios que examinen
+ los directorios de tus aplicaciones en otros idiomas.
+</p>
+
+<p>
+  También es fundamental crear versiones localizadas de tus gráficos y videos
+ promocionales. Por ejemplo, el gráfico central de tus aplicaciones podría incluir texto que
+ debe traducirse para lograr la máxima eficacia, o quizá quieras utilizar
+ enfoques visuales distintos para diferentes países. Puedes
+ crear versiones diferentes de tus gráficos promocionales para cada idioma y
+ cargarlos a la Consola para desarrolladores. Si ofreces un video promocional, puedes
+ crear versiones localizadas y luego agregar un vínculo al video localizado
+ correspondiente para cada idioma que admitas.
+</p>
+
+<h4>
+  <strong>Planifica un lanzamiento beta en países clave</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Prueba beta sencilla
+    </h2>
+
+    <p>
+      Google Play ahora te permite configurar grupos de evaluadores alfa y beta
+ ubicados en cualquier lugar del mundo. La próxima vez que inicies sesión en la Consola
+ para desarrolladores, échale un vistazo a esta poderosa función.
+    </p>
+  </div>
+</div>
+
+<p>
+  Antes de lanzar tus aplicaciones, te recomendamos que obtengas la opinión real
+ de los usuarios; más aún cuando estés lanzando una aplicación en un nuevo
+ idioma, país o región. En esos casos, es altamente recomendable que
+ distribuyas una versión previa al lanzamiento de tus aplicaciones a los usuarios de tus mercados
+ clave, y les proporciones medios sencillos para que puedan brindarte su opinión e informar
+ errores.
+</p>
+
+<p>
+  Google Play puede ayudarte a configurar un programa beta para tus aplicaciones. Después de iniciar sesión
+ en la Consola para desarrolladores y cargar tu APK, puedes configurar grupos de
+ usuarios para que realicen pruebas alfa y beta en tu aplicación. Puedes comenzar con un grupo pequeño
+ de evaluadores alfa y luego avanzar a un grupo más grande de evaluadores beta.
+</p>
+
+<p>
+  Una vez que agregues los usuarios, estos podrán acceder al directorio de la tienda de tu aplicación e instalar la
+ aplicación.<strong> Los usuarios que utilicen las versiones alfa o beta no podrán escribir reseñas ni calificar
+ la aplicación</strong>, por lo que <strong>no corre riesgo tu calificación</strong> en
+ Google Play; no obstante, esto significa que deberás establecer un mecanismo para que los
+ evaluadores te proporcionen sus comentarios: considera la posibilidad de crear una página de <a href="http://www.google.com/+/business/">Google+</a> o <a href="https://groups.google.com/forum/#!overview">Google Groups</a>.
+</p>
+
+<p>
+  Los comentarios que recibas te ayudarán a ajustar tu IU, las traducciones y el
+ directorio de la tienda para garantizar una excelente experiencia para los usuarios.
+</p>
+
+<h4>
+  <strong>Planifica la comercialización internacional</strong>
+</h4>
+
+<p>
+  Para adquirir la máxima visibilidad en los diferentes países, considera la posibilidad de realizar una
+ campaña publicitaria o de comercialización internacional. El alcance de la campaña variará en función de la
+ insignia que puedas admitir, pero en general resulta rentable y productivo
+ realizar campañas de comercialización regionales o específicas para un país durante el lanzamiento y después.
+</p>
+
+<h4>
+  <strong>Crea insignias localizadas de Google Play</strong>
+</h4>
+
+<p>
+  Si estás preparando la comercialización internacional, asegúrate de incluir una <a href="{@docRoot}distribute/tools/promote/badges.html">insignia localizada de
+ Google Play</a> para indicarles a los usuarios que estás en Google Play. Puedes usar el generador de
+ de insignias para crear rápidamente insignias localizadas que puedes usar en sitios web o
+ en los materiales de comercialización. También se encuentran disponibles recursos en alta resolución.
+</p>
+
+<h4>
+  <strong>Crea material gráfico para los dispositivos localizados</strong>
+</h4>
+
+<p>
+  Si exhibes fotos de tus aplicaciones ejecutándose en dispositivos Android,
+ asegúrate de que esas fotos se vean magníficas y reflejen los dispositivos Android más modernos.
+  Para ayudarte a crear material de comercialización de alta calidad, usa el
+ <a href="{@docRoot}distribute/tools/promote/device-art.html">Generador de material gráfico
+ para dispositivos</a> con la función arrastrar y colocar para enmarcar rápidamente tu captura de pantalla en un dispositivo Nexus.
+</p>
+
+<h4>
+  <strong>Consulta las sugerencias para la optimización</strong>
+</h4>
+
+<p>
+  Mientras te preparas para el lanzamiento, asegúrate de iniciar sesión en la Consola para desarrolladores y
+ consultar las sugerencias para la optimización de tus aplicaciones. Las Sugerencias para la optimización te informan
+ cuando faltan partes del directorio localizado de tu tienda y te proporcionan
+ otros recordatorios útiles para un lanzamiento localizado exitoso.
+</p>
+
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/preplaunch"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    7. Brinda soporte a los usuarios internacionales después del lanzamiento
+  </h2>
+
+
+</div>
+
+<p>
+  Después de lanzar tus aplicaciones a nivel internacional, debes estar preparado para brindar
+ soporte a los usuarios en una variedad de idiomas y zonas horarias. El alcance del
+ soporte que brindes a los usuarios internacionales depende de tu presupuesto, pero como mínimo,
+ debes controlar cuidadosamente tus calificaciones, reseñas y estadísticas de descarga después del
+ lanzamiento.
+</p>
+
+<p>
+  Aquí te proporcionamos alguna sugerencias:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Usa las estadísticas de la aplicación en la Consola para desarrolladores para comparar tus descargas,
+ instalaciones, desinstalaciones y calificaciones entre diferentes idiomas
+ y países. Si tus descargas o calificaciones no se mantienen en
+ idiomas o países específicos, considera algunas opciones para mejorar tu
+ producto o cambiar el enfoque de comercialización.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Lee las reseñas con frecuencia. Google Play traduce todas las reseñas de los usuarios por
+ ti, de modo que puedas estar informado acerca de cómo se sienten los usuarios internacionales en relación con
+ tus aplicaciones, qué funciones les gustan y qué problemas los afectan. Al
+ leer las reseñas, puedes detectar problemas técnicos que podrían afectar a los usuarios en
+ un país determinado, luego solucionarlos y actualizar tus aplicaciones.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Responde las reseñas, si fuera posible. Te recomendamos que interactúes
+ con los usuarios internacionales en sus idiomas o en un idioma común, si fuera posible.
+      Si no lo es, puedes intentar utilizar herramientas de traducción, aunque es posible que no puedas
+ prever los resultados. Si tu aplicación se vuelve muy popular en un idioma, considera 
+ la posibilidad de obtener ayuda por parte de hablantes nativos para brindar soporte.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Asegúrate de que en tu sitio web haya un vínculo a cualquier recurso de soporte que tengas.
+      Puedes configurar grupos de usuarios para un idioma específico, comunidades de Google+
+ u otros foros de soporte.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Al seguir estas prácticas para la localización de tus aplicaciones, la promoción
+ y comercialización a usuarios internacionales y la provisión de soporte continuo, puedes
+ atraer nuevos usuarios a tus aplicaciones y mantener su fidelidad.
+</p>
+
+<p>
+  Asegúrate de leer la <a href="{@docRoot}distribute/tools/launch-checklist.html">Lista de comprobación para el lanzamiento</a> para
+ obtener más información acerca de cómo planificar, crear y lanzar tu aplicación en Google Play.
+</p>
+<h3 class="rel-resources clearfloat">Recursos relacionados</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
diff --git a/docs/html-intl/intl/es/google/play/filters.jd b/docs/html-intl/intl/es/google/play/filters.jd
new file mode 100644
index 0000000..d4890dc
--- /dev/null
+++ b/docs/html-intl/intl/es/google/play/filters.jd
@@ -0,0 +1,439 @@
+page.title=Filtros en Google Play
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Vista rápida</h2>
+<ul>
+<li>Google Play utiliza filtros para controlar qué dispositivos Android pueden descargar
+ tu aplicación de la tienda.</li>
+<li>El filtrado garantiza que tus aplicaciones estén disponibles solo para los usuarios cuyos dispositivos cumplen los requisitos de compatibilidad de la aplicación.
+<li>El filtrado se determina en función de los requisitos de configuración que declares en el archivo
+de manifiesto de tu aplicación, y también en otros factores.</li>
+</ul>
+
+<h2>En este documento:</h2>
+
+<ol>
+  <li><a href="#how-filters-work">Cómo funcionan los filtros en Google Play</a></li>
+  <li><a href="#manifest-filters">Filtrado en función de los elementos del manifiesto</a>
+  </li>
+  <li><a href="#other-filters">Otros filtros</a></li>
+  <li><a href="#MultiApks">Publicación de múltiples APK con diferentes filtros</a></li>
+</ol>
+
+<h2>Consulta también</h2>
+ <ol>
+<li><a href="{@docRoot}guide/practices/compatibility.html">Compatibilidad con Android</a></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Cuando un usuario busca o examina aplicaciones para descargar en Google Play, los
+resultados se filtran en función de las aplicaciones compatibles con el dispositivo.
+Por ejemplo, si una aplicación requiere una cámara, Google Play no mostrará la aplicación a los dispositivos
+ que no tengan cámara. Este <em>filtrado</em> ayuda a los desarrolladores a administrar la
+ distribución de sus aplicaciones y también ayuda a garantizar la mejor experiencia posible para los
+ usuarios.</p>
+
+<p>El filtrado en Google Play se basa en diversos tipos de metadatos de las aplicaciones y en los
+ ajustes de configuración, incluidos los enunciados del manifiesto, las bibliotecas
+ requeridas, las dependencias de arquitectura y los controles de distribución configurados en la Consola para desarrolladores
+ de Google Play, como el perfilamiento geográfico, la fijación de precios, etc.</p>
+
+<p>El filtrado en Google Play se basa en los enunciados del manifiesto y en otros
+ aspectos del marco de Android, pero los comportamientos de filtrado reales son diferentes
+ de los del marco y no están condicionados a niveles de API específicos. Este documento
+ especifica las reglas actuales de filtrado que utiliza Google Play.</p>
+
+
+<h2 id="how-filters-work">Cómo funcionan los filtros en Google Play</h2>
+
+<p>Google Play utiliza las restricciones de filtrado que se describen a continuación para determinar
+ si se exhibirá tu aplicación a los usuarios que examinen o busquen
+ aplicaciones en la Play Store de Google.</p>
+
+<p>Para determinar si se exhibirá o no tu aplicación, Google Play comprueba los requisitos de
+ hardware y software del dispositivo, como también su operador, ubicación y otras
+ características. Luego los compara con las restricciones y
+ dependencias que se indican en el archivo de manifiesto de la aplicación y en los detalles de
+ publicación. </p>
+
+<p>Si la aplicación es compatible con el dispositivo, de acuerdo con las reglas de
+ filtrado, Google Play le muestra la aplicación al usuario. De lo contrario, Google Play
+ oculta tu aplicación en los resultados de búsqueda y la exploración de categorías aunque un usuario
+ solicite específicamente la aplicación al hacer clic en un vínculo profundo que apunte directamente a la
+ ID de la aplicación en Google Play.</p>
+
+<p>Puedes usar cualquier combinación de los filtros disponibles para tu aplicación. Por ejemplo, puedes establecer un requisito 
+<code>minSdkVersion</code> de <code>"4"</code> y configurar <code>smallScreens="false"</code>
+ en la aplicación; luego, al cargar la aplicación a Google Play, podrías apuntar a países (operadores) europeos
+ únicamente. De este modo, los filtros de Google Play evitarán que la aplicación esté disponible en un dispositivo
+ que no coincida con estos tres requisitos. </p>
+
+<p>Todas las restricciones de filtrado están asociadas con una versión de la aplicación y pueden
+ diferir entre versiones. Por ejemplo, si un usuario instaló tu aplicación y publicas una
+ actualización que permite que la aplicación esté visible para el usuario, el usuario no verá que hay una actualización
+ disponible.</p>
+
+<h4>Filtrado en el sitio web de Google Play</h4>
+
+<p>Cuando los usuarios examinan el <a href="http://play.google.com/apps">sitio web de Google
+Play</a>, pueden ver todas las aplicaciones publicadas. No obstante, el sitio web de Google Play
+ compara los requisitos de la aplicación para cada uno de los dispositivos registrados del usuario
+ a fin de determinar la compatibilidad, y solo les permite instalar la aplicación si
+ es compatible con su dispositivo.</p>
+
+<h2 id="manifest-filters">Filtrado en función del manifiesto de la aplicación</h2>
+
+<p>La mayoría de los filtros son activados por elementos del archivo de manifiesto de una 
+aplicación, <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
+ (aunque no todo lo que se encuentra en el archivo de manifiesto puede desencadenar el filtrado).
+La tabla 1 contiene los elementos del manifiesto que debes usar para desencadenar el
+ filtrado y explica cómo funciona el filtrado para cada elemento.</p>
+
+<p id="table1" class="table-caption"><strong>Tabla 1.</strong> Elementos del manifiesto que
+ desencadenan el filtrado en Google Play.</p>
+<table>
+  <tr>
+    <th>Elemento del manifiesto</th>
+    <th>Nombre del filtro</th>
+    <th>Cómo funciona</th>
+  </tr>
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">Tamaño de pantalla</td>
+    <td valign="top">
+
+<p>Una aplicación indica el tamaño de pantalla que puede admitir mediante
+ la configuración de atributos del elemento <code>&lt;supports-screens&gt;</code>. Cuando
+ se publica la aplicación, Google Play usa esos atributos para determinar si puede
+ mostrar la aplicación a los usuarios en función de los tamaños de pantalla de sus
+ dispositivos. </p>
+
+<p>Como regla general, Google Play asume que la plataforma del dispositivo puede adaptar
+ diseños más pequeños a pantallas más grandes, pero no puede adaptar diseños grandes a pantallas
+ más pequeñas. Por lo tanto, si una aplicación declara compatibilidad con el tamaño de pantalla "normal" únicamente,
+ Google Play exhibe la aplicación para dispositivos con pantallas normales y grandes,
+ pero filtra la aplicación de modo que no esté disponible para dispositivos con
+ pantalla pequeña.</p>
+
+<p>Si una aplicación no declara atributos para
+ <code>&lt;supports-screens&gt;</code>, Google Play utiliza los valores predeterminados para esos
+ atributos, que varían según el nivel de API. Específicamente: </p>
+
+<ul>
+<li><p>Para las aplicaciones que tienen <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> o <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> configurados en 3 o menos, el elemento <code>&lt;supports-screens&gt;</code> se considera
+ no definido y no habrá atributos disponibles. En ese caso, Google Play supone que
+ la aplicación se diseñó para pantallas de tamaño normal y exhibe la aplicación a
+ dispositivos con pantallas de tamaño normal o más grande. </p>
+
+<li>Cuando <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> o <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> están configurados en 4 o más, el valor predeterminado para todos los atributos es
+ <code>"true"</code>. De esta manera, se considera que la aplicación es compatible, de forma predeterminada, con todos los tamaños
+ de pantalla.</li>
+</ul>
+
+    <p><strong>Ejemplo 1</strong><br />
+    El manifiesto establece <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>
+ y no incluye un elemento <code>&lt;supports-screens&gt;</code>.
+    <strong>Resultado</strong>: Google Play no le mostrará la aplicación a un usuario que tenga
+ un dispositivo con pantalla pequeña, pero se la mostrará a los usuarios con dispositivos con pantallas de tamaño normal y grande,
+ a menos que se apliquen otros filtros. </p>
+    <p><strong>Ejemplo 2<br />
+    </strong>El manifiesto establece <code>&lt;uses-sdk android:minSdkVersion="3"
+    android:targetSdkVersion="4"&gt;</code> y no incluye un
+ elemento <code>&lt;supports-screens&gt;</code>.
+    <strong>Resultado</strong>: Google Play mostrará la aplicación a los usuarios de todo tipo de dispositivos,
+ a menos que se apliquen otros filtros. </p>
+    <p><strong>Ejemplo 3<br />
+    </strong>El manifiesto establece <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code>
+ y no incluye un elemento <code>&lt;supports-screens&gt;</code>.
+    <strong>Resultado</strong>: Google Play mostrará la aplicación a todos los usuarios,
+ a menos que se apliquen otros filtros. </p>
+    <p>Para obtener más información acerca de cómo declarar la compatibilidad con tamaños de pantalla en tu
+ aplicación, consulta <code><a
+    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+ y <a href="{@docRoot}guide/practices/screens_support.html">Admisión de múltiples
+ pantallas</a>.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
+      <!-- ##api level 3## --></td>
+    <td valign="top">Configuración del
+ dispositivo: <br />
+    teclado, navegación, pantalla táctil</td>
+    <td valign="top"><p>Una aplicación puede
+ requerir ciertas características de hardware, y Google Play mostrará la aplicación únicamente a los dispositivos que tengan el hardware requerido.</p>
+      <p><strong>Ejemplo 1<br />
+      </strong>El manifiesto incluye <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>, y un usuario está buscando aplicaciones en un dispositivo que no cuenta con un control de navegación de cinco vías. <strong>Resultado</strong>: Google Play no le mostrará la aplicación al usuario. </p>
+      <p><strong>Ejemplo 2<br />
+      </strong>El manifiesto no incluye un elemento <code>&lt;uses-configuration&gt;</code>. <strong>Resultado</strong>: Google Play mostrará la aplicación a todos los usuarios, a menos que se apliquen otros filtros.</p>
+<p>Para obtener información detallada, consulta <a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>.</p></td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">Funciones del dispositivo<br />
+      (<code>name</code>)</td>
+    <td valign="top"><p>Una aplicación puede requerir que el dispositivo tenga
+ ciertas funciones. Esta funcionalidad se introdujo en Android 2.0 (API
+ de nivel 5).</p>
+      <p><strong>Ejemplo 1<br />
+      </strong>El manifiesto incluye <code>&lt;uses-feature
+android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>, y un usuario
+está buscando aplicaciones en un dispositivo que no tiene sensor de luz.
+<strong>Resultado</strong>: Google Play no le mostrará la aplicación al usuario. </p>
+      <p><strong>Ejemplo 2<br />
+      </strong>El manifiesto no incluye un elemento <code>&lt;uses-feature&gt;</code>
+. <strong>Resultado</strong>: Google Play mostrará la aplicación a todos los usuarios,
+ a menos que se apliquen otros filtros.</p>
+      <p>Para obtener información completa, consulta <code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>.</p>
+      <p><em>Filtrado basado en funciones implícitas:</em> En algunos casos, Google
+ Play interpreta los permisos requeridos a través de
+ elementos <code>&lt;uses-permission&gt;</code> como requisitos de funciones equivalentes
+ a los declarados en los elementos <code>&lt;uses-feature&gt;</code>. Consulta <a href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>
+ a continuación.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top">Versión de
+ OpenGL-ES<br />
+(<code>openGlEsVersion</code>)</td>
+    <td valign="top"><p>Una aplicación puede requerir que el dispositivo admita una
+ versión de OpenGL-ES específica mediante el atributo <code>&lt;uses-feature
+        android:openGlEsVersion=&quot;int&quot;&gt;</code>.</p>
+      <p><strong>Ejemplo 1<br />
+      </strong>Una aplicación
+ exige múltiples versiones de OpenGL-ES al especificar <code>openGlEsVersion</code> varias veces en el
+ manifiesto.  <strong>Resultado</strong>: Google Play asume que la aplicación requiere las últimas actualizaciones de las versiones indicadas.</p>
+<p><strong>Ejemplo 2<br />
+</strong>Una aplicación
+ exige la versión 1.1 de OpenGL-ES y un usuario busca aplicaciones en un dispositivo que admite la versión 2.0 de OpenGL-ES. <strong>Resultado</strong>: Google Play le mostrará la aplicación al usuario, a menos que se apliquen otros filtros. Si un
+ dispositivo informa que admite la versión <em>X</em> de OpenGL-ES, Google Play asume que
+ también admite las versiones anteriores a <em>X</em>.
+</p>
+<p><strong>Ejemplo 3<br />
+</strong>Un usuario está buscando aplicaciones en un dispositivo que no
+ contiene información acerca de la versión de OpenGL-ES (por ejemplo, un dispositivo que ejecuta Android 1.5 o anterior). <strong>Resultado</strong>: Google Play asume que el dispositivo
+ solo admite OpenGL-ES 1.0. Google Play le mostrará al usuario únicamente aplicaciones que no especifiquen <code>openGlEsVersion</code> o aplicaciones que no especifiquen una versión de OpenGL-ES posterior a 1.0. </p>
+      <p><strong>Ejemplo 4<br />
+      </strong>El manifiesto no especifica <code>openGlEsVersion</code>. <strong>Resultado</strong>: Google Play mostrará la aplicación a todos los usuarios, a menos que se apliquen otros filtros. </p>
+<p>Para obtener información detallada, consulta <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>.</p></td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
+    <td valign="top">Bibliotecas de software</td>
+    <td valign="top"><p>Una aplicación puede requerir que el dispositivo
+ tenga bibliotecas compartidas específicas. </p>
+      <p><strong>Ejemplo 1<br />
+      </strong>Una aplicación exige la biblioteca <code>com.google.android.maps</code>, y un usuario está buscando aplicaciones en un dispositivo que no tiene la biblioteca <code>com.google.android.maps</code>. <strong>Resultado</strong>: Google Play no le mostrará la aplicación al usuario. </p>
+      <p><strong>Ejemplo 2</strong><br />
+        El manifiesto no incluye un elemento <code>&lt;uses-library&gt;</code>. <strong>Resultado</strong>: Google Play mostrará la aplicación a todos los usuarios, a menos que se apliquen otros filtros.</p>
+<p>Para obtener información detallada, consulta <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>.</p></td>
+  </tr>
+  <tr id="uses-permission-filtering">
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
+    <td valign="top">&nbsp;</td>
+    <td valign="top">De forma estricta, Google Play no filtra en función de los elementos
+ <code>&lt;uses-permission&gt;</code>. No obstante, sí lee los
+ elementos para determinar si la aplicación tiene requisitos de características de hardware
+ que podrían no haberse declarado correctamente en los elementos <code>&lt;uses-feature&gt;</code>
+. Por ejemplo, si una aplicación requiere el permiso <code>CAMERA</code>
+ pero no declara un elemento <code>&lt;uses-feature&gt;</code> para
+ <code>android.hardware.camera</code>, Google Play considera que la
+ aplicación requiere una cámara y no se le mostrará a los usuarios cuyos dispositivos no
+ tengan cámara.</p>
+    <p>En general, si una aplicación requiere elementos relacionados con hardware,
+ Google Play asume que la aplicación requiere las características de hardware
+ subyacentes, aunque no se correspondan con los enunciados de
+ <code>&lt;uses-feature&gt;</code>. Luego, Google Play establece el
+ filtrado en función de las funciones denotadas por los enunciados de <code>&lt;uses-feature&gt;</code>
+.</p>
+    <p>Para acceder a una lista de los permisos que denotan características de hardware, consulta
+ la documentación para el elemento <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a>
+.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
+    <td valign="top">Versión mínima del Framework (<code>minSdkVersion</code>)</td>
+    <td valign="top"><p>Una aplicación puede requerir un nivel de API mínimo.  </p>
+      <p><strong>Ejemplo 1</strong><br />
+        El manifiesto incluye <code>&lt;uses-sdk
+      android:minSdkVersion=&quot;3&quot;&gt;</code>, y la aplicación utiliza API que pertenecen al nivel de API 3. Un usuario busca aplicaciones en un dispositivo con nivel de API 2. <strong>Resultado</strong>: Google Play no le mostrará la aplicación al usuario. </p>
+      <p><strong>Ejemplo 2</strong><br />
+      El manifiesto no incluye <code>minSdkVersion</code>, y la aplicación utiliza API que pertenecen al nivel de API 3. Un usuario busca aplicaciones en un dispositivo con nivel de API 2. <strong>Resultado</strong>: Google Play asume que <code>minSdkVersion</code> es "1" y que la aplicación es compatible con todas las versiones de Android. Google Play le muestra la aplicación al usuario y le permite descargarla. La aplicación colapsa durante la ejecución. </p>
+    <p>Para evitar esta segunda situación, te recomendamos que siempre declares un <code>minSdkVersion</code>. Para obtener información detallada, consulta <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>.</p></td>
+  </tr>
+  <tr>
+    <td valign="top">Versión máxima del Framework (<code>maxSdkVersion</code>)</td>
+    <td valign="top"><p><em>Obsoleto.</em> Android
+ 2.1 y posteriores no comprueban ni aplican el atributo <code>maxSdkVersion</code>, y
+ el SDK no se compilará si se establece <code>maxSdkVersion</code> en el manifiesto de la aplicación. Para los dispositivos
+ ya compilados con <code>maxSdkVersion</code>, Google Play lo respetará y lo utilizará para el
+ filtrado.</p>
+<p> <em>No</em> se recomienda declarar <code>maxSdkVersion</code>. Para obtener información detallada, consulta <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>.</p></td>
+  </tr>
+</table>
+
+
+
+<h3 id="advanced-filters">Filtros avanzados del manifiesto</h3>
+
+<p>Además de los elementos del manifiesto que se indican en la <a href="#table1">tabla 1</a>, Google Play también puede
+ filtrar aplicaciones en función de los elementos avanzados del manifiesto que se indican en la tabla 2.</p>
+
+<p>Estos elementos del manifiesto y el filtrado que desencadenan se utilizan únicamente en casos
+ excepcionales. Se diseñaron para ciertos tipos de juegos de alto rendimiento y aplicaciones similares que
+ requieren controles estrictos de distribución de la aplicación. <strong>La mayoría de las aplicaciones no deberían
+utilizar estos filtros</strong>.</p>
+
+<p id="table2" class="table-caption"><strong>Tabla 2.</strong> Elementos avanzados del manifiesto para
+ filtrado en Google Play.</p>
+<table>
+  <tr><th>Elemento del manifiesto</th><th>Resumen:</th></tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play filtra la aplicación si el tamaño de pantalla del dispositivo no coincide con
+ ninguna de las configuraciones de pantalla (declaradas por un elemento {@code &lt;screen&gt;}) en el elemento {@code
+&lt;compatible-screens&gt;}.</p>
+      <p class="caution"><strong>Advertencia:</strong> Normalmente, <strong>no deberías usar este elemento
+ del manifiesto</strong>. El uso de este elemento puede reducir
+ notablemente la base de usuarios potenciales para tu aplicación, al excluir todas las combinaciones de tamaño de pantalla
+ y densidad que no indicaste. En su lugar, debes usar el elemento del manifiesto <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> (descrito anteriormente en la <a href="#table1">tabla
+1</a>) para habilitar el modo de compatibilidad de pantalla para las configuraciones de pantalla que no abarcaste
+ con recursos adicionales.</p>
+    </td>
+  </tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play filtrará la aplicación a menos que uno o más de los formatos de compresión
+ de texturas GL compatibles con la aplicación también sean compatibles con el dispositivo. </p>
+    </td>
+  </tr>
+</table>
+
+
+
+<h2 id="other-filters">Otros filtros</h2>
+
+<p>Google Play utiliza otras características de la aplicación para determinar si mostrará u ocultará una aplicación a un usuario específico o un dispositivo determinado, tal como se describe en la tabla a continuación. </p>
+
+<p id="table3" class="table-caption"><strong>Tabla 3.</strong> Características de la aplicación y la
+ publicación que afectan el filtrado en Google Play.</p>
+<table> <tr>
+    <th>Nombre del filtro</th> <th>Cómo funciona</th> </tr>
+
+  <tr>
+    <td valign="top">Estado de la publicación</td> <td valign="top"><p>Únicamente las aplicaciones publicadas aparecerán en las
+ búsquedas y exploraciones en Google Play.</p> <p>Incluso cuando una aplicación no esté publicada
+, se la podrá instalar si los usuarios pueden visualizarla en el área de Descargas entre las aplicaciones que
+ compraron, instalaron o desinstalaron recientemente.</p> <p>Si se suspende una aplicación,
+ los usuarios no podrán volver a instalarla ni actualizarla, aunque aparezca en sus Descargas.</p> </td></tr>
+  <tr>
+  <td valign="top">Estado
+ pago</td> <td valign="top"><p>No todos los usuarios pueden ver aplicaciones pagas. Para mostrar aplicaciones pagas, un dispositivo
+ debe tener una tarjeta SIM y ejecutar Android 1.1 o posterior, y debe encontrarse en un
+ país (según lo determine el operador SIM) en el que las aplicaciones pagas estén disponibles.</p></td>
+</tr> <tr>
+  <td valign="top">Perfilamiento de país</td> <td valign="top"> <p>Cuando cargas tu aplicación a
+ Google Play, puedes seleccionar los países en los que quieres distribuir la aplicación; para ello, deberás ingresar
+ en <strong>Fijación de precios y distribución</strong>. Luego, la aplicación
+ estará disponible para los usuarios únicamente de los países que selecciones.</p>
+</td> </tr> <tr>
+  <td valign="top" style="white-space:nowrap;">Arquitectura de CPU (ABI)</td>
+  <td valign="top"><p>Las aplicaciones que incluyen bibliotecas
+ nativas que apuntan a una arquitectura de CPU específica (por ejemplo: ARM EABI v7 o x86) solo
+ pueden visualizarse en dispositivos que admiten esa arquitectura. Para obtener información detallada acerca del NDK y del uso de
+ bibliotecas nativas, consulta <a href="{@docRoot}tools/sdk/ndk/index.html#overview">¿Qué es el
+ NDK de Android?</a></p> </tr> <tr>
+  <td valign="top">Aplicaciones protegidas contra copia</td> <td valign="top"><p class="caution">Google
+ Play ya no admite la función Protección contra copia en la Consola para desarrolladores, y ya no
+ filtra aplicaciones de acuerdo con esa función. Para proteger tu aplicación, utiliza en su lugar <a href="{@docRoot}google/play/licensing/index.html">
+Licencias de aplicaciones</a>. Consulta <a href="{@docRoot}google/play/licensing/overview.html#CopyProtection">
+ Reemplazo de protección contra copias</a> para obtener más información.</p></td> </tr> </table>
+
+<h2 id="MultiApks">Publicación de múltiples APK con diferentes filtros</h2>
+
+<p>Algunos filtros específicos de Google Play te permiten publicar múltiples APK para la misma
+ aplicación a fin de proporcionar un APK distinto para diferentes configuraciones de dispositivos. Por ejemplo, si estás
+ creando un videojuego que utiliza recursos gráficos de alta fidelidad, te recomendamos que crees
+ dos APK y que cada uno admita diferentes formatos de compresión de texturas. De este modo, puedes reducir el
+ tamaño del archivo del APK al incluir solo las texturas necesarias para la configuración de cada
+ dispositivo. Según la compatibilidad de cada dispositivo con tus formatos de compresión de texturas, Google
+ Play le proporcionará el APK que hayas declarado como compatible con ese dispositivo.</p>
+
+<p>Actualmente, Google Play te permite publicar múltiples APK para la misma aplicación únicamente
+ cuando cada APK proporcione diferentes filtros en función de las siguientes configuraciones:</p>
+<ul>
+  <li>Formatos de compresión de texturas OpenGL
+    <p>Mediante el uso del elemento <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a>.</p>
+  </li>
+  <li>Tamaño de pantalla (y, opcionalmente, densidad de la pantalla)
+    <p>Mediante el uso del elemento <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> o <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a>.</p>
+  </li>
+  <li>Nivel de API
+    <p>Mediante el uso del elemento <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
+&lt;uses-sdk&gt;}</a>.</p>
+  </li>
+  <li>Arquitectura de CPU (ABI)
+    <p>Mediante la inclusión de bibliotecas nativas creadas con el <a href="{@docRoot}tools/sdk/ndk/index.html">NDK de
+ Android</a> que apunta a una arquitectura de CPU específica (por ejemplo, ARM EABI v7 o x86).</p>
+  </li>
+</ul>
+
+<p>Todos los demás filtros continúan funcionado de la forma habitual, pero estos cuatro son los únicos filtros que pueden
+ distinguir un APK de otro dentro del mismo directorio de la aplicación en Google Play. Por ejemplo,
+ <em>no puedes</em> publicar múltiples APK para la misma aplicación si los APK solo difieren en función de
+ si el dispositivo tiene cámara.</p>
+
+<p class="caution"><strong>Advertencia:</strong> La publicación de múltiples APK para la misma aplicación se
+ considera una función avanzada y <strong>la mayoría de las aplicaciones deben publicar un solo
+ APK que admita una amplia variedad de configuraciones de dispositivos</strong>. La publicación de múltiples APK
+ requiere que sigas reglas específicas dentro de tus filtros y que prestes especial atención a los
+ códigos de versión para cada APK a fin de garantizar las vías de actualización adecuadas para cada configuración.</p>
+
+<p>Si necesitas más información acerca de cómo publicar múltiples APK en Google Play, lee <a href="{@docRoot}google/play/publishing/multiple-apks.html">Compatibilidad con múltiples APK</a>.</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/api-overview.jd b/docs/html-intl/intl/es/preview/api-overview.jd
index ddd34db..9f68613 100644
--- a/docs/html-intl/intl/es/preview/api-overview.jd
+++ b/docs/html-intl/intl/es/preview/api-overview.jd
@@ -1,6 +1,6 @@
 page.title=Información general de la API
-page.keywords=versión preliminar,sdk,compatibilidad
-page.tags=recursos de la versión preliminar, androidm
+page.keywords=preview,sdk,compatibility
+page.tags=previewresources, androidm
 sdk.platform.apiLevel=22-mnc
 page.image=images/cards/card-api-overview_16-9_2x.png
 @jd:body
@@ -125,7 +125,7 @@
 <p>Si está evaluando esta característica, siga estos pasos:</p>
 <ol>
 <li>Instale la Revisión de herramientas del SDK de Android versión 24.3, si todavía no la instaló.</li>
-<li>Registre una huella dactilar nueva en el emulador; para hacerlo, vaya a 
+<li>Registre una huella dactilar nueva en el emulador; para hacerlo, vaya a
 <strong>Settings &gt; Security &gt; Fingerprint</strong>, luego siga las instrucciones de registro.</li>
 <li>Use un emulador para emular eventos táctiles de huellas dactilares con el siguiente comando.
  Utilice el mismo comando para emular eventos táctiles de huellas dactilares en la pantalla de bloqueo o en su aplicación.
@@ -216,7 +216,7 @@
 {@code android.app.Activity.isVoiceInteraction()} para determinar si su actividad se inició en respuesta a una acción de voz.
  De ser así, su aplicación puede utilizar la clase
 {@code android.app.VoiceInteractor} para solicitar una confirmación de voz por parte del usuario, realizar una selección de una lista de opciones y mucho más.
- Para obtener más información sobre cómo implementar acciones de voz, consulte el 
+ Para obtener más información sobre cómo implementar acciones de voz, consulte el
 <a href="https://developers.google.com/voice-actions/interaction/" class="external-link">sitio para desarrolladores de acciones de voz</a>.
 </p>
 
@@ -436,7 +436,7 @@
     <li>Deshabilitar o volver a habilitar la barra de estado (lo que incluye configuraciones rápidas, notificaciones y el gesto de navegación al deslizar el dedo hacia arriba para iniciar Google Now) con el método
 {@code DevicePolicyManager.setStatusBarEnabledState()}.
 </li>
-    <li>Deshabilitar o volver a habilitar el inicio seguro con la constante {@link android.os.UserManager} 
+    <li>Deshabilitar o volver a habilitar el inicio seguro con la constante {@link android.os.UserManager}
 {@code DISALLOW_SAFE_BOOT}.</li>
     <li>Evitar que se apague la pantalla mientras el dispositivo se encuentra conectado con la constante
   {@link android.provider.Settings.Global} {@code STAY_ON_WHILE_PLUGGED_IN}.</li>
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/features/runtime-permissions.jd b/docs/html-intl/intl/es/preview/features/runtime-permissions.jd
index 15bd954..ce94f5b 100644
--- a/docs/html-intl/intl/es/preview/features/runtime-permissions.jd
+++ b/docs/html-intl/intl/es/preview/features/runtime-permissions.jd
@@ -1,6 +1,6 @@
 page.title=Permisos
-page.tags=recursos de la versión preliminar, androidm
-page.keywords=permisos, tiempo de ejecución, vista preliminar
+page.tags=previewresources, androidm
+page.keywords=permissions, runtime, preview
 page.image={@docRoot}preview/features/images/permissions_check.png
 @jd:body
 
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/design/get-started/principles.jd b/docs/html-intl/intl/ja/design/get-started/principles.jd
new file mode 100644
index 0000000..8e4149d
--- /dev/null
+++ b/docs/html-intl/intl/ja/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Android デザイン指針
+@jd:body
+
+<p>このデザイン指針は、ユーザーがもっとも知りたいと思われることを中心に、Android User Experience Team により、またその活動を統一的なものにするために作成されたものです。Android デベロッパーとデザイナーに対しては各種端末向けのより詳細なデザイン ガイドラインがあります。
+
+
+
+</p>
+
+<p>
+ご自身の創造性やデザインについて考える際、この指針を考慮に入れてください。
+何を当てはめるかは目的に応じて調整してください。
+</p>
+
+<h2 id="enchant-me">ユーザーを引きつける</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="delight-me">サプライズで楽しませる</h4>
+<p>美しい画面、考え抜かれて配置されたアニメーション、タイミングの良いサウンド エフェクトは、使っていて楽しくなります。
+わずかな効果でも、ユーザーを楽しませ、力を得たように感じてもらえます。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="real-objects-more-fun">ボタンやメニューよりもリアルなオブジェクトでさらに楽しく</h4>
+<p>ユーザーがアプリでオブジェクトを直接タップしたり操作したりできるようになります。タスクを実行するために必要な認知の労力が軽減され、感覚的な満足度も上がります。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-it-mine">自分らしさを加える</h4>
+<p>ユーザーは自分でカスタマイズすることを好みます。これにより、くつろいだ気分や自分の思いのままできる自由な気分を味わうことができます。デフォルトで実用的で美しいものを取りそろえ、それに加えてメイン タスクの妨げにならない、楽しいカスタマイズも任意で加えられます。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="get-to-know-me">ユーザーについて知る</h4>
+<p>徐々にユーザーの好みを学習していきます。同じ選択を繰り返す手間をかけず、前に選択したものをすぐに選べるようになります。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2 id="simplify-my-life">よりシンプルに</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="keep-it-brief">常に簡潔に</h4>
+<p>シンプルな言葉を並べた短いフレーズを用います。長い文章は好まれません。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="pictures-faster-than-words">画像は言葉よりもわかりやすい</h4>
+<p>画像を使ってアイデアを説明してみましょう。ユーザーの興味を引くことができ、言葉よりも効率的です。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="decide-for-me">選択は最小限に、最終決定はユーザーに</h4>
+<p>最初からユーザーにすべて尋ねるのではなく、もっとも適切と思われる項目を提示します。選択肢や決定事項が多すぎると面倒に感じます。
+推測が間違っていた場合に備え、「やり直し」も可能にします。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="only-show-when-i-need-it">必要なものを必要なときにだけ表示する</h4>
+<p>一度に表示される内容が多すぎると疲れてしまいます。タスクや情報はいくつかに小さくまとめてわかりやすくします。
+その時点で必要のないオプションは非表示にして、必要なときだけ表示します。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="always-know-where-i-am">全体像から現在の位置を示す</h4>
+<p>ユーザーがはっきりと自分の現在の場所を把握できるようにします。アプリのどの場所にいるかを明示し、遷移して画面の関係を認識できるようにします。
+実行しているタスクに対して応答し続けます。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="never-lose-my-stuff">作成したものは失くさない</h4>
+<p>ユーザーが時間をかけて作ったものは保存して、どこからでもアクセスできるようにします。設定、独自のカスタマイズ、電話、タブレット、コンピュータで作成したものを記録します。
+アップグレードも簡単になります。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="looks-same-should-act-same">見た目が同じ場合は機能も同じにする</h4>
+<p>視覚的な違いを際立たせ、ユーザーが機能の違いをはっきり区別できるようにします。同じような外観、同じ入力で機能が異なるようなモードは避けます。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="interrupt-only-if-important">割り込みは重要なときにだけ行う</h4>
+<p>優秀な個人秘書のように、重要ではない些細なことでユーザーをわずらわせることのないよう配慮します。集中したいユーザーにとって、重要で一刻を争うようなものでない限り、割り込まれると面倒で不快に感じる可能性があります。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2 id="make-me-amazing">操作を楽しく</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="give-me-tricks">あらゆる場所に工夫を仕込む</h4>
+<p>自分で理解すると嬉しく感じられます。Android アプリで広く使われている視覚や操作のパターンを生かし、アプリの操作をわかりやすいものにします。
+たとえばスワイプ操作は便利なナビゲーションのショートカットとして使えます。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="its-not-my-fault">解決は簡単に</h4>
+<p>ユーザーに修正を促す場合はその方法に注意します。アプリではスマートに問題を解決できるようにします。うまくいかなかったときは解決方法を明確に示し、技術的な詳細を表示する必要はありません。自動的に修正できる問題はユーザーに通知する必要すらありません。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="sprinkle-encouragement">操作を促すしかけを散りばめる</h4>
+<p>複雑なタスクは分割し、それぞれ簡単に達成できるようにします。1 つ 1 つにフィードバックすることで、ユーザーの満足度は高まります。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="do-heavy-lifting-for-me">作業の手間はかけない</h4>
+<p>できると思っていなかったことをできるようにすることで、知識がなくても専門家のような気分を味わってもらえます。たとえば複数の写真効果を組み合わせたショートカットを使うことで、わずかな手順でプロのような写真に仕上げられます。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-important-things-fast">重要なことはすみやかに</h4>
+<p>すべてのアクションが同じ優先度とは限りません。アプリのアクションには優先度を設定し、重要なものはたとえばカメラのシャッター ボタンや音楽プレイヤーの一時停止ボタンのように、簡単に見つけられすぐに使えるようにします。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/ja/design/material/index.jd b/docs/html-intl/intl/ja/design/material/index.jd
new file mode 100644
index 0000000..3acd423
--- /dev/null
+++ b/docs/html-intl/intl/ja/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=マテリアル デザイン
+page.tags=Material, design
+page.type=design
+page.image=design/material/images/MaterialLight.png
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+  <div>
+    <h3>デベロッパー文書</h3>
+    <p>マテリアル デザインを使ったアプリの作成</p>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+    <h3>ビデオ</h3>
+    <p>マテリアル デザインについて</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+    <h3>ビデオ</h3>
+    <p>紙とインク:重要なマテリアル</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+    <h3>ビデオ</h3>
+    <p>Google I/O アプリのマテリアル デザイン</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">マテリアル デザインは、視覚や動作と、複数のプラットフォームや端末間でのインタラクション デザインに関する包括的な指針です。
+Android はマテリアル デザイン アプリに対応するようになりました。
+Android アプリでマテリアル デザインを使うには、<a href="http://www.google.com/design/spec">マテリアル デザインの仕様</a>で説明されているガイドラインに従い、Android 5.0(API レベル 21)以降の新しいコンポーネントや機能を使用します。
+
+</p>
+
+<p>Android にはマテリアル デザインの作成に使うことができる次の要素が用意されています。</p>
+
+<ul>
+  <li>新しいテーマ</li>
+  <li>複雑なビュー用の新しいウィジェット</li>
+  <li>カスタムのシャドウとアニメーション用の新しい API</li>
+</ul>
+
+<p>Android でのマテリアル デザインの実装については、<a href="{@docRoot}training/material/index.html">マテリアル デザインを使ったアプリの作成</a>をご覧ください。
+</p>
+
+
+<h3>マテリアル テーマ</h3>
+
+<p>マテリアル テーマはアプリの新しいスタイルである、システム ウィジェットを提供します。システム ウィジェットを使ってカラーパレット、タッチ フィードバックやアクティビティ遷移のためのデフォルトのアニメーションを指定できます。
+</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">暗色マテリアル テーマ</p>
+  </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">明色マテリアル テーマ</p>
+  </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>詳細については、<a href="{@docRoot}training/material/theme.html">マテリアル テーマの使用</a>をご覧ください。
+</p>
+
+
+<h3>リストとカード</h3>
+
+<p>Android はマテリアル デザインのスタイルとアニメーションを含むカードとリストを表示する新しい 2 つのウィジェットを提供しています。
+</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+  <p><code>RecyclerView</code> ウィジェットは <code>ListView</code> のさらに柔軟なバージョンで、さまざまなレイアウト タイプをサポートしてパフォーマンスを向上します。
+</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+  <p>新しい <code>CardView</code> ウィジェットでは、外観や使用感が一貫しているカード内に重要な情報を表示できます。
+</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>詳細については、<a href="{@docRoot}training/material/lists-cards.html">リストとカードの作成</a>をご覧ください。
+</p>
+
+
+<h3>シャドウの表示</h3>
+
+<p>X と Y プロパティに加え、Android のビューに Z プロパティが追加されました。
+この新しいプロパティはビューのエレベーションを表し、次を指定します。</p>
+
+<ul>
+<li>シャドウのサイズ: Z 値が高いビューほどキャストするシャドウのサイズが大きくなります。</li>
+<li>表示される順序: Z 値が高いビューほど他のビューより上位に表示されます。</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+  <div class="framed-nexus5-port-span-5">
+  <video class="play-on-hover" autoplay>
+    <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+  </video>
+  </div>
+  <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+    <em>端末の画像をクリックすると動画を再生できます</em>
+  </div>
+</div>
+
+<p>詳細については、<a href="{@docRoot}training/material/shadows-clipping.html">シャドウとクリッピング ビューの定義</a>をご覧ください。
+</p>
+
+
+<h3>アニメーション</h3>
+
+<p>新しいアニメーション API を使って UI コントロールのタッチ フィードバック、ビューの状態遷移、アクティビティ遷移のカスタム アニメーションを作成できます。
+</p>
+
+<p>これらの API で次の操作を実行できます。</p>
+
+<ul>
+<li style="margin-bottom:15px">
+<strong>タッチ フィードバック</strong> アニメーションを使ってビューのタップイベントに応答します。
+</li>
+<li style="margin-bottom:15px">
+<strong>円形状の出現</strong>アニメーションを使ってビューを表示 / 非表示にします。
+</li>
+<li style="margin-bottom:15px">
+カスタムの<strong>アクティビティ遷移</strong>アニメーションを使ってアクティビティを切り替えます。
+</li>
+<li style="margin-bottom:15px">
+<strong>曲線モーション</strong>を使ってより自然なアニメーションを作成します。
+</li>
+<li style="margin-bottom:15px">
+<strong>ビューの状態遷移</strong>アニメーションを使って 1 つ以上のビュー プロパティの遷移を表現します。
+</li>
+<li style="margin-bottom:15px">
+ビューの状態遷移間のアニメーションを<strong>状態リスト ドローアブル</strong>で表示します。
+</li>
+</ul>
+
+<p>タッチ フィードバック アニメーションはボタンなどの複数の標準ビューに組み込まれます。新しい API を使ってこれらのアニメーションをカスタマイズし、それらをカスタム ビューに追加できます。
+</p>
+
+<p>詳細については、<a href="{@docRoot}training/material/animations.html">カスタム アニメーションの定義</a>をご覧ください。
+</p>
+
+
+<h3>ドローアブル</h3>
+
+<p>次の新しいドローアブル機能を使ってマテリアル デザイン アプリを実装できます。</p>
+
+<ul>
+<li><strong>ベクター型ドローアブル</strong>は鮮明度を失わずに拡張でき、単色のアプリ内アイコンに最適です。
+</li>
+<li><strong>ドローアブルによる着色</strong>を使ってビットマップをアルファマスクとして定義し、実行時にそれらのビットマップに色付けすることができます。
+</li>
+<li><strong>色の抽出</strong>を使ってビットマップ画像から代表色を自動的に抽出できます。
+</li>
+</ul>
+
+<p>詳細については、<a href="{@docRoot}training/material/drawables.html">ドローアブルの使用</a>をご覧ください。
+</p>
diff --git a/docs/html-intl/intl/ja/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/ja/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..35ba821
--- /dev/null
+++ b/docs/html-intl/intl/ja/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=確認と通知
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>状況に応じて、ユーザーがアプリでアクションを呼び出したときに、テキストを使ってそのアクションを<em>確認</em>したり<em>通知</em>したりするのは良い方法です。</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+    <p><strong>確認</strong>とは、呼び出したアクションを続けるかどうかをユーザーに確認してもらうことです。場合によって、確認は考慮する必要があるアクションに関連する警告や重要情報とともに表示されることがあります。</p>
+  </div>
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+    <p><strong>通知</strong>とは、呼び出したアクションが完了したことをユーザーにお知らせするテキストを表示することです。これによって、システムが実行している暗黙的な処理の不明瞭さをなくすことができます。場合によって、通知はアクションを元に戻すオプションとともに表示されることがあります。</p>
+  </div>
+</div>
+
+<p>このような方法でユーザーに情報を伝えると、実行された処理やこれから実行される処理についての不明瞭さを軽減できます。確認や通知によって、後悔するような間違いをするのを防ぐこともできます。</p>
+
+<h2>ユーザーのアクションを確認または通知する場合</h2>
+<p>すべてのアクションに確認または通知が必要なわけではありません。デザインを決定する際の指針として次のチャートを使用してください。</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>確認</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>例: Google Play ブックス</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+    <p>この例では、ユーザーが Google Play ライブラリから書籍を削除することを要求しています。その書籍が今後端末で使えなくなることを知ってもらうことが重要であるため、このアクションを確認する<a href="{@docRoot}design/building-blocks/dialogs.html#alerts">アラート</a>が表示されます。</p>
+    <p>確認のダイアログを作成するときは、要求されたアクションがすぐわかるようなタイトルにします。</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>例: Android Beam</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+    <p>確認は、必ずしも 2 つのボタンの付いたアラートで示す必要はありません。Android Beam を開始した後に、ユーザーには共有するコンテンツ(この例では写真)にタップするように求めるメッセージが表示されます。共有を続行しない場合は、電話を離すだけです。</p>
+  </div>
+</div>
+
+<h2>通知</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>例: 放置した Gmail 下書きの保存</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+    <p>この例では、ユーザーが Gmail 作成画面から前の画面に戻ったり、上位画面に移動したりするときに、予測しないことが起こる可能性があるため、現在の下書きが自動的に保存されます。トースト形式の通知によってその状態が明らかになります。この通知は数秒後にフェードします。</p>
+    <p>この場合、保存操作はユーザーではなくアプリによって行われるため、元に戻す操作は適切ではありません。また、下書きのリストに移動するだけでメッセージの作成をすぐに再開できます。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+    <h4>例: Gmail スレッドの削除</h4>
+    <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+    <p>ユーザーが Gmail のリストからスレッドを削除した後に、元に戻すオプションとともに通知が表示されます。ユーザーがリストのスクロールなど関連しないアクションを実行するまで通知は表示されたままになります。</p>
+  </div>
+</div>
+
+<h2>確認または通知を行わない場合</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>例: +1 操作</h4>
+    <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+    <p><strong>確認は不要</strong>。ユーザーが誤って +1 ボタンをタップしても、大きな問題にはなりません。ボタンをもう一度タップすればアクションを元に戻すことができます。</p>
+    <p><strong>通知は不要</strong>。+1 ボタンがバウンスし、赤に変わります。これは非常にわかりやすいシグナルです。</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>例: ホームスクリーンからアプリを削除</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+    <p><strong>確認は不要</strong>。これは意図的なアクションです。ユーザーはアイテムを比較的大きな分離されたターゲットにドラッグ アンド ドロップする必要があります。そのため、不測の問題が発生することはほとんどありません。ユーザーがこの決定を元に戻したい場合は、ほんの数秒で元に戻すことができます。</p>
+    <p><strong>通知は不要</strong>。ユーザーは自分でアプリをドラッグして削除するため、アプリがホームスクリーンから消えることがわかっています。</p>
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/ja/design/patterns/navigation.jd b/docs/html-intl/intl/ja/design/patterns/navigation.jd
new file mode 100644
index 0000000..dbb6b04
--- /dev/null
+++ b/docs/html-intl/intl/ja/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=Back と Up を使用したナビゲーション
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+  <div>
+    <h3>デベロッパー文書</h3>
+    <p>効果的なナビゲーションを実装する</p>
+  </div>
+</a>
+
+<p itemprop="description">一貫したナビゲーションは全体的なユーザーの操作性を向上するために欠かせない重要な要素です。一貫性がなく予測できない動作ほどユーザーにとって不快なものはありません。
+Android 3.0 では、全体的なナビゲーション動作が大きく変更されました。
+注意深く Back と Up のガイドラインに従うことで、アプリのナビゲーションをユーザーにとって予測可能で信頼できるものにすることができます。
+</p>
+<p>Android 2.3 以前のアプリ内でのナビゲーションはシステムの <em>Back</em> ボタンを使って行われてきました。Android 3.0 よりアクションバーが導入され、第 2 のナビゲーション メカニズムとして <em>Up</em> ボタンが登場しました。このボタンはアプリアイコンと左向きのキャラットで構成されています。
+
+</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">Up と Back</h2>
+
+<p>Up ボタンは、画面間の階層関係に基づいてアプリ内を移動するために使います。
+たとえば、画面 A がアイテムのリストを表示し、アイテムを選択すると(そのアイテムの詳細を表示する)画面 B に移動する場合、画面 B には画面 A に戻るための Up ボタンを用意する必要があります。
+
+</p>
+<p>画面がアプリの最上位(つまり、アプリのホーム)であれば、Up ボタンを表示すべきではありません。
+</p>
+
+<p>システムの Back ボタンはユーザーが最近使用した画面を、さかのぼって順番に移動する場合に使用されます。
+通常このナビゲーションはアプリの階層ではなく、画面を表示した順番に基づいています。
+</p>
+
+<p>前に表示していた画面が現在の画面の親階層となる場合は、Back ボタンを押すとUp ボタンを押したときと同じ結果になります &mdash; これはよくある動作です。
+
+ただし、Up ボタンではユーザーが確実にアプリ内に留まるのに対して、Back ボタンを使えばホームスクリーンに、さらには別のアプリに戻ることさえできます。
+</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>Back ボタンは、画面間を直接ナビゲーションするだけでなく、次のような動作もサポートします。
+</p>
+<ul>
+<li>フローティング ウィンドウ(ダイアログ、ポップアップ)を閉じる</li>
+<li>コンテキスト アクションバーを閉じて、選択したアイテムのハイライト表示を解除する</li>
+<li>オンスクリーン キーボード(IME)を非表示にする</li>
+</ul>
+<h2 id="within-app">アプリ内でのナビゲーション</h2>
+
+<h4>複数のエントリ ポイントのある画面のナビゲーション</h4>
+<p>画面にアプリ階層内の正確な位置がなく、アプリ内の他のどの画面からでもアクセスできる設定画面などのように複数のエントリ ポイントからアクセスできる場合があります。この場合、Up ボタンは参照元の画面に戻ることを選択する必要があります。これは Back も同様です。
+&mdash;
+
+</p>
+<h4>画面内でビューを変更する</h4>
+<p>画面のビュー オプションを変更しても Up と Back の動作は変わりません。画面はアプリの階層内の同じ位置に留まり、新しいナビゲーション履歴は作成されません。
+</p>
+<p>このようなビューの変更には次のようなものがあります。</p>
+<ul>
+<li>タブや左右のスワイプを使ってビューを切り替える</li>
+<li>ドロップダウン(折りたたみタブ)を使ってビューを切り替える</li>
+<li>リストにフィルタをかける</li>
+<li>リストをソートする</li>
+<li>表示の方法を変える(ズームなど)</li>
+</ul>
+<h4>兄弟画面間のナビゲーション</h4>
+<p>アプリでアイテムのリストから 1 つのアイテム詳細画面に移動するとき、そのアイテムからリスト内の前後にある別のアイテムへのナビゲーションをサポートするのが望ましいことがよくあります。
+
+たとえば、Gmail では、スワイプすることで、ある会話から同じ受信トレイの新しいまたは古い会話へ左右に簡単に移動できます。
+画面内でビューを変更する場合と同じように、このようなナビゲーションによって Up または Back の動作は変わりません。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>しかし、参照リストで結び付けられていない関連詳細ビュー間をブラウジングする場合 &mdash; たとえば Play ストアで同じデベロッパーのアプリや同じアーティストのアルバム間をブラウジング場合、その動作はこれとは明らかに異なります。
+
+この場合、各リンクをたどると履歴が作成され、Back ボタンで以前に表示した各画面に戻ることになります。
+Up では常にこれらの関連画面をバイパスして、直前に表示したコンテナ画面に移動します。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>Up の動作を詳細ビューの知識に基づいてより使いやすくすることができます。
+前述の Play ストアの例で、ユーザーが直前に表示した書籍から映画版の詳細に移動したとします。
+その場合、Up でユーザーが前に表示していないコンテナ(映画)に戻ることができます。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">ホームスクリーンのウィジェットと通知によるアプリへのナビゲーション</h2>
+
+<p>ホームスクリーンのウィジェットや通知を使ってユーザーがアプリ階層内の深い階層にある画面に直接移動できるようにします。
+たとえば、Gmail の受信ボックスのウィジェットと新しいメッセージ通知はどちらも受信トレイ画面をバイパスし、会話ビューを直接表示できます。
+</p>
+
+<p>この両方の機能で、Up ボタンを次のように処理します。</p>
+
+<ul>
+<li><em>通常アプリ内の特定の画面から移動先画面に移動する場合</em>、Up でその画面に移動します。
+</li>
+<li><em>それ以外の場合は</em>、Up でアプリの最上位(「ホーム」)画面に移動します。</li>
+</ul>
+
+<p>Back ボタンの場合は、アプリの最上位画面への完全な上向きナビゲーション パスをタスクのバックスタックに挿入してナビゲーションをより予測可能なものにする必要があります。
+この設定によって、アプリにどのように入ったか忘れたユーザーは、終了前のアプリの最上位画面に移動できます。
+
+</p>
+
+<p>たとえば Gmail のホームスクリーンのウィジェットには、その作成画面に直接移動するボタンがあります。
+作成画面の Up または Back で受信トレイが表示され、そこから Back ボタンでホームに移動します。
+</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>間接通知</h4>
+
+<p>アプリで複数のイベントに関する情報を同時に表示する必要がある場合、1 つの通知を使ってユーザーをインタースティシャル画面に導くことができます。
+この画面にはこれらのイベントがまとめてあり、アプリのさらに深い階層に移動するためのパスが示されます。このスタイルの通知を<em>間接通知</em>と呼びます。
+
+</p>
+
+<p>標準(直接)通知とは異なり、間接通知のインタースティシャル画面から Back を押すとユーザーは通知がトリガーされた地点に戻ります &mdash; バックスタックには追加の画面は挿入されません。
+
+ユーザーがインタースティシャル画面からアプリに移動すると、Up および Back は前述した標準通知の場合と同様に動作します。つまりインタースティシャル画面に戻るのではなくアプリ内でナビゲーションします。
+
+</p>
+
+<p>たとえば Gmail のユーザーがカレンダーから間接通知を受け取ったとします。この通知をタップするとインタースティシャル画面が開き、複数の異なるイベントに関するリマインダーが表示されます。
+
+インタースティシャル画面で Back をタップすると Gmail に戻ります。特定のイベントをタップすると、インタースティシャル画面から完全なカレンダー アプリに移動し、そのイベントの詳細が表示されます。
+
+イベントの詳細から、Up および Back を使うとカレンダーの最上位ビューが表示されます。</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>ポップアップ通知</h4>
+
+<p><em>ポップアップ通知</em>は通知ドロワーをバイパスしてユーザーの前に直接表示されます。
+ポップアップ通知はめったに使われません。<strong>タイムリーな応答が要求され、ユーザーのコンテキストの中断が必要な場合に使われます</strong>。
+たとえばトークでは、このスタイルを使って友人からのビデオチャットへの参加に関する招待状についてユーザーに通知します。というのも、この招待状は数秒後に自動的に期限切れになるからです。
+
+</p>
+
+<p>ナビゲーション動作の点から、ポップアップ通知は間接通知のインタースティシャル画面の動作に厳密に従います。
+Back でポップアップ通知は閉じます。ユーザーがポップアップから通知元のアプリに移動すると、Up と Back は標準通知のルールに従い、アプリ内でナビゲーションします。
+
+</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">アプリ間のナビゲーション</h2>
+
+<p>Android システムの基本的な利点の 1 つにアプリ同士がそれぞれをアクティブにできる機能があります。これによりユーザーは特定のアプリから別のアプリへ直接移動できます。
+たとえば写真を撮影する必要があるアプリでは、カメラアプリをアクティブにすることができます。カメラアプリは写真を参照元のアプリに戻します。これはデベロッパーにとっては他のアプリのコードを簡単に利用できるという点で、またユーザーにとっては通常実行するアクションに対して一貫した操作を実行できるという点で大きなメリットです。
+
+
+
+</p>
+
+<p>アプリ間のナビゲーションを理解するには、次に説明する Android フレームワークの動作を理解することが重要です。
+</p>
+
+<h4>アクティビティ、タスク、インテント</h4>
+
+<p>Android における<strong>アクティビティ</strong>とは情報の画面と、ユーザーが実行できるすべての関連アクションを定義するアプリケーション コンポーネントです。
+アプリはアクティビティのコレクションで、作成したアクティビティと他のアプリから再利用するアクティビティの両方で構成されています。
+</p>
+
+<p><strong>タスク</strong>とは目標を実現するためにユーザーが従う一連のアクティビティです。1 つのタスクで 1 つのアプリだけのアクティビティを利用することも、複数のアプリのアクティビティを利用することもできます。
+
+</p>
+
+<p><strong>インテント</strong>とは、あるアプリがアクションの実行に関して別のアプリのサポートが必要であることを示すメカニズムです。
+アプリのアクティビティでそれらのアプリが対応できるインテントを示すことができます。
+「共有」などの一般的なインテントの場合、ユーザーはその要求を実現できる多くのアプリをインストールしている場合があります。
+</p>
+
+<h4>例: 共有をサポートするアプリ間のナビゲーション</h4>
+
+<p>アクティビティ、タスク、インテントの連携を理解するには、1 つのアプリが別のアプリを使ってユーザーによるコンテンツの共有を可能にする仕組みを知る必要があります。たとえばホームから Play ストアのアプリを起動すると、新しいタスク A が開始されるとします(以下の図を参照)。
+
+Play ストア内をナビゲートし、プロンプトで表示された書籍をタップしてその詳細を表示した後もユーザーは同じタスク内に留まり、アクティビティを追加するとタスクは拡張されます。
+「共有」アクションをトリガーすると、共有インテントを処理するよう登録されている(さまざまなアプリの)各アクティビティを示すダイアログがユーザー表示されます。
+
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>ユーザーが Gmail 経由で共有することを選択すると、Gmail の作成アクティビティがタスク A の続きとして追加されます &mdash; 新しいタスクは作成されません。
+Gmail にバックグラウンドで実行中の独自のタスクがある場合、そのタスクは影響を受けません。
+</p>
+
+<p>作成アクティビティからメッセージを送信するか、Back ボタンをタップするとユーザーは書籍の詳細アクティビティに戻ります。
+Back を連続してタップすると Play ストアに戻り、最終的にはホームが表示されます。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>ただし、作成アクティビティから Up をタップすると、ユーザーは Gmail 内に留まる意思を示すことになります。
+Gmail の会話リストのアクティビティが表示され、新しいタスク B が作成されます。新しいタスクは常にホームをルートとしているため、会話リストからBack をタップするとホームに戻ります。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>タスク A はバックグラウンドで維持され、ユーザー後から(たとえば [最近使ったアプリ] 画面経由で)このタスクに戻ることができます。
+Gmail にバックグラウンドで実行中の独自のタスクが既にある場合、そのタスクはタスク B に置き換えられます &mdash; 前のコンテキストはユーザーの新しい目標の導入より破棄されます。
+</p>
+
+<p>アプリがアプリ階層内の深い階層にあるアクティビティでインテントを処理するように登録されている場合は、Up ナビゲーションの指定方法について<a href="#into-your-app">ホームスクリーンのウィジェットと通知によるアプリへのナビゲーション</a>をご覧ください。
+
+</p>
diff --git a/docs/html-intl/intl/ja/design/patterns/notifications.jd b/docs/html-intl/intl/ja/design/patterns/notifications.jd
new file mode 100644
index 0000000..8c5b6ba
--- /dev/null
+++ b/docs/html-intl/intl/ja/design/patterns/notifications.jd
@@ -0,0 +1,872 @@
+page.title=通知
+page.tags="notifications","design","L"
+@jd:body
+
+  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
+  <div>
+    <h3>デベロッパー文書</h3>
+    <p>ユーザーに通知する</p>
+  </div>
+</a>
+
+<a class="notice-designers" href="notifications_k.html">
+  <div>
+    <h3>Android 4.4 以前での通知</h3>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
+<div>
+    <h3>ビデオ</h3>
+    <p>DevBytes:Notifications in the Android L Developer Preview</p>
+</div>
+</a>
+
+<style>
+  .col-5, .col-6, .col-7 {
+    margin-left:0px;
+  }
+</style>
+
+<p>通知システムを使用すると、ユーザーは友人からの新しいチャット メッセージやカレンダー イベントなど、自分に関係のあるタイムリーなイベントについてアプリで常に通知を受けることができます。通知は、重要な出来事が起こるとすぐに知らせてくれるニュース チャンネルであり、ユーザーが意識していない間に出来事を時系列的に記録するログであると捉えることができます &mdash; さらに、すべての Android 端末で適宜同期されます。
+
+
+
+
+
+</p>
+
+<h4 id="New"><strong>Android 5.0 での新機能</strong></h4>
+
+<p>Android 5.0 において、通知は構造的に、視覚的に、機能的に重要なアップデートを受信します。
+</p>
+
+<ul>
+  <li>通知は、新しいマテリアル デザインのテーマにあわせて外観が変更されているところす。
+</li>
+  <li> 端末のロック画面で通知を利用できるようになりましたが、機密性の高いコンテンツはこれからも非表示にできます。
+
+</li>
+  <li>端末の使用中に受信した高優先度の通知において、ヘッドアップ通知と呼ばれる新しい形式が使用されるようになりました。
+</li>
+  <li>クラウド同期通知: 所有する Android 端末のどれかで通知を却下すると、他でも却下されます。
+
+</li>
+</ul>
+
+<p class="note"><strong>注</strong>: このバージョンの Android での通知設計は、従来のバージョンから大きく変わっています。
+
+これまでのバージョンの通知設計について詳しくは、<a href="./notifications_k.html">Android 4.4 以前での通知</a>をご覧ください。
+</p>
+
+<h2 id="Anatomy">通知の仕組み</h2>
+
+<p>このセクションでは、通知の基本パーツと各種端末における通知の表示について詳しく説明します。
+</p>
+
+<h3 id="BaseLayout">基本レイアウト</h3>
+
+<p>あらゆる通知の最低限の基本レイアウトは次のようになっています。</p>
+
+<ul>
+  <li> 通知の<strong>アイコン</strong>。このアイコンは通知元のアプリを示します。複数タイプの通知を生成するアプリでは、通知のタイプを示すことがあります。
+
+
+</li>
+  <li> 通知の<strong>タイトル</strong>と追加<strong>テキストメッセージ</strong>。
+</li>
+  <li> <strong>タイムスタンプ</strong>。</li>
+</ul>
+
+<p>従来のプラットフォーム バージョンの {@link android.app.Notification.Builder Notification.Builder} で作成された通知は、Android 5.0 でも同じように表示され、機能します。スタイルにいくらかの違いがありますが、システムが対処します。
+
+
+従来のバージョンの Android での通知について詳しくは、<a href="./notifications_k.html">Android 4.4 以前での通知</a>をご覧ください。
+
+</p></p>
+
+
+    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
+
+
+<div style="clear:both;margin-top:20px">
+      <p class="img-caption">
+      ユーザー フォトと通知アイコンを使用した、携帯端末での通知(左)と Wear での同じ通知(右)
+
+    </p>
+  </div>
+
+<h3 id="ExpandedLayouts">展開レイアウト</h3>
+
+
+<p>通知にどこまでの詳細を表示するかを選択できます。
+メッセージの最初の数行を表示したり、大きな画像プレビューを表示したりできます。
+追加情報はユーザーにより多くのコンテキストを提供し、&mdash;場合によっては&mdash;メッセージ全体が表示されることもあります。
+
+
+ユーザーは、ピンチ ズームまたは 1 本指のスワイプで、コンパクトなレイアウトと展開されたレイアウトを切り替えることができます。
+
+
+ 1 つのイベントに関する通知に対し、Android では 3 種類の展開レイアウト(テキスト、受信トレイ、画像)をアプリケーションで使用できるようにしています。
+
+次の図に、1 つのイベントに関する通知が携帯端末(左)とウェアラブル(右)でどのように見えるかを示します。
+
+</p>
+
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
+    alt="" width="311px" height;="450px" />
+
+<h3 id="actions" style="clear:both; margin-top:40px">アクション</h3>
+
+<p>Android では、通知の最下部に表示されるオプションのアクションをサポートしています。ここに示されるアクションを使用することで、ユーザーは特定の通知に対するほとんどの一般的なタスクを通知シェードで処理でき、通知元のアプリケーションを開く必要はありません。これによりやり取りがスピードアップし、スワイプで却下もできることから、ユーザーは自分に関係のある通知に集中しやすくなります。
+
+
+
+
+
+</p>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
+
+
+
+<p style="clear:both">通知に含めるアクションの数はほどほどに抑えることをお勧めします。
+含めるアクションを増やすほど、わかりにくくなるからです。
+もっとも差し迫った意味のある重要なアクションだけにして、アクションの数を最小限に抑えてください。
+
+
+</p>
+
+<p>通知に対するアクションとして好ましい候補は次のとおりです。</p>
+
+<ul>
+  <li> 表示するコンテンツ タイプに欠かせず、よく使われ、典型的である
+
+  <li> ユーザーがタスクを手早く完了できる
+</ul>
+
+<p>次のようなアクションは避けてください。</p>
+
+<ul>
+  <li> あいまいである
+  <li> 通知のデフォルト アクションと同じである(「読む」や「開く」など)
+
+</ul>
+
+
+
+<p>アクションは 3 つまで指定でき、それぞれにアクションのアイコンと名前が付きます。
+
+ シンプルな基本レイアウトにアクションを追加すると、展開レイアウトがない場合でも、通知は展開可能になります。
+
+アクションは展開可能な通知にのみ表示され、それ以外では非表示になることから、ユーザーが通知から起動できるどのアクションについても、関連アプリケーションからも利用できるようにしてください。
+
+
+
+
+</p>
+
+<h2 style="clear:left">ヘッドアップ通知</h2>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
+  <p class="img-caption">
+    イマーシブ アプリの最上部に表示されたヘッドアップ通知の例(電話の着信、高優先度)
+
+
+  </p>
+</div>
+
+<p>優先度の高い通知が作成されると(右図)、その展開レイアウトが可能なアクションとともに短時間表示されます。
+
+</p>
+<p> この時間が過ぎると、通知は通知シェードに戻ります。
+通知の<a href="#correctly_set_and_manage_notification_priority">優先度</a>を示すフラグが高、最大、全画面の場合は、ヘッドアップ通知になります。
+</p>
+
+<p><b>ヘッドアップ通知にふさわしい例</b></p>
+
+<ul>
+  <li> 端末使用中の電話の着信</li>
+  <li> 端末使用中のアラーム</li>
+  <li> 新しい SMS メッセージ</li>
+  <li> 低バッテリ残量</li>
+</ul>
+
+<h2 style="clear:both" id="guidelines">ガイドライン</h2>
+
+
+<h3 id="MakeItPersonal">パーソナルにする</h3>
+
+<p>他人から送信されたアイテム(メッセージ、ステータス アップデートなど)の通知には、{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()} を使用して相手の画像を含めます。
+
+また、通知のメタデータに相手に関する情報を添付します({@link android.app.Notification#EXTRA_PEOPLE} を参照)。
+</p>
+
+<p>通知のメインアイコンは表示され続けるため、ユーザーはそれをステータスバーに表示されるアイコンと関連付けることができます。
+
+</p>
+
+
+<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
+<p style="margin-top:10px" class="img-caption">
+  通知をトリガーした人と送信内容が表示された通知。
+</p>
+
+
+<h3 id="navigate_to_the_right_place">適切な画面へのナビゲーション</h3>
+
+<p>ユーザーが通知の本体(アクション ボタン以外)をタップしたら、アプリが開き、通知に表示されているデータの表示や操作ができる画面へ移動するようにします。
+
+
+ほとんどの場合、移動先はメッセージのような 1 つのデータアイテムの詳細表示になりますが、通知がスタックされている場合は概要ビューにすることも考えられます。
+
+アプリがユーザーをアプリの最上位レベルより下のどこかに移動する場合は、アプリのバックスタックにナビゲーションを挿入して、ユーザーがシステムの Back ボタンを押すと最上位レベルに戻れるようにします。
+
+詳しくは、<a href="{@docRoot}design/patterns/navigation.html#into-your-app">ナビゲーション</a>デザイン パターンの<em>ホーム画面ウィジェットと通知を経由するアプリへのナビゲーション</em>をご覧ください。
+
+</p>
+
+<h3 id="correctly_set_and_manage_notification_priority">通知優先度の適切な設定と管理
+
+</h3>
+
+<p>Android では、通知用の優先度フラグをサポートしています。このフラグを使用すると、通知の表示位置に他の通知との相対関係として影響を及ぼして、ユーザーが常に最重要の通知を真っ先に目にするようにできます。
+
+
+通知を投稿する際には、優先度を次の中から選べます。
+
+</p>
+<table>
+ <tr>
+    <td class="tab0">
+<p><strong>優先度</strong></p>
+</td>
+    <td class="tab0">
+<p><strong>用途</strong></p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MAX</code></p>
+</td>
+    <td class="tab1">
+<p>重大で切迫した通知に対して使用します。緊急を要する状況、または特定のタスクを続ける前に解決する必要がある状況であることをユーザーに通告します。
+
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>HIGH</code></p>
+</td>
+    <td class="tab1">
+<p>主に重要な情報に対して使用します。ユーザーが特に関心を持ちそうなメッセージ イベントやチャット イベントなどが該当します。通知の優先度を高く設定すると、ヘッドアップ通知を表示できます。
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>DEFAULT</code></p>
+</td>
+    <td class="tab1">
+<p>ここで説明している他の優先度のどれにも該当しないすべての通知に対して使用します。</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>LOW</code></p>
+</td>
+    <td class="tab1">
+<p>ユーザーに知らせたいがそれほど緊急ではない通知に対して使用します。
+低優先度の通知は一般にリストの末尾に表示され、公の、または間接的なソーシャル アップデートなどに適しています。
+
+ユーザーがこうした通知の設定をしていても、急を要するコミュニケーションや直接的なコミュニケーションより優先されないようにする必要があります。
+
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MIN</code></p>
+</td>
+    <td class="tab1">
+<p>天気予報や周辺位置情報のようなコンテキスト的またはバックグラウンド的な情報に対して使用します。最小優先度の通知はステータスバーに表示されません。
+
+ユーザーは通知シェードを展開したときにその存在に気づきます。
+</p>
+</td>
+ </tr>
+</table>
+
+
+<h4 id="how_to_choose_an_appropriate_priority"><strong>適切な優先度の選び方</strong>
+
+</h4>
+
+<p><code>DEFAULT</code>、<code>HIGH</code>、<code>MAX</code> は中断を伴う優先度レベルで、ユーザーによるアクティビティに割り込むリスクがあります。
+
+アプリのユーザーに不快に思われないようにするため、割り込みを伴う優先度レベルの通知は次のような場合に限定してください。
+</p>
+
+<ul>
+  <li> 他人が絡む</li>
+  <li> 急を要する</li>
+  <li> 実世界におけるユーザーの行動が直ちに変わりうる</li>
+</ul>
+
+<p><code>LOW</code> や <code>MIN</code> に設定されている通知も、ユーザーにとって価値がある可能性はあります。
+ほとんどとは言わないまでも、多くの通知は、ユーザーの注意を直ちに引く、またはユーザーの手首に振動を与える必要はありませんが、ユーザーがその通知を見ることにしたときに価値があると気づくような情報が含まれている必要があります。
+
+
+優先度が <code>LOW</code> や <code>MIN</code> の通知の条件は以下のとおりです。
+</p>
+
+<ul>
+  <li> 他人が絡まない</li>
+  <li> 急を要さない</li>
+  <li> ユーザーが興味を持ちうる内容が含まれているが、手が空いたときに参照することにして問題ない
+</li>
+</ul>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
+
+
+<h3 style="clear:both" id="set_a_notification_category">通知カテゴリの設定
+</h3>
+
+<p>通知が、あらかじめ定義されているカテゴリ(下を参照)のどれかに該当する場合は、それに沿って割り当てます。
+
+通知シェード(やその他の通知リスナー)などの各種システム UI は、評価やフィルタリングの判断にこの情報を使用することがあります。
+
+</p>
+<table>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
+</td>
+    <td>
+<p>電話(ビデオまたは音声)の着信またはそれに類する同期通信の要求
+</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
+</td>
+    <td>
+<p>直接メッセージ(SMS、インスタントメッセージなど)の受信</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
+</td>
+    <td>
+<p>非同期バルク メッセージ(メール)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
+</td>
+    <td>
+<p>カレンダー イベント</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
+</td>
+    <td>
+<p>販促または広告</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
+</td>
+    <td>
+<p>アラームまたはタイマー</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
+</td>
+    <td>
+<p>長時間実行のバックグラウンド処理の進捗</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
+</td>
+    <td>
+<p>ソーシャル ネットワークまたは共有アップデート</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
+</td>
+    <td>
+<p>バックグラウンド処理または認証ステータスにおけるエラー</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
+</td>
+    <td>
+<p>再生のためのメディア転送コントロール</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
+</td>
+    <td>
+<p>システムまたは端末のステータス アップデート。システム用に予約済み。</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
+</td>
+    <td>
+<p>バックグラウンド サービス実行中の表示。</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
+</td>
+    <td>
+<p>1 つの事項に対する具体的でタイムリーな推奨。たとえば、ニュースアプリがユーザーが次に読みたいのではないかと予想した記事を推奨するなど。
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
+</td>
+    <td>
+<p>端末やコンテキスト ステータスに関する進行中情報。</p>
+</td>
+ </tr>
+</table>
+
+<h3 id="summarize_your_notifications">通知の概要</h3>
+
+<p>アプリで特定の新しい通知を送信しようとしたときに同じタイプの通知が既に保留されていた場合は、それらを統合してそのアプリに対する 1 つの概要通知にします。新しいオブジェクトは作成しないでください。
+
+</p>
+
+<p>概要通知は概要説明を作成し、特定タイプの通知がいくつ保留になっているのかがユーザーにわかるようにします。
+
+</p>
+
+<div class="col-6">
+
+<p><strong>非推奨</strong></p>
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
+</div>
+
+<div>
+<p><strong>推奨</strong></p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
+</div>
+
+<p style="clear:left; padding-top:30px; padding-bottom:20px">概要を構成している個々の通知に関する詳細は、展開ダイジェスト レイアウトを使用して提示できます。
+
+このアプローチにより、ユーザーはどの通知が保留中か、そして関連アプリで詳しく読もうと思うほどそれらに興味があるかを把握しやすくなります。
+
+
+
+</p>
+<div class="col-6">
+  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
+  <p class="img-caption">
+  通知の展開された概要と折りたたまれた概要(<code>InboxStyle</code> を使用)
+  </p>
+</div>
+
+<h3 style="clear:both" id="make_notifications_optional">通知をオプションにする
+</h3>
+
+<p>ユーザーは常に通知を制御できる必要があります。アプリケーションの設定に通知設定アイテムを追加して、ユーザーがアプリの通知を無効にしたり、警告音や振動を使用するかどうかなどのアラート設定を変更したりできるようにしてください。
+
+
+
+</p>
+
+<h3 id="use_distinct_icons">見分けやすいアイコンにする</h3>
+<p>現在保留になっているのがどのタイプの通知なのか、ユーザーが通知エリアを一目で見分けられることが必要です。
+
+</p>
+
+<div class="figure">
+  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
+</div>
+
+  <div><p><strong>推奨</strong></p>
+    <p>Android アプリが既に提供している通知アイコンを見ながら、独自アプリ用に見かけの十分異なるアイコンを作成する。
+
+</p>
+
+    <p><strong>推奨</strong></p>
+    <p>小さなアイコン用の適切な<a href="/design/style/iconography.html#notification">通知アイコン スタイル</a>と、アクション アイコン用の Material Light <a href="/design/style/iconography.html#action-bar">アクションバー アイコンスタイル</a>を使う。
+
+
+
+</p>
+<p ><strong>推奨</strong></p>
+<p >アイコンの見た目はシンプルに保ち、細かくしすぎて見にくくならないようにする。
+</p>
+
+  <div><p><strong>非推奨</strong></p>
+    <p>なんらかの追加アルファ(暗転やフェード)を小さなアイコンやアクション アイコンに配置する。エッジはアンチ エイリアス処理できますが、Android ではこれらのアイコンをマークとして使用するため(つまり、アルファ チャンネルのみ使用)、画像は概して完全不透明で描画されます。
+
+
+
+
+</p>
+
+</div>
+<p style="clear:both"><strong>非推奨</strong></p>
+
+<p>アプリを他と色で区別する。通知アイコンは、背景が透明な白に限定してください。
+</p>
+
+
+<h3 id="pulse_the_notification_led_appropriately">通知 LED を適切に点灯させる
+</h3>
+
+<p>多くの Android 端末には通知 LED が用意されており、スクリーンがオフのときでもユーザーに引き続きイベントを通知するために使用されます。
+
+優先度が <code>MAX</code>、<code>HIGH</code>、<code>DEFAULT</code> の通知を LED 点灯するようにし、優先度の低い通知(<code>LOW</code> と <code>MIN</code>)は点灯しないようにしてください。
+
+
+</p>
+
+<p>ユーザーによる通知の制御が LED にも及ぶようにしてください。DEFAULT_LIGHTS を使用すると、LED が白く点灯します。
+
+ユーザーが明示的にカスタマイズしない限り、通知では別の色を使用しないでください。
+
+</p>
+
+<h2 id="building_notifications_that_users_care_about">ユーザーが気にする通知の作成
+</h2>
+
+<p>ユーザーに愛されるアプリを開発するためには、通知を入念にデザインすることが重要です。通知はアプリの声を体現するものであり、アプリの個性の一部です。
+
+
+望まれない通知や重要ではない通知がユーザーの邪魔になったり、アプリへの注目を集める意図が逆にユーザーに不快に思われたりしかねませんので、通知は適切に使用してください。
+
+
+</p>
+
+<h3 id="when_to_display_a_notification">通知を表示すべきケース</h3>
+
+<p>ユーザーが楽しんで使えるアプリケーションを開発するには、ユーザーの注目や関心は保護すべきリソースであるという認識が重要です。
+
+Android の通知システムは、ユーザーの注意に対する通知のインパクトを最小限に抑える設計になっていますが、通知がユーザーのタスクフローに割り込むという事実を意識することがやはり重要です。通知を盛り込む予定の場合は、それが割り込みに値するほど重要かどうかを自問してください。
+
+
+
+
+
+
+確信が持てない場合は、ユーザーがアプリの通知設定を使用して通知をコントロールできるようにするか、通知のフラグを <code>LOW</code> か <code>MIN</code> に設定してユーザーがしている別のことを邪魔しないようにします。
+
+
+
+</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
+  <p style="margin-top:10px" class="img-caption">
+   急を要する通知の例
+  </p>
+
+<p>概して、適切に振る舞うアプリは話しかけられたときだけ口を開きますが、求められていない通知でユーザーの作業に割り込むことにメリットがあるケースもいくつか存在します。
+</p>
+
+<p>通知は主に<strong>急を要するイベント</strong>で、特に<strong>他人が絡む</strong>同期イベントで使用します。
+たとえば、受信チャットはリアルタイムの同期コミュニケーションです。
+
+他人が応答を能動的に待っています。
+カレンダー イベントも、通知でユーザーの注目を引くタイミングに関する好例です。なぜなら、そうしたイベントは差し迫っており、往々にして他人が絡みます。
+
+
+</p>
+
+<h3 style="clear:both" id="when_not_to_display_a_notification">通知を表示すべきでないケース
+</h3>
+
+<div class="figure" style="margin-top:60px">
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
+</div>
+
+<p>以上を除く多くの場合、通知の使用は適切ではありません。</p>
+
+<ul>
+  <li> 明示的にユーザー宛てではない情報や、それほど急を要さない情報は、ユーザーへの通知を避けます。
+
+たとえば、ソーシャル ネットワーク経由で流れてくる非同期の間接的なアップデートは、概してリアルタイムの割り込みにふさわしくありません。
+
+
+それらに本当に関心のあるユーザーが選択できるようにします。
+</li>
+  <li> 関連する新しい情報が現在画面に表示されている場合は、通知を作成しないようにします。
+その代わり、アプリケーションそのものの UI を使用して、ユーザーに情報をコンテキスト内で直接通知します。
+
+
+  たとえば、チャット アプリケーションは、ユーザーが他のユーザーとチャットしている最中にシステム通知を作成しないようにします。
+</li>
+  <li> 情報の保存や同期、アプリケーションのアップデートなど、低レベルの技術的な通知については、アプリやシステムがユーザーの介入なしに問題を解決できる場合は割り込まないようにします。
+
+</li>
+  <li> アプリケーションがユーザーの介入なしにエラーから復旧できる場合は、そのようなエラーの通知で割り込まないでください。
+
+</li>
+  <li> 通知にふさわしい内容がなく、アプリを宣伝するだけの通知は、作成しないようにします。通知は、有益でタイムリーな新しい情報を提供するものであり、アプリを起動するためだけには使用しないでください。
+
+
+
+</li>
+  <li> ブランドをユーザーの目の前に提示するだけの表面的な通知を作成しないようにします。
+
+  そうした通知はユーザーにフラストレーションを与え、アプリが使われなくなります。アップデートされた情報を少しだけ提供し、ユーザーをアプリにつなぎ止める最適な方法は、ホームスクリーンに配置できるウィジェットを開発することです。
+
+
+
+
+</li>
+</ul>
+
+<h2 style="clear:left" id="interacting_with_notifications">通知の操作
+</h2>
+
+<p>通知はステータスバーにアイコンとして示され、通知ドロワーを開いてアクセスできます。
+
+</p>
+
+<p>通知をタップすると関連アプリが開き、その通知に対応する詳細なコンテンツに移動します。通知上で左か右にスワイプされた通知は、ドロワーから削除されます。
+
+</p>
+
+<h3 id="ongoing_notifications">進行中通知</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
+      <p class="img-caption">
+    音楽再生の進行中通知
+  </p>
+</div>
+<p>進行中通知は、バックグラウンドで進行中の処理に関する情報をユーザーに伝えます。たとえば、音楽プレイヤーは通知システムで現在再生中のトラックを示し、ユーザーが再生を停止するまで通知を継続します。
+
+
+
+進行中通知には、ファイルのダウンロードやビデオのエンコードなど、時間のかかるタスクに対するフィードバックをユーザーに示すこともできます。
+
+ユーザーは、進行中通知を通知ドロワーから手動では削除できません。
+</p>
+
+<h3 id="ongoing_notifications">メディア再生</h3>
+<p>Android 5.0 では、廃止された {@link android.media.RemoteControlClient} クラスの転送コントロールがロック画面に表示されません。
+ただし、通知が表示されるため、<em></em>ユーザーがロック状態から再生をコントロールするための主な手段は、現状では各アプリの再生通知です。
+
+この動作により、アプリは表示するボタンとその表示形態についてより多くをコントロールでき、画面がロックされているかどうかによらない一貫した操作感をユーザーに提供できます。
+
+
+</p>
+
+<h3 style="clear:both"
+id="dialogs_and_toasts_are_for_feedback_not_notification">ダイアログとトースト
+</h3>
+
+<p>アプリが画面上に表示されていないときにダイアログやトーストを作成しないようにしてください。
+ダイアログやトーストの表示は、アプリでのアクションに対するユーザーへの即座の応答のみにします。ダイアログやトーストの使用の目安については、<a href="/design/patterns/confirming-acknowledging.html">確認と通知</a>をご覧ください。
+
+
+
+</p>
+
+<h3>評価と並べ替え</h3>
+
+<p>通知はニュースであるため、基本的には新しい順に表示され、アプリが通知に指定した<a href="#correctly_set_and_manage_notification_priority">優先度</a>に基づき特別な配慮がなされます。
+
+
+</p>
+
+<p>通知はロック画面の重要な一部であり、端末のディスプレイがオンになるたび前面に出ます。
+
+ロック画面のスペースは限られているため、もっとも緊急か重要な通知を識別することが何より重要になります。
+
+この理由から、Android では洗練された通知並べ替えアルゴリズムを採用しており、その中で以下を考慮しています。
+
+</p>
+
+<ul>
+  <li> タイムスタンプと、アプリが指定した優先度。</li>
+  <li> その通知が最近ユーザーに音または振動で配信されたかどうか。
+(つまり、電話が音を立てるだけの場合、ユーザーが「何が起こったのか」を知りたくなったら、ロック画面はそれに一目でわかる答えを示すべきです)。
+
+
+</li>
+  <li> {@link android.app.Notification#EXTRA_PEOPLE} を使用して通知に添付された人、特にその人が「お気に入り」の連絡先かどうか。
+</li>
+</ul>
+
+<p>この並べ替え機能を最大限に生かすには、リストにおける特定の位置付けを狙うのではなく、ユーザーの操作感に注目します。
+
+</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
+
+  <p class="img-caption" style="margin-top:10px">Gmail 通知の優先度はデフォルトであり、そのため Hangouts などのインスタントメッセージ アプリからのメッセージの下に並びますが、新しいメッセージが来たときは一時的にそれより先に表示されます。
+
+
+
+
+  </p>
+
+
+<h3>ロック画面上</h3>
+
+<p>通知はロック画面に表示されるため、ユーザーのプライバシーはとりわけ重要な考慮対象です。
+
+通知には機密性の高い情報が含まれることが多く、端末を手に取ってディスプレイをオンにした誰にでも見られるようにすべきではありません。
+
+</p>
+
+<ul>
+  <li> セキュリティ保護されたロック画面(PIN、パターン、パスワードなど)を持つ端末の場合、インターフェースには公開部分と秘密部分があります。
+公開インターフェースはセキュリティ保護されたロック画面に表示でき、誰でも見られます。
+秘密インターフェースはロック画面の背後にある世界で、ユーザーが端末にサインインして初めて表示されます。
+</li>
+</ul>
+
+<h3>セキュリティ保護されたロック画面に表示される情報のユーザー コントロール</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
+      <p class="img-caption">
+    ロック画面上の通知。コンテンツはユーザーが端末をロック解除した後に表示されます。
+  </p>
+</div>
+
+<p>セキュリティ保護されたロック画面をセットアップする際、ユーザーはセキュリティ保護されたロック画面には表示しない機密性の高い情報を選ぶことができます。
+その場合、システム UI は通知の<em>可視性レベル</em>を考慮して、表示しても問題ない情報を識別します。
+
+</p>
+<p> 可視性レベルをコントロールするには、<code><a
+href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code> を呼び出し、次の値のどれかを指定します。
+
+</p>
+
+<ul>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>。通知の内容がすべて表示されます。
+
+  可視性レベルが指定されていない場合は、これがシステム デフォルトです。</li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>。ロック画面に、その通知の存在に関する基本情報、たとえば通知のアイコンやそれを提示したアプリ名などを表示します。
+
+通知のその他の詳細は表示されません。いくつか留意すべき点があります。
+
+  <ul>
+    <li> システムがセキュリティ保護されたロック画面に表示するためとして公開バージョンの通知を別に提供する場合は、<code><a
+href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code> フィールドに代替 Notification オブジェクトを用意します。
+
+
+
+    <li> この設定により、アプリは利便性はあるが個人情報は明かさない編集されたバージョンのコンテンツを作成できるようになります。
+SMS アプリを例に考えて見ましょう。通知には SMS のテキストメッセージ、送信者の名前、連絡先アイコンが含まれています。この通知は <code>VISIBILITY_PRIVATE</code> であるべきですが、<code>publicVersion</code> にも "3 件の新しいメッセージ" のような個人を特定する詳細なしでも利便性のある情報を盛り込めます。
+
+
+
+
+  </ul>
+  </li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>。必要最小限の情報のみ表示し、通知のアイコンさえありません。
+</li>
+</ul>
+<h2 style="clear:both" id="notifications_on_android_wear">Android Wear での通知
+</h2>
+
+<p>通知とそのアクション<em></em>は、デフォルトで Wear 端末にブリッジされます。デベロッパーは、どの通知が電話から腕時計へ、またはその逆へブリッジするかを制御できます。
+
+
+また、どのアクションがブリッジするかも制御できます。タップ 1 回では完了しないアクションがアプリに含まれている場合は、そうしたアクションを Wear 通知では隠すか Wear アプリに接続することを検討してください。いずれにしても、ユーザーがアクションを腕時計で完了できるようにします。
+
+
+
+
+
+</p>
+
+<h4>通知とアクションのブリッジ</h4>
+
+<p>電話のような接続状態の端末は、通知を Wear 端末にブリッジして、通知が腕時計に表示されるようにできます。
+同様に、アクションもブリッジして、ユーザーが通知に Wear 端末で直接対処できるようにできます。
+</p>
+
+<p><strong>ブリッジする</strong></p>
+
+<ul>
+  <li> 新しいインスタントメッセージ</li>
+  <li> +1、いいね、心拍数のようなタップ 1 回のアクション</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
+
+<p><strong>ブリッジしない</strong></p>
+
+<ul>
+  <li> 新着ポッドキャストの通知</li>
+  <li> 腕時計ではできない機能にマップされたアクション</li>
+</ul>
+
+
+
+<p><h4>Wear 専用に定義されたアクション</h4></p>
+
+<p>Wear でのみできるアクションがいくつかあります。次に例を挙げます。</p>
+
+<ul>
+  <li> 「Be right back」 のような定形応答のクイックリスト</li>
+  <li> 携帯電話で開く</li>
+  <li> 音声入力画面を起動する 「Comment」 アクションや 「Reply」 アクション</li>
+  <li> Wear 専用アプリを起動するアクション</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/about.jd b/docs/html-intl/intl/ja/distribute/googleplay/about.jd
new file mode 100644
index 0000000..56eaf2c
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/about.jd
@@ -0,0 +1,294 @@
+page.title=Google Play の可能性
+meta.tags="visibility, growth, distributing"
+page.tags="play, apps, distributing, publishing"
+page.metaDescription=1 か月で何十億回ものダウンロードに利用されています。利用者はさらに増加し続けています。Google 基準で、ユーザーにアプリを紹介しましょう。
+page.image=/distribute/images/about-play.jpg
+
+@jd:body
+
+<div id="qv-wrapper">           
+  <div id="qv">
+  <h2>Google Play について</h2>
+    <ol style="list-style-type:none;">
+      <li><a href="#reach">全世界のユーザーにアプローチ、急激な成長</a></li>
+      <li><a href="#ratings-reviews">ユーザーの評価とレビュー</a></li>
+      <li><a href="#category-browsing">カテゴリのブラウジング</a></li>
+      <li><a href="#search">検索</a></li>
+      <li><a href="#top-charts-and-lists">上位チャートと一覧</a></li>
+      <li><a href="#featured-staff-picks">おすすめ、スタッフのおすすめ、コレクション、バッジ</a></li>
+      <li><a href="#product-detail-pages">ストア情報掲載ページ</a></li>
+      <li><a href="#related-resources">関連リソース</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  Google Play は Android アプリ配布用のメイン ストアです。Google Play 上にアプリを公開すると、世界中の 190 以上の国と地域に存在する、Android の利用者という広大な基盤にアプリを提示することになります。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-about-0.jpg" alt="Google Play on an Android Tablet" style="width:480px;position:relative" />
+</div>
+
+<p>
+  Google Play は Android エクスペリエンスの中核です。新しいユーザーはアプリ、ゲーム、その他の Google Play コンテンツでユーザーのデバイスをカスタマイズします。既存のユーザーは、流行のコンテンツや新しいコンテンツを求めて定期的にアクセスします。新しいアプリはとても簡単かつ高速でダウンロードできます。Google Play は、アプリをユーザーのデバイスにワイヤレスで即時に配布します。
+</p>
+
+<p>
+  また、Google Play は Web ユーザーにとってトップのアクセス先でもあります。ブラウザを使用しているユーザーはだれでも Web 上で Google Play 内を自由にアクセスできます。Android ユーザーは目的のアプリを購入してインストールすることもできます。Google Play はアプリを自動的にユーザーのデバイスに配布します。ケーブルは必要ありません。
+</p>
+
+<p>
+  Google Play Web サイトのアクセシビリティと利便性により、オンライン広告、Web 検索、クロス リンクなどの多くのソースから製品へのトラフィックを促進する新しい方法が実現します。Google Play は、優れたアプリとゲームをユーザーに結び付けるように設計されています。マーケットプレースでアプリに気づかせ、関心が集まるようにするための重要なチャネルを提供します。
+</p>
+
+<div class="headerLine">
+  <h2 id="ratings-reviews">
+    ユーザーの評価とレビュー
+  </h2>
+
+
+</div>
+
+<p>
+  見込みユーザーは、評価とレビューをアプリの品質を示す重要なベンチマークとして参照します。Android ユーザーはアプリを 1 個から 5 個の星で評価し、レビューを投稿して、ダウンロード済みのアプリの評価を示します。
+</p>
+
+<p>
+  Google Play の一覧と検索結果では、<strong>アプリの評価はそのランキングに影響する最も重要な要因の 1 つです</strong>。また、この評価は、編集チームがストアでのプロモーション用にアプリとゲームを整理する際に参照する主要な指標の 1 つでもあります。
+</p>
+
+<div class="img" style="padding: 1em auto;width:96%;">
+  <img src="{@docRoot}images/gp-rating-web.png" style="border:1px solid #ddd;">
+</div>
+
+<div class="headerLine">
+  <h2 id="category-browsing">
+    カテゴリのブラウジング
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play でアプリを公開する際に、ユーザーにアプリを見つけてほしいカテゴリを選択します。30 個以上のカテゴリを利用できます。各カテゴリ内で、評価、レビュー、ダウンロード数、国、その他の要因の組み合わせに基づいてアプリがランク付けされます。
+</p>
+
+<div class="headerLine">
+  <h2 id="search">
+    検索
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play での検索により、ユーザーはアプリやゲームを素早く特定することができます。検索では、ユーザーの入力に応じて語句を提案する強力なヒューリスティックを使用し、アプリへの直接リンクを提案として提供します。この結果、最も関連性が高く、最も人気のあるアプリが検索上位で見つかります。
+</p>
+
+<div class="headerLine">
+  <h2 id="top-charts-and-lists">
+    上位チャートと一覧
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-top.jpg">
+</div>
+
+<p>
+  上位チャートは、アプリとゲームのホーム ページから選択された、Android  ユーザーに人気があり話題となっているコンテンツが常に表示されます。上位チャートは最新状態を保ち、最新のダウンロード数に基づき、毎日複数回更新されています。アプリの評価が上がり、ダウンロード数が増えると、アプリはチャートの上位に移動します。
+</p>
+
+<p>
+  チャートを世界中のユーザーにできるだけ関連付けるために、このチャートは Google Play の最もユーザー数が多い主な国で、それぞれ異なります。ダウンロード数と評価でアプリが関心を集め、人気が加速してくると、アプリは 1 つ以上の上位チャートに入るようになり、さらに注目されるようになります。
+</p>
+
+<table style="width:50%;">
+  <tr>
+    <td>
+      人気(無料)
+    </td>
+    <td>
+      無料アプリと無料ゲームの一覧
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      人気(有料)
+    </td>
+    <td>
+      有料アプリと有料ゲームの一覧
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      人気(総合)
+    </td>
+    <td>
+      総合上位(無料/有料)
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      人気の新着(無料)
+    </td>
+    <td>
+      30 日以内
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      人気の新着(有料)
+    </td>
+    <td>
+      30 日以内
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      人気上昇中
+    </td>
+    <td>
+      インストール数が急増した新着アプリ
+    </td>
+  </tr>
+</table>
+
+<div class="headerLine">
+  <h2 id="featured-staff-picks">
+    おすすめ、スタッフのおすすめ、コレクション、バッジ
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play の編集チームは、優れたアプリにユーザーが注目できるようにして、ストア全体のアプリの品質を常に一定に保つことに専念します。このチームは Google Play 全体でアプリを定期的にレビューし、最も有名なアプリとゲームだけでなく、より多くのユーザーに体験してほしい「ダイヤの原石」も探し出します。チームは<em>おすすめ</em>、<em>スタッフのおすすめ</em>、その他のコレクションで、優れたアプリをプロモートします。
+</p>
+
+<p>
+  ご自分のアプリを優れたアプリとして推薦することはできませんが、編集チームは優れたアプリがないかどうか、常に Google Play をモニタリングしています。ユーザーが気に入るアプリを作成して、Android デバイスで問題なく動作している場合、編集チームが注目します。
+</p>
+
+<h3 id="featured-staff-picks2">
+  おすすめとスタッフのおすすめ
+</h3>
+
+<p>
+  Google Play の編集チームは新着アプリを毎週選出して、このアプリを多くの人が見る<em>おすすめ</em>と<em>スタッフのおすすめ</em>のコレクションで推薦します。
+</p>
+
+<p>
+  <em>おすすめ</em>のコレクションは、Android で入手できる最新かつ最高のアプリとゲームのタイトルをハイライトします。おすすめ一覧には上位カテゴリで優秀かつ最も人気のあるアプリも含まれています。<em>スタッフのおすすめ</em>は Google Play 上の最近のおすすめアプリとゲームのすべてを集めたものです。タブレット ユーザー向けには、特別な<em>スタッフのおすすめ</em>のコレクションで Android タブレット向けの優れたアプリがハイライトされます。
+</p>
+
+<table style="text-align:center;margin:1.5em 0;">
+  <tr>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks1.jpg">
+      <p>
+        おすすめ
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks2.jpg">
+      <p>
+        コレクション
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks3.jpg">
+      <p>
+        エディターのおすすめ
+      </p>
+    </td>
+  </tr>
+</table>
+
+<h3 id="collections">
+  アプリのコレクション
+</h3>
+
+<p>
+  編集チームはテーマや季節ごとのイベントに基づき、アプリとゲームのコレクションをまとめることがあります。ユーザーはこの一覧をよく利用し、タイムリーなコレクションに注目してアプリを選択します。
+</p>
+
+<p>
+  編集スタッフはコレクションのプロモーション用にアプリを選択します。これらのアプリは高品質であり、電話とタブレットで Android の魅力を最大限に引き出します。スタッフはコレクション全体に興味を起こさせる、または独自に関与するアプリも探し出します。
+</p>
+
+<h3 id="editors-choice">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/editorschoice_ann.png">エディターのおすすめ </h3>
+
+<p>
+  <em>エディターのおすすめ</em>とは Android 上で入手できる優秀なアプリの一部をハイライトした、独自の視点で収集されたアプリです。エディターは、品質と優れたユーザー インターフェイス、長期間に及ぶ人気の維持、Android 機能の革新的な使用という観点でこれらのアプリを選択します。
+</p>
+
+<p>
+  <em>エディターのおすすめ</em>に選出されたアプリには、アプリ名が Google Play に表示されると必ず表示されるバッジも付与されます。
+</p>
+
+<h3 id="top-developer">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/topdev_ann.png">トップ デベロッパー </h3>
+
+<p>
+  トップ デベロッパーとは Android の高品質かつ革新的なアプリのローンチへの尽力に対し、定評のある、高く評価されたデベロッパーを認定するバッジです。Google Play の編集スタッフは、デベロッパーが積み重ねた成果に基づき、トップ デベロッパーのバッジを適宜付与します。
+</p>
+
+<p>
+  トップ デベロッパーのバッジは、Google Play に表示される場合には常に、デベロッパーの名前の横に表示されます。このバッジは、デベロッパーのすべてのアプリが長期にわたって認められていることを意味します。これは、ユーザーがデベロッパーの製品に対して持つ、より高いレベルの信頼性を示しています。
+</p>
+
+<div class="headerLine">
+  <h2 id="product-detail-pages">
+    ストア情報掲載ページ
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-listing.jpg">
+</div>
+
+<p>
+  ご自分のアプリの Google Play でのトップ ページは、<em>ストア情報掲載ページ</em>です。このページは豊富な内容と多様な色使いでアプリをプロモートし、その評価とレビューをハイライトしてアプリの概要を示します。
+</p>
+
+<p>
+  ユーザーはストアの掲載情報にアクセスしてアプリの詳細を確認できます。検索結果、上位チャート、カテゴリ一覧、コレクションにアプリが含まれていると、1 回のタップでストアの掲載情報に直接移動できます。
+</p>
+
+<p>
+  いずれかの Web ブラウザで<a href="https://play.google.com/apps/publish/"> Google Play デベロッパー コンソール</a>から製品の詳細ページを管理します。サインイン後、ブランド アセットをアップロードまたは更新したり、マーケットの言語で製品の詳細を入力したりします。
+</p>
+
+<p>
+  アプリを公開すると、Google Play はアプリの評価、レビュー、他の製品へのリンクなどを追加します。さらに電話、タブレット、Web ブラウザでストア情報掲載ページが最も良く見えるようにします。
+</p>
+
+<p>
+  Web サイト、広告キャンペーン、レビュー、ソーシャル メディアの投稿などのGoogle Play 外部から、製品の詳細ページにWeb ユーザーを直接リンクできます。リンク方法については<a href="{@docRoot}distribute/tools/promote/linking.html">製品へのリンク</a>を参照してください。
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="headerLine">
+<h2>関連リソース</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="4"></div>
+    </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/auto.jd b/docs/html-intl/intl/ja/distribute/googleplay/auto.jd
new file mode 100644
index 0000000..0cbf8b1
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/auto.jd
@@ -0,0 +1,163 @@
+page.title=Android Auto への配布
+page.image=/design/auto/images/auto-overview.png
+meta.tags="auto", "publish", "quality"
+page.tags="auto", "publish", "googleplay"
+page.metaDescription=アプリとコンテンツを Android Auto に配布します。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>参加方法</h2>
+<ol>
+<li><a href="#understand_guidelines">ガイドラインを把握する</a></li>
+<li><a href="#develop_app">Auto 向けに優れたアプリを開発する</a></li>
+<li><a href="#test_app">Auto アプリの品質をテストする</a></li>
+<li><a href="#opt_in">条項に同意する</a></li>
+<li><a href="#track_review">審査をトラッキングする</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  ユーザーは、Android Auto と Google Play を使用して、優れたアプリを車に搭載することができます。新規アプリや既存のアプリを Auto 向けに拡張し、Google Play の使いやすいツールとプロセスを使用して公開することができます。
+</p>
+
+<p>
+  まずこのドキュメントの各セクションでAuto アプリを Google Play からユーザーに配布する方法を確認してください。<a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>をお読みになり、アプリが遵守する必要のあるユーザビリティ、品質、安全に関するガイドラインの情報について確認してください。アプリの準備が完了したら、デベロッパー コンソールの条項を受諾し、APK を審査用にアップロードできます。
+</p>
+
+<h2 id="how_to_participate">
+  参加方法
+</h2>
+
+<p>
+  Google Play では、車載用アプリを配布できます。既存のデベロッパー コンソール アカウントと、現在の価格と販売/ 配布地域の設定を使用して、アプリを開発し、公開することができます。参加方法は簡単です。参加プロセスの概要は以下のセクションに記載されています。
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-auto-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1.ガイドラインと要件を把握する
+</h3>
+
+<p>
+  Android Auto でのローンチを成功させるため、初めに Auto で優れたエクスペリエンスを作成するためのガイドラインを確認します。アプリを Auto 用に拡張する場合の考え方、設計とユーザビリティの詳細については、<a href="{@docRoot}design/auto/index.html">Android Auto の設計ガイドライン</a>を参照してください。
+</p>
+
+<p>
+  Auto エクスペリエンスの設計を始める際には、Auto アプリの品質基準を読み、理解しておく必要があります。Auto で使用できるアプリのみが Google Play で Auto アプリとして指定されます。アプリが基本的な一連の品質基準に適合している場合に参加できます。詳細については<a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>を参照してください。
+</p>
+
+<h3 id="develop_app">2.Auto 向けに優れたアプリを開発する</h3>
+
+<p>
+  Auto 向けの優れたアプリは車での使用を想定して設計され、Android Auto の機能を活用します。このアプリは、オーディオ コンテンツの再生やメッセージへのアクセスなどの操作中に、ユーザーに高品質のエクスペリエンスを提供します。
+</p>
+
+<p>
+  Auto アプリを検討する際には<a href="{@docRoot}training/auto/start/index.html">デベロッパー向けドキュメント</a>とユーザビリティのガイドラインを確認し、最大限にサポートする計画を立ててください。優れたエクスペリエンスを設計し、ドライバーの注意散漫を防ぐための当社が定めたガイドラインを忠実に守るようにしてください。
+</p>
+
+<p>
+  Auto エクスペリエンスは、電話、タブレット、その他のデバイスの既存のアプリの一部として、同じパッケージ名とストア掲載情報を使用して配布する必要があります。
+</p>
+
+<h3 id="test_app">3.Auto アプリの品質をテストする</h3>
+
+<p>
+  Auto アプリは車内で正しく機能し、優れた外観を備えて、考えられる最高のユーザー エクスペリエンスを提供するように設計されていなければなりません。Google Play では、厳選された高品質の Auto アプリをユーザーが Google Play で簡単に発見できるようにアプリが紹介されます。ユーザーがその機能を存分に活用できる Android Auto アプリに参加したり、アプリを配布したりするには次の手順に従ってください。
+</p>
+
+<ul>
+  <li><a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>ガイドラインに適合させる <ul>
+      <li><a href="{@docRoot}training/auto/index.html">Auto アプリ開発</a>用に当社が定めたベスト プラクティスに従う</li>
+      <li>アプリをすべての <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>基準に適合させる</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4.Android Auto の条項に同意し公開する</h3>
+
+<p>
+  APK をアップロードしてアプリを審査用に公開する前に、デベロッパー アカウントの所有者はデベロッパー コンソールの <strong>[価格と販売 / 配布地域]</strong> セクションで<a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html"> Android Auto の条項</a>に同意する必要があります。条項に同意することは、Android Auto ユーザーがアプリを Google Play から利用できるようにして、アプリが <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>ガイドラインに適合していることを意味します。
+</p>
+
+<p>
+  Auto アプリはこの条項に同意した後でのみアップロードできます。どのアプリが Auto アプリであると判断されるかを以下に示します。
+</p>
+
+<ul>
+  <li>アプリのマニフェストでは、アプリが使用する Auto 機能が含まれた、マニフェストの <code>com.google.android.gms.car.application</code> メタデータ エントリが宣言されている必要があります。Android Auto でアプリを使用するための設定について詳しくは、<a href="{@docRoot}training/auto/start/index.html#auto-metadata">Auto の概要(Getting Started with Auto)</a>を参照してください。
+  </li>
+</ul>
+
+<p>
+  リリース対応 APK を作成し、これが <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>ガイドラインのすべてに適合していることをテストして確認したら、デベロッパー コンソールにアップロードします。ストアの掲載情報を追加の Auto 機能情報で更新し、必要に応じて配布オプションを設定します。Google Play でのローンチに向けた準備方法について不明点がある場合は、<a href="{@docRoot}distribute/googleplay/publish/preparing.html">ローンチ チェックリスト</a>を参照してください。
+</p>
+
+<p>
+  条項に同意し変更内容を保存したら、アプリを通常どおりアップロードして公開できます。アプリを Android Auto ユーザーが利用できるようにする前に、Google Play はアプリを <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>基準に対する審査にかけ、その結果を通知します。アプリが承認されると、Google Play はそのアプリを Android Auto ユーザーが利用できるようにします。アプリの承認状況をトラッキングする方法の詳細については、次のセクションを参照してください。
+</p>
+
+<p>
+  審査は Google Play ストアの他のデバイス(電話やタブレットなど)に対するアプリの使用可能状況に影響することに注意してください。電話/タブレット コンポーネントに対するアップデートを含む既存のアプリがある場合、Android Auto コンポーネントが審査に合格しないと、アップデートされたアプリが Google Play ストアで利用できるようにはなりません。
+</p>
+
+<p>
+  デベロッパー コンソールで Android Auto の条項に同意するには、次の手順を実行します。
+</p>
+
+<ol>
+  <li>アプリがすべての <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>基準に適合していることを確認します。
+  </li>
+
+  <li><strong>[すべてのアプリ]</strong> ページで公開するアプリをクリックします。
+  </li>
+
+  <li><strong>[価格と販売 / 配布地域]</strong> で <em>Android Auto</em> とその条項へのリンクにスクロール ダウンします。
+  </li>
+
+  <li><em>条項</em>のリンクをクリックします。
+  </li>
+
+  <li>条項をよく読み、<em>[同意する]</em> をクリックします。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png">
+  <p class="caption">
+    <strong>Auto の条項に同意する: </strong>デベロッパー コンソールで条項に同意することにより、Android Auto にアプリが含まれます。
+  </p>
+</div>
+
+<h3 id="track_review">5.審査をトラッキングする</h3>
+
+<p>
+  アプリは、上記で説明したドライバーの注意散漫に関するガイドラインと、技術上の基準と品質基準に準拠しているかどうか審査されます。この詳細な審査プロセスは、電話アプリ/タブレット アプリを審査にかける際の通常のプロセスよりも時間がかかる場合があります。アプリが承認されるまで、アプリまたはアプリのアップデートは Google Play ストアに公開されません。審査が正常に終了すると、アプリが公開され、Google Play ストアで利用できるようになります。
+</p>
+
+<p>アプリが承認されない場合、<strong>デベロッパー アカウント アドレスに送られた通知メール</strong>を受け取ります。このメールには対処が必要な領域の要約が記載されています。必要な調整を行ったら、デベロッパー コンソールにアプリの新規バージョンをアップロードできます。
+</p>
+
+<p>
+  提出されたアプリが既存のアプリへのアップデートであり、アップデートされるアプリが審査基準に適合していない場合、アップデートは拒否され、既存のアプリが Google Play ストアに引き続き公開されます。
+</p>
+
+<p>アプリの評価方法の詳細については、<a href="{@docRoot}distribute/essentials/quality/auto.html">Auto アプリの品質</a>に関するドキュメントを参照してください。 </p>
+
+
+  <h3>関連リソース</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:autolanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/ja/distribute/googleplay/developer-console.jd
new file mode 100644
index 0000000..8dd562d
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/developer-console.jd
@@ -0,0 +1,449 @@
+page.title=デベロッパー コンソール
+page.metaDescription=Google Play 上にアプリを公開する際のホームとなるデベロッパー コンソールについて説明します。
+page.image=/distribute/images/developer-console.jpg
+Xnonavpage=true
+
+@jd:body
+
+<div id="qv-wrapper">           
+  <div id="qv">
+    <h2>公開機能</h2>
+    <ol>
+      <li><a href="#allapps">すべてのアプリ</a></li>
+      <li><a href="#account-details">アカウントの詳細</a></li>
+      <li><a href="#merchant-account">マーチャント アカウントのリンク</a></li>
+      <li><a href="#multiple-user-accounts">複数のユーザー アカウント</a></li>
+      <li><a href="#alpha-beta">アルファ版テストとベータ版テスト</a></li>
+      <li><a href="#staged-rollouts">段階的ロールアウト</a></li>
+      <li><a href="#multiple-apk">複数 APK のサポート</a></li>
+      <li><a href="#selling-pricing-your-products">販売と価格設定</a></li>
+      <li><a href="#in-app-products">アプリ内製品</a></li>
+      <li><a href="#distribution-controls">配布コントロール</a></li>
+      <li><a href="#reviews-reports">ユーザーのレビューとクラッシュ レポート</a></li>
+      <li><a href="#app-stats">アプリのステータス</a></li>
+      <li><a href="#related-resources">関連リソース</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  <a href="https://play.google.com/apps/publish/">Google Play デベロッパー コンソール</a>は公開の操作やツールのホームとなります。
+</p>
+<!-- <img src="{@docRoot}images/gp-dc-startscreen.jpg" style="width:480px;" /> -->
+<img src="{@docRoot}images/gp-devconsole-home.png" style="width:480px;">
+<p>
+  ここでは、アプリのアップロード、製品ページの作成、価格と販売、配布地域の設定、公開を行います。Google Play 上にアプリを公開するまでのすべてのフェーズを 、任意の Web ブラウザからデベロッパー コンソールで管理できます。
+</p>
+
+<p>
+  <a href="{@docRoot}distribute/googleplay/start.html">登録</a>が完了し、メールで登録の確認を受け取ったら、Google Play デベロッパー コンソールにサインインできます。
+</p>
+
+<div class="headerLine">
+  <h2 id="allapps">
+    すべてのアプリ
+  </h2>
+
+
+</div>
+
+<p>
+  [すべてのアプリ] から開始します。ここでアプリの概要を確認できます。また、統計情報、レビュー、製品の詳細に移動したり、新しいアプリをアップロードしたりします。
+</p>
+
+<div style="padding:1em 0em 0em 0em;">
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine" style="margin-top:-6px">
+  <h2 id="account-details">
+    アカウントの詳細
+  </h2>
+
+
+</div>
+
+<p>
+  自分または会社に関する基本的なデベロッパー プロファイル情報をアカウント詳細ページで指定します。この情報で Google Play とお客様に自分を認識させます。いつでもこのページに戻り、情報を編集したり、設定を変更したりできます。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-profile.png" class="frame">
+</div>
+
+<p>
+  デベロッパー プロファイルには次の情報が含まれます。
+</p>
+
+<ul>
+  <li>
+    <p>
+      デベロッパー名 &mdash; ストアの情報掲載ページと Google Play のすべての場所に表示されます。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      連絡先情報 &mdash; Google でのみ使用されます。お客様には見えません。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Web サイトの URL &mdash; ストアの情報掲載ページに表示されます。
+    </p>
+  </li>
+</ul>
+
+<p>
+  また、アカウント詳細ページでは、マーケティング担当者や他のチームに対して制限付きアクセスを付加したり、マーチャント アカウントを登録したり、Google Play のライセンス付与用にテスト アカウントを設定したりできます。
+</p>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    マーチャント アカウントのリンク
+  </h2>
+
+
+</div>
+
+<p>
+  アプリ製品またはアプリ内製品を販売したい場合は、Google ウォレット Merchant アカウントをデベロッパー プロファイルにリンクさせます。Google Play は、このリンクされたアカウントを財務と税金の識別用、および売り上げからの月次の支払い用に使用します。
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-user-accounts">
+    複数のユーザー アカウント
+  </h2>
+
+
+</div>
+
+<p>
+  デベロッパー コンソールのさまざまな部分にアクセスするため、他のチーム メンバー用にユーザー アカウントを設定します。
+</p>
+
+<div style="width:550px;">
+  <img src="{@docRoot}images/gp-dc-invite.png" class="frame">
+</div>
+
+<p>
+  最初に登録されるアカウントは<em>アカウント所有者</em>で、コンソールのすべての部分に対してフル アクセス権を持ちます。この所有者は<em>ユーザー アカウント</em>を追加したり、コンソールのアクセス権を管理したりできます。
+</p>
+
+<p>
+  たとえば、所有者は公開やアプリの設定に対するアクセス権をユーザーに付与できますが、財務レポートに対するアクセス権は付与できません。今すぐ、<a href="https://support.google.com/googleplay/android-developer/answer/2528691">複数のアカウントの設定</a>方法を確認してください。
+</p>
+
+<div class="headerLine">
+  <h2 id="store-listing-details">
+    ストアの掲載情報の詳細
+  </h2>
+
+
+</div>
+
+<p>
+  デベロッパー コンソールを使用して<em>ストアの情報掲載ページ</em>を設定します。このページは Google Play 内のアプリのホームとなります。携帯電話や Web でユーザーに表示され、アプリの概要を確認したりアプリをダウンロードしたりします。
+</p>
+
+<p>
+  独自のブランド アセット、スクリーンショット、ビデオをアップロードして、アプリの特徴を強調します。最新バージョンに関するローカライズされた説明と注釈などを提供します。ストアの掲載情報はいつでも更新できます。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-details.png" class="frame">
+</div>
+
+<div class="headerLine">
+  <h2 id="upload-instantly-publish">
+    アップロードと即時公開
+  </h2>
+
+
+</div>
+
+<p>
+  デベロッパー コンソールから、リリース対応 Android アプリケーション パッケージ ファイルを素早くアップロードし、公開できます。アプリは、公開されるまで<em>ドラフト</em>の状態となります。公開された時点で、Google Play はストアの情報掲載ページとアプリをユーザーに対して利用可能にします。アプリは数週間ではなく数時間でストアの掲載情報に表示されます。
+</p>
+
+<p>
+  アプリの公開後は、随時更新が可能です。アプリのバイナリを更新せずに、価格、設定、配布オプションをいつでも更新できます。
+</p>
+
+<p>
+  機能を追加したり、コードに関する問題に対処したら、更新されたバイナリをいつでも公開できます。新規バージョンはほぼ即時に利用可能となり、既存のお客様に更新がダウンロードできるようになったことが通知されます。ユーザーはアプリに対する自動アップデートも承認できます。これでアップデートは公開後すぐに配信されインストールされます。アプリの公開はいつでも取り消すことができます。
+</p>
+
+<div class="headerLine">
+  <h2 id="alpha-beta">
+    アルファ版テストとベータ版テスト
+  </h2>
+
+
+</div>
+
+<p>
+  特にローンチ前などは、ユーザーからの実際のフィードバックを入手することが常に重要です。Google Play では、アプリのリリース前のバージョンを世界中のアルファ版テスト グループとベータ版テスト グループに簡単に配布できます。
+</p>
+
+<p>
+  Google Play のデベロッパー コンソールの <strong>[APK]</strong> セクションには、<strong>[アルファ版テスト] </strong>タブと<strong> [ベータ版テスト] </strong>タブがあります。ここでアプリの APK ファイルの各バージョンをアップロードしたり、テスターのリストを <a href="https://support.google.com/groups/answer/46601">Google グループ</a>または <a href="https://support.google.com/plus/topic/2888488">Google+ コミュニティ</a>として定義したりできます。これが行われると、テスターに転送する URL を受け取ります。テスターはこの URL からテスト プログラムにオプトインできます。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-ab.png" class="frame">
+</div>
+
+<p>
+  テスターは、オプトイン後に、アプリの製品ページにアクセスします。テスターがアプリをダウンロードすると、Google Play は適宜アルファ版またはベータ版をテスターに配信します。ユーザーが両方のテスト グループにオプトインした場合は、Google Play は常にこのようなユーザーにアルファ テスト バージョンを配信します。
+</p>
+
+<p>
+  ユーザーはフィードバックやレビューをアプリのアルファ版とベータ版に提供できないことに注意してください。フィードバックを収集する場合、<a href="https://support.google.com/groups/answer/46601">Google グループ</a>または<a href="https://support.google.com/plus/topic/2888488"> Google+ コミュニティ</a>を使用するか、メール アドレスや独自の Web サイトを設定できます。
+</p>
+
+<p>
+  これらのテスト プログラムは、<a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリの最適化</a>、<a href="{@docRoot}distribute/users/expand-to-new-markets.html">新しいマーケットへのロールアウト</a>、<a href="{@docRoot}distribute/users/build-community.html">コミュニティの作成</a>の開始に使用できます。<a href="{@docRoot}distribute/tools/launch-checklist.html">ローンチ チェックリスト</a>や<a href="{@docRoot}distribute/tools/localization-checklist.html">ローカライズのチェックリスト</a>でも、ベータ版テストを使用する方法についての詳細情報が掲載されています。
+</p>
+
+<div class="headerLine">
+  <h2 id="staged-rollouts">
+    段階的ロールアウト
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play のデベロッパー コンソールの APK セクションにある [製品版] タブを使用して、アプリのロールアウトを段階的に分けることもできます。ここでは、アプリをダウンロードできるユーザーの割合を定義できます。
+</p>
+
+<p>
+  ロールアウトを段階的に分けると、予想外のバグやサーバー負荷の影響を限定的にして、無作為のユーザーのサンプルでユーザーのフィードバックを評価できるようになります。ユーザーは段階的なロールアウト中にアプリの評価とレビューができるため、慎重を期す場合は、少数ユーザーに対してロールアウトを開始します。否定的なレビューがないか観察し、あった場合はそれに応答するようにしてください。
+</p>
+
+<p>
+  Android プラットフォームの<a href="{@docRoot}tools/publishing/versioning.html">アプリのバージョニング要件</a>のため、ロールバックはサポート対象外であることに注意してください。ロールバックを必要とする場合、前の APK を新しいバージョン番号でローンチすることを検討してください。ただし、ユーザーは新しい機能を使用できなくなり、古いアプリはサーバーの変更やデータ フォーマットと前方互換性がない可能性があるため、これは最終手段としてのみ使用するようにしてください。したがって、アップデートの<a href="#alpha-beta">アルファ版テストとベータ版テスト</a>を必ず実行してください。
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-apk">
+    複数 APK のサポート
+  </h2>
+
+
+</div>
+
+<p>
+  通常は 1 つのアプリ パッケージ(APK)があれば十分で、通常はこれがアプリの管理と維持を最も容易に行う方法です。ただし、異なる APK を別のデバイスに配布する必要がある場合は、Google Play からその方法が提供されます。
+</p>
+
+<p>
+  <em>複数 APK のサポート</em>を利用すると、パッケージ名は同じで OpenGL テクスチャ圧縮フォーマット、画面サイズ サポート、またはサポート対象の Android プラットフォーム バージョンが異なる複数のアプリ パッケージを作成できます。1 つの製品リストの下に、すべての APK をアップロードするだけです。Google Play はデバイスの特性に基づき、ユーザーに配布する最適な APK を選択します。
+</p>
+
+<p>
+  <em>APK 拡張ファイル</em> オプションを使用すると、公開済みの個々の APK (複数の APK を含む)に対して、最大 2 つの 2 次ダウンロードをアップロードできます。各拡張ファイルのサイズは最大 2GB で、任意のタイプのコードやアセットを含めることができます。Google Play はこれらを無料でホスティングし、通常のアプリのインストールの一部として、ファイルのダウンロードを処理します。
+</p>
+
+<div class="headerLine">
+  <h2 id="selling-pricing-your-products">
+    製品の販売と価格設定
+  </h2>
+
+
+</div>
+
+<div class="figure-right">
+  <img src="{@docRoot}images/gp-buyer-currency.png" class="frame">
+</div>
+
+<p>
+  アプリ製品とアプリ内製品の価格を設定するツールが用意されています。アプリは無料でダウンロードできるものと、ダウンロードの前に支払いが必要なものがあります。
+</p>
+
+<ul>
+  <li>無料アプリとして公開する場合は、<strong>アプリの存続期間中は無料</strong>でなければなりません。無料アプリは Google Play ですべてのユーザーがダウンロードできます。
+  </li>
+
+  <li>有料アプリとして公開しても、後で無料アプリに変えることができます。有料アプリは Google Play で支払い方法を登録しているユーザーのみが購入/ダウンロードできます。
+  </li>
+</ul>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <p>
+      アプリを配布または販売できる国のリストについては、<a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294&amp;topic=2365624&amp;ctx=topic">アプリケーションの配布がサポートされている国や地域</a>を参照してください。
+    </p>
+  </div>
+</div>
+
+<p>
+  アプリが無料か有料かによらず、アプリ内製品とサブスクリプションを提供することもできます。有料アプリ、アプリ内製品、サブスクリプションに対して個別に価格を設定します。
+</p>
+
+<p>
+  ユーザーがアプリの製品ページをブラウジングしたり購入を開始したりすると、Google Play は課金される現地通貨での価格をユーザーに提示します。
+</p>
+
+<p>
+  各製品について、最初に自分の通貨で既定の価格を設定します。これ以上設定しない場合は、Google Play はアプリの米ドル価格を基準に月に 1 回現地価格を自動的に設定します。
+</p>
+
+<p>
+  一方、各国における製品の価格設定を完全に管理できます。初めに、<strong>自動換算</strong>機能を使用すると、既定価格から固定の現地価格を手動で設定できます。次に、これらの価格を確認して、任意の国に対して価格を新たに設定できます。各国の価格は独立しているため、価格は個別に調整できます。他の国の価格に影響を及ぼすことはありません。多くの国では、設定した価格が税込みの最終価格としてユーザーに課金されます。
+</p>
+
+<p>
+  アプリの価格設定の詳細については<a href="{@docRoot}distribute/users/expand-to-new-markets.html#localize-your-google-play-listing">Expand into New Markets(新たなマーケットの拡大)</a>を参照してください。
+</p>
+
+<div class="headerLine">
+  <h2 id="in-app-products">
+    アプリ内製品
+  </h2>
+
+
+</div>
+
+<p>
+  アプリの収益を強化する方法として <a href="{@docRoot}google/play/billing/index.html">Google Play のアプリ内課金</a>を使用して、アプリ内製品とサブスクリプションを販売できます。アプリ内製品は一度限り販売できるもので、サブスクリプションは月単位または年単位で課金を繰り返すものです。
+</p>
+
+<p>
+  特定の公開済み APK またはドラフト APK について、<strong>[アプリ内製品]</strong> セクションから次の操作を行います。
+</p>
+
+<ul>
+  <li>アプリ内製品とサブスクリプションの製品リストを作成します。
+  </li>
+
+  <li>価格を設定します。
+  </li>
+
+  <li>これらの製品をアプリとともに公開するか、旧版の製品を撤収します。
+  </li>
+</ul>
+
+<p>
+  アプリ内課金を実装する方法について詳しくは、デベロッパー向けドキュメントの<a href="{@docRoot}google/play/billing/index.html">アプリ内課金</a>を参照してください。<a href="{@docRoot}distribute/monetize/premium.html">プレミアム</a>、<a href="{@docRoot}distribute/monetize/freemium.html">フリーミアム</a>、<a href="{@docRoot}distribute/monetize/subscriptions.html">サブスクリプション</a>の各収益化モデルでアプリ内製品を利用します。
+</p>
+
+<div class="headerLine">
+  <h2 id="distribution-controls">
+    配布コントロール
+  </h2>
+
+
+</div>
+
+<p>
+  アプリの配布先となる国と地域を管理します。一部の国では、ターゲットにするキャリアを選択できます。マニフェスト ファイルで宣言されている配布ルールに基づき、アプリを使用できるデバイス一覧も確認できます。
+</p>
+
+<h3 id="geotargeting">
+  地理的なターゲット
+</h3>
+
+<p>
+  Google Play デベロッパー コンソールのコントロールを使用すると、アプリケーション バイナリに変更を加えずにアプリの配布を地理的に容易に管理できます。アプリの配布先となる国と地域を指定できます。一部の国ではキャリアも指定できます。
+</p>
+
+<p>
+  ユーザーがストアにアクセスすると、Google Play はユーザーがアプリをダウンロードする前に、ユーザーがターゲットの国のいずれかにいるかどうか確認します。Google Play デベロッパー コンソールに変更内容を保存するだけで、ターゲットにする国とキャリアをいつでも変更できます。
+</p>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-supported-dev-requirements.png" class="frame">
+</div>
+
+<p>
+  世界中のユーザーにアプリを販売するため、アプリの詳細、説明、プロモーション画像、スクリーンショットなどのストアの掲載情報を<a href="{@docRoot}distribute/tools/launch-checklist.html#start-localization">ローカライズ</a>できます。
+</p>
+
+<h3 id="captargeting">
+  ターゲットにする機能
+</h3>
+
+<p>
+  Google Play では、アプリが依存するデバイス機能に応じて配布を管理することも可能です。ハードウェア機能、OpenGL テクスチャ圧縮フォーマット、ライブラリ、Android プラットフォームのバージョンなど、アプリがマニフェストに定義できる複数のタイプの依存関係があります。
+</p>
+
+<p>
+  アプリをアップロードすると、Google Play は依存関係を読み取り、必要な配布ルールを設定します。依存関係の宣言に関する技術情報については、<a href="{@docRoot}google/play/filters.html">Google Play 上のフィルタ</a>を参照してください。
+</p>
+
+<p>
+  配布全体を正確に管理するために、Google Play ではアプリの依存関係(存在する場合)に基づいて、アプリを利用できるすべてのデバイスを確認できます。Google Play デベロッパー コンソールから、サポート対象デバイス一覧を表示できます。必要に応じて特定のデバイスを除外することもできます。
+</p>
+
+<div class="headerLine">
+  <h2 id="reviews-reports">
+    ユーザーのレビューとクラッシュ レポート
+  </h2>
+
+
+</div>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-dc-reviews.png" class="frame">
+  <p class="img-caption">
+    [ユーザーのレビュー] セクションから特定のアプリのユーザーのレビューにアクセスできます。レビューを多くの方法でフィルタリングして、問題をより簡単に特定し、利用者のサポートを効率的に行えます。
+  </p>
+</div>
+
+<p>
+  Google Play では、他のユーザーに役立つように、ユーザーによるアプリのレビューの送信が簡単にできるようになっています。このレビューにより、ユーザビリティに関するフィードバック、サポートの依頼、機能に関する重要な問題の詳細がアプリの利用者から直接届けられます。
+</p>
+
+<p>
+  アプリのデバッグと改善にはクラッシュ レポートを使用します。Android デバイスから自動的に送信されるスタック トレースやその他のデータが含まれたクラッシュ レポートを確認できます。
+</p>
+
+<div class="headerLine">
+  <h2 id="app-stats">
+    アプリの統計情報
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:500px">
+  <img src="{@docRoot}images/gp-dc-stats.png">
+  <p class="img-caption">
+    <b>アプリの統計情報ページ</b>:特定のアプリのインストール パフォーマンスに関するさまざまな統計情報を提供します。
+  </p>
+</div>
+
+<p>
+  アプリのインストール パフォーマンスに関して詳細な統計情報が表示されます。
+</p>
+
+<p>
+  ユーザーごと、デバイスごとに測定されたインストールのメトリックを参照します。アクティブなインストール数、インストール合計数、アップグレード数、日次インストール数とアンインストール数、評価に関するメトリックが表示されます。
+</p>
+
+<p>
+  Android プラットフォームのバージョン、デバイス、国、言語、アプリのバージョン、キャリアなどのメトリック別に、インストール数をクローズアップします。タイムライン グラフで、さまざまな局面のインストール データが表示されます。
+</p>
+
+<p>
+  これらのグラフでは、アプリのインストールのピークと長期の傾向が明らかになります。これらのグラフにより、ユーザーの選定動向の把握、統計情報のプロモーションとの関連付け、アプリの改善やその他の要因の効果の確認が可能になります。特定のポイントをタイムラインに追加すると、ある局面の内部のデータを詳細に確認できます。
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="dynamic-grid">
+<div class="headerLine">
+<h2 id="related-resources">関連リソース</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/developerconsole"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+  </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/families/about.jd b/docs/html-intl/intl/ja/distribute/googleplay/families/about.jd
new file mode 100644
index 0000000..53258de
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/families/about.jd
@@ -0,0 +1,39 @@
+page.title=Designed for Families
+page.metaDescription=Designed for Families を利用すると、ファミリー層がアプリとゲームを発見しやすくなります。
+page.image=distribute/images/about-dff-sm.jpg
+meta.tags="families, googleplay, distribution"
+page.tags="families"
+
+@jd:body
+
+<p>
+  Google Play 上のファミリー層に重点を置いた新たなエクスペリエンスにより、ファミリー向けの高品質アプリとゲームのブラウジング、検索、発見を容易に行うことができる新しい方法を今後数週間でユーザーにお届けします。
+</p>
+
+<p>
+  ファミリー層が使いやすいストアをサポートするため、デベロッパーはこの新しい Designed for Families プログラムに、ファミリー層に重点を置いたアプリとゲームをオプトインするように招待されます。<a href="https://support.google.com/googleplay/android-developer/answer/6184502">プログラムの要件</a>を満たすアプリは新しいファミリー エクスペリエンスに表示され、親たちは、適切で信頼性の高い高品質なアプリとゲームをより容易に見つけ出すことができるようになります。
+</p>
+
+<img src="{@docRoot}distribute/images/about-dff-sm.jpg">
+
+<p>
+  現在使用しているツールとプロセスを使用してアプリとゲームをすぐにオプトインし、アプリをデベロッパー コンソールで管理します。このプログラムに含まれるアプリは発見されやすくなるメリットを享受する一方で、既存のカテゴリ、ランキング、レビューは Google Play ストアの別の場所で維持されます。
+</p>
+
+<h2 id="elibibility">利用資格について</h2>
+
+<p>
+  Google Play 上のファミリー向けのエクスペリエンスに含まれるアプリは、年齢にふさわしいアプリを期待する親や家族がより発見しやすいものになっています。Designed for Families プログラムは子供向けに作成されたアプリと、家族全員で楽しめるアプリが含まれるように策定されています。このようなユーザーに対処するため、アプリが適合する必要のある詳細なガイドラインとポリシーが用意されています。これらはアプリのコンテンツ審査で評価されます。
+</p>
+
+<p>
+  アプリが準拠する必要のあるポリシーについて十分な認識が必要です。このポリシーには<a href="http://play.google.com/about/developer-content-policy.html">コンテンツ ポリシー</a>、<a href="http://play.google.com/about/developer-distribution-agreement.html">デベロッパー配布契約</a>、<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families デベロッパー販売 / 配布契約の補足条項</a>が含まれます。
+</p>
+
+<p>
+  また、Google Play デベロッパー ヘルプ センターに含まれる <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families プログラムの要件</a>にも適合している必要があります。
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">次のトピック:オプトイン</a>
+</div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/ja/distribute/googleplay/families/faq.jd
new file mode 100644
index 0000000..206429c
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/families/faq.jd
@@ -0,0 +1,233 @@
+page.title=よくある質問
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=Designed for Families に関する質問と回答
+
+@jd:body
+
+<style>
+  dt {
+    font-weight:bold;
+  }
+  </style>
+  
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>本書の内容</h2>
+<ol>
+  <li><a href="#review">アプリのレビューとオプトイン</a></li>
+  <li><a href="#monetization">収益化</a></li>
+  <li><a href="#other">その他の質問</a></li>
+</ol>
+</div>
+
+<p>
+  以下のセクションで、Designed for Families に関して詳しく説明し、よくあるご質問に回答します。
+</p>
+
+
+<h2 id="review">アプリのレビューとオプトイン</h2>
+
+<dl>
+<dt>アプリのオプトイン方法を教えてください。</dt>
+
+<dl>
+  <dd>
+    Google Play デベロッパー コンソールの [価格と販売 / 配布地域] タブで、Designed for Families にオプトインできます。<a href="{@docRoot}distribute/googleplay/families/start.html">ステップごとの説明</a>を参照してください。
+  </dd>
+
+  <dt>
+    自分のアプリのインタラクティブ機能をどこで開示しますか。この情報を収集する理由を教えてください。
+  </dt>
+
+  <dd>
+    インタラクティブ機能の開示は、コンテンツのレーティングに関するアンケートの一環として行います。開示内容の確認は、Designed for Families プログラムのオプトイン フローの一環として行うことができます。この情報を収集することで、ユーザーがアプリを評価する際にこの情報に基づく選択ができるようになります。
+  </dd>
+
+  <dt>
+    COPPA について教えてください。
+  </dt>
+
+  <dd>
+    COPPA とは、連邦取引委員会(FTC)の児童オンライン プライバシー保護法です。詳細については<a href="http://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions">COPPA に関する FTC のよくある質問</a>を参照してください。COPPA または児童に関するその他の法律への準拠方法について、Google Play はデベロッパーに法律上のガイダンスを提供できないことに注意してください。
+  </dd>
+
+  <dt>
+    最新のプライバシー ポリシーを提供する必要はありますか?また、それはどこで行うことができますか?
+  </dt>
+
+  <dd>
+    はい、アプリのストアの掲載情報に永続的プライバシー ポリシーへのリンクを提供し、地域のプライバシーに関する法律や規制に準拠していることをデベロッパー コンソールで表明する必要があります。プライバシー ポリシーを追加または確認するには、デベロッパー コンソールでアプリを選択し、次に <strong>[ストアの掲載情報]</strong> セクションの一番下までスクロールします。
+  </dd>
+
+  <dt>
+    選択できる年齢層を教えてください。
+  </dt>
+
+  <dd>
+    連続する年齢層を最大 2 つ選択できます。年齢層は、5 歳以下、6 歳から 8 歳、9 歳から 12 歳です。ただし、アプリが児童とさらに年齢層の高いユーザーで構成される利用者をターゲットとしている場合、<em>一般向け</em>カテゴリを選択する必要があります。
+  </dd>
+
+  <dt>
+    Designed for Families プログラムで選択できるコンテンツ カテゴリの数を教えてください。
+  </dt>
+
+  <dd>
+    Designed for Families プログラムの一部として 1 つのカテゴリを選択できます。また、一般的な Google Play ストア向けに別のカテゴリを選択できます。
+  </dd>
+
+  <dt>
+    Designed for Families のカテゴリについて教えてください。
+  </dt>
+
+<ul>
+<li><strong>アクション &amp; アドベンチャー</strong>: アクション指向のアプリ/ゲームで、レーシング ゲーム、おとぎ話アドベンチャーなどの分野のものがすべて含まれます。
+  </li>
+
+  <li style="list-style: none"><strong>頭脳ゲーム</strong>: このカテゴリには、ユーザーに考えさせるゲームと、パズル、マッチング ゲーム、これらと同等のゲームが含まれます。
+  </li>
+
+  <li><strong>クリエイティブ</strong>: 創造力を刺激するアプリ/ゲームです。このカテゴリに含まれるアプリ/ゲームの種類には、お絵かきゲーム、塗り絵、その他の何かを作るゲームなどがあります。
+  </li>
+
+  <li><strong>教育</strong>: 教育的価値を持ち、数学、科学、アルファベットの学習、数の学習、地理や歴史などの数多くの教育的コンテンツを含むアプリ/ゲームです。
+  </li>
+
+  <li><strong>音楽と動画</strong>: 音楽的要素や動画コンポーネントを含み、ピアノの演奏やビデオの視聴などの機能を含むアプリ/ゲームです。
+  </li>
+
+  <li><strong>ごっこ遊び</strong>: ユーザーがコックや医者などに扮し、役を演じることのできるアプリ/ゲームです。
+  </li>
+</ul>
+
+<dl>
+  <dt>
+    Designed for Families プログラムにオプトインした場合、アプリが公開されるまで時間がかかりますか?
+  </dt>
+
+  <dd>
+    Designed for Families プログラムにオプトインすると、Google Play はアプリを審査し、ファミリー層に適切かどうか確認します。アプリがすべてのプログラム要件に準拠している場合、公開までの時間は通常よりも長くかかることはないはずです。ただし、Designed for Families 審査で却下された場合、アプリの公開が遅れる可能性があります。 
+  </dd>
+
+  <dt>
+    アプリが Designed for Families プログラムで却下された場合、どのようなことが起きるか教えてください。
+  </dt>
+
+  <dd>
+    アプリが Designed for Families プログラムで却下されると、デベロッパー コンソールと詳細なメールでその理由が示されます。問題を修正し、アプリをプログラムに再度提出するか、オプトインの対応を変更することができます。Google Play で有効な既存のアプリがある場合、アプリのアップデートだけが拒否されます(アプリは Play ストアにそのまま残ります)。要件に適合しないアプリを新たに Designed for Families プログラムに提出すると、アプリの提出全体が却下され、Play ストアには公開されません。特定された問題に対処して Designed for Families プログラムにアプリを再提出したり、プログラムからオプトアウトしたりできます。
+  </dd>
+
+  <dt>
+    アプリが公開されてから Designed for Families プログラムの要件に準拠しないことがわかった場合、どのようなことが起きるか教えてください。
+  </dt>
+
+  <dd>
+    アプリは Designed for Families プログラムだけでなく、Google Play ストアから削除されるか、保留となる可能性があります。削除されたアプリには却下されたアプリと同じ処置を適用できます。保留されたアプリはデベロッパーの異議申し立てプロセスを使用して申し立てができます。
+  </dd>
+
+  <dt>
+    Designed for Families プログラムにオプトインした場合、後からオプトアウトすることはできますか?
+  </dt>
+
+  <dd>
+    はい、プログラムからいつでもオプトアウトすることができます。ただし、プログラムからオプトアウトすると、プログラムの他のメリットと共に、ファミリー層が使いやすい新たなエクスペリエンスを提供する場所を失うことになります。
+  </dd>
+
+  <dt>
+    プログラムでアプリが承認されてからアプリをアップデートすると、どのようなことが起きるか教えてください。
+  </dt>
+
+  <dd>
+    Designed for Families プログラムの一部であるアプリは常に資格条件に準拠している必要があります。アプリに関連付けられている Designed for Families メタデータを編集する必要がある場合は、Google Play デベロッパー コンソールの [価格と販売 / 配布地域] セクションに進んでこの情報を編集してください。アプリのアップデートでアプリの対象ユーザーが変わる場合、アプリを既にインストールしているユーザーに警告することをお勧めします。
+  </dd>
+
+  <dt>
+    Google のサインインまたは Google Play ゲーム サービスを使用するアプリとゲームは Designed for Families プログラムにオプトインできますか?
+  </dt>
+
+  <dd>
+    Designed for Families プログラムにオプトインしていて、完全に児童主体、つまり5 歳以下、6 歳から 8 歳、または 9 歳から 12 歳の年齢層をターゲットにしているアプリは、アプリのログイン エクスペリエンスとして Google+ サインインや  Google Play ゲーム サービスを使用<strong>できないことがあります。</strong> <p>
+      Designed for Families プログラムに参加していて、児童とさらに上の年齢層の両方をターゲットにしているアプリは、<strong>任意選択</strong>機能として Google+ サインインや Google Play ゲーム サービスを使用できます。児童ユーザーは Google+ サインインや Google Play ゲーム サービスにサインインしなくても、アプリまたはゲーム全体にアクセスできるようにする必要があります。
+    </p>
+  </dd>
+
+  <dt>
+    アプリが Google Play for Education にオプトインしていてGoogle サインインの統合を備えている場合、学生は学校のアカウントでログインできます。アプリで Google サインインの動作を変更する必要はありますか?
+   </dt>
+
+  <dd>
+    Google Play for Education に参加しているアプリは、Google サインインがアプリのすべてのユーザーに対するブロック要件でない限り、学生アカウントの Google サインインを使用してかまいません。
+  </dd>
+</dl>
+
+<h2 id="monetization">
+  Designed for Families プログラムの収益化
+</h2>
+
+<dl>
+  <dt>
+    Designed for Families の広告ポリシーについて、詳細を教えてください。
+  </dt>
+
+  <dd>
+    <a href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">Designed for Families の広告ポリシー</a>をお読みください。
+  </dd>
+
+  <dt>
+    アプリにインタースティシャル広告を表示することはできますか?
+  </dt>
+
+  <dd>
+    一部のアプリには、インタースティシャル広告が適している場合があります。ただし、ユーザーは広告が提示される前にメイン機能にナビゲートできる必要があります。
+  </dd>
+
+  <dt>
+    広告ネットワークが Designed for Families の広告ポリシーに準拠していることをどのようにして認識できるか教えてください。
+  </dt>
+
+  <dd>
+    広告ネットワークに連絡して、コンテンツ ポリシーと広告業務に関して問い合わせてください。AdMob を使用している場合、<a href="https://support.google.com/admob/answer/3248194">AdMob ヘルプ センター</a>を参照して、子供向けに対応するためにアプリまたは特定の広告単位をタグ付けする方法を確認してください。アプリ内広告付きのユーザー エクスペリエンス全体が<a href="https://support.google.com/googleplay/android-developer/answer/6184502"> Designed for Families プログラムの要件</a>に適合しているか、デベロッパーが責任を持って調査する必要があります。
+  </dd>
+
+  <dt>
+    アプリでアプリ内課金が可能ですか?
+  </dt>
+
+  <dd>
+    <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA</a> と他の適用可能な法律上の要件への準拠以外に、Designed for Families プログラムに参加しているアプリで、アプリ内課金(IAP)に関連する特有の制限はありません。ただし、Play は過度に強引な商業戦術に対してアプリを却下する権限を留保します。Google Play は、主に児童をターゲットにしている Designed for Families プログラムに参加しているすべてのアプリに IAP のパスワード保護を適用し、児童ではなく親が課金を承認するようにします。この対応は一般ユーザーをターゲットにしているアプリまで拡大されないことに注意してください。
+  </dd>
+</dl>
+
+<h2 id="other">
+  その他の質問
+</h2>
+
+<dl>
+  <dt>
+    Designed for Families アプリに参加するターゲット ユーザーとして想定されるのはどの層ですか?
+  </dt>
+
+  <dd>
+    親や保護者に Google Play ストア上の優れたエクスペリエンスを提供し、信頼性の高いブランドとデベロッパーが子供と家族向けに設計した素晴らしいアプリを発見できるようにすることを目標にしています。
+  </dd>
+
+  <dt>
+    Designed for Families プログラムは特定の国のデベロッパーだけが利用できるのでしょうか?
+  </dt>
+
+  <dd>
+    Designed for Families はグローバル プログラムです。
+  </dd>
+
+  <dt>
+    現在のファミリー向けゲームのカテゴリに公開されているアプリにどのようなことが起きますか?
+  </dt>
+
+  <dd>
+    現在のファミリー向けゲームのカテゴリは 2015 年 5 月に利用できなくなる予定です。現在ファミリー向けゲームのカテゴリに含まれているアプリは Play ストアの別のカテゴリを選択する必要があります。別のカテゴリを選択しないアプリはカジュアル ゲームのカテゴリに割り当てられます。
+  </dd>
+</dl>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="https://docs.google.com/forms/d/1EtvUWqlkxS6RxHJjeI-3-7uzdbIZx6n9Cocy2D369B8/viewform" class="next-class-link">次のトピック:連絡用フォーム</a>
+</div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/families/start.jd b/docs/html-intl/intl/ja/distribute/googleplay/families/start.jd
new file mode 100644
index 0000000..e8e9ee5
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/families/start.jd
@@ -0,0 +1,70 @@
+page.title=Designed for Families へのオプトイン
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=ほんの数ステップで Designed for Families に参加できます。
+
+@jd:body
+
+<p>
+  子供や家族向けに設計されたアプリを作成する場合は、以下の操作を完了しておくだけで、<em></em>Designed for Families プログラムへのオプトインの準備が整います。
+</p>
+
+<ul>
+  <li>アプリのコンテンツ レーティングに関するアンケートに記入し、ESRB の Everyone、Everyone 10+ のレーティングに適合させる
+  </li>
+
+  <li>アプリの<strong> [ストアの掲載情報] </strong>ページにプライバシー ポリシーのリンクを追加する
+  </li>
+
+  <li>アプリをすべての <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families プログラムの要件</a>に適合させる
+  </li>
+</ul>
+
+<p>
+  これでアプリを公開する準備が整いました。<a href="https://play.google.com/apps/publish/">デベロッパー コンソール</a>から直接 Designed for Families にオプトインできます。オプトインは、Google Play ストアで選択したカテゴリだけではなく、Google Play 上の新しいファミリー層向けエクスペリエンスでアプリを利用できるようにすることを意味します。
+</p>
+
+<p>
+  オプトインでは、アプリが <a href="http://play.google.com/about/developer-content-policy.html">Google Play デベロッパー プログラム ポリシー</a>と、<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families デベロッパー販売/配布契約の補足条項</a>を含む<a href="http://play.google.com/about/developer-distribution-agreement.html">デベロッパー販売/配布契約</a>に準拠していることも確認されます。こうしたポリシー関連の文書や補足条項を十分理解していない場合は、オプトインの前にそれらの文書をお読みください。
+</p>
+
+<p>
+  準備が完了したら、次の手順を実行して特定のアプリに対する Designed for Families へのオプトインを実行します。
+</p>
+
+<ol>
+<li>デベロッパー コンソールの<strong> [すべてのアプリ]</strong> ページでオプトインするアプリをクリックします。[価格と販売/配布地域] で<strong> [Designed for Families] と</strong>オプトイン チェックボックスまでスクロール ダウンします。<img src="/images/gp-dff-optin.png" style="border:2px solid #ddd;margin:1em 0;">
+  </li>
+
+  <li>オプトイン フローを開始し、アプリが利用資格の要件に適合していることを確認します。</li>
+  <li>アプリに広告が含まれている場合、広告ポリシーに適合していることを確認します。<img src="/images/gp-dff-appinfo.png" style="border:2px solid #ddd;margin:1em 0;"></li>
+  <li>対象年齢を5 歳以下、6 歳から 8 歳、9 歳から 12 歳、一般向け(子供とそれより上の年齢層)から選択します。アプリが複数の年齢層のグループを対象にしている場合、連続する 2 つの年齢層のグループを選択できます。ESRB 10+ レーティング付きのアプリは、対象に 9 歳から 12 歳または一般向けしか選択できません。
+  </li>
+
+  <li>Google Play での新たなファミリー向けエクスペリエンスのアプリに対するカテゴリを選択します。アプリは Google Play の既存のカテゴリからも見つけることができます。</li>
+  <li>リンク先のドキュメントを確認して同意し、<strong>[オプトイン]</strong> をクリックします。[価格と販売/配布地域] ページで<strong> [アップデートを送信] </strong>をクリックして、アプリを公開またはアップデートします。
+  </li>
+</ol>
+
+<p>
+  アプリをオプトインすると、Designed for Families プログラムに受諾される前に全体が審査にかけられます。
+</p>
+
+<p class="note">
+  <strong>注:</strong> Designed for Families プログラムで公開されたアプリは Google Play ですべてのユーザーも利用できます。 
+</p>
+
+<p>
+  初めて公開するアプリをオプトインする場合で、そのアプリが Designed for Families プログラムの要件に適合していない場合は、プログラムの要件に適合するようにアプリをアップデートするか、<strong>または</strong><strong></strong>オプトイン チェックボックスの選択を解除して Google Play の標準審査プロセスに合格するまで、Google Play で利用できません。
+</p>
+
+<p>
+  Google Play で既に公開されているアプリをオプトインし、そのアプリがプログラムの要件に適合していない場合は、すべてのユーザーが利用できますが、プログラムの要件に適合するようにアプリをアップデートするまでは新たなファミリー向けエクスペリエンスには追加されません。
+</p>
+
+<p>
+  Designed for Families にオプトインしているアプリに対するアップデートを公開した場合、アプリのアップデートが Designed for Families の審査に合格しないと、Google Play のすべてのユーザーはこのアップデートを利用できません。</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">次のトピック:よくある質問</a>
+</div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/guide.jd b/docs/html-intl/intl/ja/distribute/googleplay/guide.jd
new file mode 100644
index 0000000..137c63f
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/guide.jd
@@ -0,0 +1,57 @@
+page.title=Google Play で成功を手にする
+page.metaDescription=Google Play でアプリまたはゲームのビジネスを成功に導くためのガイド。
+meta.tags="distribute", "bestpractices"
+page.tags="google play", "business", "monetize", "engagement"
+page.image=distribute/images/play_dev_guide.png
+
+@jd:body
+
+<p>
+  Google Play でアプリまたはゲームのビジネスを成功に導くためのガイドをダウンロードできます。このガイドに記載されている機能、ヒント、ベスト プラクティスを効率的な戦略の策定に役立ててください。
+</p>
+
+<p>
+  ガイドは次のセクションに分かれています。
+</p>
+<ul>
+  <li>
+    <strong>Google Play での公開</strong> &mdash; Google Play デベロッパー コンソールを使用して世界中の 10 億人の Android ユーザーにアプリを配布します。
+  </li>
+
+  <li>
+    <strong>高品質を実現する</strong> &mdash; 優れたアプリを作成するための基本について説明し、Google Play のガイドラインとポリシーの詳細を説明します。
+  </li>
+
+  <li>
+    <strong>見つけやすくしてアクセスを増やす</strong> &mdash; アプリをできるだけ見つけやすくして、可能な限り多くのユーザーがアクセスできるようにします。
+  </li>
+
+  <li>
+    <strong>エンゲージメントと保持率を高める</strong> &mdash; インストールをアクティブ ユーザーに繋げて、ユーザーの保持率を高めます。
+  </li>
+
+  <li>
+    <strong>収益化を図る</strong> &mdash; 成長し続ける収益源を創出するための収益化戦略を提供します。
+  </li>
+
+  <li>
+    <strong>Google Analytics を使用した測定を利用する</strong> &mdash; ユーザーを把握し、アプリのエクスペリエンス、コンバージョン、マーケティングを向上させます。
+  </li>
+
+  <li>
+    <strong>グローバル化を推進する</strong> &mdash; アプリを世界中のローカル マーケットに導入します。
+  </li>
+</ul>
+
+<p>
+  下の画像をクリックしてガイドをダウンロードできます。または<a href="http://goo.gl/DFjbrS">Google Play で入手</a>することもできます。
+</p>
+
+<p>
+  数ヶ月以内に各国語版のガイドをいくつかリリースする予定です。この Web サイトに、アプリの配布と収益化をサポートする新しい機能とベスト プラクティスに関する情報を随時投稿します。定期的にこのサイトをご確認ください。
+</p>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:play_dev_guide"
+    data-cardSizes="9x6"
+    data-maxResults="1">
+  </div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/auto.jd
new file mode 100644
index 0000000..eda7297
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/auto.jd
@@ -0,0 +1,434 @@
+page.title=Auto アプリの品質
+page.metaDescription=Auto アプリは車の入力コントロールおよびディスプレイと連携し、ドライバーの注意散漫をできるだけ少なくして優れたエクスペリエンスを実現します。
+page.image=/distribute/images/gp-auto-quality.png
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質基準</h2>
+  <ol>
+    <li><a href="#core">アプリの中核品質</a></li>
+    <li><a href="#ux">視覚デザインとインタラクション</a></li>
+    <li><a href="#fn">機能</a></li>
+    <li><a href="#faq">よくある質問</a></li>
+  </ol>
+
+  <h2>関連ドキュメント</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最適化する</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Android Auto UX のガイドライン オーディオ アプリケーション向け</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">Android Auto UX のガイドライン メッセージ アプリケーション向け</a></li>
+  </ol>
+</div>
+</div>
+
+
+  <img src="{@docRoot}distribute/images/gp-auto-quality.png" style="width:480px;">
+
+
+<p>アプリに Android Auto 向けのサポートを設計する場合、何よりもまずドライバーの注意散漫を防ぐようにしてください。Auto ユーザー インターフェイスと連携するアプリは、音声コマンドや非常にシンプルな視覚設計などのベスト プラクティスにより、ドライバーが遭遇する注意散漫を最小限に抑える必要があります。
+</p>
+
+<p>
+  優れた Auto エクスペリエンスは予測性が高く予測可能です。Android Auto をサポートするアプリは、情報がドライバーに関係する場合のみタイムリーに表示し、一般的なタスクに対してはシンプルで予測可能なパターンを使用する必要があります。
+</p>
+
+<p class="caution">
+  <strong>重要:</strong>このページにリストされた基準は、Android Auto 画面に接続されたデバイスで実行している場合のアプリのユーザー インターフェイスと動作に適用されます。アプリは、これらの基準の適合し、Google Play 上の Android Auto アプリとして適格である必要があります。
+</p>
+
+
+<div class="headerLine">
+  <h2 id="core">
+  アプリの中核品質
+  </h2>
+
+<p>
+ Auto アプリは、下記に示す Auto 独自の基準の他に、Android プラットフォームに関係するアプリの中核品質基準すべてに適合している必要があります。詳細については<a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質</a>基準を参照してください。これらの基準についてアプリをテストして、ナビゲーションと設計に関する Android 標準に適合しているかどうか確認します。次に Auto 独自の基準すべてについてアプリをテストします。Android Auto に接続しているデバイス上で実行する際には、アプリがこのページにリストされている要件に適合している必要があることを忘れないようにしてください。 <div class="headerLine">
+  <h2 id="ux">
+  視覚デザインとユーザー インタラクション
+  </h2>
+
+</div>
+
+<p>
+  これらの基準は Android Auto で一貫性が高く直観的、かつ楽しめるユーザー エクスペリエンスを確保するため、アプリが厳格なデザインとインタラクション パターンに従っていることを保証します。ナビゲーション ドロワー、カード バックグラウンド、フォント、アイコンの色などの多くの要素がシステムによって設定され、レンダリングされます。アプリ固有の設計要素は次の基準に適合している必要があります。
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    タイプ
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  <th>
+    説明
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="safety">
+    ドライバーの注意
+  </td>
+
+  <td id="AU-MV">
+    AU-MV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは、Auto 画面に動画グラフィック、ゲーム、ビデオ、進行バーなどの動画要素を表示しません。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VA">
+    AU-VA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは Auto 画面にあらゆるフォーマットの視覚広告またはテキスト広告を表示しません。音声広告のみ許可されます。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-IM">
+    AU-IM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリ要素は Auto 画面に画像を一切表示しません。例外として、アプリ使用画面の背景にアプリがアルバム アートなどのコンテンツのコンテキストに合わせた単一の固定画像を表示する場合があります。また、コンテンツのナビゲーション ドロワーにアイコンを表示する場合があります。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-DS">
+    AU-DS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリにはドライバーの注意をそらす機能は含まれていません。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VI">
+    AU-VI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリが Android Auto でアクティブになっている間は、電話画面にいかなるフォームの視覚情報(通知、トースト、ビデオ、画像、広告など)も表示しません。
+    </p>
+  </td>
+</tr>
+
+
+
+<tr>
+  <td rowspan="3" id="layout">
+    レイアウト
+  </td>
+
+  <td id="AU-SC">
+    AU-SC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは自動スクロール テキストを表示しません。
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td id="AU-FT">
+    AU-FT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは 2 とおりのサイズが認められているデフォルトの Roboto フォントを使用してすべてのストリングを表示します。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-ST">
+    AU-ST
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは 1 つのストリングにつき 120 文字までしか表示しません。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="contrast">
+    視覚コントラスト
+  </td>
+
+  <td id="AU-DM">
+    AU-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは濃い色のテキストをレンダリングし、薄い色の背景でコントロールする日中モードをサポートします。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NM">
+    AU-NM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは薄い色のテキストをレンダリングし、濃い色の背景でコントロールする夜間モードをサポートします。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-WI">
+    AU-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリはシステムが着色してコントラスト補正を自動的に行えるようにする白のアイコン セットを提供します。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-OC">
+    AU-OC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリはシステムが車内での読みやすさを最適化できる色を提供します。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="interaction">
+    インタラクション
+  </td>
+
+  <td id="AU-VC">
+    AU-VC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは音声コマンドをサポートする必要があります。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-AB">
+    AU-AB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリ固有のボタンは、最長 2 秒の遅延でユーザー アクションに応答します。
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  機能
+  </h2>
+
+
+</div>
+
+<p>
+  次の基準は、アプリが正しく設定されており、期待される機能動作が実現されていることを保証します。
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    タイプ
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  <th>
+    説明
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="general">
+   全般
+  </td>
+
+  <td id="AU-LT">
+    AU-LT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリは最長 10 秒でロードされます。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-FP">
+    AU-FP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Auto アプリの機能が予測どおりまたはアプリの Google Play ストア一覧に記載されているとおりに機能します。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-RL">
+    AU-RL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリがホーム画面から再起動される場合、アプリは前の状態にできるだけ近い状態で復元されます。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SS">
+    AU-SS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリのタスクはすべて 6 ステップ以内に完了します。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-GO">
+    AU-GO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     機能しない、または無効なアプリ ボタンはグレー表示されている必要があります。
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="media">
+    メディア
+  </td>
+
+
+  <td id="AU-PA">
+    AU-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリには 4 個以内の主要なアクションと 1 個のオプションのアクション オーバーフローの切り替えがあります(アクション オーバーフローが使用されない場合は主要アクションは 5 個以内)。(<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SA">
+    AU-SA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリには 4 個以内のオプションの 2 次アクションと 1 個のアクション オーバーフローの切り替えがあります。(<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="notifications">
+    通知
+  </td>
+
+  <td id="AU-NA">
+    AU-NA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは通知を使用して広告を表示しません。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NT">
+    AU-NT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     アプリはドライバーのニーズに関係した場合のみ通知を表示します。
+   </p>
+   <p>
+    例:<br /> 良い例:新しいメッセージが到着したことをユーザーに通知します。<br /> 悪い例:新しいアルバムのリリースについてユーザーに通知します。
+    </p>
+  </td>
+</tr>
+
+</table>
+
+<!--
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+-->
+
+<div class="headerLine">
+  <h2 id="faq">
+  よくある質問
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>アプリを提出した後で、Android Auto の要件を満たしていない部分がある場合はどのように知ることができますか?</strong>
+</p>
+<p>Auto 向けアプリの開発を計画している場合、すぐにアプリを有効にしてテストを開始することをお勧めします。ただし、この時点では Auto 対応アプリは公開できません。<a href="http://g.co/AndroidAutoDev" class="external-link">Auto Developers Google+ コミュニティ</a>に参加して、Auto 対応アプリをいつ提出できるようになるかについて、最新情報を確認してください。</p>
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>アプリのターゲットは Android Auto だけではありません。このアプリが Auto の要件に適合しない場合でも、新規アプリまたはアップデート版のアプリは電話/タブレット向けに Google Play に表示されますか?</strong>
+</p>
+<p>
+  いいえ。Google が承認プロセスを開始すると、Auto アプリはドライバーの安全に関する審査を受け、アプリが承認されるまで配布できません。これは電話/タブレット向けの APK と同じ APK であるため、これらのデバイスに関する Play ストアのアップデートは Auto 承認プロセスが完了するまで使用できません。
+</p>
+
+<p class="caution">
+  <strong>重要: </strong>この制限のため、Auto サポートのプロトタイプの作成に、実働 APK を使用してはなりません。
+</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..5229aa7
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/core.jd
@@ -0,0 +1,1014 @@
+page.title=アプリの中核品質
+page.metaDescription=アプリの品質は、インストール、ユーザーの評価とレビュー、使用頻度、ユーザーによる保持の観点から、アプリの長期間にわたる成功に直接反映します。
+page.image=/distribute/images/core-quality-guidelines.jpg
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質基準</h2>
+  <ol>
+    <li><a href="#ux">デザインとインタラクション</a></li>
+        <li><a href="#fn">機能</a></li>
+        <li><a href="#ps">パフォーマンスと安定度</a></li>
+        <li><a href="#listing">Google Play</a></li>
+
+  </ol>
+  
+  <h2>テスト</h2>
+  <ol>
+    <li><a href="#test-environment">テスト環境の設定</a></li>
+        <li><a href="#tests">テスト手順</a></li>
+        </ol>
+
+  <h2>関連ドキュメント</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">タブレットのアプリ品質</a></li>
+        <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最適化する</a></li>
+  </ol>
+  
+
+</div>
+</div>
+
+<div class="top-right-float">
+  <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;">
+</div>
+
+<p>
+  Android ユーザーは高品質アプリを期待しています。アプリの品質は、インストール、ユーザーの評価とレビュー、使用頻度、ユーザーによる保持の観点から、アプリの長期間にわたる成功に直接反映します。
+</p>
+
+<p>
+  このドキュメントは、簡潔にまとめられた一連のアプリの中核品質基準と関連するテストを介してアプリの品質の基本的側面を評価する際のガイドとなります。すべての Android アプリはこれらの基準に適合している必要があります。
+</p>
+
+<p>
+  アプリを公開する前に、この基準についてテストし、アプリが多くのデバイスで正しく機能し、ナビゲーションとデザインの Android 標準に適合し、Google Play ストアでのプロモーションの機会に向けた準備が整っていることを確認します。実際のテストはここに記載されている内容をはるかに超えて行われます。このドキュメントの目的は、テスト プランですべてのアプリが示すべき重要な品質特性を網羅できるように、これらの特性を指定することです。
+</p>
+
+<p>
+  アプリをタブレット、または Google Play for Education、あるいはこの両方向けに作成している場合、さらに考慮が必要な品質基準があります。この基準は、<a href="{@docRoot}distribute/essentials/quality/tablets.html">タブレット アプリの品質</a>と<a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">教育ガイドライン</a>に定義されています。
+</p>
+
+<div class="headerLine">
+  <h2 id="ux">
+  視覚デザインとユーザー インタラクション
+  </h2>
+
+
+</div>
+
+<p>
+  次の基準は、一貫性が高く直観的なユーザー エクスペリエンスを実現するため、アプリが標準の Android 視覚デザインとインタラクション パターンを必要に応じて提供することを保証します。
+</p>
+
+<table>
+  <tr>
+    <th style="width:2px;">
+      分野
+    </th>
+    <th style="width:54px;">
+      ID
+    </th>
+    
+
+    <th>
+      説明
+    </th>
+    <th style="width:54px;">
+      テスト
+    </th>
+  </tr>
+  <tr id="UX-B1">
+  <td>標準デザイン</td>
+  <td>
+    UX-B1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリは <a href="{@docRoot}design/index.html">Android の設計</a>ガイドラインに従い、共通する <a href="{@docRoot}design/patterns/index.html">UI パターンとアイコン</a>を使用します。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>アプリはシステム アイコンの予想機能([戻る] ボタンなど)を再定義しません。
+    </li>
+
+    <li>アプリは全く異なるアイコンが標準 UI の動作を発生させる場合、システム アイコンをこのアイコンに置き換えません。
+    </li>
+
+    <li>アプリが標準システム アイコンのカスタマイズ バージョンを提供する場合、そのアイコンはシステム アイコンに非常に類似しており、標準のシステム動作を発生させます。
+    </li>
+
+    <li>アプリは、アイコンや動作がユーザーの誤解を招いたりユーザーを混乱させたりするような Android UI パターンを再定義したり誤用したりしません。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td rowspan="3">
+    ナビゲーション
+  </td>
+  <td id="UX-N1">
+    UX-N1
+  </td>
+  <td>
+    <p>
+    アプリは標準システムの<a href="{@docRoot}design/patterns/navigation.html">[戻る] ボタンのナビゲーション</a>をサポートし、画面上に表示されるカスタムの [戻る] ボタン機能のプロンプトを一切利用しません。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td id="UX-N2">
+    UX-N2
+  </td>
+  <td>
+    <p>
+    すべてのダイアログは [戻る] ボタンを使用して取り消すことができます。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr id="UX-N3">
+  <td>
+    UX-N3
+  </td>
+  <td>
+    [ホーム] ボタンを押すと、常にデバイスのホーム画面に移動します。
+  </td>
+  <td>
+    <a href="#core">CR-1</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S1">
+  <td rowspan="2">
+    通知
+  </td>
+  <td>
+    UX-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    通知は Android の設計<a href="{@docRoot}design/patterns/notifications.html">ガイドライン</a>に従います。特に次のガイドラインを遵守します。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>複数の通知は可能な限り 1 個の通知オブジェクトに蓄積されます。
+    </li>
+
+    <li>通知が持続するのは、進行中のイベント(音楽の再生や通話など)に関連している場合だけです。
+    </li>
+
+    <li>通知には、ユーザーがオプトインしない限り、広告やアプリの中核機能に関連しないコンテンツが含まれません。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S2">
+  <td>
+    UX-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリは次の目的でのみ通知を使用します。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>ユーザーに個人的に関係するコンテキストに変更があったことを示す(メッセージの着信など)、または
+    </li>
+
+    <li>進行中のイベント(音楽の再生や通話など)に関係する情報/コントロールを表示する
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="fn">
+  機能
+  </h2>
+
+
+</div>
+
+<p>
+  次の基準は、期待される機能動作が適切なパーミッション レベルで実現されることを保証します。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    分野
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    説明
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  </tr>
+
+  <tr id="FN-P1">
+  <td rowspan="2">
+    パーミッション
+  </td>
+  <td>
+    FN-P1
+  </td>
+  <td>
+    アプリは中核機能をサポートする必要がある<em>最低限の</em>パーミッションのみを要求します。
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="FN-P2">
+  <td>
+    FN-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリの中核機能に関連しない限り、アプリは機密性の高いデータ(連絡先やシステム ログなど)や課金の可能性があるサービス(ダイヤラーや SMS など)にアクセスするパーミッションを要求しません。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="FN-L1">
+  <td>
+    インストール場所
+  </td>
+  <td>
+    FN-L1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリは SD カード(アプリでサポートされている場合)にインストールされている場合に通常どおり機能します。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    サイズの大きいアプリ(10MB 以上)には、SD カードへのインストールのサポートが推奨されます。SD カードへのインストールをサポートする必要のあるアプリのタイプについては、<a href="{@docRoot}guide/topics/data/install-location.html">アプリのインストール ロケーション</a>デベロッパー ガイドを参照してください。
+    </p>
+  </td>
+  <td>
+    <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A1">
+  <td rowspan="4">
+    オーディオ
+  </td>
+  <td>
+    FN-A1
+  </td>
+  <td>
+    画面がオフの場合、オーディオは、中核機能(アプリが音楽プレーヤーである場合など)でない限り、再生されることはありません。
+  </td>
+  <td>
+    <a href="#core">CR-7</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A2">
+  <td>
+    FN-A2
+  </td>
+  <td>
+    オーディオは、中核機能でない限り<a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">ロック画面の背後で再生</a>されることはありません。
+  </td>
+  <td>
+    <a href="#core">CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A3">
+  <td>
+    FN-A3
+  </td>
+  <td>
+    オーディオは、中核機能でない限り、ホーム画面上や別のアプリより優先して再生されることはありません。
+  </td>
+  <td>
+    <a href="#core">CR-1、<br>
+    CR-2</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A4">
+  <td>
+    FN-A4
+  </td>
+  <td>
+    オーディオは、アプリがフォアグラウンドに戻ると再開されます。または、再生が一時停止状態となっていることをユーザーに知らせます。
+  </td>
+  <td>
+    <a href="#core">CR-1、CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U1">
+  <td rowspan="3">
+    UI とグラフィック
+  </td>
+  <td>
+    FN-U1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリは横方向と縦方向の両方をサポートします(可能な場合)。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    両方向ともほぼ同じ機能とアクションをサポートし、同等の機能を維持します。コンテンツやビューの若干の変更は認められます。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U2">
+  <td>
+    FN-U2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリは両方向で全画面をサポートし、方向の変更に応じてレターボックスを付けません。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    画面の形状の若干のばらつきを補正するための若干のレターボックス付けは認められます。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U3">
+  <td>
+    FN-U3
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリはレンダリングの問題を生じることなく表示の方向間の迅速な遷移を正しく処理します。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S1">
+  <td rowspan="2">
+    ユーザー/アプリの状態
+  </td>
+  <td>
+    FN-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリがバックグラウンドになると、アプリの中核機能に関連していない限り、どのサービスも実行中のままにしません。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    たとえば、アプリは通知用のネットワーク接続を維持したり、Bluetooth 接続を維持したり、GPS のオン状態を維持するサービスを実行中のままにしません。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-6</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S2">
+  <td>
+    FN-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリはユーザーまたはアプリの状態を正しく保持し、復元します。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    アプリがフォアグラウンドから抜ける場合にユーザーまたはアプリの状態を保持し、バック ナビゲーションやその他の状態の変更による予期しないデータの損失を防ぎます。アプリがフォアグラウンドに戻ると、保持していた状態を復元し、編集可能なフィールドへの変更内容、ゲームの進行、メニュー、ビデオ、アプリやゲームのその他のセクションなどの、保留中だった重要なステートフル トランザクションも復元する必要があります。
+    </p>
+
+    <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+    <li>最近使ったアプリの切り替え機能からアプリが再開された場合、アプリは最後に使用された状態と全く同じ状態にユーザーを戻します。
+    </li>
+
+    <li>デバイスがスリープ(ロック)状態から復帰した後でアプリが再開された場合、アプリは最後に使用された状態と全く同じ状態にユーザーを戻します。
+    </li>
+
+    <li>アプリが [ホーム] または [すべてのアプリ] から再起動された場合、アプリは前の状態にできるだけ近い状態に復元されます。
+    </li>
+
+    <li>[戻る] キーが押されると、アプリまたはユーザーの状態を保存するオプションがアプリからユーザーに対して提供されます。このオプションを選択しないと、バック ナビゲーションでアプリまたはユーザーの状態が失われることになります。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-1、CR-3、CR-5</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ps">
+  パフォーマンスと安定度
+  </h2>
+
+
+</div>
+
+<p>
+  次の基準で、ユーザーが期待するパフォーマンス、安定度、応答性がアプリから提供されることが保証されます。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    分野
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    説明
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  </tr>
+
+  <tr id="PS-S1">
+  <td>
+    安定度
+  </td>
+  <td>
+    PS-S1
+  </td>
+  <td>
+    アプリはターゲット デバイスでクラッシュ、強制終了、フリーズせず、それ以外の場合でも異常に機能しません。
+  </td>
+  <td>
+    <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>、<a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P1">
+  <td rowspan="2">
+    パフォーマンス
+  </td>
+  <td>
+    PS-P1
+  </td>
+  <td>
+    アプリは素早くロードされます。アプリがロードに 2 秒以上かかる場合、オンスクリーンのフィードバック(進行インディケータや同等の指示)をユーザーに提供します。
+  </td>
+  <td>
+    <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P2">
+  <td>
+    PS-P2
+  </td>
+  <td>
+    StrictMode が有効になっている場合(下記の <a href="#strictmode">StrictMode のテスト</a>を参照)、ゲームのプレイ中、アニメーションや UI 遷移、アプリの他の部分など、アプリを実行しているときに、赤の点滅(StrictMode からのパフォーマンスに関する警告)は表示されません。
+  </td>
+  <td>
+    <a href="#PM-1">PM-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-M1">
+  <td>
+    メディア
+  </td>
+  <td>
+    PS-M1
+  </td>
+  <td>
+    音楽とビデオの再生は、通常のアプリの使用とロード時には、雑音や画面のちらつき、またはその他の症状もなくスムーズに行われます。
+  </td>
+  <td>
+    <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>、<a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V1">
+  <td rowspan="2">
+    視覚品質
+  </td>
+  <td>
+    PS-V1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリはグラフィック、テキスト、画像、その他の UI 要素を著しい歪曲、ぼやけ、ピクセル化なしで表示します。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>アプリは、<a href="{@docRoot}distribute/essentials/quality/tablet.html">タブレットなどのより大きい画面のデバイス</a>向けを含む、すべてのターゲットの画面のサイズとフォーム ファクタに高品質グラフィックを提供します。
+    </li>
+
+    <li>メニュー、ボタン、その他の UI 要素の境界部にエイリアシングは表示されません。
+    </li>
+    </ol>
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V2">
+  <td>
+    PS-V2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリはテキストとテキスト ブロックを次の常識的な方法で表示します。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>配置、構成は、タブレットなどのより大きい画面のデバイス向けを含む、サポート対象のすべてのフォーム ファクタで許容範囲内です。
+    </li>
+
+    <li>文字または語句は切り捨てられて表示されることはありません。
+    </li>
+
+    <li>ボタンまたはアイコン内で不適切に改行されて表示されることはありません。
+    </li>
+
+    <li>テキストと周囲の要素との間に十分なスペースを配置します。
+    </li>
+    </ol>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/performance" data-sortorder="-timestamp"
+data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="listing">
+  Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  次の基準は、アプリが Google Play に公開する準備ができていることを保証します。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    エリア
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    説明
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  </tr>
+
+  <tr id="GP-P1">
+  <td rowspan="2">
+    ポリシー
+  </td>
+  <td>
+    GP-P1
+  </td>
+  <td>
+    アプリは <a href="http://play.google.com/about/developer-content-policy.html">Google Play デベロッパー コンテンツ ポリシー</a>の条項に厳密に従い、不適切なコンテンツを提供しません。また、他者の知的財産、ブランドなどを使用しません。
+  </td>
+  <td>
+    <a href="#gp">GP-all</a>
+  </td>
+  </tr>
+
+  <tr id="GP-P2">
+  <td>
+    GP-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリのユーザー成熟度は、<a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=188189">コンテンツのレーティングに関するガイドライン</a>に基づき、適切に設定されます。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    特に、デバイスのロケーションを使用するためにパーミッションを要求するアプリには、「全ユーザー対象」のユーザー成熟度を指定できないことに注意してください。
+    </p>
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D1">
+  <td rowspan="3">
+    アプリの詳細ページ
+  </td>
+  <td>
+    GP-D1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリのメイン ビジュアルは、<a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">このブログの投稿</a>に示されているガイドラインに従います。次の点を確認してください。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>アプリの掲載情報には高品質なメイン ビジュアルが含まれています。
+    </li>
+
+    <li>メイン ビジュアルは、縮小表示され、アプリがターゲットにしている最小画面サイズで表示されるときに、判別できなくなるデバイス画像、スクリーンショット、小さいテキストは含まれません。
+    </li>
+
+    <li>メイン ビジュアルは、広告とは異なります。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#gp">GP-1、GP-2</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D2">
+  <td>
+    GP-D2
+  </td>
+  <td>
+    アプリのスクリーンショットとビデオは Android 以外のデバイスを表示または参照しません。
+  </td>
+  <td rowspan="2">
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D3">
+  <td>
+    GP-D3
+  </td>
+  <td>
+    アプリのスクリーンショットまたはビデオは、アプリのコンテンツとエクスペリエンスを誤解を招く恐れのある方法で示しません。
+  </td>
+  </tr>
+
+  <tr id="GP-X1">
+  <td>
+    ユーザーのサポート
+  </td>
+  <td>
+    GP-X1
+  </td>
+  <td>
+    Google Play ページのレビューのタブにある、ユーザーによってレポートされた一般的なバグが、再現可能で異なる多くのデバイスで発生する場合、これらのバグに対処します。バグがごく少数のデバイスでのみ発生する場合でも、そのデバイスが特に人気があるか、新しいデバイスである場合にはバグに対処する必要があります。
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/play" data-sortorder="-timestamp"
+data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-environment">
+  テスト環境の設定
+  </h2>
+
+
+</div>
+
+<p>
+  アプリの品質を評価するには、テスト用に適切なハードウェアまたはエミュレータ環境を設定する必要があります。
+</p>
+
+<p>
+  理想的なテスト環境には、利用者が現在使用できる重要なフォーム ファクタとハードウェア/ソフトウェアの組み合わせを表す実際のハードウェア デバイスがいくつか含まれます。市場に出回っている<em>すべての</em>デバイスでテストする必要はありません。フォーム ファクタごとに 少数のデバイスを使用して、代表的ないくつかのデバイスを重点的にテストします。
+</p>
+
+<p>
+  テスト用に実際のハードウェア デバイスを入手できない場合は、最も一般的なフォーム ファクタとハードウェア/ソフトウェアの組み合わせを表す<a href="{@docRoot}tools/devices/index.html">エミュレーションされたデバイス(AVD)を設定する</a>必要があります。
+</p>
+
+<p>
+  基本テスト以上のテストを行うために、より多くのデバイス、フォーム ファクタ、新しいハードウェア/ソフトウェアの組み合わせをテスト環境に追加できます。テストと品質基準の数または複雑度を上げることもできます。
+</p>
+
+<div class="headerLine">
+  <h2 id="tests">
+  テスト手順
+  </h2>
+
+
+</div>
+
+<p>
+  次のテスト手順は、アプリ内の品質に関するさまざまなタイプの問題を発見する際に役立ちます。複数のテストを組み合わせたり、独自のテスト プランに複数のテストのグループを統合したりできます。特定の基準と特定のテストの関連については、上記の各セクションをご覧ください。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    タイプ
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  <th>
+    説明
+  </th>
+  </tr>
+
+  <tr>
+  <td rowspan="12" id="core">
+    コア スイート
+  </td>
+  <td>
+    CR-0
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    アプリのすべての部分(すべての画面、ダイアログ、設定、すべてのユーザー フロー)にナビゲートします。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>アプリで編集、コンテンツの作成、ゲームのプレイ、メディアの再生が可能になっている場合、これらのフローを開始して、コンテンツの作成や変更を行うようにしてください。
+    </li>
+
+    <li>アプリの実行中に、ネットワーク接続、バッテリー機能、GPS またはロケーションの利用可能性、システム ロードなどに一過性の変更を加えます。
+    </li>
+    </ol>
+  </td>
+  </tr>
+
+  <tr id="tg2">
+  <td id="core2">
+    CR-1
+  </td>
+  <td>
+    各アプリ画面でデバイスの [ホーム] キーを押して [すべてのアプリ] 画面からアプリを再起動します。
+  </td>
+  </tr>
+
+  <tr id="CR-2">
+  <td>
+    CR-2
+  </td>
+  <td>
+    各アプリ画面で別の実行中のアプリに切り替え、最近使ったアプリの切り替え機能を使用して、テスト中のアプリに戻ります。
+  </td>
+  </tr>
+
+  <tr id="CR-3">
+  <td>
+    CR-3
+  </td>
+  <td>
+    各アプリ画面(とダイアログ)で [戻る] ボタンを押します。
+  </td>
+  </tr>
+
+  <tr id="CR-5">
+  <td>
+    CR-5
+  </td>
+  <td>
+    各アプリ画面で横方向と縦方向の間でデバイスを 3 回以上回転します。
+  </td>
+  </tr>
+
+  <tr id="CR-6">
+  <td>
+    CR-6
+  </td>
+  <td>
+    別のアプリに切り替え、テスト対象アプリをバックグラウンドに送ります。[設定] に移動して、テスト アプリがバックグラウンドになっているときに、サービスが実行されているかどうか確認します。Android 4.0 以上では、[アプリ] 画面に進み、[実行中] タブでアプリを見つけます。これより前のバージョンでは、[アプリケーション管理] を使用して実行中のサービスを確認します。
+  </td>
+  </tr>
+
+  <tr id="CR-7">
+  <td>
+    CR-7
+  </td>
+  <td>
+    電源ボタンを押してデバイスをスリープ状態にし、次に電源ボタンをもう一度押して画面を復帰させます。
+  </td>
+  </tr>
+
+  <tr id="CR-8">
+  <td>
+    CR-8
+  </td>
+  <td>
+    電源ボタンを押したときにロックするようにデバイスを設定します。電源ボタンを押してデバイスをスリープ状態にし、次に電源ボタンをもう一度押して画面を復帰させ、デバイスのロックを解除します。
+  </td>
+  </tr>
+
+  <tr id="CR-9">
+  <!-- Hardware features -->
+
+  <td>
+    CR-9
+  </td>
+  <td>
+    スライド式キーボードのあるデバイスの場合は、キーボードを 1 回以上スライドさせます。キーボード ドックのあるデバイスの場合は、そのキーボード ドックにデバイスを接続します。
+  </td>
+  </tr>
+
+  <tr id="CR-10">
+  <td>
+    CR-10
+  </td>
+  <td>
+    外部ディスプレイ ポートのあるデバイスの場合は外部ディスプレイを接続します。
+  </td>
+  </tr>
+
+  <tr id="CR-11">
+  <td>
+    CR-11
+  </td>
+  <td>
+    アプリが表示できるすべてのタイプの通知を通知ドローワで発生させ、監視します。可能な場合は通知を展開し(Android 4.1 以上)、示されるすべてのアクションをタップします。
+  </td>
+  </tr>
+
+  <tr id="CR-12">
+  <td>
+    CR-12
+  </td>
+  <td>
+    [設定] &gt; [アプリ情報] に進んでアプリが要求したパーミッションを確認します。
+  </td>
+  </tr>
+
+  <tr id="tg3">
+  <td>
+    SD カードへのインストール
+  </td>
+  <td>
+    SD-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    <a href="{@docRoot}guide/topics/data/install-location.html">デバイスの SD カード</a>(アプリでサポートされている場合)にインストールされているアプリで<em>コア スイート</em>を繰り返します。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    アプリを SD カードに移動する場合、[設定] &gt; [アプリ情報] &gt; [SD カードに移動] を使用します。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg32">
+  <td>
+    ハードウェア アクセラレーション
+  </td>
+  <td>
+    HA-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    ハードウェア アクセラレーションを有効にして<em>コア スイート</em>を繰り返します。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    ハードウェア アクセラレーション(デバイスでサポートされている場合)を強制的に有効にするには、<code>hardware-accelerated="true"</code> をアプリのマニフェストの <code>&lt;application&gt;</code> に追加して再度コンパイルします。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg33">
+  <td>
+    パフォーマンスのモニタリング
+  </td>
+  <td>
+    PM-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    <a href="#strictmode">以下に記載するとおりに</a> StrictMode プロファイリングを有効にして<em>コア スイート</em>を繰り返します。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    ガベージ コレクションと、ユーザー エクスペリエンスでのそのインパクトに注目します。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="gp">
+  <td rowspan="3">
+    Google Play
+  </td>
+  <td>
+    GP-1
+  </td>
+  <td>
+    <a href="https://play.google.com/apps/publish/">デベロッパー コンソール</a>にサインインし、デベロッパーのプロファイル、アプリの説明、スクリーンショット、メイン ビジュアル、ユーザー成熟度設定、ユーザーのフィードバックを確認します。
+  </td>
+  </tr>
+
+  <tr id="GP-2">
+  <td>
+    GP-2
+  </td>
+  <td>
+    メイン ビジュアルとスクリーンショットをダウンロードし、ターゲットにしているデバイスとフォーム ファクタのディスプレイ サイズに合致するよう縮小します。
+  </td>
+  </tr>
+
+  <tr id="GP-3">
+  <td>
+    GP-3
+  </td>
+  <td>
+    アプリまたは拡張ファイル ダウンロードに含まれているグラフィック アセット、メディア、テキスト、コード ライブラリ、その他のコンテンツをすべて確認します。
+  </td>
+  </tr>
+
+  <tr id="GP-4">
+  <td>
+    課金
+  </td>
+  <td>
+    GP-4
+  </td>
+  <td>
+    アプリのすべての画面にナビゲートし、すべてのアプリ内課金フローを開始します。
+  </td>
+  </tr>
+</table>
+
+<h3 id="strictmode">
+  StrictMode を使用したテスト
+</h3>
+
+<p>
+  パフォーマンスのテストの場合、アプリで {@link android.os.StrictMode} を有効にしてこれを使用することをお勧めします。これで、メインスレッドおよびパフォーマンス、ネットワーク アクセス、ファイルの読み取り/書き込みなどに影響する可能性のあるその他のスレッド上の操作を捕捉できます。
+</p>
+
+<p>
+  {@link android.os.StrictMode.ThreadPolicy.Builder}を使用してスレッドごとにモニタリング ポリシーを設定し、{@link android.os.StrictMode.ThreadPolicy.Builder#detectAll()} を使用して<code>ThreadPolicy</code>でサポート対象のモニタリングをすべて有効にします。
+</p>
+
+<p>
+  {@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()}  を使用して<code>ThreadPolicy</code> に対するポリシー違反の<strong>視覚通知</strong>を有効にします。
+</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/tablets.jd
new file mode 100644
index 0000000..f0cc133
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/tablets.jd
@@ -0,0 +1,623 @@
+page.title=タブレット アプリの品質
+page.metaDescription=タブレットはインストール ベースで Android の急成長分野であり、アプリに新たなチャンスをもたらします。
+page.image=/distribute/images/tablet-guidelines-color.jpg
+Xnonavpage=true
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>チェックリスト</h2>
+<ol>
+<li><a href="#core-app-quality">1.タブレット アプリの基本的な品質テスト</a></li>
+<li><a href="#optimize-layouts">2.レイアウトの最適化</a></li>
+<li><a href="#use-extra-space">3.余っている画面領域を活用する</a></li>
+<li><a href="#use-tablet-icons">4.タブレット向けに設計されたアセットを使用する</a></li>
+<li><a href="#adjust-font-sizes">5.フォント サイズとタッチ ターゲットを調整する</a></li>
+<li><a href="#adjust-widgets">6.ホーム画面のウィジェットのサイズを調整する</a></li>
+<li><a href="#offer-full-feature-set">7.機能のフル セットを提供する</a></li>
+<li><a href="#android-versions">8.ターゲットの Android のバージョンを正しく設定する</a></li>
+<li><a href="#hardware-requirements">9.ハードウェアの依存関係を正しく宣言する</a></li>
+<li><a href="#support-screens">10.タブレット画面のサポートを宣言する</a></li>
+<li><a href="#google-play">11.タブレット UI を紹介する</a></li>
+<li><a href="#google-play-best-practices">12.Google Play での公開に向けたベスト プラクティスに従う</a></li>
+
+</ol>
+<h2>テスト</h2>
+<ol>
+<li><a href="#test-environment">テスト環境の設定</a></li>
+</ol>
+</div></div>
+
+<div class="todp-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/tablet-guidelines-color.jpg" style="width:480px;">
+</div>
+
+<p>
+  タブレットは、インストール ベースでの Android の成長分野であり、<a href="{@docRoot}distribute/stories/tablets.html">ユーザー エンゲージメントと収益化</a>に新たなチャンスをもたらします。本書のガイドラインは、卓越した機能と直感的でわかりやすいデザインの UI で、タブレット ユーザーの期待に応えることに役立ちます。
+</p>
+
+<p>
+  ガイドラインには番号が振られていますが、どの項目から始めてもかまいません。各ガイドラインの推奨事項がアプリに適している範囲でその推奨事項に対処すべきですが、利用者に最高の製品を提供するためには、推奨事項にできるだけ従うようにしてください。
+</p>
+
+<p>
+  このドキュメントには、記載されている各推奨事項への対応に役立つリソースへのリンクが含まれています。
+</p>
+
+<div class="headerLine"><h2 id="core-app-quality">1.タブレット アプリの基本的な品質テスト</h2></div>
+
+<p>タブレット アプリの優れたエクスペリエンスを提供する最初のステップは、アプリがターゲットとしているすべてのデバイスとフォーム ファクタに対して、<em>アプリの中核品質基準</em>に適合していることを確認することです。詳細については、<a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質に関するガイドライン</a>を参照してください。 
+</p>
+
+<p>
+アプリは、公開前に、次のような基本的な技術上のチェックと、ローンチに関する基準に合格していることも必要です。
+</p>
+
+<ul>
+  <li><a href="#android-versions">適切な Android バージョンをターゲットにしている</a></li>
+  <li><a href="#hardware-requirements">ハードウェア依存関係を正しく指定している</a></li>
+  <li><a href="#support-screens">適切な画面のサポートを宣言している</a></li>
+  <li><a href="#use-extra-space">使用可能な画面サイズ全体を使用している</a></li>
+  <li><a href="#google-play">スクリーンショットが Google Play にアップロードされている</a></li>
+</ul>
+
+<p>アプリが Google Play デベロッパー コンソールに既にアップロードされている場合、<a href="#google-play-optimization-tips">[最適化のヒント]</a> ページにアクセスして、上記のチェックに対するアプリの対応状況を確認することができます。</p>
+
+
+<div class="headerLine">
+<h2 id="optimize-layouts">2.大きい画面用にレイアウトを最適化する</h2></div>
+
+<p>
+  Android では、さまざまなデバイス画面のサイズとフォーム ファクタで正しく実行されるアプリを簡単に開発できます。この多様な互換性により、すべての対象デバイスに幅広く提供できる単一アプリの設計が可能になるため、開発者の自由度が増します。ただし、各画面の設定(特にタブレット)で、ユーザーに最善のエクスペリエンスを提供するには、対象の画面設定ごとに、レイアウトとその他の UI コンポーネントを最適化する必要があります。タブレットで UI を最適化すると、新しい機能の提供、新しいコンテンツの表示、またはユーザー エンゲージメントをさらに深めるための他の方法でのエクスペリエンスの強化などに、利用可能な追加の画面を最大限に活用することができます。
+</p>
+
+<p>
+  ハンドセット用に開発したアプリをタブレットに配布する場合、レイアウト、フォント、文字間隔に若干の調整を行うことから始めます。7 インチ タブレットや大きなキャンバスを伴うゲームなどの場合、こうした調整だけで、アプリの外観を向上させることができる場合があります。より画面の大きいタブレットなどの場合、UI の構成要素を再設計して「引き延ばされた UI」を効果的な複数ペインの UI、容易なナビゲーション、追加のコンテンツに置き換えることができます。
+</p>
+
+
+<div style="width:500px;margin:1.5em;margin-top:-16px;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">「引き延ばされた」UI を取り除く</span>: タブレットでは、単一画面のレイアウトの場合、見栄えの悪い空白や長すぎる行が発生します。パディングを使用して UI 要素の幅を減らし、複数画面のレイアウトを使用することを検討してください。</p>
+</div>
+
+<p>以下の提案を参照してください。</p>
+
+
+<ul>
+  <li>必要に応じて <code>large</code> と <code>xlarge</code> に対応するカスタム レイアウトを提供します。<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">画面の最短寸法</a>または<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">最小の幅と長さに</a>基づいてロードされるレイアウトも提供できます。
+  </li>
+
+  <li>少なくともフォント サイズ、マージン、文字間隔などの寸法をより大きい画面用にカスタマイズして、間隔の使用とコンテンツの視認性を改善します。
+  </li>
+
+  <li>UI コントロールの位置を調整し、タブレットが横長方向の場合に横向きにするなど、ユーザーがタブレットを手に持っている場合に簡単にアクセスできるようにします。
+  </li>
+
+  <li>UI 要素のパディングは、通常ハンドセットよりタブレット上の方が大きくなります。<a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm">48dp リズム</a>(および 16dp グリッド)をお勧めします。
+  </li>
+
+  <li>テキストのコンテンツを適切にパディングして、画面の縁に直接かからないようにします。画面の縁の近くにあるコンテンツには <code>16dp</code> 以上のパディングを使用します。
+  </li>
+</ul>
+
+<p>特に、レイアウトが画面全体に「引き延ばされて」表示されないようにしてください。</p>
+
+<ul>
+<li>テキストの行が長くなりすぎないようにします。1 行に最大 100 文字となるように最適化してください。50 文字から 75 文字が理想的です。</li>
+<li>ListViews とメニューは画面全体の幅を使用しないようにしてください。</li>
+<li>パディングを使用して画面上の要素の幅を管理したり、タブレット用の複数画面 UI に切り替えたりします(次のセクションを参照してください)。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/optimize"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="use-extra-space">3.余っている画面領域を活用する</h2></div>
+
+<div style="width:340px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">複数ペインのレイアウト</span> は、タブレット画面でより見やすく、実用的で読みやすいレイアウトです。</p>
+</div>
+
+<p>タブレット画面は、特に横長方向の場合にアプリが画面をより自在に活用できるようになっています。特に 10 インチ タブレットでは領域が大幅に拡張されますが、7 インチ タブレットでも、コンテンツの表示やユーザーの操作に多くのスペースが提供されます。 </p>
+
+<p>タブレットで実行するアプリの UI を検討する際には、タブレットで利用できる画面の追加領域をフル活用するようにしてください。以下の提案を参照してください。</p>
+
+<ul>
+<li>追加のコンテンツを組み込んだり、既存のコンテンツを別の方法で使用する機会がないか検討します。</li>
+<li><a href="{@docRoot}design/patterns/multi-pane-layouts.html">複数ペインのレイアウト</a>をタブレット画面で使用して、単一のビューを組み合わせて複合ビューを形成します。これで追加の画面領域がより効果的に使用され、ユーザーがアプリをより簡単にナビゲートできるようになります。 </li>
+<li>画面の向きが変わったときに複合ビューのパネルを再編成する方法を計画します。</li>
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+<div style="">
+<img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
+<p class="image-caption"
+style="padding:.5em"><span
+style="font-weight:500;">複合ビュー</span> では、ハンドセット UI の複数の単一ビュー<em>(上)</em>が組み合わされて、タブレット用<em>(下)</em>のより豊富で効果的な UI になります。 </p>
+</div>
+</div>
+
+<li>単一画面が {@link android.app.Activity} サブクラスとして実装されている場合、個々のコンテンツ パネルを{@link android.app.Fragment}サブクラスとして実装することを検討します。これで、コンテンツを共有する異なるフォーム ファクタと画面にわたってコードを最大限に再利用できるようになります。</li>
+<li>複数画面 UI を使用する画面サイズを決定し、次に適切な画面サイズ バケット(<code>large</code>/<code>xlarge</code> など)または画面の最小幅(<code>sw600dp</code>/<code>sw720</code> など)に異なるレイアウトを指定します。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/extrascreen"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="use-tablet-icons">4.タブレット画面向けに設計されたアセットを使用する</h2></div>
+
+<div><img src="{@docRoot}design/media/devices_displays_density@2x.png"></div>
+
+<p>アプリが最も見やすく表示されるようにするため、タブレットで通常サポートされる範囲で、密度ごとにアイコンとその他のビットマップ アセットを提供します。特にアクション バー、通知、ランチャーのアイコンについては、<a href="{@docRoot}design/style/iconography.html">アイコンのデザイン</a>のガイドラインに従って設計し、複数の密度で提供する必要があります。これで、不鮮明にならず、その他の拡大/縮小加工なしで、すべての画面で適切なサイズで表示されるようになります。</p>
+
+<p class="table-caption"><strong>表 1.</strong> アイコンのタイプ別未加工アセット サイズ<table>
+<tr>
+<th>密度</th>
+<th>ランチャー</th>
+<th>アクション バー</th>
+<th>小/状況依存</th>
+<th>通知</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48 ピクセル</td>
+<td>32x32 ピクセル</td>
+<td>16x16 ピクセル</td>
+<td>24x24 ピクセル</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72 ピクセル</td>
+<td>48x48 ピクセル</td>
+<td>24x24 ピクセル</td>
+<td>36x36 ピクセル</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(hdpi を使用)</em></td>
+<td><em>(hdpi を使用)</em></td>
+<td><em>(hdpi を使用)</em></td>
+<td><em>(hdpi を使用)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96 ピクセル</td>
+<td>64x64 ピクセル</td>
+<td>32x32 ピクセル</td>
+<td>48x48 ピクセル</td>
+</tr>
+<tr>
+<td><code>xxhdpi</code></td>
+<td>144x144 ピクセル</td>
+<td>96x96 ピクセル</td>
+<td>48x48 ピクセル</td>
+<td>72x72 ピクセル</td>
+</tr>
+
+</table>
+
+<p>
+  少なくとも、次の一般的なタブレットの画面密度の<strong> 1 つ以上</strong>に対して最適化されたアイコンとビットマップ アセットのバージョンを用意してください。
+</p>
+<ul>
+  <li><code>hdpi</code></li>
+  <li><code>xhdpi</code></li>
+  <li><code>xxhdpi</code></li>
+</ul>
+
+<p>その他のヒント:</p>
+
+<ul>
+<li>アイコンを設計する際にはベクトル シェイプを使用して、アイコンのディテールやエッジの明瞭さが損なわれないで拡大/縮小されるようにします。</li>
+<li>密度固有の<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">リソース修飾子</a>を使用して、正しいアイコンが画面の密度ごとにロードされるようにします。</li>
+<li>タブレットや他の大画面デバイスでは、デバイスの実際の密度よりも大きい密度サイズのランチャー アイコンを必要とすることがあります。そのため、ランチャー アイコンはできるだけ高密度で提供するようにしてください。たとえば、タブレットの画面が {@code xhdpi} の場合、{@code xxhdpi} バージョンののランチャー アイコンが必要です。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/assets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-font-sizes">5.フォント サイズとタッチ ターゲットを調整する</h2></div>
+
+<p>アプリをタブレットで使いやすくするには、ターゲットとしているすべての画面構成について、タブレット UI でフォント サイズとタッチ ターゲットを調整する必要があります。フォント サイズは<a href="{@docRoot}guide/topics/ui/themes.html">スタイル指定属性</a>や<a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">寸法リソース</a>による調整が可能で、タッチ ターゲットは上述のようにレイアウトとビットマップ画像による調整が可能です。 </p>
+
+<p>以下の考慮事項も参考にしてください。</p>
+<ul>
+<li>タブレットの画面サイズと密度で、テキストが大きすぎたり、小さすぎたりしないようにしてください。ラベルは対応する UI 要素に対して適切な大きさになっており、ラベル、タイトル、その他の要素で不適切な改行を起こさないようにしてください。</li>
+<li>オンスクリーン要素のタッチ ターゲットの推奨サイズは 48dp(最低 32dp)です。タブレット UI で調整が必要な場合があります。<a href="{@docRoot}design/style/metrics-grids.html">メトリックとグリッド</a>を参照して実装方法について理解し、ユーザーをできるだけサポートするようにします。特定のユーザーのアクセシビリティのニーズに適合させる場合、より大きなタッチ ターゲットの使用が適切な場合があります。 </li>
+<li>可能であれば、小さいアイコンの場合、{@link android.view.TouchDelegate} を使用してタッチ可能な領域を 48dp よりも拡大するか、透明なボタン内でアイコンを中央に配置します。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/fonts"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-widgets">6.ホーム画面のウィジェットのサイズを調整する</h2></div>
+
+<p>アプリにホーム画面のウィジェットが含まれている場合、タブレット画面で優れたユーザー エクスペリエンスを実現するため、以下の点を考慮してください。 </p>
+
+<ul>
+<li>ウィジェットのデフォルトの高さと幅をタブレット画面に合わせて設定します。最大と最小のリサイズの高さと幅についても設定します。
+</li>
+<li>ウィジェットは、5 以上のホーム画面の行(縦型ウィジェットまたは正方形ウィジェットの場合)または列(横型ウィジェットまたは正方形ウィジェットの場合)に広げられるように、420dp 以上にリサイズできるようにします。 </li>
+<li>9-patch 画像が正しくレンダリングされるようにします。</li>
+<li>デフォルトのシステム マージンを使用します。</li>
+<li>可能であれば、アプリの <code>targetSdkVersion</code> を 14 以上に設定します。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/widgets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="offer-full-feature-set">7.タブレット ユーザー向けの機能のフル セット</h2></div>
+
+<div class="centered-full-image" style="width:600px;margin:1.5em"><img src="{@docRoot}images/gp-tablets-full-feature-set.png" alt="Tablet feature sets"></div>
+
+<p>タブレット ユーザーがアプリの機能を最大限に使用できるようにします。次の推奨事項を参照してください。</p>
+
+<ul>
+  <li>少なくとも電話と同じ機能セットをタブレットにも提供できるようにアプリを設計します。
+  </li>
+
+  <li>例外的な場合として、機能がほとんどのタブレットのハードウェアまたはユースケースでサポートされない場合、特定の機能を省略、または置き換えることがあります。次に例を示します。 <ul>
+      <li>ハンドセットが電話機能を使用するが、現在のタブレットで電話が使用できない場合、関連する機能を省略、または置き換えてもかまいません。
+      </li>
+
+      <li>多くのタブレットに GPS センサーが搭載されていますが、ほとんどのユーザーは、通常、走りながらタブレットを携行することはありません。電話アプリに、ユーザーが電話を携行しているときに走った GPS 軌跡をユーザーが記録できる機能があっても、タブレットでは、アプリはこの機能を提供する必要はありません。ユースケースに説得力がないためです。
+      </li>
+    </ul>
+  </li>
+
+  <li>タブレット UI から機能または性能を省く場合、省いたものにユーザーがアクセスできないようにするか、代替機能への「グレイスフル デグラデーション」が提供されるようにします(ハードウェア機能に関する下記のセクションも参照してください)。
+  </li>
+</ul>
+
+<div class="headerLine"><h2 id="android-versions">8.ターゲットの Android のバージョンを正しく設定する</h2></div>
+
+<p>
+  タブレットにアプリをできるだけ広く配布するには、タブレットをサポートする Android のバージョンをアプリが正しくターゲットにしている必要があります。タブレットに対する最初のサポートは <a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a>(API レベル 11)で追加されました。タブレット、電話、その他のデバイス向けの統合型 UI フレームワーク サポートは、<a href="{@docRoot}about/versions/android-4.0.html">Android 4.0</a> で導入されました。
+</p>
+
+<p>
+  アプリのターゲットである Android バージョンの範囲を、マニフェスト ファイルの <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a> 要素で設定できます。多くの場合、この要素の <code>targetSdkVersion</code> 属性を最も高い API レベルに設定して、Android のバージョンを正しくターゲットにできます。
+</p>
+
+<p style="margin-bottom:.5em;">
+  少なくとも、<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a> 要素について以下の項目を確認してください。
+</p>
+
+<ol style="list-style-type:lower-alpha;margin-top:0em;">
+  <li>
+    <code>targetSdkVersion</code> は 11 以上の値(推奨値は 14 以上)で宣言されている。または
+  </li>
+
+  <li>
+    <code>minSdkVersion</code> が 11 以上の値で宣言されている。
+  </li>
+
+  <li><code>maxSdkVersion</code> 属性が宣言されている場合、値が 11 以上である必要があります。通常は、<code>maxSdkVersion</code> の使用は<em>推奨されません</em>。
+  </li>
+</ol>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/versions"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="hardware-requirements">9.ハードウェア機能の依存関係を正しく宣言する</h2></div>
+
+<p>
+  ハンドセットとタブレットは、通常、センサー、カメラ、電話、その他の機能について、若干異なるハードウェア サポートを提供します。たとえば、多くのタブレットは電話サポートを含まない「Wi-Fi」設定で使用できます。
+</p>
+
+<p>
+  1 つの APK を電話とタブレットのずべての顧客基盤にわたって広く配布できるようにするため、アプリがタブレットで通常は使用できないハードウェア機能の要件を宣言していないことを確認してください。代わりにハードウェア機能を下記のようにアプリのマニフェストで<em>不要</em>として適切に宣言します。
+</p>
+
+<ul>
+<li>アプリのマニフェストで、<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> 要素を探します。特に、一部のタブレットで利用できない可能性のあるハードウェア機能を探します。たとえば次のようなものです。 <ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code>(背面カメラを意味します)、または</li>
+<li><code>android.hardware.camera.front</code></li>
+</ul></li>
+
+<li><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> 要素を、<code>android:required=”false”</code> 属性を含めることで<em>不要</em>と宣言します。 <p>
+  たとえば、電話機能を提供しないデバイスにも、アプリを広く配布できるように、<code>android.hardware.telephony</code> に従属関係を宣言する正しい方法を次に示します。
+</p>
+
+<pre>&lt;uses-feature android:name="android.hardware.telephony" android:required="false" /&gt;</pre></li>
+
+<li>同様に、タブレットにふさわしくない<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">ハードウェア機能の要件を暗黙指定する </a><a href="{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permission&gt;</code></a> 要素があるか、マニフェストを確認します。このようなパーミッションが見つかった場合、機能に対応する <code>&lt;uses-feature&gt;</code> 要素を明示的に宣言し、<code>android:required=”false”</code> 属性を含めるようにします。</li>
+</ul>
+
+
+<p>
+  ハードウェア機能を<em>不要</em>として宣言してから、アプリをさまざまなデバイスでテストするようにしてください。アプリが使用するハードウェア機能が利用できない場合でも、アプリは通常に機能する必要があり、必要に応じて「グレイスフル デグラデーション」を提供して、代替機能を用意しておく必要があります。
+</p>
+
+<p>
+  たとえば、アプリがロケーションの設定に通常は GPS を使用する場合で GPS がデバイスでサポートされていない場合、代わりにアプリでユーザーがロケーションを手動で設定する場合があります。アプリは実行時にデバイスのハードウェア機能があるか確認し、必要に応じて対処します。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/hardware"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="support-screens">10.タブレット画面のサポートを宣言する</h2></div>
+
+<p>アプリをさまざまなタブレットに配布できるようにするには、アプリが次のようにそのマニフェスト ファイルでタブレットの画面サイズのサポートを宣言する必要があります。</p>
+
+<ul>
+  <li><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> 要素が宣言されている場合は、<code>android:largeScreens="false"</code> または <code>android:xlargeScreens="false"</code> を指定しないでください。</li>
+  <li>13 未満の <code>minSdkVersion</code> 値をターゲットにしているアプリの場合、<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> 要素を <code>android:largeScreens="true"</code> と <code>android:xlargeScreens="true"</code> の両方で宣言する必要があります。</li>
+</ul>
+
+<p>アプリがマニフェストに <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a> 要素を宣言している場合、その要素に、アプリがサポートする<em>タブレット画面のサイズと密度の組み合わせをすべて</em>指定する属性が含まれている必要があります。可能であれば、アプリで <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a> 要素の使用は避けてください。</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/tabletscreens"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="google-play">11.Google Play でタブレット UI を紹介する</h2></div>
+
+<p>
+  タブレット アプリ向けの豊富で最適化された UI を作成する作業が完了したら、利用者にその UI を知ってもらいましょう。タブレット アプリを Google Play でユーザーに宣伝する主な方法を以下に示します。
+</p>
+
+<div><img class="border-img" src="{@docRoot}images/gp-tablet-quality-4.jpg"></div>
+
+
+<h4>
+  タブレット UI のスクリーンショットをアップロードする
+</h4>
+
+<p>
+  タブレット ユーザーは、アプリが電話ではなくタブレット上でどのように見えるか知りたいと思っています。タブレット アプリを開発したら、タブレットの UI のスクリーンショットを Google Play デベロッパー コンソールにアップロードするようにしてください。以下にガイドラインを示します。
+  </p>
+
+<ul style="margin-top:0;">
+  <li>スタートアップ ページやサインイン ページではなく、アプリの中核となる機能を示します。ユーザーが多くの時間を費やす画面が何であっても、スクリーンショットで中核となる機能を示すようにしてください。
+  </li>
+
+  <li>7 インチ タブレットと 10 インチ タブレットの両方のスクリーンショットを追加します。
+  </li>
+
+  <li>横方向と縦方向の両方のスクリーンショットを追加します(可能な場合)。
+  </li>
+
+  <li>可能であればスクリーン キャプチャを使用します。スクリーンショットに実際のデバイスのハードウェアを表示しないようにしてください。</li>
+
+  <li>タブレットのスクリーンショットの推奨解像度はどの方向も <strong>1280 x 720</strong> 以上です。
+  </li>
+
+  <li>7 インチ タブレットの UI のスクリーンショットを 8 枚、10 インチ タブレット用にさらに 8 枚をアップロードします。
+  </li>
+</ul>
+
+<h4>
+  アプリの説明とリリース ノートを更新する
+</h4>
+
+<ul>
+  <li>アプリの説明の中で、アプリがタブレット用に最適化した UI と優れた機能をタブレット ユーザーに提供していることを強調するようにします。タブレット UI の動作とユーザーがこれを気に入る理由について詳しく述べたものを追加します。
+  </li>
+
+  <li>アプリのリリース ノートと更新情報に、タブレットのサポートに関する情報を含めます。
+  </li>
+</ul>
+
+<h4>
+  宣伝用動画を更新する
+</h4>
+
+<p>
+  多くのユーザーは、アプリの宣伝用動画を見て、アプリがどのようなもので、楽しめそうかどうかを判断します。タブレット ユーザー向けに、宣伝用動画でアプリのタブレット UI を強調することで、この関心にしっかり対応します。以下にヒントとガイドラインを示します。
+</p>
+
+<ul>
+  <li>タブレットで実行されているアプリのスクリーンショットを 1 枚以上追加します。タブレット ユーザーに最も効果的に訴えかけるには、電話 UI とほぼ同じ比率でタブレット UI の宣伝を行うことをお勧めします。
+  </li>
+
+  <li>タブレット UI をできるだけ早い段階で動画で示します。タブレット ユーザーが電話 UI での機能のひと通りの紹介を辛抱強く待つと想定しないでください。理想的には、最初の 10 秒以内にタブレット UI を示すか、電話 UI を紹介したときと同じ時点で示して、ユーザーの関心を引くことが望まれます。
+  </li>
+
+  <li>タブレット UI を示していることをはっきり伝えるには、ハンドヘルド タブレット デバイスで実行されているアプリのスクリーンショットを含めます。
+  </li>
+
+  <li>動画の台詞やナレーションでアプリのタブレット UI を強調します。
+  </li>
+</ul>
+
+<h4>
+  プロモーション キャンペーンでタブレット UI を大きく扱う
+</h4>
+
+<p>
+  プロモーション キャンペーン、Web サイト、ソーシャル メディアへの投稿、広告、その他のすべてで、タブレット UI についてタブレット ユーザーが認識できるようにします。以下の提案を参照してください。
+</p>
+
+<ul>
+  <li>タブレットでのアプリの使用を強調するマーケティング キャンペーンまたは広告キャンペーンを行う計画を立てます。</li>
+
+  <li>プロモーション キャンペーンに、タブレット アプリを一番良い状態で示します。<a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator</a> を利用すると、7 インチ タブレットまたは 10 インチ タブレットの宣伝用画像を、選択した向きで、ドロップ シャドウと画面の光の反射の有無を選択して簡単に作ることができます。キャプチャし、ドラッグ アンド ドロップするだけで出来上がります。
+  </li>
+
+  <li>オンライン プロモーションに Google Play バッジを含めて、リンクによってユーザーがアプリのストア掲載情報に直接アクセスできるようにします。<a href="{@docRoot}distribute/tools/promote/badges.html">バッジ ジェネレータ</a>を利用してさまざまな言語のバッジを作成できます。
+  </li>
+</ul>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/showcase"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine">
+  <h2 id="google-play-best-practices">
+    12.Google Play での公開に向けたベスト プラクティスに従う
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play でタブレット アプリの提供を成功に導くためのベスト プラクティスをいくつかご紹介します。
+</p>
+
+<div>
+  <img class="border-img" src="{@docRoot}images/gp-tablet-quality-5.jpg" style="1px solid #ddd">
+</div>
+
+<h4 id="google-play-optimization-tips">
+  アプリの最適化に関するヒントを確認する
+</h4>
+
+<p>Google Play デベロッパー コンソールに [最適化のヒント] ページが設けられ、タブレット アプリの配布と品質の基本的なガイドラインへのアプリの対応状況を簡単に確認できるようになりました。このページにアクセスするには、デベロッパー コンソールにサインインし、[すべてのアプリ] からアプリをロードして左のナビゲーションから [最適化のヒント] をクリックします。</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>フィードバックの送信方法</h2>
+
+<p>最適化のヒントに関するフィードバックを送信する場合や、手動による確認を依頼する場合、下記のリンクをご利用ください。</p>
+
+<p>タブレット アプリの品質に関するガイドラインの、関連するセクションをよくお読みになってからフィードバックを送信してください。</p>
+
+<p><strong><a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">タブレット向け設計に関するお問い合わせフォーム &raquo;</a></strong></p>
+</div>
+</div>
+
+<p>デベロッパー コンソールは、基本的な品質基準を確認する一連のチェックを実行して、アプリ用の [最適化のヒント] ページを作成します。チェック中に問題が見つかった場合は、[最適化のヒント] ページで「To Do」項目として通知されます。</p>
+
+<p>アプリでタブレット エクスペリエンスを開発した場合は、[最適化のヒント] ページにアクセスして、基本的なチェックに対するアプリの対応状況を確認してください。問題が挙げられていたら、必要に応じてアプリで対処し、配布用の新しいバイナリをアップロードすることをお勧めします。 </p>
+
+<p>[最適化のヒント] ページに、アプリに該当しない、またはタブレットの品質に影響しないと思われる「To Do」問題が挙がっている場合、<a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">タブレット向け設計に関するお問い合わせフォーム &raquo;</a>を使用して当社までお知らせください。当社でアプリを確認し、必要に応じて [最適化のヒント] ページを更新します。</p>
+
+
+<h4>アプリのフィルタリングを確認する</h4>
+
+<p>
+  <a href="https://play.google.com/apps/publish/">デベロッパー コンソール</a>にアプリをアップロードしたら、APK がサポートするデバイスの一覧を確認して、ターゲットとするタブレット デバイスでアプリが除外されていないことを確認してください。
+</p>
+
+<h4>単一の APK として配布する</h4>
+
+<p>
+  すべての画面サイズ(電話とタブレット)に対して、Google Play の掲載情報を 1 つだけ使用して、単一の APK としてアプリを公開することをお勧めします。このアプローチを利用すると次の複数のメリットがもたらされます。
+</p>
+
+<ul style="margin-top:.25em;">
+  <li>検索、ブラウジング、プロモーションでユーザーがアプリを見つけやすくなります。
+  </li>
+
+  <li>ユーザーが新しいデバイスを入手した場合、アプリの自動リストアが簡単になります。
+  </li>
+
+  <li>評価とダウンロードの統計がすべてのデバイスで統合されます。
+  </li>
+
+  <li>タブレットを 2 つ目の掲載情報に公開すると、ブランドに対する評価が希薄化されることがあります。
+  </li>
+</ul>
+
+<p>
+  必要に応じて<a href="{@docRoot}google/play/publishing/multiple-apks.html">複数の APK サポート</a>を使用してアプリを配布する方法を選択できますが、通常は単一の APK を使用してすべてのデバイスに到達する方法を強くお勧めします。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine">
+  <h2 id="test-environment">
+    タブレット用のテスト環境をセットアップする
+  </h2>
+
+
+</div>
+
+<p>
+  タブレット上のアプリの品質(アプリの中核品質とタブレット アプリの品質の両方)を、テスト用に適切なハードウェアまたはエミュレータ環境を使用して評価します。
+</p>
+
+<p>
+  アプリの中核品質基準に対するテスト用の<a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">推奨されるテスト環境</a>に照らして、中サイズのタブレットと、より多いまたは少ないハードウェア/ソフトウェア機能を搭載したタブレットを含めます。
+</p>
+
+<p class="table-caption"><strong>表 1.</strong> 通常のタブレット テスト環境には、以下の表の行ごとに、リストされたいずれかのプラットフォーム バージョン、画面構成、ハードウェア機能構成を持つ、1 つまたは 2 つのデバイスが含まれます。</p>
+
+<table>
+<tr>
+<th>タイプ</th>
+<th>サイズ</th>
+<th>密度</th>
+<th>バージョン</th>
+<th>AVD スキン</th>
+</tr>
+
+<tr>
+<td>7 インチ タブレット</td>
+<td><span style="white-space:nowrap"><code>large</code> または</span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>、<br /><code>tvdpi</code></td>
+<td>Android 4.0 以降(API レベル 14 以降)</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">10 インチ</span> タブレット</td>
+<td><span style="white-space:nowrap"><code>xlarge</code> または</span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>、<br /><code>hdpi</code>、<br /><code>xhdpi</code></td>
+<td>Android 3.2 以降(API レベル 13 以降)</td>
+<td>WXGA800</td>
+</tr>
+</table>
+
+<div class="headerLine"><h2 id="related-resources">関連リソース</h2></div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/tv.jd
new file mode 100644
index 0000000..4c64184f
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/tv.jd
@@ -0,0 +1,449 @@
+page.title=TV アプリの品質
+page.metaDescription=TV は優れたエクスペリエンスを作り出すため、アプリのデザインと機能に特に注意を払う必要のある Android デバイスの成長分野です。
+page.image=/distribute/images/gp-tv-quality.png
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質基準</h2>
+  <ol>
+    <li><a href="#ux">デザインとインタラクション</a></li>
+    <li><a href="#fn">機能</a></li>
+    <li><a href="#faq">よくある質問</a></li>
+  </ol>
+
+  <h2>関連ドキュメント</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最適化する</a></li>
+  </ol>
+</div>
+</div>
+
+<div class="top-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/gp-tv-quality.png" style="width:480px;">
+</div>
+
+<p>
+  ユーザーは電話やタブレットを使用する場合と比べて、別の期待を持って TV を視聴します。通常の TV ユーザーは画面から 3 メートルほど離れて座るため、細かいディテールはそれほど重要ではなく小さなテキストは判読が困難です。ユーザーは TV から離れて座るため、画面要素にタッチするよりも、リモート コントロール デバイスを使用してナビゲーションを行ったり選択を行ったりします。こうした違いにより、優れた TV ユーザー エクスペリエンスを生み出すための要件が大きく異なります。
+</p>
+
+<p>
+  TV ユーザー向けの優れたエクスペリエンスを作り出すための最初のステップは、TV アプリ向けに最善のユーザー エクスペリエンスを作り出す方法について説明した <a href="{@docRoot}design/tv/index.html">Android TV の設計ガイドライン</a>を確認し、これに従うことです。また、TV アプリ実装の基本要件を理解するため、<a href="{@docRoot}training/tv/start/index.html">TV アプリの構築</a>トレーニングも確認する必要があります。
+</p>
+
+<p class="caution">
+  <strong>重要: </strong>優れたユーザー エクスペリエンスを実現するには、TV デバイス向けのアプリがユーザビリティの複数の固有要件に適合している必要があります。次の品質基準に適合するアプリのみが Google Play で Android TV アプリとして認められます。
+</p>
+
+<p class="note"><strong>注:</strong> TV アプリを Google Play に公開する方法について詳しくは、<a href="{@docRoot}distribute/googleplay/tv.html">Android TV への配布</a>を参照してください。</p>
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  視覚デザインとユーザー インタラクション
+  </h2>
+
+
+</div>
+
+<p>
+  これらの基準は、TV デバイスで一貫性が高く直観的、かつ楽しめるユーザー エクスペリエンスを確保するため、アプリが厳格なデザインとインタラクション パターンに従っていることを保証します。
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    タイプ
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  <th>
+    説明
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="4" id="launcher">
+    ランチャー
+  </td>
+
+  <td id="TV-LM">
+    TV-LM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリはインストール後に Android TV ランチャーにランチャー アイコンを表示します。(<a href="{@docRoot}training/tv/start/start.html#tv-activity">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LB">
+    TV-LB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは 320px x 180px のフルサイズ バナーを Android TV ランチャーにランチャー アイコンとして表示します。(<a href="{@docRoot}design/tv/patterns.html#banner">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-BN">
+    TV-BN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリのランチャー バナーにアプリの名前が含まれています。(<a href="{@docRoot}design/tv/patterns.html#banner">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LG">
+    TV-LG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリがゲームの場合、Android TV ランチャーの [ゲーム] 行に表示されます。<br>
+      (<a href="{@docRoot}training/tv/games/index.html#manifest">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="layout">
+    レイアウト
+  </td>
+
+  <td id="TV-LO">
+    TV-LO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      すべてのアプリのインターフェイスが横長方向で表示されます。(<a href="{@docRoot}training/tv/start/layouts.html#structure">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TC">
+    TV-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは 16sp 以上のサイズで主要テキストを表示します。(<a href="{@docRoot}design/tv/style.html#typography">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TA">
+    TV-TA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは 12sp 以上のサイズですべてのテキストを表示します。(<a href="{@docRoot}design/tv/style.html#typography">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-OV">
+    TV-OV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは画面の縁で部分的に切り捨てられるテキストまたは機能を表示しません。(<a href="{@docRoot}training/tv/start/layouts.html#overscan">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TR">
+    TV-TR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリでは他のアプリを部分的に隠しません。アプリは画面全体に表示され、背景は不透明です。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="navigation">
+    ナビゲーション
+  </td>
+
+  <td id="TV-DP">
+    TV-DP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリが <a href="#TV-GP">TV-GP</a> で指定されているゲームパッド コントローラを必要としない限り、アプリの機能は 5 方向 D-pad コントロールを使用してナビゲート可能です。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DK">
+    TV-DK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリが <a href="#TV-GP">TV-GP</a> で指定されているゲーム コントローラを必要とする場合、すべての機能は標準の Android ゲーム コントローラ キーを使用してナビゲート可能です。(<a href="{@docRoot}training/game-controllers/controller-input.html#button">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DM">
+    TV-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリはユーザー インターフェイス コントロールにアクセスするために、メニュー ボタンのあるリモート コントローラに依存しません。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  機能
+  </h2>
+
+
+</div>
+
+<p>
+  次の基準は、アプリが正しく設定されており、期待される機能動作が実現されていることを保証します。
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    タイプ
+  </th>
+  <th style="width:54px;">
+    テスト
+  </th>
+  <th>
+    説明
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="2" id="manifest">
+   マニフェスト
+  </td>
+
+  <td id="TV-ML">
+    TV-ML
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリのマニフェストでは、インテント タイプ{@link android.content.Intent#ACTION_MAIN} を、カテゴリ {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER} で設定しています。(<a href="{@docRoot}training/tv/start/start.html#tv-activity">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+</tr>
+  <td id="TV-MT">
+    TV-MT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリのマニフェストでは、ハードウェア機能 {@code android.hardware.touchscreen} を不要に設定しています。(<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="game-controllers">
+    ゲーム コントローラ
+  </td>
+
+  <td id="TV-GP">
+    TV-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリがその主要な入力方式としてゲーム コントローラを使用する場合、<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> マニフェスト タグで適切な要件を宣言しています。(<a href="{@docRoot}training/tv/games/index.html#gamepad">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-GC">
+    TV-GC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリがゲーム コントローラの使用に関して視覚的な説明を提供する場合、その説明は特定のブランドとは無関係で互換性のあるボタンのレイアウトを示す必要があります。(<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="advertising">
+    広告
+  </td>
+
+  <td id="TV-AP">
+    TV-AP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリでは D-pad コントロールを使用した広告とのインタラクションが可能です。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AD">
+    TV-AD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      全画面で表示し、動画ではない広告を表示する場合、アプリではユーザーが D-pad コントロールを使用して広告をすぐに消すことができます。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AU">
+    TV-AU
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      クリック可能であり、全画面表示ではなく、動画ではない広告を表示する場合、アプリは広告から Web URL へのリンクを許可しません。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AA">
+    TV-AA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      クリック可能であり、全画面表示ではなく、動画ではない広告を表示する場合、アプリは広告から TV デバイスに存在しない別のアプリへのリンクを許可しません。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="web">
+    Web コンテンツ
+  </td>
+
+  <td id="TV-WB">
+    TV-WB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Web コンテンツの場合、アプリは {@link android.webkit.WebView} コンポーネントを使用し、Web ブラウザ アプリを起動しようとしません。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="media-playback">
+    メディア再生
+  </td>
+
+  <td id="TV-NP">
+    TV-NP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      ユーザーがアプリから離れた後も音声の再生を継続する場合、アプリは<em>再生中</em>カードをホーム画面のおすすめ行に表示し、ユーザーは再生をコントロールするためアプリに戻ることができます。(<a href="{@docRoot}training/tv/playback/now-playing.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PA">
+    TV-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリが<em>再生中</em>カードを表示する場合、このカードを選択すると、ユーザーは再生を一時停止できる画面に移動します。(<a href="{@docRoot}training/tv/playback/now-playing.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PP">
+    TV-PP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリが動画または音楽コンテンツを再生する場合、再生または一時停止キーのイベントが再生中に送信されると、メディアの再生と一時停止が切り替わります。<br>
+      (<a href="{@docRoot}reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+<div class="headerLine">
+  <h2 id="faq">
+  よくある質問
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>アプリを提出した後で、一部の TV デバイスの要件を満たしていない場合にどのように知ることができますか?</strong>
+</p>
+<p>
+  アプリがこのページに記載されているユーザビリティの要件を満たしていない場合、そのアプリに関連付けられたメインの<a href="https://play.google.com/apps/publish/">Google Play デベロッパー コンソール</a> アカウントで指定したメール アドレス宛に  Play ストア チームから連絡があります。
+</p>
+<p class="caution">
+  <strong>警告:</strong> アプリに TV デバイスに<a href="{@docRoot}preview/tv/start/index.html#tv-activity">必要なマニフェスト エントリ</a>が含まれていることを確認してください。含まれていないと、アプリは TV アプリとはみなされず、TV のユーザビリティの要件について審査されません。
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>アプリのターゲットは TV デバイスだけではありません。このアプリが TV デバイスの要件に適合しない場合でも、新規アプリまたはアップデート版のアプリは電話/タブレット向けに Google Play に表示されますか?</strong>
+</p>
+<p>
+  はい。上記の要件は、TV デバイス上の Google Play ストアへの配布のみを制限します。電話、タブレット、その他のデバイスなど、他のデバイス タイプへの配布には影響しません。
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>アプリが公開に関する要件に適合した場合、TV デバイス上の Google Play ストアで入手できるようになるのはいつになりますか?</strong>
+</p>
+
+<p>
+  TV 向けの要件に適合するアプリは、Android 5.0 の正式リリース<em>後</em>、TV デバイス上の Google Play ストアに表示されます。
+</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/wear.jd
new file mode 100644
index 0000000..9fa4439
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/wear.jd
@@ -0,0 +1,398 @@
+page.title=Wear アプリの品質
+page.tags="wear","wearables","quality","guidelines"
+page.metaDescription=ウェアラブル デバイスは瞬時に情報を把握できることを追求して作成された小型のデバイスで、必要な情報を必要なタイミングで提供するために独自のアプリを必要とします。
+page.image=/distribute/images/gp-wear-quality.png
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質基準</h2>
+  <ol>
+    <li><a href="#ux">デザインとインタラクション</a></li>
+    <li><a href="#fn">機能</a></li>
+    <li><a href="#faq">よくある質問</a></li>
+  </ol>
+
+  <h2>関連ドキュメント</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">アプリを最適化する</a></li>
+    <li><a href="{@docRoot}design/patterns/notifications.html">通知</a></li>
+  </ol>
+</div>
+</div>
+
+<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;">
+
+<p>
+  Android Wear はユーザーに必要な情報を必要なタイミングで提供することを目指しています。優れた Android Wear エクスペリエンスは自動的に起動し、瞬時に情報を把握でき、ユーザーの操作は不要か、ほとんどありません。ウェアラブル デバイス向けアプリの設計は、電話やタブレット用の設計とは大きく異なります。強みと弱み、ユースケース、エルゴノミクスが異なり、これらを考慮する必要があります。
+</p>
+
+<p>
+  Wear ユーザー向けの優れたエクスペリエンスを作り出すための最初のステップは、Wear アプリ向けに最善のユーザー エクスペリエンスを作り出す方法について説明した <a href="{@docRoot}design/wear/index.html">Android Wear の設計ガイドライン</a>を確認し、これに従うことです。また、ウェアラブル デバイス向けアプリの実装の基本要件を理解するため、<a href="{@docRoot}training/building-wearables.html">Wear アプリの構築</a>トレーニングも確認する必要があります。
+</p>
+
+<p class="caution">
+  <strong>重要: </strong>優れたユーザー エクスペリエンスを実現するには、ウェアラブル デバイス向けのアプリがユーザビリティの複数の固有要件に適合している必要があります。次の品質基準に適合するアプリのみが Google Play で Android Wear アプリとして認められます。Wear アプリとして認定されると、Android Wear ユーザーは、アプリを Google Play で発見しやすくなります。
+</p>
+
+<p class="note">
+ <strong>注:</strong> Wear アプリを Google Play に公開する方法について詳しくは、<a href="{@docRoot}distribute/googleplay/wear.html">Android Wear への配布</a>を参照してください。
+</p>
+
+<div class="headerLine">
+  <h2 id="fn">
+  機能
+  </h2>
+
+
+</div>
+
+<p>
+  次の基準は、アプリが正しく設定されており、期待される機能動作が実現されていることを保証します。
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    タイプ
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    説明
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="general">
+   全般
+  </td>
+
+  <td id="WR-GL">
+    WR-GL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      ハンドヘルド デバイス用のアプリには、ウェアラブル固有の機能を使用した通知または Wear デバイス上で直接動作するウェアラブル アプリが組み込まれています。(<a href="{@docRoot}training/building-wearables.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-VF">
+    WR-VF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリにはユーザーに表示される Wear 機能が搭載されています。
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-BF">
+    WR-BF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Wear の機能が、期待どおりまたはアプリの Google Play ストアの掲載情報に記載されているとおりに機能します。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="packaging">
+   パッケージ化
+  </td>
+
+  <td id="WR-PK">
+    WR-PK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      ハンドヘルド デバイス用アプリに機能面で依存するウェアラブル デバイス用アプリは、そのハンドヘルド用アプリ内にパッケージ化されています。(<a href="{@docRoot}training/wearables/apps/packaging.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="functional-notifications">
+    通知
+  </td>
+
+  <td id="WR-FW">
+    WR-FW
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      ウェアラブル デバイス固有の機能を使用する通知は、{@code RemoteInput} または{@code WearableExtender} を使用します。(<a href="{@docRoot}training/wearables/notifications/index.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FR">
+    WR-FR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      メッセージング アプリ向け通知を使用すると、ユーザーは音声入力またはクイック応答で返答できるようになります。(<a href="{@docRoot}training/wearables/notifications/voice-input.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FG">
+    WR-FG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      同様の通知がスタック内にまとめられます。(<a href="{@docRoot}training/wearables/notifications/stacks.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="gestures">
+    ジェスチャー
+  </td>
+
+  <td id="WR-GP">
+    WR-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      フルスクリーン アクティビティでは操作終了の目的のみに長押しを使用します。 <br/> (<a href="{@docRoot}training/wearables/ui/exit.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-GD">
+    WR-GD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリがフルスクリーン アクティビティで「スワイプして消す」ジェスチャーを使用できないようにしている場合、そのアクティビティでは「長押しして消す」ジェスチャーにアプリが対応します。(<a href="{@docRoot}training/wearables/ui/exit.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="watchface">
+    ウォッチ フェイス
+  </td>
+
+  <td id="WR-WF">
+    WR-WF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      ウォッチ フェイスを含むアプリは正規のウォッチ フェイス API を使用しています。(<a href="{@docRoot}training/wearables/watch-faces/index.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ux">
+  視覚デザインとユーザー インタラクション
+  </h2>
+
+
+</div>
+
+<p>
+  これらの基準は、ウェアラブル デバイスで整合性があり、直観的、かつ楽しめるユーザー エクスペリエンスを実現するために、アプリが厳格なデザインとインタラクション パターンに従っていることを保証します。
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    タイプ
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    説明
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="layout">
+    レイアウト
+  </td>
+
+  <td id="WR-LS">
+    WR-LS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリのユーザー インターフェイスは四角形ディスプレイ向けにフォーマットされます。アプリのコンテンツは物理的表示領域内に収まり、テキストやコントロールが画面の縁で切り捨てられることはありません。 <br/> (<a href="{@docRoot}training/wearables/ui/layouts.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-LR">
+    WR-LR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリのユーザー インターフェイスは、画面の下部はめこみ(または「アゴ」)があるデバイスを含む円形ディスプレイ向けにフォーマットされます。アプリのコンテンツは物理的表示領域内に収まり、テキストやコントロールが画面の縁で切り捨てられることはありません。 <br/> (<a href="{@docRoot}training/wearables/ui/layouts.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-TC">
+    WR-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリのテキストは大きめで見やすくなっており、推奨最小サイズは 16sp です。(<a href="{@docRoot}design/wear/style.html#Typography">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="launcher">
+    ランチャー
+  </td>
+
+  <td id="WR-LN">
+    WR-LN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリのランチャー ストリングはアプリの名前です。コマンド フレーズではありません。(<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="notifications">
+    通知
+  </td>
+
+  <td id="WR-NC">
+    WR-NC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは必要に応じて確認の動画を表示します。(<a href="{@docRoot}design/wear/patterns.html#Countdown">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-NR">
+    WR-NR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知カードによって画面の右上隅にアプリのアイコンが表示されます。通知カードにメディアの再生カードなどの単一のアクション コントロールがある場合は、これは適用されません。 <br/> (<a href="{@docRoot}design/wear/style.html#Assets">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-WI">
+    WR-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知アクションは、白色アイコン、アクション タイトル、および透過背景を持ちます。 <br/> (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PB">
+    WR-PB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知の画像背景は、情報を伝えるためにのみ使用されます。カードのブランドを表示するためには使用されません。(<a href="{@docRoot}design/wear/style.html#Branding">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PR">
+    WR-PR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知の画像背景には 400x400 以上の解像度を使用します。(<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="googleplay">
+    Google Play
+  </td>
+
+  <td id="WR-GS">
+    WR-GS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      アプリは Play のストア掲載情報に 1 つ以上の Wear のスクリーンショットを含みます。(<a
+href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">こちらを参照してください</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="faq">
+  よくある質問
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>アプリを Android Wear の審査用に提出した後で、一部の Wear の要件を満たしていない場合にどのように知ることができますか?</strong>
+</p>
+<p>
+  アプリがこのページに記載されているユーザビリティの要件を満たしていない場合、そのアプリに関連付けられた<a href="https://play.google.com/apps/publish/">Google Play デベロッパー コンソール</a> アカウントで指定したメール アドレス宛に Play ストア チームから連絡があります。
+</p>
+<p class="caution">
+  <strong>警告:</strong> アプリが<a href="#fn">機能の要件</a>に適合していることを確認してください。適合していないと、アプリは Wear アプリとはみなされず、Wear の<a href="#ux">デザインとインタラクション</a>について審査されません。
+</p>
+<p class="note">
+ <strong>注:</strong> Wear アプリを Google Play に公開する方法について詳しくは、<a href="{@docRoot}distribute/googleplay/wear.html">Android Wear への配布</a>を参照してください。
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>このアプリが Wear の要件に適合しない場合でも、新規アプリまたはアップデート版のアプリは電話/タブレット向けに Google Play に表示され、ウェアラブル デバイスにインストールできますか?</strong>
+</p>
+<p>
+  はい。上記の要件は、アプリが Google Play で Android Wear アプリとして識別され、Android Wear ユーザーが発見しやすくなるかどうかのみを判断するものです。アプリが Wear アプリとして承認されなくても、電話やタブレットなどの他のデバイス タイプで利用可能です。ウェアラブル端末へのインストールも可能です。
+</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/start.jd b/docs/html-intl/intl/ja/distribute/googleplay/start.jd
new file mode 100644
index 0000000..3c5e548
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/start.jd
@@ -0,0 +1,137 @@
+page.title=アプリを公開する
+page.metaDescription=デベロッパー アカウントを登録してすぐに Google Play で公開を開始します。
+meta.tags="publishing"
+page.tags="google play", "publishing", "register", "signup"
+page.image=/distribute/images/getting-started.jpg
+
+@jd:body
+
+<div class="top-right-float" style="margin-right:24px;margin-top:-18px">
+  <a href="https://play.google.com/apps/publish/"><img src="{@docRoot}images/gp-start-button.png"></a>
+</div>
+
+<p>
+  次の手順を実行するとすぐに Google Play にアプリを公開できます。
+</p>
+
+<ul>
+  <li>Google Play 公開者アカウントを登録します。
+  </li>
+
+  <li>Google ウォレット Merchant アカウントをセットアップします(アプリやアプリ内製品を販売する場合)。
+  </li>
+
+  <li><a href="https://play.google.com/apps/publish/">Google Play デベロッパー コンソール</a>と公開用ツールを活用します。
+  </li>
+</ul>
+
+<p>
+  準備ができたら [START] ボタンを使用してデベロッパー コンソールに移動します。
+</p>
+
+<div class="headerLine">
+  <h2>
+    パブリッシャー アカウントの登録
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      ヒント
+    </h2>
+
+    <ul>
+      <li>登録するには Google アカウントが必要です。このプロセスでアカウントを作成できます。
+      </li>
+
+      <li>組織の一員である場合は、個人用アカウントではなく Google アカウントを新たに登録することを検討してください。
+      </li>
+
+      <li><a
+href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294">デベロッパーの登録がサポートされている国や地域</a>と、<a
+href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">販売者の登録がサポートされている国や地域</a>で、アプリの配布と販売が可能な範囲を確認してください。
+      </li>
+    </ul>
+  </div>
+</div>
+
+<ol>
+  <li><a href="https://play.google.com/apps/publish/">Google Play デベロッパー コンソール</a>にアクセスします。
+  </li>
+
+  <li><strong>デベロッパー ID</strong> の基本情報(名前、メール アドレスなど)を入力します。この情報は後で変更できます。
+  </li>
+
+  <li>国または地域の<strong>デベロッパー販売/配布契約</strong>を確認して同意します。Google Play で公開するアプリとストア掲載情報は、デベロッパー プログラム ポリシーと米国輸出管理法に準拠している必要があることに注意してください。
+  </li>
+
+  <li>Google ウォレットを使用して<strong> 25 米ドルの登録料</strong>を支払います。Google ウォレット アカウントをお持ちでない場合はこのプロセスで簡単にセットアップできます。
+  </li>
+
+  <li>登録情報が確認されると、登録時に入力したメール アドレスに通知が送信されます。
+  </li>
+</ol>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    Google ウォレット Merchant アカウントのセットアップ
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:200px;">
+  <img src="{@docRoot}images/gp-start-wallet-icon.png">
+</div>
+
+<p>
+  有料アプリ、アプリ内製品、サブスクリプションを販売する場合は、Google ウォレット Merchant アカウントが必要となります。このアカウントはいつでもセットアップできます。まず<a
+href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">販売者の登録がサポートされている国や地域</a>の一覧を確認してください。<br>
+  <br>
+  Google ウォレット Merchant アカウントをセットアップするには、次の手順を実行します。<br>
+  <br>
+</p>
+
+<ol>
+  <li>
+    Google Play デベロッパー コンソール(<a href="https://play.google.com/apps/publish/" target="_blank"> https://play.google.com/apps/publish/</a>)に<strong>サインイン</strong>します。
+  </li>
+
+  <li>横のナビゲーションの<strong> [売上レポート] </strong><img src="{@docRoot}images/distribute/console-reports.png">を開きます。 </li>
+
+  <li><strong>[販売者アカウントを今すぐセットアップする] </strong>をクリックします。
+  </li>
+</ol>
+
+<p>
+  これで、Google ウォレットのサイトに移動します。この手順を完了するにはビジネスに関する情報が必要となります。
+</p>
+
+<div class="headerLine">
+  <h2>
+    デベロッパー コンソールを活用する
+  </h2>
+
+
+</div>
+
+<p>
+  登録が確認されると、デベロッパー コンソールにサインインできるようになります。ここが Google Play でのアプリ公開の操作とツールのホームとなります。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine">
+<h2 id="related-resources">関連リソース</h2><hr />
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/gettingstarted"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/tv.jd b/docs/html-intl/intl/ja/distribute/googleplay/tv.jd
new file mode 100644
index 0000000..1a7558d
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/tv.jd
@@ -0,0 +1,210 @@
+page.title=Android TV への配布
+page.image=/design/tv/images/atv-home.jpg
+meta.tags="tv", "publish", "quality"
+page.tags="tv", "publish", "googleplay"
+page.metaDescription=アプリ、ゲーム、コンテンツを Android TV に配布します。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>参加方法</h2>
+<ol>
+<li><a href="#understand_guidelines">ガイドラインを把握する</a></li>
+<li><a href="#develop_app">TV 向けに優れたアプリを開発する</a></li>
+<li><a href="#test_app">TV アプリの品質をテストする</a></li>
+<li><a href="#opt_in">オプトイン</a></li>
+<li><a href="#track_review">審査をトラッキングする</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Android TV と Google Play を使用して、優れたアプリまたはゲームをリビング ルームに届けることができます。TV 向けに最適化されたストア エクスペリエンスにアプリやゲームを提供できます。新規アプリや既存のアプリを TV 向けに拡張し、Google Play の使いやすいツールとプロセスを使用して公開することができます。
+</p>
+
+<p>
+  まずこのドキュメントの各セクションで TV アプリを Google Play からユーザーに配布する方法を確認してください。<a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>を読んで、アプリが適合する必要のあるユーザビリティと品質標準に関する情報について確認してください。アプリの準備が整ったら、デベロッパー コンソールから Android TV ストアでの公開にオプトインできます。
+</p>
+
+<h2 id="how_to_participate">
+  参加方法
+</h2>
+
+<p>
+  Google Play により、TV アプリをリビング ルームの新しいユーザーに届けることができます。既存のデベロッパー コンソール アカウントと、現在の価格と販売/ 配布地域の設定を使用して、アプリを開発し、公開することができます。参加方法は簡単です。参加プロセスの概要は以下のセクションに記載されています。
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-tv-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1.ガイドラインと要件を把握する
+</h3>
+
+<p>
+  Android TV でのローンチを成功させるため、TV で優れたアプリのエクスペリエンスを作成するためのガイドラインを確認することから始めます。アプリを TV 用に拡張する場合の考え方、設計とユーザビリティの詳細については、<a href="{@docRoot}design/tv/index.html">Android TV の設計ガイドライン</a>を参照してください。
+</p>
+
+<p>
+  TV エクスペリエンスの設計を始める際には、TV アプリの品質基準を読み、理解しておく必要があります。Android TV 向けの Google Play エクスペリエンスでは、<strong>TV で使用できるアプリのみが紹介</strong>されます。基本的な一連の品質基準に適合している場合に、アプリを参加させることができます。詳細については、<a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>を参照してください。
+</p>
+
+<h3 id="develop_app">2.TV 向けに優れたアプリを開発する</h3>
+
+<p>
+  TV 向けの優れたアプリはリビング ルームでの使用を想定して設計され、Android TV の機能と、ゲーム コントローラ、D-pad、リモート コントロールなどの入力関連アクセサリを活用します。アプリは、洗練された高品質なエクスペリエンスを大画面で実現できるように細かく調整され、魅力的な機能セットをユーザーに提供します。
+</p>
+
+<p>
+  TV アプリを検討する際には、<a href="{@docRoot}training/tv/start/index.html">デベロッパー向けドキュメント</a>とユーザビリティのガイドラインを確認し、最大限にサポートする計画を立ててください。ユーザー向けに優れた Leanback エクスペリエンスを設計し、SDK に含まれる Leanback ライブラリを活用してビルドします。TV 用ユースケースに対応するため、アプリの他の部分の最適化が必要となる場合があります。開発プロセスの早い段階でこのような部分を特定しておくことをお勧めします。
+</p>
+
+<p>
+  通常、TV エクスペリエンスは、既存の電話、タブレット、その他のデバイス用のアプリの一部として、同じパッケージ名とストアの掲載情報を使用して提供することをお勧めします。この方法により、ユーザーは TV エクスペリエンスをシームレスにアップグレードすることができます。また、電話やタブレット用のアプリで得たレビューや評価を活かすこともできます。
+</p>
+
+<p>
+  TV インテント、Leanback ライブラリ、TV 固有のコードとリソースを、サポート対象のすべてのデバイスに対する単一の APK ソリューションとしてバンドルできます。必要に応じて、<a href="{@docRoot}google/play/publishing/multiple-apks.html">複数の APK サポート</a>を利用し、電話とタブレットに使用するものと同じパッケージ名とストアの掲載情報の下で、カスタム バイナリを Android TV デバイスに提供できます。
+</p>
+
+<p>
+  設計と開発プロセスを通して、ユーザー エクスペリエンスの試作品の作成とテストに適したデバイスを用意することが重要です。できるだけ早い段階で、1 つ以上の Android TV デバイスまたはエミュレータを入手し、テスト環境をセットアップすることが必要です。Android TV 環境でのテストに推奨されるハードウェア デバイスは Nexus Player です。これは <a href="http://www.google.com/intl/all/nexus/player/">Google Play から入手可能</a>であり、他のストアからも入手できます。ゲーム コントローラとその他の TV 入力デバイスも用意しておく必要があります。
+</p>
+
+<h3 id="test_app">3.TV アプリの品質をテストする</h3>
+
+<p>
+  TV アプリは、Android TV 上で正しく機能して優れた外観を備え、考えられる最高のユーザー エクスペリエンスを提供するように設計されていなければなりません。Google Play は、高品質のアプリをユーザーが Google Play で簡単に発見できるように紹介します。ユーザーがその機能を存分に活用できる Android TV アプリに参加して、アプリを提供するには次の手順に従ってください。
+</p>
+
+<ul>
+  <li>アプリの中核品質に関するガイドラインに適合させる <ul>
+      <li><a href="{@docRoot}design/index.html">Android の設計ガイドライン</a>に従います。アプリでの<a href="http://www.google.com/design/spec/material-design/introduction.html">マテリアル デザイン</a>の使用には特別な注意を払うようにしてください。
+      </li>
+
+      <li><a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質に関するガイドライン</a>ついてアプリをテストします。
+      </li>
+    </ul>
+  </li>
+  <li><a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>に関するガイドラインに適合させる <ul>
+      <li><a href="{@docRoot}training/tv/index.html">TV アプリ開発</a>用に当社が定めたベスト プラクティスに従います。</li>
+      <li>アプリをすべての <a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>基準に適合させます。</li>
+    </ul>
+  </li>
+  <li>シンプルかつ高度なユーザビリティの実現を目指す</li>
+</ul>
+
+<h3 id="opt_in">4.Android TV にオプトインし、公開する</h3>
+
+<p>
+  リリース対応 APK を作成し、これが <a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>ガイドラインのすべてに適合していることをテストして確認したら、デベロッパー コンソールにアップロードします。ストアの掲載情報をTV のスクリーンショットと TV バナーで更新し、必要に応じて配布オプションを設定します。Google Play でのローンチに向けた準備方法について不明点がある場合は、<a href="{@docRoot}distribute/googleplay/publish/preparing.html">ローンチ チェックリスト</a>を参照してください。
+</p>
+
+<p>
+  Android TV のユーザーにアプリを公開する前に、デベロッパー コンソールの <strong>[価格と販売/ 配布地域]</strong> セクションから Android TV にオプトインする必要があります。オプトインは、Android TV ユーザーがアプリを Google Play から利用できるようにして、アプリが <a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>ガイドラインに適合していることを意味します。
+</p>
+
+<p>
+  オプトインは、APK のアップロード時に自動でチェックされる次の2 つの事前品質基準にアプリが適合している場合に限り可能です。
+</p>
+
+<ul>
+  <li>アプリのマニフェストには、インテント タイプ <a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a> が、カテゴリ <a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"><code>CATEGORY_LEANBACK_LAUNCHER</code></a> で含まれている必要があります。詳細については<a href="{@docRoot}training/tv/start/start.html#tv-activity">こちら</a>を参照してください。
+  </li>
+
+  <li>アプリはタッチスクリーンを必要としないことを宣言する必要があります。マニフェストでは、<code>android.hardware.touchscreen</code> ハードウェアを <code>android:required="false”</code> で宣言する必要があります。詳細については<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">こちら</a>を参照してください。
+  </li>
+</ul>
+
+<p>
+  アプリが事前基準に適合している場合、以下に示す Android TV のオプトイン チェックボックスが表示されます。オプトイン チェックボックスが使用できない場合、APK が事前基準に適合していることを確認してください。
+</p>
+
+<p>
+  オプトインして変更内容を保存したら、アプリを通常どおり公開できます。アプリを Android TV ユーザーが利用できるようにする前に、Google Play はアプリを <a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>基準に対する審査にかけ、その結果を通知します。アプリの承認状況をトラッキングする方法の詳細については、次のセクションを参照してください。
+</p>
+
+<p>
+  アプリが <a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>基準に適合している場合、Google Play はそのアプリを Android TV ユーザーが利用できるようにします。また、アプリのコレクションとプロモーションで、注目されるように特別に扱われる可能性があります。アプリが Android TV 向けに設計されていることを Google Play の全ユーザーに通知するため、Google Play ではアプリのストア掲載情報をTV バッジで修飾します。
+</p>
+
+<p>
+  オプトインと審査は Google Play ストアでの他のデバイス(電話やタブレットなど)に対するアプリの使用可能状況に影響しないことに注意してください。アプリは公開後すぐに利用可能となります。
+</p>
+
+<p>
+  デベロッパー コンソールで Android TV にオプトインするには、次の手順を実行します。
+</p>
+
+<ol>
+  <li>アプリをすべての <a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>基準に適合させます。
+  </li>
+
+  <li>TV のスクリーンショットとバナー画像をアプリのストアの掲載情報に追加します。
+  </li>
+
+  <li><strong>[すべてのアプリ]</strong> ページでオプトインするアプリをクリックします。
+  </li>
+
+  <li><strong>[価格と販売/配布地域] </strong>で<em> [Android TV] </em>とオプトイン チェックボックスまでスクロール ダウンします。
+  </li>
+
+  <li><em>[アプリを Android TV に配布する]</em> の横にあるチェックボックスをクリックします。
+  </li>
+
+  <li><strong>[保存]</strong> をクリックして変更内容を保存します。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-tv-opt-in.png">
+  <p class="caption">
+    <strong>TV のオプトイン: </strong>デベロッパー コンソールからオプトインすることにより、Android TV にアプリが含まれます。
+  </p>
+</div>
+
+<h3 id="track_review">5.審査と承認をトラッキングする</h3>
+
+<p>
+  アプリが上述の Android TV 向けの技術上の基準と品質基準に適合すると、ユーザーはそのアプリを Android TV で活用できるようになります。アプリが基準を満たしていない場合、<strong>デベロッパー アカウント アドレスに送られた通知メール</strong>を受け取ります。このメールには対処が必要な領域の要約が記載されています。必要な調整を行ったら、デベロッパー コンソールにアプリの新規バージョンをアップロードできます。 
+</p>
+
+<p>
+  アプリの審査状況と承認状況は、デベロッパー コンソールで、アプリの <strong>[価格と販売/配布地域]</strong> ページ内の <em>[Android TV]</em> の下で随時確認できます。
+</p>
+
+<p>
+  承認状況は次の 3 つのいずれかとなります。
+</p>
+
+<ul>
+  <li>
+    <em>保留</em> — アプリは審査部門に送られ、審査がまだ完了していません。
+  </li>
+
+  <li>
+    <em>承認</em> — アプリが審査され、承認されました。アプリは Android TV ユーザーが直接利用できるようになります。 
+  </li>
+
+  <li>
+    <em>却下</em> — アプリが審査され、承認されませんでした。アプリが承認されなかった理由について詳しくは通知メールを確認してください。問題に対処して、オプトインと公開を再度行って、別の審査を受けることができます。
+  </li>
+</ul>
+
+<p>アプリの評価方法の詳細については、<a href="{@docRoot}distribute/essentials/quality/tv.html">TV アプリの品質</a>に関するドキュメントを参照してください。 </p>
+
+
+  <h3>関連リソース</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:tvlanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div> 
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/wear.jd b/docs/html-intl/intl/ja/distribute/googleplay/wear.jd
new file mode 100644
index 0000000..4e0196e
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/googleplay/wear.jd
@@ -0,0 +1,199 @@
+page.title=Android Wear への配布
+page.image=/design/media/wear/ContextualExample.008_2x.png
+meta.tags="wear", "publish", "quality"
+page.tags="wear", "publish", "googleplay"
+page.metaDescription=アプリ、ゲーム、コンテンツを Android Wear に配布します。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>参加方法</h2>
+<ol>
+<li><a href="#understand_guidelines">ガイドラインを把握する</a></li>
+<li><a href="#develop_app">Wear 向けに優れたアプリを開発する</a></li>
+<li><a href="#test_app">Wear アプリの品質をテストする</a></li>
+<li><a href="#opt_in">オプトイン</a></li>
+<li><a href="#track_review">審査をトラッキングする</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Android Wear と Google Play を使用して、優れたアプリをユーザーに届けることができます。すべてのアプリが Android Wear デバイスに基本的な通知を送信できますが、さらに踏み込んで使いこなすことができます。アプリを拡張してカスタム形式の Wear インタラクションをサポートし、すべての Wear デバイスで洗練された魅力的なユーザー エクスペリエンスを実現します。アプリがハンドセットのアプリの中核品質に関するガイドラインに適合し、Android Wear デバイス向けの高品質なエクスペリエンスを提供していると、Google Play でアプリが発見されやすくなります。
+</p>
+
+<p>
+  まずこのドキュメントの各セクションで Wear アプリを Google Play からユーザーに配布する方法を確認してください。<a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>を読んで、アプリが適合する必要のあるユーザビリティと品質の標準に関する情報について確認してください。アプリの準備が整ったら、デベロッパー コンソールから Android Wear アプリとして指定されるようにオプトインできます。
+</p>
+
+<h2 id="how_to_participate">
+  参加方法
+</h2>
+
+<p>
+  Google Play では、Wear ユーザーが Wear アプリをさらに見つけやすくすることができます。既存のデベロッパー コンソール アカウントと、現在の価格と販売/ 配布地域の設定を使用して、アプリを開発し、公開することができます。参加方法は簡単です。参加プロセスの概要は以下のセクションに記載されています。
+</p>
+
+<h3 id="understand_guidelines">
+  1.ガイドラインと要件を把握する
+</h3>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-wear-process.png">
+</div>
+
+<p>
+  Android Wear でのローンチを成功させるため、初めに Wear で優れたアプリのエクスペリエンスを作成するためのガイドラインを確認します。アプリを Wear 用に拡張する場合の考え方、設計とユーザビリティの詳細については、<a href="{@docRoot}design/wear/index.html">Android Wear の設計ガイドライン</a>を参照してください。
+</p>
+
+<p>
+  Wear エクスペリエンスの設計を始める際には、Wear アプリの品質基準を読み、理解しておく必要があります。Wear で使用できるアプリのみが Google Play で Wear アプリとして指定されます。アプリが基本的な一連の品質基準に適合している場合に参加できます。詳細については<a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>を参照してください。
+</p>
+
+<h3 id="develop_app">2.Wear 向けに優れたアプリを開発する</h3>
+
+<p>
+ガイドラインを読み終わったら、次にアプリの開発に着手します。次のセクションで Wear 用に優れたアプリのエクスペリエンスの構築を開始する方法について説明します。
+</p>
+
+<h4>設計から始める</h4>
+
+<p>
+  Android Wear はユーザーに必要な情報を必要なタイミングで提供することを目指しています。優れた Android Wear エクスペリエンスは自動的に起動し、瞬時に情報を把握でき、ユーザーの操作は不要か、ほとんどありません。すべてのアプリは変更なしで Wear デバイスに基本的な通知を送信できますが、Wear 向けに作成された優れたアプリは洗練された高品質なエクスペリエンスを実現するように細かく調整され、さまざまな画面のレイアウトで動作し、魅力的な機能セットをユーザーに提供します。
+</p>
+
+<p>
+  Wear アプリを検討する際には、<a href="{@docRoot}training/building-wearables.html">デベロッパー向けドキュメント</a>と<a href="{@docRoot}design/wear/index.html">ユーザビリティのガイドライン</a>を確認し、これらを最大限に活用する計画を立ててください。SDK とサポート ライブラリで提供される API を使用して、ユーザー向けに優れた通知エクスペリエンスを設計できます。ウェアラブル デバイスで直接動作するアプリを作成することも選択できます。
+</p>
+
+<h4>アプリをパッケージ化する</h4>
+
+<p>
+  Wear エクスペリエンスは、電話、タブレット、その他のデバイス用の既存のアプリの一部として、同じパッケージ名とストア掲載情報を使用して配布することをお勧めします。この方法により、ユーザーは Wear エクスペリエンスをシームレスにアップグレードすることができます。また、電話やタブレットで得たレビューや評価を活かすこともできます。ウェアラブル アプリが機能面で依存するアプリがある場合、常にそのアプリ内にパッケージ化する必要があります。パッケージ化の方法については、<a href="{@docRoot}training/wearables/apps/packaging.html">ウェアラブル アプリのパッケージ化</a>をお読みください。
+</p>
+
+<h4>さまざまなデバイスでテストする</h4>
+
+<p>
+  設計と開発プロセスを通して、ユーザー エクスペリエンスの試作品の作成とテストに適したデバイスを用意することが重要です。できるだけ早い段階で、1 つ以上の Android Wear デバイスを入手するか、さまざまなエミュレータ設定で開発し、テスト環境をセットアップすることを強く勧めします。四角形レイアウトと円形レイアウトの両方で設計を最適化することが重要です。
+</p>
+
+<h3 id="test_app">3.Wear アプリの品質をテストする</h3>
+
+<p>
+  Wear アプリは Android Wear で正しく機能して優れた外観を備えて、考えられる最高のユーザー エクスペリエンスを提供するように設計されていなければなりません。Google Play では、厳選された高品質の Wear アプリが発見されやすいように紹介されます。ユーザーがその機能を存分に活用できる Android Wear アプリに参加して、アプリを提供するには次の手順に従ってください。
+</p>
+
+<ul>
+  <li>アプリの中核品質に関するガイドラインに適合させる <ul>
+      <li><a href="{@docRoot}design/index.html">Android の設計ガイドライン</a>に従います。アプリでの<a href="http://www.google.com/design/spec/material-design/introduction.html">マテリアル デザイン</a>の使用には特別な注意を払うようにしてください。
+      </li>
+
+      <li><a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質に関するガイドライン</a>ついてアプリをテストします。
+      </li>
+    </ul>
+  </li>
+  <li><a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>基準に適合させる <ul>
+      <li><a href="{@docRoot}training/building-wearables.html">Wear アプリ開発</a>用に当社が定めたベスト プラクティスに従います。</li>
+      <li>アプリをすべての <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>基準に適合させます。</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4.Android Wear にオプトインし、公開する</h3>
+
+<p>
+  リリース対応 APK を作成し、これが <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>基準のすべてに適合していることをテストして確認したら、デベロッパー コンソールにアップロードします。ストアの掲載情報を Wear のスクリーンショットで更新し、必要に応じて配布オプションを設定します。Google Play でのローンチに向けた準備方法について不明点がある場合は、<a href="{@docRoot}distribute/googleplay/publish/preparing.html">ローンチ チェックリスト</a>を参照してください。
+</p>
+
+<p>
+  Android Wear のユーザーにアプリを公開する前に、デベロッパー コンソールの<strong>[価格と販売/ 配布地域]</strong> セクションから Android Wear にオプトインできます。オプトインは、Android Wear ユーザーがアプリを Google Play からさらに発見しやすくして、アプリが <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>基準に適合していることを意味します。
+</p>
+
+<p>
+  オプトインして変更内容を保存したら、アプリを通常どおり公開できます。さらに、Google Play はアプリを <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>基準に対する審査にかけ、その結果を通知します。アプリの承認状況をトラッキングする方法の詳細については、次のセクションを参照してください。
+</p>
+
+<p>
+  アプリがすべての <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>基準に適合している場合、Google Play はそのアプリを Android Wear ユーザーがさらに簡単に発見できるようにします。また、アプリのコレクションとプロモーションで、注目されるように特別に扱われる可能性があります。
+</p>
+
+<p>
+  オプトインと審査は Google Play ストアでのアプリの使用可能状況に影響しないことに注意してください。アプリは公開後すぐに使用可能となります。
+</p>
+
+<p>
+  デベロッパー コンソールで Android Wear にオプトインするには、次の手順を実行します。
+</p>
+
+<ol>
+  <li>アプリをすべての <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>基準に適合させます。
+  </li>
+
+  <li>Wear のスクリーンショットをアプリのストアの掲載情報に追加します。
+  </li>
+
+  <li><strong>[すべてのアプリ]</strong> ページでオプトインするアプリをクリックします。
+  </li>
+
+  <li><strong>[価格と販売/配布地域] </strong>で<em> [Android Wear] </em>とオプトイン チェックボックスまでスクロール ダウンします。
+  </li>
+
+  <li><em>[アプリを Android Wear に配布する]</em> の横にあるチェックボックスをクリックします。
+  </li>
+
+  <li><strong>[保存]</strong> をクリックして配布と販売/配布地域の変更内容を保存します。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-wear-opt-in.png">
+  <p class="caption">
+    <strong>Wear 用オプトイン:</strong>デベロッパー コンソールでオプトインすることにより、Android Wear にアプリが含まれます。
+  </p>
+</div>
+
+<h3 id="track_review">5.審査と承認をトラッキングする</h3>
+
+<p>
+  アプリが上述の Android Wear 向けの技術上の基準と品質基準に適合すると、そのアプリは Android Wear で発見されやすくなります。アプリが基準に適合しない場合、<strong>デベロッパー アカウント アドレスに送られた通知メール</strong>を受け取ります。このメールには対処が必要な領域の要約が記載されています。必要な調整を行ったら、デベロッパー コンソールにアプリの新規バージョンをアップロードできます。
+</p>
+
+<p>
+  アプリの審査状況と承認状況は、アプリの <em>[価格と販売/配布地域] </em>ページ内の <strong>[Android Wear]</strong> の下にあるデベロッパー コンソールで随時確認できます。
+</p>
+
+<p>
+  承認状況は次の 3 つのいずれかとなります。
+</p>
+
+<ul>
+  <li>
+    <em>保留</em> — アプリは審査部門に送られ、審査がまだ完了していません。
+  </li>
+
+  <li>
+    <em>承認</em> — アプリが審査され、承認されました。アプリは Android Wear ユーザーからさらに発見されやすくなります。
+  </li>
+
+  <li>
+    <em>却下</em> — アプリが審査され、承認されませんでした。アプリが承認されなかった理由について詳しくは通知メールを確認してください。問題に対処して、オプトインと公開を再度行って、別の審査を受けることができます。
+  </li>
+</ul>
+
+<p>アプリの評価方法の詳細については、<a href="{@docRoot}distribute/essentials/quality/wear.html">Wear アプリの品質</a>に関するドキュメントを参照してください。 </p>
+
+
+  <h3>関連リソース</h3>
+
+  <div class="resource-widget resource-flow-layout col-13"
+    data-query="collection:wearlanding"
+    data-cardSizes="6x2"
+    data-maxResults="3">
+  </div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/ja/distribute/tools/launch-checklist.jd
new file mode 100644
index 0000000..b1394f8
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/tools/launch-checklist.jd
@@ -0,0 +1,792 @@
+page.title=ローンチ チェックリスト
+page.metaDescription=アプリをユーザーに配布する全プロセスの重要な概要。このチェックリストを開発の初期に確認し、Google Play でのローンチを成功させる計画を立てる際に役立ててください。
+meta.tags="localizing, publishing, disttools"
+page.tags="launch, publishing, Google Play"
+page.image=distribute/images/launch-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>チェックリスト</h2>
+    <ol>
+      <li><a href="#understand-publishing">1.公開プロセスを理解する</a></li>
+      <li><a href="#understand-policies">2.Google Play ポリシーを理解する</a></li>
+      <li><a href="#test-quality">3.アプリの中核品質をテストする</a></li>
+      <li><a href="#determine-rating">4.コンテンツ レーティングを決定する</a></li>
+      <li><a href="#determine-country">5.配布する国を決定する</a></li>
+      <li><a href="#confirm-size">6.全体のサイズを確認する</a></li>
+      <li><a href="#confirm-platform">7.プラットフォームと画面範囲を確認する</a></li>
+      <li><a href="#decide-price">8.無料にするか有料にするか判断する</a></li>
+      <li><a href="#consider-billing">9.アプリ内課金を使用する</a></li>
+      <li><a href="#set-prices">10.商品の価格を設定する</a></li>
+      <li><a href="#start-localization">11.ローカライズを開始する</a></li>
+      <li><a href="#prepare-graphics">12.宣伝用画像、スクリーンショット、動画を準備する</a></li>
+      <li><a href="#build-upload">13.リリース対応 APK をビルドする</a></li>
+      <li><a href="#plan-beta">14.ベータ版リリースを計画する</a></li>
+      <li><a href="#complete-details">15.ストア掲載情報を完成させる</a></li>
+      <li><a href="#use-badges">16.Google Play のバッジとリンクを使用する</a></li>
+      <li><a href="#final-checks">17.最終チェックと行い公開する</a></li>
+      <li><a href="#support-users">18.ローンチ後にユーザーをサポートする</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg"></div>
+
+<p>
+  Google Play にアプリを公開してユーザーに配布する前に、アプリを動作可能状態にしてテストし、宣伝素材を準備する必要があります。
+</p>
+
+<p>
+  このページを利用して、Google Play でのアプリの公開プロセスを理解し、製品のローンチを成功させる準備を整えることができます。署名済みのリリース対応アプリケーション パッケージ(APK)の作成、アプリの要件の把握、各アプリの製品ページとグラフィック アセットの作成などの、Google Play でアプリを公開する前に完了しておく必要のあるいくつかの作業についてまとめています。
+</p>
+
+<p>
+  準備作業と公開作業に番号を振り、作業の流れを大まかに把握できるようにしています。都合が良い順序で作業を進めても構いません。また、適宜手順をスキップしても構いません。
+</p>
+
+<p>
+  公開に向けての手順では、さまざまなサポート リソースがご利用になれます。関連リンクは手順ごとに提供されます。
+</p>
+
+<div class="headerLine">
+  <h2 id="understand-publishing">
+    1.公開プロセスを理解する
+  </h2>
+
+
+</div>
+
+<p>
+  このチェックリストの各手順を開始する前に、公開までのワークフロー全体を読んで把握し、プロセスの仕組みを理解してください。特に、開発チームはすべての Android アプリに共通するプロセスを使用して、アプリのリリース準備を整える必要があります。<a href="{@docRoot}tools/publishing/publishing_overview.html">公開までのワークフローのドキュメント</a>に、公開の仕組みと APK のリリース準備を整える方法が詳しく記載されています。
+</p>
+
+<p>
+  公開プロセスの概要を理解したら、さらに読み進めて Google Play にアプリを公開する際に考慮すべき問題を把握してください。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/understanding"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="understand-policies">
+    2.Google Play ポリシーと合意事項を理解する
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 登録時に了承したプログラム ポリシーを理解し、これに従う必要があります。Google Play はポリシーを適用し、ポリシー違反があった場合はアプリを保留にしたり、違反を繰り返した場合はデベロッパー アカウントを停止したりすることがあります。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/policies" data-sortorder=
+"-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-quality">
+    3.品質をテストする
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play にアプリを公開する前に、そのアプリが、ターゲットとしているすべてのデバイスですべての Android アプリの基本的な品質基準を満たしているか確認することが重要です。テスト環境を設定し、一連の簡潔な<strong>すべてのアプリに適用される品質基準</strong>に対してアプリをテストすることで、アプリの品質を確認できます。詳細については、<a href="{@docRoot}distribute/essentials/quality/core.html">アプリの中核品質</a>ガイドラインを参照してください。
+</p>
+
+<p>
+  アプリがタブレット デバイスをターゲットとしている場合、タブレットの利用者に豊富で魅力的なエクスペリエンスを提供する必要があります。<a href="{@docRoot}distribute/essentials/quality/tablets.html">タブレット アプリの品質</a>ガイドラインを参照してください。タブレット用にアプリを最適化する際の推奨事項が記載されています。
+</p>
+
+<p>
+  アプリを Google Play for Education で利用できるようにする予定の場合、幼稚園から高校に至る授業に適したものであり、卓越した教育的価値を提供する必要があります。教育アプリが示すべき特徴については、<a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">教育ガイドライン</a>を参照してください。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/quality" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-rating">
+    4.アプリのコンテンツ レーティングを決定する
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play では、アプリ向けにコンテンツ レーティングを設定する必要があります。これは、Google Play ユーザーにユーザー成熟度を通知するものです。アプリを公開する前に、使用するレーティング レベルを確定する必要があります。次のコンテンツ レーティング レベルが使用できます。
+</p>
+
+<ul>
+  <li>
+    <p>
+      全ユーザー対象
+    </p>
+  </li>
+
+  <li>
+    <p>
+      ユーザー成熟度 - 低
+    </p>
+  </li>
+
+  <li>
+    <p>
+      ユーザー成熟度 - 中
+    </p>
+  </li>
+
+  <li>
+    <p>
+      ユーザー成熟度 - 高
+    </p>
+  </li>
+</ul>
+
+<p>
+  Android ユーザーは、Android デバイス上でブラウジングに必要なユーザー成熟度を設定できます。Google Play はその設定に基づきアプリをフィルタリングするため、選択したコンテンツ レーティングがユーザーへのアプリの配布に影響することがあります。デベロッパー コンソールでアプリのコンテンツ レーティングを割り当てる(または変更する)ことができます。アプリのライブラリでは変更は不要です。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/rating" data-sortorder=
+"-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-country">
+    5.配布する国を決定する
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play では、アプリの配布先の国と地域を管理できます。幅広い地域でアクセスされ、最大級の潜在的利用者ベースを得るために、通常は配布が可能なすべての国と地域にアプリを配布できます。ただし、ビジネス ニーズ、アプリの要件、ローンチに関する依存関係により、配布先から 1 つ以上の国を除外する必要がある場合があります。
+</p>
+
+<p>
+  次の項目に影響するため、早期にアプリの配布先の国を正確に指定することが重要です。
+</p>
+
+<ul>
+  <li>
+    <p>
+      アプリのローカライズ リソースの必要性
+    </p>
+  </li>
+
+  <li>
+    <p>
+      デベロッパー コンソールでのアプリの説明のローカライズの必要性
+    </p>
+  </li>
+
+  <li>
+    <p>
+      特定の国で固有である可能性があるアプリの法的要件
+    </p>
+  </li>
+
+  <li>
+    <p>
+      タイム ゾーン サポート、現地価格設定など
+    </p>
+  </li>
+</ul>
+
+<p>
+  ターゲットに予定している国について、アプリと Google Play の掲載情報の詳細の両方でローカライズの必要性を判断し、ローンチ予定日までの十分な余裕を持ってローカライズ作業を開始します。
+</p>
+
+<p>
+  ローカライズ プロセスの主要な手順と考慮事項については<a href="{@docRoot}distribute/tools/localization-checklist.html">ローカライズのチェックリスト</a>を参照してください。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/country" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-size">
+    6.アプリ全体のサイズを確認する
+  </h2>
+
+
+</div>
+
+<p>
+  アプリ全体のサイズは、そのデザインと Google Play での公開方法に影響する場合があります。現時点では、Google Play に公開される APK の最大サイズは<strong> 50 MB </strong>です。アプリがこのサイズよりも大きい場合や、2 次ダウンロードを提供したい場合、<a href="{@docRoot}google/play/expansion-files.html">APK 拡張ファイル</a>を使用できます。これは、Google Play がサーバー インフラストラクチャに無料でホスティングし、デバイスへのダウンロードを自動で処理するものです。
+</p>
+
+<ul>
+  <li>
+    <p>
+      Google Play に公開される APK の最大サイズは 50 MB です。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      最大 2 個の APK 拡張ファイルを使用できます。各 APK に対する各拡張ファイルの最大サイズは 2GB です。
+    </p>
+  </li>
+</ul>
+
+<p>
+  APK 拡張ファイルの使用は、サイズの大きいアプリを配信する便利でコスト効率の高い方法です。ただし、APK 拡張ファイルを使用するには、アプリのバイナリに変更を加える必要があるため、この変更を行ってからリリース対応 APK を作成する必要があります。
+</p>
+
+<p>
+  アプリのバイナリのサイズを最小化するには、リリース対応 APK を作成するときに、コード上で <a href="{@docRoot}tools/help/proguard.html">Proguard</a> ツールまたは同等の難読化ツールを実行する必要があります。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/size" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-platform">
+    7.アプリのプラットフォームと画面互換性範囲を確認する
+  </h2>
+
+
+</div>
+
+<p>
+  アプリを公開する前に、アプリがターゲットとしている Android プラットフォームの各バージョンとデバイスの画面サイズで正しく実行できるように設計されているか確認することが重要です。
+</p>
+
+<p>
+  Android プラットフォームのバージョンは、アプリの互換性の観点から<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels"> API レベル</a>で定義されます。<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;minSdkVersion&gt;</a> を使用して、アプリと互換性のある最低限のバージョンを確定する必要があります。これは、アプリが公開される際の Android デバイスへのアプリの配布に影響します。
+</p>
+
+<p>
+  画面サイズについては、サポート対象の画面サイズ幅とピクセル密度の範囲で、アプリが正しく動作し、表示も問題ないことを確認する必要があります。複数の画面サイズに対応するスケーラブルなサポートを提供するため、<a href="{@docRoot}guide/practices/screens_support.html">複数画面のサポート</a>に記載されているアドバイスに従う必要があります。スケーラブルなサポートを提供できない場合、<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a> を使用してアプリがサポートする最小画面サイズを宣言してください。これに応じて Google Play はアプリの利用可能性を限定し、宣言された画面サイズ以上のデバイスでアプリが利用できるようにします。
+</p>
+
+<p>
+  すべての Android デバイスにわたる Android プラットフォームのバージョンと画面サイズに関する最新のデバイス普及率をさらに理解するには、<a href="{@docRoot}about/dashboards/index.html">デバイス ダッシュボード</a>のグラフを参照してください。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/platform" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="decide-price">
+    8.アプリを無料にするか有料にするか判断する
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-launch-checklist-1.png">
+</div>
+
+<p>
+  Google Play では、アプリを無料ダウンロードまたは有料ダウンロードとして公開できます。無料アプリは Google Play のすべての Android ユーザーがダウンロードできます。有料アプリをダウンロードできるのは、有料ダウンロードをサポートする国のユーザーで、クレジット カードやキャリア直接課金などの Google Play での支払い方法を登録しているユーザーだけです。
+</p>
+
+<p>
+  アプリの無料/有料を決定することは重要です。Goolgle Play では<strong>無料アプリは永続的に無料にする必要がある</strong>ためです。
+</p>
+
+<ul>
+  <li>
+    <p>
+      無料アプリとしてアプリを公開すると、これを有料アプリに変更することはできません。ただし、Google Play の<a href="{@docRoot}google/play/billing/index.html">アプリ内課金</a>サービスを使用して、<a href="{@docRoot}google/play/billing/billing_overview.html#products">アプリ内製品</a>と<a href="{@docRoot}google/play/billing/billing_subscriptions.html">サブスクリプション</a>の販売は引き続き可能です。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      有料アプリとしてアプリを公開すると、いつでも無料アプリに変えることが<em>できます</em>(<strong>ただし無料から有料に戻すことはできません</strong>)。アプリ内製品とサブスクリプションの販売は引き続き可能です。
+    </p>
+  </li>
+</ul>
+
+<p>
+  アプリが有料の場合、またはアプリ内製品を販売する場合、公開前に <a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">Google ウォレット Merchant アカウントを設定する</a>必要があります。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/price" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="consider-billing">
+    9.アプリ内課金の使用を検討する
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play の<a href="{@docRoot}google/play/billing/index.html">アプリ内課金</a>により、アプリ内でデジタル コンテンツを販売できます。このサービスを使用すると、メディア ファイルや写真といったダウンロード可能なコンテンツや、ゲームのレベルやポーションのような仮想コンテンツなどの幅広いコンテンツを販売できます。アプリ内課金サービスを利用して、アプリ内から 1 回限りの購入とサブスクリプションを販売できます。これはアプリがインストールされている間のアプリの収益化に役立ちます。
+</p>
+
+<p>
+  アプリを収益化し、エンゲージメントを構築する方法をいくつか探している場合は、アプリ内課金や Instant Buy を検討してください。これらのサービスはユーザーとデベロッパーのどちらでも非常に一般的になっています。アプリ内課金や Instant Buyを使用する場合は、アプリのバイナリに変更を加える必要があるため、実装を完了してテストしてからリリース対応 APK を作成する必要があります。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/purchasemethod"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="set-prices">
+    10.商品の価格を設定する
+  </h2>
+
+
+</div>
+
+<p>
+  アプリが有料の場合、またはアプリ内製品や物理的商品を販売する場合、Google Play では世界中のマーケットのユーザー向けにさまざまな通貨で製品の価格を設定できます。価格は個別に別々の通貨で設定できるため、マーケットの状況や為替レートに応じて価格を柔軟に設定できます。
+</p>
+
+<p>
+  公開の前に、商品の価格を設定する方法とさまざまな通貨での価格を検討してください。追って、デベロッパー コンソールを使用して利用可能なすべての通貨で価格を設定できます。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/setprice" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="start-localization">
+    11.ローカライズを開始する
+  </h2>
+
+
+</div>
+
+<p>
+  ターゲットに予定している国について、ローカライズの必要性を調査し、アプリが国際化対応であることを確認し、ローンチ予定日までの十分な余裕を持ってローカライズ作業を開始することをお勧めします。
+</p>
+
+<p>
+  アプリの設計の他に、ローカライズに関して次の 3 点を考慮してください。
+</p>
+
+<ul>
+  <li>
+    <p>
+      アプリのストリング、画像、その他のリソースのローカライズ。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Google Play に掲載する、アプリのストア掲載情報の詳細のローカライズ。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      ストア掲載情報に添付するアプリの画像アセット、スクリーンショット、動画のローカライズ。
+    </p>
+  </li>
+</ul>
+
+<p>
+  ローカライズ プロセスの主要な手順と考慮事項については<a href="{@docRoot}distribute/tools/localization-checklist.html">ローカライズのチェックリスト</a>を参照してください。
+</p>
+
+<p>
+  ストア掲載情報をローカライズするには、アプリのタイトル、説明、宣伝用テキストを新規に作成して最終版を決定します。これらすべてを収集してローカライズ作業に回します。アプリにアップデートがあった場合の「最新の変更」テキストも翻訳できます(任意)。追って、ローカライズした掲載情報の詳細をデベロッパー コンソールに追加するか、掲載情報の詳細をサポート対象言語へ自動翻訳する Google Play の機能を使うこともできます。
+</p>
+
+<p>
+  グローバルな顧客基盤に対してアプリの掲載情報を魅力的なものにするには、宣伝用画像、スクリーンショット、動画のローカライズ版を作成することが重要です。たとえば、アプリのメイン ビジュアルには、最大限の宣伝効果を得るために翻訳が必要なテキストが含まれていることがあります。言語ごとに異なるバージョンの宣伝用画像を作成し、これをデベロッパー コンソールにアップロードできます。宣伝用の動画を提供する場合、そのローカライズ版を作成し、サポートする言語ごとに適切なローカライズ動画へのリンクを追加できます。
+</p>
+
+<p>
+  翻訳が完了したら、それを必要に応じてアプリ リソースに移動し、正しく読み込まれるかどうかテストします。アプリの掲載情報詳細の翻訳版を保存し、追ってアセットをアップロードしてストア掲載情報を設定する際に使用します。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/localization"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="prepare-graphics">
+    12.宣伝用画像、スクリーンショット、動画を準備する
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 上に公開する際に、アプリやブランドを紹介するさまざまな高品質の画像アセットを提供できます。公開後、これらの画像はストアの情報掲載ページ、検索結果などあらゆる場所に表示されます。これらの画像アセットは、ユーザーを引き付ける優れたストアの情報掲載ページの重要な部分となるため、このアセットの制作をプロに依頼することの検討をお勧めします。スクリーンショットと動画も、アプリの外観や使用方法、遊び方やアプリの特長を示すものであるため、非常に重要です。
+</p>
+
+<p>
+  すべての画像アセットは、見やすく、カラフルで関心を引く方法でアプリやブランドを強調するように設計してください。アセットは、ユーザーがダウンロードしたら [すべてのアプリ] ランチャーで見つけるものと同じロゴとアイコンを示す必要があります。また、画像アセットは、自分のストア情報掲載ページに表示される公開しているすべてのアプリの画像アセットと調和している必要があります。
+</p>
+
+<p>
+  全世界のユーザーにより効果的にアプリを売り込めるようにするため、Google Play では宣伝用画像、スクリーンショット、動画のローカライズ版の作成が可能であり、これらをデベロッパー コンソールにアップロードできます。ユーザーがアプリのストア掲載情報にアクセスすると、Google Play には、ユーザーの言語向けに提供した宣伝用画像、スクリーンショット、動画が表示されます。
+</p>
+
+<p>
+  宣伝用画像をローカライズするには、任意の組み込みテキストを翻訳したり、別の画像やプレゼンテーションを使用したりできます。また、特定の言語のユーザーのニーズに最適に対応するようにマーケティングのアプローチを変更できます。たとえば、メイン ビジュアルまたは宣伝用画像に商品名またはスローガンが含まれている場合、そのテキストを翻訳し、これを宣伝用画像のローカライズ版に追加できます。
+</p>
+
+<p>
+  ローカライズされた画像アセットと動画は非常に重要であるため、公開予定日までの十分な余裕を持って作成とローカライズに着手することをお勧めします。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/graphics" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="build-upload">
+    13.リリース対応 APK をビルドしてアップロードする
+  </h2>
+
+
+</div>
+
+<p>
+  アプリが UI、互換性、品質の各要件に適合していると判断したら、アプリのリリース対応バージョンを作成できます。リリース対応 APK をデベロッパー コンソールにアップロードし、ユーザーに配布します。
+</p>
+
+<p>
+  リリース対応 APK の準備プロセスは、配布方法に関係なく、すべてのアプリで同じです。一般的に、このプロセスは、基本的なコードのクリーンアップと最適化、リリース キーによるビルドと署名、最終テストで構成されます。
+</p>
+
+<p>
+  アプリのリリース対応バージョンをビルドする方法について詳しくは、<a href="{@docRoot}tools/publishing/preparing.html">リリースの準備(Preparing for Release)</a>を参照してください。
+</p>
+
+<p>
+  リリース対応 APK が用意できたら、これらをデベロッパー コンソールにアップロードできます。公開前に、必要に応じて APK をより新しいバージョンに置き換えることができます。
+</p>
+<!--<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/build"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>-->
+
+<div class="headerLine">
+  <h2 id="plan-beta">
+    14.ベータ版リリースを計画する
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      簡単なベータ版テスト
+    </h2>
+
+    <p>
+      Google Play では、アルファ テスターとベータ テスターのグループを世界規模で設定できます。次回デベロッパー コンソールにサインインするときに、この強力な機能を確認してください。
+    </p>
+  </div>
+</div>
+
+<p>
+  アプリをローンチする前は、必ずユーザーから実際のフィードバックを入手することが重要です。新しいアプリをローンチする際には特に重要です。アプリのリリース前バージョンを複数の主要なマーケットにわたってユーザーに配布し、ユーザーがフィードバックを提供してバグを報告するための簡単な手段を用意することを強くお勧めします。
+</p>
+
+<p>
+  Google Play では、アプリのベータ プログラムの設定が可能です。デベロッパー コンソールにサインインして APK をアップロードした後に、アルファ版とベータ版のアプリをテストするためのユーザー グループを設定できます。アルファ テスターの小さなグループから始めて、ベータ テスターの大きなグループに移行できます。追加されたユーザーは、アプリのストア掲載情報にアクセスしてアプリをインストールします。<strong>アルファ バージョンまたはベータ バージョンのユーザーはレビューまたは評価を残すことができないため、</strong>Google Play 上の<strong>評価に対するリスクはありません</strong>。Google フォーラムや Google+ など、テストのフィードバックが提供されるためのメカニズムを準備する必要があります。
+</p>
+
+<p>
+  受け取ったフィードバックは、優れたエクスペリエンスをユーザーに保証するための UI、翻訳、ストア掲載情報の調整に役立てられます。
+</p>
+<!-- Related resources
+
+<table>
+  <tr>
+    <td>Beta-testing and Staged Rollouts
+See how you can facilitate testing with Google Play.</td>
+  </tr>
+</table> -->
+
+<div class="headerLine">
+  <h2 id="complete-details">
+    15.アプリのストア掲載情報を完成させる
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play では、アプリの製品情報はアプリのストア情報掲載ページでユーザーに表示されます。このページは、Android デバイスまたは Web で、ユーザーがアプリについてさらによく理解するためにアクセスしたり、アプリを購入またはダウンロードすることを決定したりするページです。
+</p>
+
+<p>
+  Google Play は、カラフルな画像、スクリーンショット、動画から、ローカライズされた説明、リリースの詳細、他のアプリへのリンクまで、ストア情報掲載ページでアプリを宣伝したり、ユーザーと関わったりするためのさまざまな方法を提供します。アプリの公開を準備する際には、商品の詳細ページから提供される要素を最大限に活用し、アプリをユーザーにできる限り魅力的にする必要があります。
+</p>
+
+<p>
+  商品ページの計画はアプリのローンチ予定日までの余裕を持って着手し、ローカライズされた説明、高品質な画像アセット、スクリーンショット、動画などの調整を進めることをお勧めします。
+</p>
+
+<p>
+  アプリのローンチ予定日が近くなったら、デベロッパー コンソールのストア掲載情報設定ページに関連するすべてのフィールド、オプション、アセットに精通している必要があります。このページ用に情報とアセットを収集する際には、このページが完成して公開の準備が完了するまでに、デベロッパー コンソールに入力またはアップロードできるようにしてください。
+</p>
+
+<p>
+  デベロッパー コンソールでアプリの配布地域を設定したら、ローカライズされたストア掲載情報、宣伝用画像などを、サポートするすべての言語向けに追加することを忘れないでください。
+</p>
+
+<p>
+  アプリがタブレット デバイスを対象としている場合、タブレット上で実行されているアプリのスクリーンショットを最低 1 枚は用意し、アプリの説明、リリース情報、プロモーション キャンペーンなどすべての場所で、タブレット向けのアプリのサポートを強調するようにしてください。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/productdetails"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="use-badges">
+    16.プロモーション キャンペーンで Google Play のバッジとリンクを使用する
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play のバッジにより、アプリを Android ユーザーに宣伝するための正式な商標を表示できます。<a href="{@docRoot}distribute/tools/promote/badges.html">Google Play バッジジェネレータ</a>を使用すると、バッジを簡単に作成できます。これで Web ページ、広告、レビューなどから商品にリンクするバナーを作成できます。特別な<a href="{@docRoot}distribute/tools/promote/linking.html">リンク フォーマット</a>を使用して、ストア情報掲載ページ、商品の一覧や検索結果に直接リンクすることもできます。
+</p>
+
+<p>
+  ローンチ後にアプリが注目されるためには、できるだけ多くのチャネルを介したできるだけ多くの国で商品を紹介するプロモーション キャンペーンでローンチをサポートすることを強くお勧めします。たとえば、プレースメント広告、ソーシャル ネットワークやブログの投稿、動画や他のメディア、インタビューとレビュー、その他の利用可能なすべてのチャネルを活用してローンチを宣伝できます。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/badges" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="final-checks">
+    17.最終チェックと行い公開する
+  </h2>
+
+
+</div>
+
+<p>
+  アプリの公開の準備が整ったと判断したら、デベロッパー コンソールにサインインして、短時間で完了するいくつかの最終チェックを行います。
+</p>
+
+<p>
+  次の点を確認してください。
+</p>
+
+<ul>
+  <li>
+    <p>
+      デベロッパー プロファイルの情報が正しく、正しい Google ウォレット Merchant アカウントにリンクしている(商品を販売している場合)。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      正しいバージョンのアプリをアップロードしている。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      すべての画面アセット、スクリーンショット、動画、ローカライズされた説明など、ストア掲載情報のすべての部分が準備完了状態である。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      アプリの価格設定を無料または有料に設定している。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      公開ターゲットの国(とキャリア)を設定し、商品の価格を購入者の通貨に設定している(該当する場合)。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      [互換性のあるデバイス] で、ターゲットにしているデバイスにアプリが適合していることが示されている。示されていない場合、アプリの要件とフィルタリング ルールについて、開発チームと協力して確認する必要があります。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Web サイトへの正しいリンクと、正しいサポート メール アドレスを提供している。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      アプリがコンテンツ ポリシーのガイドラインに違反していない。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      アプリが Google Play での Android コンテンツのガイドラインと米国の輸出法に適合していることを確認済みである。
+    </p>
+  </li>
+</ul>
+
+<p>
+  これでアプリを公開する準備が整いました。
+</p>
+
+<p>
+  アップデートをリリースする場合は、<a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=113476&amp;topic=2365760&amp;ctx=topic">アップデートの公開の要件</a>をよくお読みください。
+</p>
+
+<p>
+  公開する準備ができたらデベロッパーコンソールで <strong>[今すぐ公開する]</strong> ボタンをクリックします。数時間でユーザーがアプリを入手できるようになり、Google Play に製品ページが表示されます。これにより、ブラウジング、検索、プロモーション キャンペーンからのリンクが可能になります。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/finalchecks"
+data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    18.ローンチ後にユーザーをサポートする
+  </h2>
+
+
+</div>
+
+<p>
+  アプリまたはアプリのアップデートを公開した後で、アプリの利用者をサポートすることが極めて重要です。迅速で丁寧なサポートにより、ユーザーに優れたエクスペリエンスが提供され、製品の評価が高くなり好意的なレビューを得ることができます。ユーザーのニーズとフィードバックに責任を持って対応すれば、ユーザーはアプリをさらに利用し、お勧めのアプリとすることでしょう。これは特に組織的なプロモーション キャンペーンを使用している場合の公開後に当てはまります。
+</p>
+
+<p>
+  ユーザーに対する窓口を維持し、ユーザーにサポートを提供するにはたくさんの方法があります。最も基本的なものとしては、ストア情報掲載ページで<em>サポートのメール アドレス</em>を提供する方法があります。その他に、フォーラムやメーリング リスト、Google+ ページなどでサポートを提供する方法があります。Google Play のチームは、ダウンロード、インストール、支払いに関する問題についてユーザーのサポートを提供できます。これらのトピックに該当しない問題はアプリの作成者が対処します。アプリの作成者がサポート可能な問題の例として、機能リクエスト、アプリの使用に関する質問、互換性設定に関する質問などがあります。
+</p>
+
+<p>
+  公開後に次の作業を計画してください。
+</p>
+
+<ul>
+  <li>
+    <p>
+      評価とレビューをアプリのストア情報掲載ページで高い頻度で確認します。バグやその他の問題を知らせるテーマが繰り返し投稿されていないか監視します。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Android プラットフォームの新バージョンがローンチされていないか常に注意を払います。アプリの互換性設定のアップデートが必要となる場合があります。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Web サイトにサポート リソースへのリンクを配置し、フォーラムなどの他のサポートを設定します。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      ストア情報掲載ページに適切なサポートのメール アドレスを提供し、ユーザーからメールが送られてきた場合に対応します。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Google Play が提供する自動返金期間ではなく、独自の寛大な返金ポリシーで対応し、満足したユーザーからの今後の購入を期待します。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      アプリの問題を認識し、修正します。これにより透明性が向上します。既知の問題は、ストア掲載情報ページに積極的にリストします。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      アップデートは、品質を損なわずに可能な限り頻繁に行います。頻度が高すぎるアップデートでユーザーにうっとうしい印象を与えないようにします。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      毎回のアップデートで、アップデートでの変更内容の要約を提供するようにします。この情報はデベロッパー コンソールで入力できます。ユーザーはこれを読み、アプリの品質向上が真剣に行われていることを評価します。
+    </p>
+  </li>
+</ul>
+</ul>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/ja/distribute/tools/localization-checklist.jd
new file mode 100644
index 0000000..b2c797b
--- /dev/null
+++ b/docs/html-intl/intl/ja/distribute/tools/localization-checklist.jd
@@ -0,0 +1,716 @@
+page.title=ローカライズのチェックリスト
+page.metaDescription=Android と Google Play から提供される世界中のユーザーを活用します。このチェックリストを読んで、お客様の製品を世界中のマーケットに提供する方法の概要を把握してください。
+meta.tags="localizing, publishing, disttools"
+page.tags="local, l10n, translation, language"
+page.image=/distribute/images/localization-checklist.jpg 
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>チェックリスト</h2>
+    <ol>
+      <li><a href="#identify-languages">1.ターゲット言語とロケールの特定</a></li>
+      <li><a href="#design">2.ローカライズ向けデザイン</a></li>
+      <li><a href="#manage-strings">3.ローカライズ向けストリングの管理</a></li>
+      <li><a href="#translate-strings">4.UI ストリングとその他のリソースの翻訳</a></li>
+      <li><a href="#test">5.ローカライズされたアプリのテスト</a></li>
+      <li><a href="#prepare-launch">6.世界規模のローンチの準備を整える</a></li>
+      <li><a href="#support-users">7.ローンチ後に全世界のユーザーをサポートする</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px">
+  <img src="{@docRoot}distribute/images/localization-checklist.jpg">
+</div>
+
+<p>
+  Android と Google Play により、日本、韓国、インド、ブラジル、ロシアなどの国々で急速に成長している潜在的な顧客基盤が形成され、アプリに対して世界規模のユーザーが提供されます。アプリの配布の可能性を最大限に高め、世界中のユーザーから評価を得ることができるようになるため、アプリのローカライズを強くお勧めします。
+</p>
+
+<p>
+  ローカライズはアプリ開発サイクル中のさまざまなタスクが関与するため、事前計画が重要となります。このドキュメントで、Google Play でアプリを世界規模のローンチの成功に導くローカライズの重要な側面を明らかにします。
+</p>
+
+<div class="headerLine">
+  <h2 id="identify-languages">
+    1.ターゲット言語とロケールの特定
+  </h2>
+
+
+</div>
+
+<p>
+  ローカライズの準備を行うときの基本的ながら重要な手順は、アプリを配布する国とその国で話されている言語を特定することです。大きな市場が見込まれ、英語や他の世界規模の言語が広く使用されていない国では、アプリのローカライズは特に重要です。
+</p>
+
+<p>
+  全世界のユーザーに向けて、アプリを 3 つの主なカテゴリ(国、ロケール、言語)で管理できます。これらの中で、ローカライズの主要な考慮事項は言語です(日付、時刻、通貨、または同様な情報の形式が異なるため、ロケールも重要です)。ユーザーは Android デバイスで使用される言語とロケールの両方を管理します。これらはアプリがどのように表示されるかに影響します。
+</p>
+
+<p>
+  通常は、市場全体の規模と機会、アプリのカテゴリ、競争環境、現地価格設定、財務上の要因などに基づき、最初にターゲットにする国を決定します。次に、ターゲットにする国に基づき、アプリでサポートを必要とする言語を決定します。
+</p>
+
+<p>
+  次に、ターゲットにする国の一部の言語にローカライズするか、すべての言語にローカライズするかを決定することができます。主な地域言語から始まり、ユーザー基盤が増大するにつれて言語をさらに追加する方法が合理的です。
+</p>
+
+<p>
+  ターゲットの言語を特定したら、この言語の市場に対する開発、翻訳、テスト、マーケティングの各作業に集中できます。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/identifylocales"
+data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="design">
+    2.ローカライズ向けデザイン
+  </h2>
+
+
+</div>
+
+<p>
+  ローカライズするターゲット言語が決まったら、その言語をサポートするために実行する必要がある作業を見極めて、その作業を早めに計画します。各言語で、語彙の増大、スクリプトの要件、文字間のスペース、改行の制約、左から右のサポートと右から左のサポート、その他の可能性のある要因を検討します。
+</p>
+
+<h4>
+  <strong>柔軟性の高い 1 つのレイアウト セットを設計する</strong>
+</h4>
+
+<p>
+  レイアウトを作成する際、テキストを保持する UI 要素を余裕を持たせて設計するようにします。オリジナル言語に必要なスペースよりも多くのスペースを確保して(通常は最大 30% 増し)、他の言語にも対応できるようにしておくことをお勧めします。
+</p>
+
+<p>
+  また、UI ストリングや入力テキストの幅と高さの多様性に対応するため、要素は横方向または縦方向に拡張できる必要があります。テキスト ストリングはどのターゲット言語でも、境界または画面の縁でオーバーラップしないようにしてください。
+</p>
+
+<p>
+  UI を慎重に設計すると、通常はサポートするすべての言語について 1 つのレイアウト セットを使用できます。詳細については、<a href="{@docRoot}training/basics/fragments/fragment-ui.html">フレキシブルな UI のビルド</a>を参照してください。
+</p>
+
+<h4>
+  <strong>必要に応じて代替レイアウトを使用する</strong>
+</h4>
+
+<p>
+  UI がターゲット言語のいずれかでテキストに対応できない場合、その言語のみに<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">代替レイアウト</a>を作成できます。Android では、特定の言語、ロケール、画面サイズなどを適切なリソース修飾子でタグ付けするだけで、これらに対応してロードするレイアウトやその他のリソースのセットを簡単に宣言できます。代替レイアウトにも柔軟性はありますが、アプリを長期にわたって維持することは難しくなります。一般的に、1 つの柔軟性に優れたレイアウトを使用することをお勧めします。
+</p>
+
+<h4>
+  <strong>RTL レイアウトとテキストをサポートする</strong>
+</h4>
+
+<p>
+  左から右(RTL)スクリプトが使用されている国に配布する場合、RTL のレイアウトおよびテキストの表示と編集のサポートを可能な範囲で実装することを検討してください。
+</p>
+
+<p>
+  Android 4.1 は双方向テキストに対する制限付きサポートを導入し、アプリが左から右(LTR)スクリプトと右から左(RTL)スクリプトの両方でテキストを表示し、編集できるようになっています。Android 4.2 はレイアウトのミラーリングを含む <a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">RTL レイアウトの完全ネイティブ サポート</a>を追加したため、すべてのユーザーに優れたアプリのエクスペリエンスを同様に提供できるようになりました。
+</p>
+
+<p>
+  少なくとも Android 4.2 のユーザーに対しては、RTL ユーザーのニーズを満たすことに大きな役割を果たす基本的な RTL レイアウト ミラーリングを追加しやすくなっています。
+</p>
+
+<h4>
+  <strong>日付、時刻、数値、通貨についてシステムが提供する形式を使用する</strong>
+</h4>
+
+<p>
+  アプリがロケールで変わることのある日付、時刻、数値、通貨、その他のエンティティを指定する場合は、アプリ固有の形式ではなく、システムが提供する形式を使用するようにしてください。すべてのロケールが 3 桁ごとの区切り文字、少数点の記号、パーセント記号に同じものを使用しているとは限らないことに注意してください。
+</p>
+
+<p>
+  Android は日付用の <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> と <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a>、数値と通貨用の<a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)">String.format()</a> または <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a>、電話番号用の <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a> などのすべてのロケールに適用される形式指定とパターン変換に対応するさまざまなユーティリティを備えています。
+</p>
+
+<p>
+  ユーザーのロケールに関する想定に基づいて形式をハードコードすると、ユーザーが別のロケールに変えた場合に問題となる可能性があります。システムが提供する形式とユーティリティを使用することを強くお勧めします。
+</p>
+
+<h4>
+  <strong>デフォルト リソースのフル セットを組み込む</strong>
+</h4>
+
+<p>
+  デフォルト リソースのフル セットを提供して、言語やロケールに関係なく、アプリが正しく動作できるようにします。アプリのデフォルト リソースはどの言語またはロケール修飾子でも<em>マークされていない</em>リソースです。たとえば、res/drawable/ と res/values/ に格納されているリソースです。アプリが現在の言語またはデフォルト セットに存在しないリソースをロードしようとすると、アプリはクラッシュします。
+</p>
+
+<p>
+  アプリで使用しているデフォルト言語によらず、関連付けられたレイアウト、ドローアブル、ストリングをデフォルトのリソース ディレクトリに言語またはロケールの修飾子なしで格納するようにしてください。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/tools/loc/designforloc" data-sortorder="-timestamp"
+data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="manage-strings">
+    3.ローカライズ向けストリングの管理
+  </h2>
+
+
+</div>
+
+<p>
+  ユーザーに優れたエクスペリエンスを提供し、ローカライズを簡素化させるため、アプリの UI ストリングを適切に管理することが重要です。
+</p>
+
+<h4>
+  <strong>すべてのストリングを strings.xml に移動する</strong>
+</h4>
+
+<p>
+  アプリを作成する際には、ストリングをハード コードしないことを忘れないでください。ハード コードせずに、<em>すべての</em>ストリングをデフォルトの strings.xml ファイルでリソースとして宣言し、アップデートとローカライズを容易にします。strings.xml ファイルのストリングは抽出、翻訳が可能であり、コンパイルされたコードを変更せずに(適切な修飾子付きで)アプリに戻して統合できます。
+</p>
+
+<p>
+  テキスト付きの画像を作成している場合、そのストリングも同様に strings.xml に配置し、翻訳後に画像を再作成します。
+</p>
+
+<h4>
+  <strong>UI ストリングに関する Android のガイドラインに従う</strong>
+</h4>
+
+<p>
+  UI を設計し、開発する際には、<em>どのように</em>ユーザーと対話するかについて、十分注意を払うようにしてください。一般的には、使いやすく簡潔な<a href="{@docRoot}design/style/writing.html">簡明で短いスタイル</a>を使用し、UI 全体で一貫したスタイルを使用します。
+</p>
+
+<p>
+  <a href="{@docRoot}design/style/writing.html">記述スタイルと語句の選択</a>については、Android のデザインに関する推奨事項を読み、従うようにしてください。ユーザーにとってアプリがより洗練されたものになり、ユーザーが UI をより簡単に理解できるようになります。
+</p>
+
+<p>
+  さらに、「アクション バー」や「オプション メニュー」、「システム バー」、「通知」などの UI 要素などについて、可能な場合常に Android の標準用語を使用してください。Android の用語を使用すると、正しく一貫性のある翻訳をより簡単に行えるようになり、より優れた最終製品をユーザーに提供できることになります。
+</p>
+
+<h4>
+  <strong>宣言されたストリングに十分なコンテキストを提供する</strong>
+</h4>
+
+<p>
+  strings.xml ファイルにストリングを宣言する際には、ストリングが使用されるコンテキストを記述するようにしてください。この情報は翻訳者にとって非常に重要で、より高い品質の翻訳の実現につながります。さらに、ストリングを長期にわたってより効率的に管理する場合にも役立ちます。
+</p>
+
+<p>
+  以下に例を示します。
+</p>
+
+<pre class="prettyprint">
+&lt;!-- The action for submitting a form. This text is on a button that can fit 30 chars --&gt;
+&lt;string name="login_submit_button"&gt;Sign in&lt;/string&gt;
+</pre>
+<p>
+  次の情報を含むコンテキスト情報の提供を検討してください。
+</p>
+
+<ul>
+  <li>
+    <p>
+      ストリングの用途はどのようなものか?ユーザーに表示される場所とタイミングは?
+    </p>
+  </li>
+
+  <li>
+    <p>
+      レイアウトのどこに配置されるか?たとえば、ボタンの場合はテキスト ボックスよりも翻訳の柔軟性が低くなります。
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>翻訳対象外のメッセージ部分をマークする</strong>
+</h4>
+
+<p>
+  多くのストリングには他の言語に翻訳してはならないテキストが含まれています。一般的な例としては、コード、値のプレースホルダー、特殊記号、名前などです。翻訳用のストリングを準備する際は、翻訳せずにそのまま残すべきテキストを特定してマークしてください。これで翻訳者はそのテキストを変更しません。
+</p>
+
+<p>
+  翻訳対象外としてテキストをマークするには、<code>&lt;xliff:g&gt;</code>プレースホルダー タグを使用します。以下の例では、テキスト "%1$s" が翻訳中に変更されないようになっています(変更されるとメッセージが破壊されます)。
+</p>
+
+<pre class="prettyprint">
+&lt;string name="countdown"&gt;
+    &lt;xliff:g id="time" example="5 days&gt;%1$s&lt;/xliff:g&gt;until holiday
+&lt;/string&gt;
+</pre>
+<p>
+  プレースホルダー タグを宣言する場合には、プレースホルダーの目的を説明する id 属性を必ず追加してください。アプリが後でプレースホルダーの値を置き換える場合、example 属性を提供して置き換えられると予測される値を明確にしてください。
+</p>
+
+<p>
+  プレースホルダー タグの例をさらにいくつか示します。
+</p>
+
+<pre>
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+
+&lt;!-- Example placeholder for a special unicode symbol --&gt;
+
+&lt;string name="star_rating"&gt;Check out our 5
+
+    &lt;xliff:g id="star"&gt;\u2605&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a for a URL --&gt;
+
+&lt;string name="app_homeurl"&gt;
+
+    Visit us at &lt;xliff:g id="application_homepage"&gt;http://my/app/home.html&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a name --&gt;
+
+&lt;string name="prod_name"&gt;
+
+    Learn more at &lt;xliff:g id="prod_gamegroup"&gt;Game Group&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a literal --&gt;
+
+&lt;string name="promo_message"&gt;
+
+    Please use the "&lt;xliff:g id="promotion_code"&gt;ABCDEFG&lt;/xliff:g&gt;” to get a discount.
+
+&lt;/string&gt;
+
+...
+
+&lt;/resources&gt;
+</pre>
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/managestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="translate-strings">
+    4.UI ストリングとその他のリソースの翻訳
+  </h2>
+
+
+</div>
+
+<p>
+  アプリの UI ストリングとリソースをターゲット言語に翻訳することは、ローカライズの重要な段階で、最大限の慎重さと計画性が求められる作業です。
+</p>
+
+<p>
+  アプリの価値を高める高品質の翻訳を実現するため、翻訳の専門家(<a href="#gp-trans">プロによる翻訳を購入する</a>を参照してください)と共同で作業することをお勧めします。機械翻訳も選択できますが、ユーザーに優れたエクスペリエンスを提供できない可能性があります。
+</p>
+
+<h4>
+  <strong>翻訳の準備をする</strong>
+</h4>
+
+<p>
+  翻訳のアウトプット品質はその一部がインプットに左右されるため、strings.xml ファイルがきちんと整理され、適切なコメントが含まれており、正確である必要があります。
+</p>
+
+<p>
+  翻訳用のストリングを準備するための方法を以下にいくつか示します。
+</p>
+
+<ul>
+  <li>
+    <p>
+      ストリングを正しく一貫性のあるフォーマットにします。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      上記の<a href="#manage-strings">ローカライズ向けストリングの管理</a>に記載されているストリングの推奨事項に従います。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      strings.xml ファイルをクリーンアップして未使用のストリングを削除します。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      ファイルの所有者、作成元、バージョンを特定できるコメントをファイルに配置し、翻訳者向けの特別な指示も入力します。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      既存の翻訳がある場合は、これらを特定し、翻訳者に送る発信 zip ファイルまたは他のパッケージに含めます。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      翻訳の必要なドローアブルや他のリソースを特定し、これを翻訳者に送るパッケージに含めます。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      さらに、アプリのストア掲載情報の詳細(アプリのタイトルと説明、リリース情報など)と、その他の全世界で使用するマーケティング素材を翻訳することを検討します。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      製品、マーケット、基盤テクノロジーに見られる主要な用語の意味と用途を説明する用語リストを作成します。そのリストを翻訳者に送るパッケージに追加します。
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>翻訳用のストリングを送信する</strong>
+</h4>
+
+<p>
+  開発サイクルの初期段階で翻訳業者に連絡を取り、翻訳のコストと納期に関するアイディアを出してもらいます。コストには複数の繰り返しも含めるようにしてください。オンラインで翻訳業者を探すか、または Google Play デベロッパー コンソールから直接利用できる翻訳サービスを使用します(<a href="#gp-trans">プロによる翻訳を購入する</a>を参照してください)。
+</p>
+
+<p>
+  翻訳が完了したら、翻訳の事前確認を行います。すべてのファイルが翻訳されており、エンコードに関する問題が起きる可能性がないかチェックして、宣言フォーマットが変更されていないことを確認します。
+</p>
+
+<p>
+  すべて問題なしと判断したら、ローカライズされたディレクトリとファイルをアプリのリソースに慎重に移動します。ディレクトリが後から正しくロードされるように、適切な言語とロケールの修飾子でタグ付けしておくようにしてください。
+</p>
+
+<p>
+  翻訳がアプリに組み込まれたら、<a href="#test">ローカライズされたアプリのテスト</a>を開始します。
+</p>
+
+<h4 id="gp-trans">
+  <strong>Google Play からプロによる翻訳を購入する</strong>
+</h4>
+
+<p>
+  Google Play のアプリ翻訳サービスを利用すると、アプリの翻訳を素早く検索して購入することができます。デベロッパー コンソールで、高品質な翻訳を適正価格で提供する Google 認定済みのサードパーティ ベンダーの一覧を閲覧できます。翻訳してもらいたいストリングをアップロードし、翻訳先言語を選択して、時間と価格を基準に翻訳業者を選択します。
+</p>
+
+<p>
+  翻訳を購入すると、業者からメールが届きます。翻訳は、利用者と業者の間で、ビジネスに関して直接合意して行われ、翻訳プロセスと成果物の管理や、サポート上の問題の解決については、業者と直接やり取りする必要があります。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-localization-trans-0.png" class="border-img">
+</div>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/translatestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test">
+    5.ローカライズされたアプリのテスト
+  </h2>
+
+
+</div>
+
+<p>
+  翻訳済みストリングとリソースを受け取り、これらをアプリに組み込んだら、アプリをテストして、全世界のユーザーへの配布の準備を完了する必要があります。
+</p>
+
+<p>
+  手動テストは、レイアウトとストリングのローカライズ上の問題の発見に役立ちます。このような問題は、ユーザーの満足度と、最終的にはアプリのユーザーの評価に影響する可能性があります。
+</p>
+
+<h4>
+  <strong>テスト環境の設定</strong>
+</h4>
+
+<p>
+  ローカライズされたアプリをテストするには、ターゲットとしているマーケットとフォーム ファクタに基づき、複数のデバイス(または仮想デバイス)と画面サイズで構成された環境を設定する必要があります。特定の地域においてデバイスの範囲が異なる可能性があることに注意してください。可能であれば、テスト用デバイスをユーザーが使用する可能性の高い実際のデバイスに合わせてください。
+</p>
+
+<h4>
+  <strong>一般的なローカライズ上の問題を見つける</strong>
+</h4>
+
+<p>
+  テスト用デバイスごとに、[設定] で言語またはロケールを設定します。アプリをインストールして起動し、すべての UI フロー、ダイアログ、ユーザー インタラクションを使用してナビゲートします。入力フィールドにテキストを入力します。次のような問題がないか確認します。
+</p>
+
+<ul>
+  <li>
+    <p>
+      テキストが切り捨てられている、テキストが UI エレメントや画面の縁でオーバーラップしている
+    </p>
+  </li>
+
+  <li>
+    <p>
+      改行が見づらい
+    </p>
+  </li>
+
+  <li>
+    <p>
+      語句の切れ目や句読点に誤りがある
+    </p>
+  </li>
+
+  <li>
+    <p>
+      アルファベット順の並び替えに誤りがある
+    </p>
+  </li>
+
+  <li>
+    <p>
+      レイアウトまたはテキストの方向に誤りがある
+    </p>
+  </li>
+
+  <li>
+    <p>
+      未翻訳のテキストがある。翻訳済みストリングの代わりにデフォルトのストリングが表示された場合、これらの翻訳用のストリングを見落としているか、または正しくない言語修飾子でリソース ディレクトリをマークしている可能性があります。
+    </p>
+  </li>
+</ul>
+
+<p>
+  ストリングが翻訳により長くなり、レイアウトに収まらなくなった場合、デフォルトのテキストを簡素化したり、翻訳テキストを簡素化したり、デフォルトのレイアウトを調整したりすることをお勧めします。これらの方法を試しても問題が解決されない場合は、特定の言語用にカスタム レイアウトを作成できます。
+</p>
+
+<h4>
+  <strong>デフォルトのリソースに対してテストする</strong>
+</h4>
+
+<p>
+  サポート対象のすべての言語とロケールでアプリをテストしたら、<em>サポート対象外の言語</em>とロケールでもう一度テストするようにしてください。これにより、アプリにデフォルトのストリングとリソースのフル セットが含まれていることが確認でき、アプリは、ユーザーが選択した言語に関係なくすべてのユーザーが使用できることを確認できます。
+</p>
+
+<h4>
+  <strong>母国語の話し手によるレビューを行う</strong>
+</h4>
+
+<p>
+  テスト中またはテスト後に、ローカライズされたアプリのレビューを母国語の話し手に依頼することをお勧めします。レビュー方法の 1 つとして、母国語のユーザーによるベータ テストの実施があります。Google Play はこの方法をサポートします。 <!-- </p>
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/test"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> -->
+</p>
+
+<div class="headerLine">
+  <h2 id="prepare-launch">
+    6.世界規模のローンチの準備を整える
+  </h2>
+
+
+</div>
+
+<p>
+  アプリが翻訳されているということはローカライズの重要な要素ですが、製品がユーザーにとって魅力的で、ユーザーからの注目を集めるようになるには、ターゲットの国でのローンチに向けた準備をして、全世界のユーザー向けの広域的なローンチとマーケティングの計画を作成する必要があります。
+</p>
+
+<h4>
+  <strong>Google Play の掲載情報をローカライズする</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Google Play の掲載情報をローカライズする
+    </h2>
+
+    <p>
+      Google Play のストア掲載情報は、全世界のユーザーがアプリに対して持つ第一印象に深く関わります。すべてのユーザーにアプリの特長が伝わるようにしてください。次の掲載情報をデベロッパー コンソールでローカライズします。
+    </p>
+
+    <ul>
+      <li>アプリのタイトルと説明
+      </li>
+
+      <li>電話とタブレットのアプリのスクリーンショット
+      </li>
+
+      <li>宣伝用の画像と動画
+      </li>
+    </ul>
+  </div>
+</div>
+
+<p>
+  国際規模のマーケットでアプリを成功に導くためには、Google Play のストア掲載情報のローカライズは必須の要件です。ローカライズされた掲載情報は、デベロッパー コンソールで管理できます。
+</p>
+
+<p>
+  ローンチに先だって、早い時期にアプリのタイトル、説明、宣伝用テキスト、マーケティング名とプログラム、その他のテキストと画像について決定します。掲載情報のテキストと画像を、早い時期に翻訳工程に回し、ベータ テストが始まった時点で翻訳が完了しているようにします。翻訳されたテキストが準備できたら、デベロッパー コンソールからこれらを追加できます。
+</p>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Google Play でのストア掲載情報の翻訳
+    </h2>
+
+    <p>
+      Google Play でアプリ翻訳サービスを使用してストアの掲載情報を翻訳します。ストアの掲載情報が含まれた XML ファイルを準備し、strings.xml ファイルと同じようにアップロードします(<a href="#gp-trans">プロによる翻訳を購入する</a>を参照してください)
+    </p>
+  </div>
+</div>
+
+<p>
+  さらに、ローカライズされた優れたアプリの作成に尽力したことをユーザーに知らせましょう。言語ごとに UI のスクリーンショットを撮ります。電話、7 インチ タブレット、10 インチ タブレットのものをそれぞれ用意します。スクリーンショットは、サポートする言語ごとにデベロッパー コンソールにアップロードできます。これは他の言語でアプリの掲載情報をブラウズするユーザーに大きな価値をもたらします。
+</p>
+
+<p>
+  宣伝用の画像とビデオのローカライズ バージョンを作成することも重要です。たとえば、アプリのメイン ビジュアルには、宣伝効果を高める翻訳が必要なテキストが含まれていることがあります。または、ある国に、別の国で実行したものとは異なる視覚的アプローチを採用できます。言語ごとに異なるバージョンの宣伝用画像を作成し、これをデベロッパー コンソールにアップロードできます。宣伝用の動画を提供する場合、そのローカライズ版を作成し、サポートする言語ごとに適切なローカライズ動画へのリンクを追加できます。
+</p>
+
+<h4>
+  <strong>主要な国におけるベータ リリースを計画する</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      簡単なベータ版テスト
+    </h2>
+
+    <p>
+      現在、Google Play では、アルファ版テスターとベータ版テスターのグループを世界規模で設定できます。次回デベロッパー コンソールにサインインするときに、この強力な機能を確認してください。
+    </p>
+  </div>
+</div>
+
+<p>
+  アプリをローンチする前は、必ずユーザーから実際のフィードバックを入手することが重要です。これは、新しい言語、国、地域にアプリをローンチする際にも同様です。この場合、アプリのリリース前バージョンを複数の主要なマーケットにわたってユーザーに配布し、ユーザーがフィードバックを提供してバグを報告するための簡単な手段を用意することを強くお勧めします。
+</p>
+
+<p>
+  Google Play はアプリのベータ プログラムのセットアップを支援します。デベロッパー コンソールにサインインして APK をアップロードしたら、アプリのアルファ版テストとベータ版テストのユーザー グループをセットアップできます。アルファ テスターの小さなグループから始めて、ベータ テスターの大きなグループに移行できます。
+</p>
+
+<p>
+  追加されたユーザーは、アプリのストア掲載情報にアクセスしてアプリをインストールします。<strong>アルファ バージョンまたはベータ バージョンのユーザーはレビューまたは評価を残すことができません</strong>。そのため Google Play 上の<strong>評価にはリスクがありません</strong>。ただし、これはテスター向けにフィードバックを提供するメカニズムをセットアップする必要があることを意味します。<a href="http://www.google.com/+/business/">Google+</a> ページまたは <a href="https://groups.google.com/forum/#!overview">Google グループ</a>を作成することを検討してください。
+</p>
+
+<p>
+  受け取ったフィードバックは、優れたエクスペリエンスをユーザーに保証するための UI、翻訳、ストア掲載情報の調整に役立てられます。
+</p>
+
+<h4>
+  <strong>国際規模のマーケティングを計画する</strong>
+</h4>
+
+<p>
+  複数の国にわたってアプリが注目されるために、国際規模のマーケティングまたは広告キャンペーンを実施することを検討してください。キャンペーンの範囲はサポートできる予算に応じて変化しますが、一般的には、ローンチ時およびローンチ後の地域または国に特化したマーケティングはコスト効率が高く、生産性も高くなります。
+</p>
+
+<h4>
+  <strong>ローカライズ版の Google Play のバッジを作成する</strong>
+</h4>
+
+<p>
+  国際規模のマーケティングを準備する場合は、Google Play に登録されていることをユーザーに知らせるために、<a href="{@docRoot}distribute/tools/promote/badges.html">ローカライズ版の Google Play のバッジ</a>を組み込むようにしてください。バッジ ジェネレータを使用すれば、ローカライズ版のバッジを簡単に作成できます。これを Web サイトやマーケティング素材で使用できます。高解像度のアセットも使用できます。
+</p>
+
+<h4>
+  <strong>ローカライズ版のデバイス アートを作成する</strong>
+</h4>
+
+<p>
+  Android デバイスで実行されているアプリの製品ショットを訴求する場合は、そのショットを魅力的にして、最新の Android デバイスを反映するようにしてください。高品質のマーケティング素材を作成するために、ドラッグ アンド ドロップ対応の <a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator </a>を使用して、スクリーンショットを Nexus デバイス上に簡単にはめ込むことができます。
+</p>
+
+<h4>
+  <strong>最適化に関するヒントをチェックする</strong>
+</h4>
+
+<p>
+  ローンチの準備に際しては、デベロッパー コンソールにサインインしてアプリの最適化に関するヒントをチェックしてください。最適化に関するヒントにより、ローカライズされたストア掲載情報の欠落部分を確認でき、ローカライズ版のローンチを成功させるために役立つ他の注意事項が提供されます。
+</p>
+
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/preplaunch"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    7.ローンチ後に全世界のユーザーをサポートする
+  </h2>
+
+
+</div>
+
+<p>
+  アプリを国際規模でローンチしたら、さまざまな言語とタイム ゾーンにおけるユーザーをサポートする準備を整えます。全世界のユーザー サポートの範囲は予算に応じて異なりますが、少なくともローンチ後は、評価、レビュー、ダウンロードの統計情報を注意深く観察する必要があります。
+</p>
+
+<p>
+  以下の提案を参照してください。
+</p>
+
+<ul>
+  <li>
+    <p>
+      デベロッパー コンソールでアプリの統計情報を使用して、複数の言語と国にわたってダウンロード数、インストール数、アンインストール数、評価を比較します。特定の言語または国でダウンロード数評価が低迷している場合、製品の改良やマーケティング アプローチの変更などの選択肢を検討してください。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      レビューを定期的にチェックします。Google Play ではすべてのユーザー レビューが翻訳されるため、全世界のユーザーがアプリについてどのように感じているか、どの機能が気に入っているか、どの問題がユーザーに影響を及ぼしているかについて、常に確認することができます。レビューを観察することで、特定の国でユーザーに影響を及ぼす可能性のある技術上の問題を特定することができ、アプリを修正してアップデートできます。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      可能な限りレビューに返答します。可能な限り、全世界のユーザーの言語または共通言語でユーザーに対応することをお勧めします。対応できない場合は、翻訳ツールを試すことができます。ただし、結果は予想どおりにならない場合があります。アプリがある言語で人気が高くなっている場合、その言語の母国語の話し手からサポートの支援受けることを検討してください。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Web サイト上のサポート リソースへのリンクを置くようにしてください。言語固有のユーザー グループ、Google+ コミュニティ、その他のサポート フォーラムをセットアップすることを検討してください。
+    </p>
+  </li>
+</ul>
+
+<p>
+  上記の実践により、アプリのローカライズ、全世界のユーザーへの宣伝とマーケティング、継続的なサポートの提供を強化することで、多くの新しいユーザーがアプリに注目し、ユーザーのアプリへの愛着心が維持されます。
+</p>
+
+<p>
+  アプリを Google Play で計画し、作成してローンチする方法について詳しくは、<a href="{@docRoot}distribute/tools/launch-checklist.html">ローンチ チェックリスト</a>を参照してください。
+</p>
+<h3 class="rel-resources clearfloat">関連リソース</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/google/play/filters.jd b/docs/html-intl/intl/ja/google/play/filters.jd
new file mode 100644
index 0000000..a1b9ec0
--- /dev/null
+++ b/docs/html-intl/intl/ja/google/play/filters.jd
@@ -0,0 +1,266 @@
+page.title=Google Play 上のフィルタ
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>クイックビュー</h2>
+<ul>
+<li>Google Play はストアからアプリをダウンロードできる Android デバイスをコントロールするためにフィルタを適用します。</li>
+<li>フィルタリングにより、アプリの互換性要件に適合するデバイスのユーザーのみ、アプリを利用できるようになります。 <li>フィルタリングはアプリのマニフェスト ファイルで宣言する設定要件と他の要因で指定されます。</li>
+</ul>
+
+<h2>本書の内容</h2>
+
+<ol>
+  <li><a href="#how-filters-work">Google Play でのフィルタリングの仕組み</a></li>
+  <li><a href="#manifest-filters">マニフェスト要素に基づいたフィルタリング</a>
+  </li>
+  <li><a href="#other-filters">その他のフィルタ</a></li>
+  <li><a href="#MultiApks">異なるフィルタを使用した複数の APK の公開</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+ <ol>
+<li><a href="{@docRoot}guide/practices/compatibility.html">Android
+の互換性</a></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
+</ol>
+
+</div>
+</div>
+
+<p>ユーザーが Google Play でダウンロードするアプリを検索したりブラウジングしたりすると、その結果はアプリと互換性のあるデバイスに基づいてフィルタリングされます。たとえば、アプリがカメラを必要とする場合、このアプリはカメラを搭載していないデバイスには表示されません。この<em>フィルタリング機能</em>により、デベロッパーはアプリの配布を管理し、ユーザーに可能な限り最善のエクスペリエンスを保証できます。</p>
+
+<p>Google Play でのフィルタリングは、複数のタイプのアプリ メタデータと設定を基準にしています。これには、マニフェストの宣言、必須ライブラリ、構造の依存関係、および対象地域や価格設定といった、Google Play デベロッパー コンソールで設定される一連の配布コントロールなどが含まれます。</p>
+
+<p>Google Play のフィルタリングは、一部をマニフェスト宣言と Android フレームワークの他の局面を基準にしていますが、実際のフィルタリング動作はこのフレームワークとは異なり、特定の API レベルに関係するものではありません。このドキュメントでは、Google Play が使用する現行のフィルタリング ルールを指定します。</p>
+
+
+<h2 id="how-filters-work">Google Play でのフィルタリングの仕組み</h2>
+
+<p>Google Play は以下に説明するフィルタ制限を使用して、Google Play アプリでアプリをブラウジングしたり、検索したりしているユーザーにアプリを表示するかどうかを決定します。</p>
+
+<p>Google Play は、アプリを表示するかどうかを決定する際に、デバイスのハードウェア要件とソフトウェア要件を確認し、同時にキャリア、ロケーション、他の特性も確認します。次にこれらをアプリのマニフェスト ファイル、および公開の詳細で指定されている制限事項と依存関係に対して比較します。 </p>
+
+<p>フィルタ ルールに準じてアプリがデバイスと互換性があれば、Google Play からそのアプリがユーザーに表示されます。互換性がなければ、Google Play は検索結果とカテゴリ ブラウジングでアプリを表示しません。Google Play 内でそのアプリの ID を直接示す詳細リンクをクリックしてアプリを明確に要求しても、表示されることはありません。</p>
+
+<p>アプリで選択可能なフィルタを自由に組み合わせて使用できます。たとえば、アプリで <code>minSdkVersion</code> 要件の <code>"4"</code> を設定し、<code>smallScreens="false"</code>に設定して、そのアプリを Google Play にアップロードして、ヨーロッパ諸国(キャリア)のみをターゲットにすることができます。このように、Google Play のフィルタは 3 つの要件すべてに適合しないとデバイスでアプリが使用できないようにします。 </p>
+
+<p>すべてのフィルタリングの制限事項はアプリのバージョンと関連付けられており、バージョン間で変えることができます。たとえば、あるユーザーがアプリをインストール済みであり、そのアプリをユーザーに表示しないアップデートを公開すると、ユーザーにはアップデートが利用可能であることがわかりません。</p>
+
+<h4>Google Play Web サイトでのフィルタリング</h4>
+
+<p>ユーザーが <a href="http://play.google.com/apps">Google Play Web サイト</a>をブラウジングする際には、公開されているすべてのアプリが表示されます。Google Play Web サイトでは、ユーザーが登録しているデバイスごとにアプリと互換性があるかどうかアプリの要件を比較し、デバイスと互換性のあるアプリだけをインストールできるようにします。</p>
+
+<h2 id="manifest-filters">アプリのマニフェストに基づくフィルタリング</h2>
+
+<p>フィルタの多くはアプリのマニフェスト ファイル <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> 内の要素によってトリガーされます(このマニフェスト ファイル内のすべてがフィルタリングをトリガーするわけではありません)。表 1 では、フィルタリングをトリガーするために使用する必要のあるマニフェスト要素を示し、各要素のフィルタリングの仕組みについて説明しています。</p>
+
+<p id="table1" class="table-caption"><strong>表 1.</strong> Google Play でフィルタリングをトリガーするマニフェスト要素</p>
+<table>
+  <tr>
+    <th>マニフェスト要素</th>
+    <th>フィルタ名</th>
+    <th>フィルタの仕組み</th>
+  </tr>
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">画面サイズ</td>
+    <td valign="top">
+
+<p>アプリは、<code>&lt;supports-screens&gt;</code> 要素の属性を設定することでサポート可能な画面サイズを示します。アプリが公開されると、Google Play はこれらの属性を使用して、デバイスの画面サイズに基づき、アプリをユーザーに表示するかどうかを決定します。 </p>
+
+<p>一般的なルールとして、Google Play は、デバイスのプラットフォームが小さいレイアウトを大きな画面に表示できる一方で、大きなレイアウトを小さな画面に表示できるような調整はできないと想定しています。そのため、アプリが「通常の」画面サイズのみのサポートを宣言している場合、Google Play は通常画面サイズのデバイスと大きい画面サイズのデバイスの両方でアプリを使用できるようにしますが、小さい画面サイズのデバイスでアプリを使用できないようにフィルタリングします。</p>
+
+<p>アプリが<code>&lt;supports-screens&gt;</code> の属性を宣言していないと、Google Play はこの属性の規定値を使用します。規定値は API レベルによって異なります。特に次の場合に注意が必要です。 </p>
+
+<ul>
+<li><p><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> または <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> が 3 以下に設定されているアプリの場合、<code>&lt;supports-screens&gt;</code> 要素自体が未定義となり、どの属性も使用できません。この場合、Google Play はアプリが通常の画面サイズ向けに設計されていると想定し、通常サイズ以上の画面のデバイスにアプリを表示します。 </p>
+
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> または <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> が 4 以上に設定されているアプリの場合、すべての属性のデフォルトは <code>"true"</code> となります。この場合、アプリはデフォルトですべての画面サイズをサポートするとみなされます。</li>
+</ul>
+
+    <p><strong>例 1</strong><br /> マニフェストが <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code> を宣言し、<code>&lt;supports-screens&gt;</code> 要素を含んでいません。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、小さい画面サイズのデバイスのユーザーにはアプリを表示しませんが、通常の画面サイズと大きい画面サイズのデバイスのユーザーには表示します。 </p>
+    <p><strong>例 2<br />
+    </strong>マニフェストが <code>&lt;uses-sdk android:minSdkVersion="3"
+    android:targetSdkVersion="4"&gt;</code> を宣言し、<code>&lt;supports-screens&gt;</code> 要素を含んでいません。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、すべてのデバイスのユーザーにアプリを表示します。 </p>
+    <p><strong>例 3<br />
+    </strong>マニフェストが <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code> を宣言し、<code>&lt;supports-screens&gt;</code> 要素を含んでいません。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、すべてのユーザーにアプリを表示します。 </p>
+    <p>アプリの画面サイズのサポートを宣言する方法については、<code><a
+    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code> と <a href="{@docRoot}guide/practices/screens_support.html">複数の画面のサポート(Supporting Multiple Screens)</a>を参照してください。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
+      <!-- ##api level 3## --></td>
+    <td valign="top">デバイス設定: <br /> キーボード、ナビゲーション、タッチスクリーン</td>
+    <td valign="top"><p>アプリは特定のハードウェア機能を要求することがあり、Google Play は要求されたハードウェアを備えたデバイスにのみアプリを表示します。</p>
+      <p><strong>例 1<br />
+      </strong>マニフェストが <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code> を含み、ユーザーが 5 方向ナビゲーション コントロールを備えていないデバイスでアプリを検索しています。<strong>結果</strong>: Google Play はユーザーにアプリを表示しません。 </p>
+      <p><strong>例 2<br />
+      </strong>マニフェストが <code>&lt;uses-configuration&gt;</code> 要素を含んでいません。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、すべてのユーザーにアプリを表示します。</p>
+<p>詳細については、<a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a> をご覧ください。</p></td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">デバイス機能<br /> (<code>name</code>)</td>
+    <td valign="top"><p>アプリをデバイスに表示するために、特定のデバイス機能を要求できます。この機能は Android 2.0(API レベル 5)で導入されました。</p>
+      <p><strong>例 1<br />
+      </strong>マニフェストに <code>&lt;uses-feature
+android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code> が含まれていて、ユーザーが光センサーを備えていないデバイスでアプリを検索しています。<strong>結果</strong>: Google Play はユーザーにアプリを表示しません。 </p>
+      <p><strong>例 2<br />
+      </strong>マニフェストが <code>&lt;uses-feature&gt;</code> 要素を含んでいません。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、すべてのユーザーにアプリを表示します。</p>
+      <p>詳細については <code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code> を参照してください。</p>
+      <p><em>暗黙的な機能に基づいたフィルタリング:</em> 場合によっては、Google Play は <code>&lt;uses-permission&gt;</code> 要素から要求されたパーミッションを、<code>&lt;uses-feature&gt;</code> 要素で宣言されたものと同等の機能要件として解釈します。以下の <a href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a> を参照してください。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top">OpenGL-ES バージョン<br /> (<code>openGlEsVersion</code>)</td>
+    <td valign="top"><p>アプリは、<code>&lt;uses-feature
+        android:openGlEsVersion=&quot;int&quot;&gt;</code> 属性を使用して、デバイスが特定の OpenGL-ES バージョンをサポートすることを要求できます。</p>
+      <p><strong>例 1<br />
+      </strong>アプリは、マニフェストで <code>openGlEsVersion</code> を複数回指定して複数の OpenGL-ES バージョンを要求しています。<strong>結果</strong>: Google Play は、示されたバージョンの中で最も新しいものをアプリが要求していると想定します。</p>
+<p><strong>例 2<br />
+</strong>アプリが OpenGL-ES バージョン 1.1 を要求し、ユーザーは OpenGL-ES バージョン 2.0 をサポートするデバイスでアプリを検索しています。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、ユーザーにアプリを表示します。デバイスが OpenGL-ES バージョン <em>X</em> をサポートすることを通知すると、Google Play は <em>X</em> よりも前のバージョンもデバイスがサポートすると想定します。
+</p>
+<p><strong>例 3<br />
+</strong>ユーザーが OpenGL-ES のバージョンを通知しないデバイス(Android 1.5 以下を実行しているデバイスなど)でアプリを検索しています。<strong>結果</strong>: Google Play は、デバイスが OpenGL-ES 1.0 のみをサポートすると想定します。Google Play は、<code>openGlEsVersion</code> を指定しないアプリ、またはOpenGL-ES バージョン 1.0 より新しいバージョンを指定していないアプリのみをユーザーに表示します。 </p>
+      <p><strong>例 4<br />
+      </strong>マニフェストが <code>openGlEsVersion</code> を指定していません。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、すべてのユーザーにアプリを表示します。 </p>
+<p>詳細については、<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> をご覧ください。</p></td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
+    <td valign="top">ソフトウェア ライブラリ</td>
+    <td valign="top"><p>アプリは、デバイスで動作するために特定の共有ライブラリを要求できます。 </p>
+      <p><strong>例 1<br />
+      </strong>アプリが <code>com.google.android.maps</code> ライブラリを必要とし、ユーザーが <code>com.google.android.maps</code> ライブラリを持たないデバイスでアプリを検索しています。<strong>結果</strong>: Google Play はユーザーにアプリを表示しません。 </p>
+      <p><strong>例 2</strong><br /> マニフェストが <code>&lt;uses-library&gt;</code> 要素を含んでいません。<strong>結果</strong>: Google Play は、他のフィルタが適用されない限り、すべてのユーザーにアプリを表示します。</p>
+<p>詳細については、<a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a> をご覧ください。</p></td>
+  </tr>
+  <tr id="uses-permission-filtering">
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
+    <td valign="top">&nbsp;</td>
+    <td valign="top">厳密に言えば、Google Play は <code>&lt;uses-permission&gt;</code> 要素に基づいたフィルタリングを行いません。ただし、要素を読み込んで、アプリに <code>&lt;uses-feature&gt;</code> 要素で正しく宣言されていない可能性のあるハードウェア機能の要件を備えているかどうか判断します。たとえば、アプリが <code>CAMERA</code> パーミッションを要求しながら <code>android.hardware.camera</code> の <code>&lt;uses-feature&gt;</code> エレメントを宣言していないと、Google Play はアプリでカメラが必要であるとみなし、カメラが搭載されていないデバイスのユーザーにアプリを表示しません。</p>
+    <p>一般的には、アプリがハードウェア関連のパーミッションを要求する場合、Google Play は <code>&lt;uses-feature&gt;</code> 宣言に対応するものがない場合でも、基本的なハードウェア機能を必要としていると想定します。次に、Google Play は、<code>&lt;uses-feature&gt;</code> 宣言で暗黙指定される機能に基づき、フィルタリングを設定します。</p>
+    <p>ハードウェア機能を暗黙指定するパーミッションの一覧については、<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a> 要素のドキュメントを参照してください。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
+    <td valign="top">最小フレームワーク バージョン(<code>minSdkVersion</code>)</td>
+    <td valign="top"><p>アプリケーションは最小 API レベルを要求できます。  </p>
+      <p><strong>例 1</strong><br /> マニフェストに <code>&lt;uses-sdk
+      android:minSdkVersion=&quot;3&quot;&gt;</code> が含まれ、アプリが API レベル 3 で導入された API を使用しています。ユーザーは API レベル 2 を備えたデバイスでアプリを検索しています。<strong>結果</strong>: Google Play はユーザーにアプリを表示しません。 </p>
+      <p><strong>例 2</strong><br /> マニフェストに <code>minSdkVersion</code> が含まれず、アプリが API レベル 3 で導入された API を使用しています。ユーザーは API レベル 2 を備えたデバイスでアプリを検索します。<strong>結果</strong>: Google Play は <code>minSdkVersion</code> が「1」で、アプリがすべてのバージョンの Android と互換性があると想定します。Google Play はユーザーにアプリを表示し、ユーザーがアプリをダウンロードできるようにします。アプリは実行時にクラッシュします。 </p>
+    <p>2 番目のシナリオが発生しないようにするため、<code>minSdkVersion</code> を常に宣言することをお勧めします。詳細については、<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a> を参照してください。</p></td>
+  </tr>
+  <tr>
+    <td valign="top">最大フレームワーク バージョン(<code>maxSdkVersion</code>)</td>
+    <td valign="top"><p><em>廃止されました。</em>Android 2.1 以降は <code>maxSdkVersion</code> 属性の確認または適用を行わず、<code>maxSdkVersion</code> がアプリのマニフェストに設定されていても SDK はコンパイルしません。<code>maxSdkVersion</code> がコンパイルされているデバイスの場合、Google Play はこれを遵守し、フィルタリングに使用します。</p>
+<p> <code>maxSdkVersion</code> の宣言は推奨され<em>ません</em>。詳細については、<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a> を参照してください。</p></td>
+  </tr>
+</table>
+
+
+
+<h3 id="advanced-filters">拡張マニフェスト フィルタ</h3>
+
+<p>Google Play では、<a href="#table1">表 1</a> のマニフェスト要素の他に、表 2 の拡張マニフェスト要素に基づいたアプリのフィルタリングも実行できます。</p>
+
+<p>これらのマニフェスト要素と、これらの要素がトリガーするフィルタリングは例外的なユースケースのみに対応します。これらの要素は、アプリの配布に厳密なコントロールが必要な特定のタイプの高性能ゲームと、同様のアプリ向けに設計されています。<strong>大半のアプリは、このフィルタを使用すべきではありません</strong>。</p>
+
+<p id="table2" class="table-caption"><strong>表 2.</strong> Google Play フィルタリング用拡張マニフェスト要素</p>
+<table>
+  <tr><th>マニフェスト要素</th><th>概要</th></tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code &lt;compatible-screens&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play はデバイス画面サイズと密度が {@code &lt;compatible-screens&gt;} の要素の画面設定({@code &lt;screen&gt;} 要素で宣言)のいずれにも適合しない場合、アプリをフィルタリングします。</p>
+      <p class="caution"><strong>警告:</strong> 通常は、<strong>このマニフェスト要素を使用すべきではありません</strong>。この要素を使用すると、指定していない画面サイズと密度のすべての組み合わせが除外されることになり、アプリの潜在的なユーザー ベースが大幅に減少する可能性があります。代わりに <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code &lt;supports-screens&gt;}</a> マニフェスト要素(<a href="#table1">表 1</a> に記載)を使用して、考慮に入れていない画面設定に対して、代替リソースを使用した画面の互換性モードを有効にすることをお勧めします。</p>
+    </td>
+  </tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code &lt;supports-gl-texture&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play はアプリでサポートされる 1 つ以上の GL テクスチャ圧縮フォーマットがデバイスで同様にサポートされない場合、アプリをフィルタリングします。 </p>
+    </td>
+  </tr>
+</table>
+
+
+
+<h2 id="other-filters">その他のフィルタ</h2>
+
+<p>次の表で説明しているように、Google Play はその他のアプリ特性を使用して、所定のデバイスを使用している特定のユーザーについて、アプリの表示/非表示を判断します。 </p>
+
+<p id="table3" class="table-caption"><strong>表 3.</strong> Google Play でのフィルタリングに影響するアプリと公開の特性</p>
+<table> <tr>
+    <th>フィルタ名</th> <th>フィルタの仕組み</th> </tr>
+
+  <tr>
+    <td valign="top">公開状況</td> <td valign="top"><p>公開されているアプリのみが Google Play 内での検索とブラウジングに表示されます。</p> <p>アプリの公開が取り消されても、ユーザーの [ダウンロード] 領域で、購入したアプリ、インストールしたアプリ、または最近アンインストールしたアプリに表示されている場合、インストールが可能です。</p> <p>アプリが保留状態の場合、ユーザーの [ダウンロード] 領域に表示されていても、ユーザーは再インストールしたりアップデートしたりできません。</p> </td></tr>
+  <tr>
+  <td valign="top">価格設定状況</td> <td valign="top"><p>すべてのユーザーに有料アプリが表示されるわけではありません。有料アプリが表示されるためには、デバイスに SIM カードが搭載されていて、Android 1.1 以降を実行している必要があります。また、デバイスが有料アプリを使用できる国にある(SIM キャリアで判別)必要があります。</p></td>
+</tr> <tr>
+  <td valign="top">対象国の指定</td> <td valign="top"> <p>アプリを Google Play にアップロードすると、<strong> [価格と販売 / 配布地域] </strong> でアプリを配布する国を選択できます。これで、アプリは選択した国でのみ入手可能となります。</p>
+</td> </tr> <tr>
+  <td valign="top" style="white-space:nowrap;">CPU アーキテクチャ(ABI)</td>
+  <td valign="top"><p>特定の CPU アーキテクチャ(ARM EABI v7 または x86 など)をターゲットとするネイティブ ライブラリを含むアプリは、そのアーキテクチャをサポートするデバイスのみに表示されます。NDK とネイティブ ライブラリの使用について詳しくは<a href="{@docRoot}tools/sdk/ndk/index.html#overview">Andorid NDK について</a>を参照してください。</p> </tr> <tr>
+  <td valign="top">コピー保護されたアプリ</td> <td valign="top"><p class="caution">Google Play はデベロッパー コンソールのコピー保護機能をサポートしなくなりました。また、この機能に基づくアプリのフィルタリングも実行しません。アプリを安全に保護するには、代わりに<a href="{@docRoot}google/play/licensing/index.html">アプリのライセンス付与</a>を使用してください。詳細については、<a href="{@docRoot}google/play/licensing/overview.html#CopyProtection">コピー保護の置き換え(Replacement for Copy Protection)</a>を参照してください。</p></td> </tr> </table>
+
+<h2 id="MultiApks">異なるフィルタを使用した複数の APK の公開</h2>
+
+<p>一部の特定の Google Play フィルタにより、異なるデバイス構成に別の APK を提供するため、同じアプリの複数の APK を公開できるようになっています。たとえば、高品質のグラフィック アセットを使用するビデオ ゲームを作成している場合、別々のテクスチャ圧縮フォーマットをサポートする 2 つの APK を作成できます。この方法で、デバイスごとの設定に必要なテクスチャのみを含めることで、APK ファイルのサイズを小さくすることができます。テクスチャ圧縮フォーマットに対する各デバイスのサポート状況に応じて、Google Play は各デバイスに対して、そのデバイスのサポートを宣言した APK を配布します。</p>
+
+<p>現時点では、Google Play では各 APK が次の設定に基づいて別々のフィルタを提供する際にのみ、同じアプリの複数の APK を公開できます。</p>
+<ul>
+  <li>OpenGL テクスチャ圧縮フォーマット <p><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code &lt;supports-gl-texture&gt;}</a> 要素の使用による。</p>
+  </li>
+  <li>画面サイズ(画面密度も指定可能) <p><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code &lt;supports-screens&gt;}</a>要素または<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code &lt;compatible-screens&gt;}</a> 要素の使用による。</p>
+  </li>
+  <li>API レベル <p><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a> 要素の使用による。</p>
+  </li>
+  <li>CPU アーキテクチャ(ABI) <p>特定の CPU アーキテクチャ(ARM EABI v7 または x86 など)を対象とする<a href="{@docRoot}tools/sdk/ndk/index.html"> Android NDK</a> で構築されたネイティブ ライブラリの組み込みによる。</p>
+  </li>
+</ul>
+
+<p>他のすべてのフィルタも通常通り機能しますが、ある APK を Google Play の同じアプリのリスト内の別の APK と区別できるのはこの 4 つのフィルタだけです。たとえば、デバイスにカメラが搭載されているかどうかのみを基準として異なる APK が存在する場合、同じアプリに複数の APK を公開することは<em>できません</em>。</p>
+
+<p class="caution"><strong>警告:</strong> 同じアプリに複数の APK を公開することは拡張機能とみなされます。<strong>大部分のアプリは、広範囲のデバイス設定をサポートする APK を 1 つだけ公開すべきです</strong>。複数の APK を公開する場合、フィルタ固有のルールに従う必要があります。また、設定ごとに適切なアップデート パスを確保するため、各 APK のバージョン コードに特別な注意を払う必要があります。</p>
+
+<p>Google Play で複数の APK を公開する方法について詳しくは、<a href="{@docRoot}google/play/publishing/multiple-apks.html">複数の APK サポート(Multiple APK Support)</a>をご覧ください。</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/index.jd b/docs/html-intl/intl/ja/index.jd
index 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/ja/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/index.jd
new file mode 100644
index 0000000..837fc2b
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/index.jd
@@ -0,0 +1,72 @@
+page.title=アクティビティのライフサイクル 管理
+page.tags=アクティビティのライフサイクル
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<h2>必要な知識と前提条件</h2>
+<ul>
+  <li>Android プロジェクトの作成方法(<a href="{@docRoot}training/basics/firstapp/creating-project.html">Android
+プロジェクトの作成</a>を参照)</li>
+</ul>
+
+
+<h2>関連ドキュメント</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a></li>
+</ul>
+
+
+<h2>試してみる</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">デモのダウンロード</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>ユーザーがアプリ内を移動したり、アプリ外に移動したり、再びアプリに戻ったりすると、アプリの
+{@link android.app.Activity} インスタンスが、それらのライフサイクルの異なる状態間で遷移します。
+たとえば、アクティビティが新規に開始されると、システムのフォアグラウンドに表示され、ユーザーに認識されるようにします。
+
+このプロセスの間に、Android システムは、ユーザー インターフェースやその他のコンポーネントが設定されたアクティビティ上で一連のライフサイクル メソッドを呼び出します。
+ユーザーが別のアクティビティを開始する、または別のアプリに切り替えるアクションを実行した場合、システムはアクティビティ上で別の一連のライフサイクル メソッドを呼び出し、アクティビティがバックグラウンドに移動します(この場合、アクティビティが表示されなくなりますが、インスタンスとその状態はそのまま維持されます)。
+
+
+</p>
+
+<p>ライフサイクル コールバック メソッドでは、ユーザーがアクティビティを離れたり、再開させたりした場合のアクティビティの動作について宣言することができます。
+たとえば、ストリーミング ビデオ プレーヤーをビルドしている場合、ユーザーが別のアプリに切り替えた際にビデオを一時停止したり、ネットワーク接続を終了することが可能です。ユーザーが戻った場合には、ネットワークに再接続し、一時停止した場所からビデオを再開できるようにすることができます。
+
+
+</p>
+
+<p>このクラスでは、各 {@link
+android.app.Activity} インスタンスが受け取る重要なライフサイクル コールバック メソッドについて、またそれらを使用してユーザーが期待する内容でアクティビティを動作させる方法、アクティビティがそれらを必要としないときにシステムのリソースを消費しないようにする方法について学習します。
+</p>
+
+<h2>レッスン</h2>
+ 
+<dl>
+  <dt><b><a href="starting.html">アクティビティを開始する</a></b></dt>
+  <dd>アクティビティのライフサイクルに関する基本、ユーザーがアプリを起動する方法、基本的なアクティビティ作成の方法について学習します。
+</dd>
+  <dt><b><a href="pausing.html">アクティビティの一時停止と再開</a></b></dt>
+  <dd>アクティビティが一時停止状態(部分的に不可視)および、再開された場合の動作、そしてこれらの状態の変遷時に何をすべきかについて学習します。
+</dd>
+  <dt><b><a href="stopping.html">アクティビティの停止と再起動</a></b></dt>
+  <dd>ユーザーが完全にアクティビティから移動し、その後戻ってきた場合の動作について学習します。</dd>
+  <dt><b><a href="recreating.html">アクティビティを再作成する</a></b></dt>
+  <dd>アクティビティが破棄されるときの動作と、必要に応じてアクティビティの状態を再構築する方法について学習します。
+</dd>
+</dl> 
+
diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/pausing.jd
new file mode 100644
index 0000000..b837a00
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/pausing.jd
@@ -0,0 +1,147 @@
+page.title=アクティビティの一時停止と再開
+page.tags=アクティビティのライフサイクル
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>このレッスンでの学習内容</h2>
+    <ol>
+      <li><a href="#Pause">アクティビティを一時停止する</a></li>
+      <li><a href="#Resume">アクティビティを再開する</a></li>
+    </ol>
+    
+    <h2>関連ドキュメント</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a>
+      </li>
+    </ul>
+
+<h2>試してみる</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">デモのダウンロード</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>通常のアプリの使用中、フォアグラウンドのアクティビティは、他のビジュアル コンポーネントによって隠される場合があり、これによりアクティビティが<em>一時停止</em>します。
+たとえば、半透明のアクティビティが開くと(ダイアログのスタイルなど)、以前のアクティビティは一時停止します。
+そのアクティビティは、まだ部分的に表示されていても、現在フォーカスされているアクティビティではない状態である限り、一時停止状態が維持されます。
+</p>
+
+<p>ただし、アクティビティが完全に隠され、表示されなくなった場合は、<em>停止</em>します(これについては次のレッスンで説明します)。
+</p>
+
+<p>アクティビティが一時停止状態に入ると、一時停止中は継続させない方が望ましい進行中のアクション(ビデオなど)を停止させたり、ユーザーがアプリを離れたままになった場合に備えて保存する必要のある情報すべてを保持したりできるよう、システムは {@link android.app.Activity} 上で {@link
+android.app.Activity#onPause onPause()} メソッドを呼び出します。ユーザーが一時停止状態からアクティビティに復帰した場合は、システムはアクティビティを再開し、{@link android.app.Activity#onResume onResume()} メソッドを呼び出します。
+
+
+
+</p>
+
+<p class="note"><strong>注:</strong> アクティビティが {@link
+android.app.Activity#onPause()} の呼び出しを受信した場合は、アクティビティが一瞬一時停止された後、ユーザーが同アクティビティにフォーカスを戻す可能性があることを示している場合があります。
+ただし、通常は、ユーザーがアクティビティを離れていることを最初に示すものです。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
+<p class="img-caption"><strong>図 1.</strong>半透明のアクティビティによって自分のアクティビティが隠されると、システムは {@link android.app.Activity#onPause onPause()} を呼び出し、アクティビティは一時停止の状態で待機します(1)。
+
+一時停止中にユーザーがアクティビティに復帰した場合、システムは {@link android.app.Activity#onResume onResume()} を呼び出します(2)。
+</p>
+
+
+<h2 id="Pause">アクティビティを一時停止する</h2>
+      
+<p>システムがアクティビティに対して {@link android.app.Activity#onPause()} を呼び出した場合、技術的にはアクティビティはまだ部分的に表示されていることを意味しますが、ほとんどの場合は、ユーザーがアクティビティを離れていて、ほどなく停止状態になる徴候を示しています。
+
+通常、以下を行う場合には、{@link android.app.Activity#onPause()} コールバックを使用する必要があります。
+</p>
+
+<ul>
+  <li>CPU を消費する可能性があるアニメーションや他の進行中のアクションを停止する。</li>
+  <li>ユーザーがアクティビティを離れた場合にも変更が永続的に保存されると期待するような場合(メールの下書きなど)でのみ、未保存の変更をコミットする。
+</li>
+  <li>放送用レシーバーなどのシステム リソース、(GPS
+などの)センサー処理や、アクティビティが一時停止され、ユーザーが必要としない間にバッテリー寿命に影響を与える可能性があるすべてのリソースを解放する。
+</li>
+</ul>
+
+<p>たとえば、アプリケーションが {@link android.hardware.Camera} を使用する場合、{@link android.app.Activity#onPause()} メソッドは、リソースの解放に適した手段です。
+</p>
+
+<pre>
+&#64;Override
+public void onPause() {
+    super.onPause();  // Always call the superclass method first
+
+    // Release the Camera because we don't need it when paused
+    // and other activities might need to use it.
+    if (mCamera != null) {
+        mCamera.release()
+        mCamera = null;
+    }
+}
+</pre>
+
+<p>一般的には、(フォームに入力された個人情報などの)ユーザーの変更を永続的なストレージに保存する目的の場合には、{@link android.app.Activity#onPause()} の使用は<strong>避ける</strong>必要があります。
+特定のユーザーが(メールの下書きのように)変更の自動保存を期待していると確信できる場合のみ、{@link android.app.Activity#onPause()}の期間内に永続的なストレージにユーザーの変更を保持する必要があります。ただし、{@link
+android.app.Activity#onPause()} メソッド中にはデータベースへの書き込みなどの CPU に高負荷をかける作業を行うことは避けてください。これにより、次のアクティビティへの表示上の遷移を遅らせる可能性があります(代わりに
+{@link android.app.Activity#onStop onStop()} メソッド中に高負荷のシャットダウン操作を実行する必要があります)。
+
+
+
+</p>
+
+<p>{@link android.app.Activity#onPause
+onPause()} メソッドで実行される処理量を比較的シンプルに抑えて、アクティビティが実際に停止している場合にユーザーの次の移動先への迅速な遷移を可能にする必要があります。
+</p>
+
+<p class="note"><strong>注:</strong> アクティビティが一時停止されると、{@link
+android.app.Activity} インスタンスはメモリに常駐し、アクティビティが再開されたときに再び呼び出されます。再開状態に導くいずれかのコールバック メソッドの間に作成されたコンポーネントを再初期化する必要はありません。
+
+</p>
+
+
+
+<h2 id="Resume">アクティビティを再開する</h2>
+
+<p>ユーザーが一時停止状態からアクティビティを再開した場合、システムは、{@link
+android.app.Activity#onResume()} メソッドを呼び出します。</p>
+
+<p>新規に作成された場合を含め、アクティビティがフォアグラウンドに表示されるたびに、システムがこのメソッドを呼び出すことに注意してください。
+したがって、{@link
+android.app.Activity#onPause()} メソッド中に解放したコンポーネントの初期化、およびアクティビティが再開状態になるたびに発生するその他の初期化(アニメーションの開始や、アクティビティがユーザーのフォーカスを取得したときにのみ使用されるコンポーネントの初期化など)を実行するように、{@link
+android.app.Activity#onResume()} を実装する必要があります。
+
+</p>
+
+<p>{@link android.app.Activity#onResume()} に関する次の例は、上記の
+{@link android.app.Activity#onPause()} に関する例に対応するものであり、アクティビティが一時停止したときに解放されたカメラ機能を初期化します。
+</p>
+
+<pre>
+&#64;Override
+public void onResume() {
+    super.onResume();  // Always call the superclass method first
+
+    // Get the Camera instance as the activity achieves full user focus
+    if (mCamera == null) {
+        initializeCamera(); // Local method to handle camera init
+    }
+}
+</pre>
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/recreating.jd
new file mode 100644
index 0000000..8647375
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/recreating.jd
@@ -0,0 +1,178 @@
+page.title=アクティビティを再作成する
+page.tags=アクティビティのライフサイクル
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>このレッスンでの学習内容</h2>
+    <ol>
+      <li><a href="#SaveState">自分のアクティビティ状態を保存する</a></li>
+      <li><a href="#RestoreState">自分のアクティビティ状態をリストアする</a></li>
+    </ol>
+    
+    <h2>関連ドキュメント</h2>
+    <ul>
+      <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">異なる画面のサポート
+</a></li>
+      <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更を処理する</a></li>
+      <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a>
+      </li>
+    </ul>
+
+  </div>
+</div>
+
+<p>アクティビティには、通常のアプリの動作によって破棄されるいくつかのシナリオがあります。たとえば、ユーザーが <em>[戻る]</em> ボタンを押したり、アクティビティが {@link android.app.Activity#finish()} を呼び出すことによって自身の破棄を知らせる場合などです。
+
+システムはまた、現在停止していて長時間使用されていないアクティビティがある場合や、フォアグラウンドのアクティビティが多くのリソースを必要とするためにシステムがメモリを取り戻すためにバックグラウンド プロセスを停止する必要がある場合にも、アクティビティを破棄することがあります。
+
+</p>
+
+<p>ユーザーが <em>[戻る]</em> を押すか、アクティビティ自身が終了することでアクティビティが破棄されたとき、これらの動作はアクティビティの必要性がなくなったことを示すため、システムの方針として {@link android.app.Activity} インスタンスは永遠に失われます。
+
+システムの制約(通常のアプリの動作ではなく)が原因で
+アクティビティが破棄される場合、実際の
+{@link android.app.Activity} インスタンスは失われますが、アクティビティが存在していたことをシステムが記憶しているため、ユーザーがアクティビティに復帰した場合は、破棄されたときのアクティビティの状態を記述する一連の保存されたデータを使用して、アクティビティの新しいインスタンスが作成されます。
+
+システムが以前の状態を復元するために使用する保存されたデータは、「インスタンス状態」と呼ばれ、{@link android.os.Bundle} オブジェクトに格納されたキーと値のペアの集合です。
+
+</p>
+
+<p class="caution"><strong>警告: </strong>ユーザーが画面を回転させるたびに、アクティビティが破棄され、再作成されます。
+画面の向きが変更されると、画面構成が変更され、アクティビティで(レイアウトなどの)代替リソースをロードする必要が生じる場合があるため、システムはフォアグラウンドのアクティビティを破棄し、再作成します。
+
+</p>
+
+<p>デフォルトでは、システムは {@link android.os.Bundle} のインスタンス状態を使用して、アクティビティのレイアウトの各 {@link android.view.View} オブジェクトに関する情報を保存しています({@link android.widget.EditText} オブジェクトに入力されたテキスト値など)。
+
+アクティビティのインスタンスが破棄され、再作成される場合、レイアウトの状態はコードを必要とすることなく以前の状態に復元されます。
+
+しかし、アクティビティでは、アクティビティにおけるユーザーの作業状況を追跡しているメンバ変数などの、復元することが望ましいその他の情報が存在する可能性があります。
+
+</p>
+
+<p class="note"><strong>注:</strong> Android システムがアクティビティのビューの状態を復元できるようにするためには、<strong>各ビューは固有の ID を持っている必要があります</strong>。これは
+ <a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
+android:id}</a> によって提供されます。
+</p>
+
+<p>アクティビティ状態についての追加データを保存するには、
+{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} コールバック メソッドをオーバーライドする必要があります。システムは、ユーザーがアクティビティを離れようとするとこのメソッドを呼び出し、{@link android.os.Bundle} オブジェクトに渡してアクティビティが予期せずに破棄された場合に備えて保存します。
+
+
+システムが後でアクティビティのインスタンスを再作成する必要がある場合は、同じ {@link
+android.os.Bundle} オブジェクトを {@link android.app.Activity#onRestoreInstanceState
+onRestoreInstanceState()} と {@link android.app.Activity#onCreate onCreate()}
+ の両方のメソッドに渡します。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
+<p class="img-caption"><strong>図 2.</strong> システムがアクティビティを停止し始めると、
+{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}(1)が呼び出されるため、{@link android.app.Activity} インスタンスの再作成の必要がある場合に備えて、保存する追加の状態データを指定できます。アクティビティが破棄され、同じインスタンスを再作成する必要がある場合、システムは(1)で定義された状態データを {@link android.app.Activity#onCreate onCreate()} メソッド(2)と 
+{@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} メソッド(3)の両方に渡します。
+
+
+
+
+</p>
+
+
+
+<h2 id="SaveState">自分のアクティビティ状態を保存する</h2>
+
+<p>アクティビティが停止し始めると、システムは {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()} を呼び出すため、アクティビティではキー値のペアのコレクションを使用して、状態情報を保存することができます。
+このメソッドのデフォルトの実装では、{@link android.widget.EditText} ウィジェット内のテキストまたは {@link android.widget.ListView} のスクロール位置などのアクティビティのビュー階層の状態に関する情報が保存されます。
+
+</p>
+
+<p>アクティビティの追加の状態情報を保存するには、
+{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} を実装し、{@link android.os.Bundle} オブジェクトにキー値のペアを追加する必要があります。
+次に例を示します。</p>
+
+<pre>
+static final String STATE_SCORE = "playerScore";
+static final String STATE_LEVEL = "playerLevel";
+...
+
+&#64;Override
+public void onSaveInstanceState(Bundle savedInstanceState) {
+    // Save the user's current game state
+    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
+    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
+    
+    // Always call the superclass so it can save the view hierarchy state
+    super.onSaveInstanceState(savedInstanceState);
+}
+</pre>
+
+<p class="caution"><strong>警告: </strong>デフォルトの実装でビュー階層の状態を保存できるよう、{@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} のスーパークラスの実装を常に呼び出す必要があります。
+</p>
+
+
+
+<h2 id="RestoreState">自分のアクティビティ状態をリストアする</h2>
+
+<p>以前破棄された後にアクティビティが再作成される場合、システムがアクティビティを渡した先の {@link android.os.Bundle} から、保存済みの状態を回復することができます。
+
+{@link android.app.Activity#onCreate onCreate()} と {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} の両方のコールバック メソッドが、インスタンスの状態情報を含む同じ {@link android.os.Bundle} を受け取ります。
+</p>
+
+<p>{@link android.app.Activity#onCreate onCreate()} メソッドは、システムがアクティビティの新しいインスタンスを作成しているか、以前のものを復元しているかどうかに関係なく呼び出されるため、状態の {@link android.os.Bundle} を読み取る前にこれが null かどうかを確認する必要があります。
+
+null の場合は、破棄された以前のアクティビティを復元する代わりにアクティビティの新しいインスタンスが作成されます。
+
+</p>
+
+<p>{@link android.app.Activity#onCreate
+onCreate()} で、いくつかの状態データを復元する方法について、次に例を示します。</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState); // Always call the superclass first
+   
+    // Check whether we're recreating a previously destroyed instance
+    if (savedInstanceState != null) {
+        // Restore value of members from saved state
+        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+    } else {
+        // Probably initialize members with default values for a new instance
+    }
+    ...
+}
+</pre>
+
+<p>{@link android.app.Activity#onCreate onCreate()} 中に状態を復元する代わりに、
+{@link android.app.Activity#onStart()} メソッドの後に呼び出される {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} の実装を選択できます。
+復元対象の保存済みの状態がある場合のみ {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} が呼び出されるため、
+{@link android.os.Bundle} が null であるかどうかをチェックする必要はありません。</p>
+        
+<pre>
+public void onRestoreInstanceState(Bundle savedInstanceState) {
+    // Always call the superclass so it can restore the view hierarchy
+    super.onRestoreInstanceState(savedInstanceState);
+   
+    // Restore state members from saved instance
+    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+}
+</pre>
+
+<p class="caution"><strong>警告: </strong>デフォルトの実装でビュー階層の状態を復元できるよう、{@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} のスーパークラスの実装を常に呼び出す必要があります。
+</p>
+
+<p>実行時の再起動イベント(画面が回転したときなど)によるアクティビティの再作成の詳細については、<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更を処理する</a>をお読みください。
+</p>
+
diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd
new file mode 100644
index 0000000..7c865a9
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd
@@ -0,0 +1,285 @@
+page.title=アクティビティを開始する
+page.tags=アクティビティのライフサイクル
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#lifecycle-states">ライフサイクル コールバックを理解する</a></li>
+  <li><a href="#launching-activity">アプリのランチャーのアクティビティを指定する</a></li>
+  <li><a href="#Create">新しいインスタンスを作成する</a></li>
+  <li><a href="#Destroy">アクティビティを破棄する</a></li>
+</ol>
+    
+    <h2>関連ドキュメント</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a></li>
+    </ul>
+
+<h2>試してみる</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">デモのダウンロード</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>{@code main()} メソッドを使用してアプリを起動する他のプログラミング パラダイムとは異なり、Android システムでは、そのライフサイクルの特定の段階に対応する特定のコールバック メソッドを呼び出すことによって、{@link android.app.Activity} インスタンスでコードを開始します。
+
+
+アクティビティを起動するコールバック メソッドのシーケンスと、アクティビティを破棄するコールバック メソッドのシーケンスがあります。
+</p>
+
+<p>このレッスンでは、最も重要なライフサイクル メソッドの概要を示し、アクティビティの新しいインスタンスを作成する最初のライフサイクル コールバックを扱う方法について説明します。
+</p>
+
+
+
+<h2 id="lifecycle-states">ライフサイクル コールバックを理解する</h2>
+
+<p>アクティビティの存続期間において、システムは、階段ピラミッド型のシーケンスで、ライフサイクル メソッドのコア セットを呼び出します。
+つまり、アクティビティのライフサイクルの各段階は、ピラミッドの個別の段です。
+システムが新しいアクティビティのインスタンスを作成すると、各コールバック メソッドはアクティビティ状態を 1 ステップ上に向かって移動させます。
+ピラミッドの頂点は、アクティビティがフォアグラウンドで実行されるポイントであり、ユーザーはそこで操作を行うことができます。
+</p>
+
+<p>ユーザーがアクティビティを離れる操作を始めると、システムはアクティビティを破棄するために、アクティビティ状態をピラミッドの下に向かって移動させる、別のメソッドを呼び出します。
+アクティビティがピラミッドの下に向かって途中まで移動し、待機する場合がありますが(ユーザーが別のアプリに切り替えた場合など)、そのポイントからアクティビティは頂点に戻ることができ(ユーザーがアクティビティに戻った場合)、アクティビティはユーザーが離れた場所から再開します。
+
+
+</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle.png" />
+<p class="img-caption"><strong>図 1.</strong> アクティビティのライフサイクルの簡略図は階段ピラミッドとして表現されます。
+ここでは、アクティビティを頂点の再開状態に向かって 1 ステップ移動させるために使用されるすべてのコールバックに対して、下に向かってアクティビティを移動させるコールバック メソッドがどのように分布しているかを示しています。
+
+アクティビティはまた、一時停止や停止の状態から再開した状態に復帰することができます。
+</p>
+
+
+<p>アクティビティの複雑さにもよりますが、すべてのライフサイクルメソッドを実装する必要はありません。
+ただし、それぞれを理解して、自分のアプリがユーザーの期待どおり動作するよう実装することが重要です。
+アクティビティのライフサイクル メソッドを正しく実装すると、自分のアプリが次を含めたいくつかの状態で良好に動作するようになります。
+</p>
+<ul>
+  <li>アプリの使用中にユーザーが電話を受けたり、別のアプリに切り替えた場合にもクラッシュしません。
+</li>
+  <li>ユーザーの使用頻度が低いときは、貴重なシステムリソースを消費しません。
+</li>
+  <li>ユーザーがアプリから離れ、後で復帰した場合でも、アプリを離れた時点における作業状態を失いません。
+</li>
+  <li>画面の向きが横長と縦長との間で切り替わったときも、クラッシュしたり、ユーザーの作業内容が失われることがありません。
+</li>
+</ul>
+
+<!--
+<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 
+methods.</p>
+<table>
+  <tr>
+    <th scope="col">Lifecycle State</th>
+    <th scope="col">Startup Method</th>
+    <th scope="col">Teardown Method</th>
+  </tr>
+  <tr>
+    <td>Created / Destroyed</td>
+    <td>{@link android.app.Activity#onCreate onCreate()}</td>
+    <td>{@link android.app.Activity#onDestroy()}</td>
+  </tr>
+  <tr>
+    <td>Started / Stopped</td>
+    <td>{@link android.app.Activity#onStart()}</td>
+    <td>{@link android.app.Activity#onStop()}</td>
+  </tr>
+  <tr>
+    <td>Resumed / Resumed</td>
+    <td>{@link android.app.Activity#onResume()}</td>
+    <td>{@link android.app.Activity#onPause()}</td>
+  </tr>
+</table>
+-->
+
+<p>次のレッスンで学習するように、図 1 に示されているさまざまな状態間で起きるアクティビティ遷移には、いくつかの状況があります。
+ただし、これらの状態のうち 3 つのみが静的なものとなります。
+すなわち、アクティビティが長期間にわたる場合、3 つの状態のいずれかで存在することになります。
+</p>
+<dl>
+  <dt>再開状態</dt>
+    <dd>この状態では、アクティビティがフォアグラウンドで実行され、ユーザーはそこで操作を行うことができます(「実行」状態とも呼ばれます)。
+</dd>
+  <dt>一時停止状態</dt>
+    <dd>この状態では、アクティビティは別のアクティビティによって部分的に隠されています。フォアグラウンドにある別のアクティビティは半透明になっているか、全画面をカバーしていません。
+一時停止したアクティビティはユーザーの入力を受信せず、一切のコードを実行できません。
+
+  <dt>停止状態</dt>
+    <dd>この状態では、アクティビティは完全に隠され、ユーザーには表示されません。バックグラウンドに存在するとみなされます。
+停止状態の間、アクティビティ インスタンスとメンバ変数のようなそのすべての状態情報は保持されますが、アクティビティ インスタンスは一切のコードを実行できません。
+</dd>
+</dl>
+
+<p>他の状態(作成や起動の状態)は一過性であり、システムはすぐに次のライフサイクル コールバック メソッドを呼び出して、次の状態に移動します。
+つまり、システムは
+{@link android.app.Activity#onCreate onCreate()} を呼び出した後、すぐに {@link
+android.app.Activity#onStart()} を呼び出しますが、この後で速やかに {@link
+android.app.Activity#onResume()} が続きます。</p>
+
+<p>以上が、アクティビティの基本ライフサイクルです。次に、特定のライフサイクルの動作のいくつかについて学習を開始しましょう。
+</p>
+
+
+
+<h2 id="launching-activity">アプリのランチャー アクティビティを指定する</h2> 
+
+<p>ユーザーがホーム画面からアプリのアイコンを選択すると、システムはアプリ内で「ランチャー」(または「メイン」)のアクティビティであると宣言された {@link android.app.Activity} に対して {@link
+android.app.Activity#onCreate onCreate()} メソッドを呼び出します。
+これは、アプリのユーザー インターフェースへのメインのエントリ ポイントとして機能するアクティビティです。
+</p>
+
+<p>プロジェクト ディレクトリのルートにある Android のマニフェスト ファイル、<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a> で、メインのアクティビティとして
+どのアクティビティを使用するが定義することができます。</p>
+
+<p>アプリのメインのアクティビティは、{@link
+android.content.Intent#ACTION_MAIN MAIN} アクションと {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} カテゴリを含む <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> を使用してマニフェストで宣言する必要があります。
+次に例を示します。</p> 
+
+<pre>
+&lt;activity android:name=".MainActivity" android:label="&#64;string/app_name">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.MAIN" />
+        &lt;category android:name="android.intent.category.LAUNCHER" />
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>注:</strong> Android SDK ツールを使用して新しい Android プロジェクトを作成すると、デフォルトのプロジェクト ファイルに、このフィルタを用いてマニフェストで宣言された {@link android.app.Activity} クラスが含まれます。
+
+</p>
+
+<p>自分のアクティビティの 1 つについて、{@link android.content.Intent#ACTION_MAIN MAIN} アクションまたは
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} カテゴリのいずれかが宣言されていない場合は、アプリのアイコンがホーム画面のアプリ リストに表示されません。
+</p>
+
+
+
+<h2 id="Create">新しいインスタンスを作成する</h2>
+
+<p>ほとんどのアプリには、ユーザーが異なるアクションを実行できるようにする、いくつかの異なるアクティビティが含まれます。あるアクティビティが、ユーザーがアプリのアイコンをクリックしたときに作成されるメインのアクティビティであっても、ユーザーのアクションに応答してアプリが開始する別のアクティビティであっても、システムはその {@link
+android.app.Activity#onCreate onCreate()} を呼び出すことにより、{@link android.app.Activity} の新しいインスタンスを毎回作成します。
+
+
+</p>
+
+<p>アクティビティの存続期間すべてにわたり、一度のみ発生すべき基本的なアプリの起動ロジックを実行するための 
+{@link android.app.Activity#onCreate onCreate()} メソッドを実装する必要があります。たとえば、
+{@link android.app.Activity#onCreate onCreate()} の実装では、ユーザー インターフェースを定義し、場合によってはいくつかのクラススコープの変数をインスタンス化する必要があります。
+</p>
+
+<p>たとえば、{@link android.app.Activity#onCreate onCreate()}メソッドに関する次の例では、(XML レイアウトファイルで定義される)ユーザー インターフェースを宣言したり、メンバ変数を定義したり、UI の一部を構成したりするなどの、アクティビティ用のいくつかの基本的なセットアップを実行する複数のコードを示しています。
+
+
+</p>
+
+<pre>
+TextView mTextView; // Member variable for text view in the layout
+
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    // Set the user interface layout for this Activity
+    // The layout file is defined in the project res/layout/main_activity.xml file
+    setContentView(R.layout.main_activity);
+    
+    // Initialize member TextView so we can manipulate it later
+    mTextView = (TextView) findViewById(R.id.text_message);
+    
+    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+        // For the main activity, make sure the app icon in the action bar
+        // does not behave as a button
+        ActionBar actionBar = getActionBar();
+        actionBar.setHomeButtonEnabled(false);
+    }
+}
+</pre>
+
+<p class="caution"><strong>警告: </strong>{@link android.os.Build.VERSION#SDK_INT} を使用すると、Android 2.0(API レベル 5)以降でのみこの方法で動作する新しい API が古いシステムで実行してしまうことを回避できます。
+
+古いバージョンでは、実行時の例外が発生します。</p>
+
+<p>{@link android.app.Activity#onCreate onCreate()} の実行が終了すると、システムが引き続き {@link android.app.Activity#onStart()} と {@link android.app.Activity#onResume()} メソッドを呼び出します。
+
+アクティビティは、作成や開始の状態で留まることはありません。技術的には、アクティビティは {@link android.app.Activity#onStart()} が呼び出されたときにユーザーに表示されますが、すぐに
+{@link android.app.Activity#onResume()} が続き、電話の着信やユーザーが別のアクティビティに移動したり、端末の画面がオフになったりした際のように、状態を変える状況が発生するまで、アクティビティは再開状態のままとなります。
+
+
+</p>
+
+<p>この後に続く他のレッスンでは、その他の起動メソッドである {@link
+android.app.Activity#onStart()} と {@link android.app.Activity#onResume()} が一時停止状態または停止状態からアクティビティを再開するために使用された場合、これらのメソッドがアクティビティのライフサイクル中にいかに有用であるかを説明します。
+</p>
+
+<p class="note"><strong>注:</strong> {@link android.app.Activity#onCreate onCreate()}メソッドには、<a href="recreating.html">アクティビティの再作成</a>についての後続のレッスンで説明している <code>savedInstanceState</code> と呼ぶパラメータが含まれています。
+
+</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" />
+<p class="img-caption"><strong>図 2.</strong> アクティビティの新しいインスタンスを作成する際に
+システムが順に呼び出す 3 つの主なコールバックである
+{@link android.app.Activity#onCreate onCreate()}、{@link
+android.app.Activity#onStart()}、{@link android.app.Activity#onResume()} を強調した、アクティビティのライフサイクル構造の別の図です。コールバックのこのシーケンスが完了すると、アクティビティは再開状態に達し、ユーザーは別のアクティビティに切り替えるまではこのアクティビティを操作できます。
+
+</p>
+
+
+
+
+
+
+
+<h2 id="Destroy">アクティビティを破棄する</h2>
+
+<p>アクティビティの最初のライフサイクル コールバックは、{@link android.app.Activity#onCreate
+onCreate()} であり、最終のコールバックは {@link android.app.Activity#onDestroy} です。システムは、アクティビティのインスタンスが完全にシステム メモリから削除される最終的な指示として、アクティビティでこのメソッドを呼び出します。
+
+</p>
+
+<p>ほとんどのアプリでは、このメソッドを実装する必要はありません。なぜなら、ローカルのクラス参照はアクティビティを使用して破棄され、自分のアクティビティでは、{@link
+android.app.Activity#onPause} と {@link android.app.Activity#onStop} の間にほぼすべてのクリーンアップを実行する必要があるからです。
+ただし、アクティビティに、{@link
+android.app.Activity#onCreate onCreate()} の間、または他の長時間実行中のリソースで作成された、正常に閉じないとメモリのリークを引き起こす可能性のあるバックグラウンド スレッドが含まれている場合、{@link
+android.app.Activity#onDestroy} の間にそれらを破棄する必要があります。
+
+</p>
+
+<pre>
+&#64;Override
+public void onDestroy() {
+    super.onDestroy();  // Always call the superclass
+    
+    // Stop method tracing that the activity started during onCreate()
+    android.os.Debug.stopMethodTracing();
+}
+</pre>
+
+<p class="note"><strong>注:</strong> ある状況を除くすべての状況では、システムは{@link android.app.Activity#onPause} と {@link
+android.app.Activity#onStop} を呼び出した後に {@link android.app.Activity#onDestroy}を呼び出します。ある状況とは、{@link android.app.Activity#onCreate onCreate()}メソッド内から {@link
+android.app.Activity#finish()} を呼び出したときです。
+
+自分のアクティビティが別のアクティビティを起動するための一時的な意思決定機能として動作する場合のようないくつかのケースでは、{@link
+android.app.Activity#onCreate onCreate()} 内から {@link android.app.Activity#finish()} を呼び出してアクティビティを破棄できます。
+この場合、システムは他のライフサイクルの任意のメソッドを呼び出すことなく、すぐに {@link android.app.Activity#onDestroy} を呼び出します。
+
+</p>
diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/stopping.jd
new file mode 100644
index 0000000..0007fe6
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/stopping.jd
@@ -0,0 +1,187 @@
+page.title=アクティビティの停止と再起動
+page.tags=アクティビティのライフサイクル
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>このレッスンでの学習内容</h2>
+    <ol>
+      <li><a href="#Stop">アクティビティを停止する</a></li>
+      <li><a href="#Start">アクティビティを開始/再起動する</a></li>
+    </ol>
+    
+    <h2>関連ドキュメント</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">アクティビティ</a>
+      </li>
+    </ul>
+
+<h2>試してみる</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">デモのダウンロード</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>アクティビティを適切に停止、再起動することは、アクティビティのライフサイクルにおいて重要なプロセスであり、これによりアプリが常に動作中であり、進捗中の作業が失われないことをユーザーが認識できるようになります。アクティビティを停止して再開させるシナリオの主な例を次に示します。
+
+</p>
+
+<ul>
+  <li>ユーザーが [最近使用したアプリ] ウィンドウを開き、現在のアプリから別のアプリに切り替えると、現在フォアグラウンドにあるアプリのアクティビティが停止します。
+ユーザーがホーム画面のランチャー アイコンまたは [最近使用したアプリ] ウィンドウから復帰した場合は、アクティビティは再起動します。
+</li>
+  <li>ユーザーが新しいアクティビティを開始するアプリ内のアクションを実行します。2 番目のアクティビティが作成されると現在のアクティビティが停止します。
+ユーザーが <em>[戻る]</em> ボタンを押すと、最初のアクティビティが再起動されます。
+</li>
+  <li>ユーザーが自分の携帯電話でアプリの使用中に電話を受けます。</li>
+</ul>
+
+<p>{@link android.app.Activity} クラスでは、{@link
+android.app.Activity#onStop()} と {@link android.app.Activity#onRestart()} の 2 つのライフサイクル メソッドが提供され、アクティビティの停止動作と再起動動作を明確に制御できます。
+UI が部分的に隠されることでわかる一時停止状態とは異なり、停止状態では必ず UI が完全に表示されなくなり、ユーザーのフォーカスが別のアクティビティ(または完全に別個のアプリ)に移ります。
+
+</p>
+
+<p class="note"><strong>注:</strong> {@link android.app.Activity}インスタンスは、停止中にシステム メモリ内に保持されるため、
+{@link android.app.Activity#onStop()} と {@link android.app.Activity#onRestart()} (さらに {@link
+android.app.Activity#onStart()})メソッドを実装する必要がない場合があります。
+比較的単純なほとんどのアクティビティの場合、アクティビティの停止と再起動が問題なく行われるため、現行のアクションを一時停止してシステム リソースから切り離すために {@link
+android.app.Activity#onPause()} を使用するだけでよい場合もあります。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-stopped.png" />
+<p class="img-caption"><strong>図 1.</strong> ユーザーがアクティビティを離れたとき、システムは
+{@link android.app.Activity#onStop onStop()} を呼び出してアクティビティ(1)を停止します。アクティビティが停止している間にユーザーが復帰した場合、システムは {@link android.app.Activity#onRestart onRestart()}
+(2)を呼び出し、すぐに {@link android.app.Activity#onStart onStart()}(3)と {@link
+android.app.Activity#onResume()}(4)が続きます。
+アクティビティを停止させるシナリオによらず、システムは {@link
+android.app.Activity#onStop onStop()} を呼び出す前に、常に {@link android.app.Activity#onPause onPause()} を呼び出すことに注意してください。
+</p>
+
+
+
+<h2 id="Stop">アクティビティを停止する</h2>
+
+<p>アクティビティは {@link android.app.Activity#onStop()} メソッドの呼び出しを受信すると表示されなくなり、ユーザーが使用していない間は必要とされないほぼすべてのリソースが解放されます。
+
+アクティビティが停止すると、システムはそのメモリを取り戻す必要がある場合に、インスタンスを破棄することがあります。
+極端な場合には、システムは、アクティビティの最終段階に当たる {@link android.app.Activity#onDestroy()} コールバックを呼び出すことなく、アプリのプロセスを強制終了する場合があるため、
+{@link android.app.Activity#onStop()} を使用してメモリのリークを引き起こす可能性があるリソースを解放することが重要です。
+</p>
+
+<p>{@link android.app.Activity#onPause onPause()} メソッドが 
+{@link android.app.Activity#onStop()} の前に呼び出されますが、データベースに情報を書き込むような、規模が大きく CPU に負荷がかかるシャットダウン操作を実行するためには {@link android.app.Activity#onStop onStop()}を使用する必要があります。
+
+</p>
+
+<p>永続ストレージに下書きのメモの内容を保存する {@link android.app.Activity#onStop onStop()} の実装の例を次に示します。
+</p>
+
+<!-- TODO: Find a better example for onStop, because this kind of thing should probably use a
+separate thread but that's too complicated to show here. -->
+<pre>
+&#64;Override
+protected void onStop() {
+    super.onStop();  // Always call the superclass method first
+
+    // Save the note's current draft, because the activity is stopping
+    // and we want to be sure the current note progress isn't lost.
+    ContentValues values = new ContentValues();
+    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
+    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
+
+    getContentResolver().update(
+            mUri,    // The URI for the note to update.
+            values,  // The map of column names and new values to apply to them.
+            null,    // No SELECT criteria are used.
+            null     // No WHERE columns are used.
+            );
+}
+</pre>
+
+<p>アクティビティが停止すると、{@link android.app.Activity} オブジェクトはメモリに常駐し、アクティビティが再開したときに再び呼び出されます。
+再開状態に導くいずれかのコールバック メソッドの間に作成されたコンポーネントを再初期化する必要はありません。
+また、レイアウト内の各 {@link android.view.View} の現在の状態が追跡されます。そのため、ユーザーが {@link android.widget.EditText} ウィジェットにテキストを入力した場合、その内容が保持されるので、それを保存、復元する必要はありません。
+
+
+</p>
+
+<p class="note"><strong>注:</strong> アクティビティが停止している間にシステムにより破棄された場合でも、依然として {@link android.os.Bundle}(ひとまとまりのキー値のペア)の {@link android.view.View} オブジェクト({@link
+android.widget.EditText} のテキストなど)の状態を保持し、ユーザーがアクティビティの同じインスタンスに復帰した場合には、それらを復元します(次の<a href="recreating.html">レッスン</a>では、アクティビティが破棄され、再作成された場合に、その他の状態データを保存するために {@link android.os.Bundle} を使用する方法の詳細について説明します)。
+
+
+</p>
+
+
+
+<h2 id="Start">アクティビティを開始/再起動する</h2>
+
+<p>アクティビティが停止状態からフォアグラウンドに復帰したとき、
+{@link android.app.Activity#onRestart()} の呼び出しを受信します。システムはまた、アクティビティが表示されるたびに(再起動か新規に作成された場合かのいずれか) {@link
+android.app.Activity#onStart()} メソッドを呼び出します。
+ただし、{@link
+android.app.Activity#onRestart()} メソッドはアクティビティが停止状態から再開する場合にのみ呼び出されるため、アクティビティが以前に停止したが破壊されていない場合にのみ必要となる可能性がある、特別な復旧作業を実行するためにこれを使用できます。
+
+</p>
+
+<p>多くの場合、アプリがアクティビティの状態を復元するために {@link android.app.Activity#onRestart()} の使用が必要となることはないため、一般的な多くのアプリに適用されるこのメソッドに関するガイドラインはありません。
+
+ただし、{@link android.app.Activity#onStop()} メソッドは、基本的にアクティビティのすべてのリソースをクリーンアップするため、アクティビティが再起動した際には再インスタンス化する必要があります。
+
+また、アクティビティが新規に作成されたとき(アクティビティの既存のインスタンスがない場合)にも、インスタンス化する必要があります。
+このような理由から、{@link android.app.Activity#onStop()} メソッドへの対応として、通常は {@link android.app.Activity#onStart()} コールバック メソッドを使用する必要があります。なぜなら、アクティビティを作成したときと停止状態からアクティビティを再開したときの両方において、システムが {@link
+android.app.Activity#onStart()} を呼び出すからです。
+
+
+</p>
+
+<p>たとえば、ユーザーが復帰まで長時間アプリから離れている可能性があるため、
+{@link android.app.Activity#onStart()} メソッドは、必要なシステム機能が有効になっているかを確認する場合に有用です。
+</p>
+
+<pre>
+&#64;Override
+protected void onStart() {
+    super.onStart();  // Always call the superclass method first
+    
+    // The activity is either being restarted or started for the first time
+    // so this is where we should make sure that GPS is enabled
+    LocationManager locationManager = 
+            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+    boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+    
+    if (!gpsEnabled) {
+        // Create a dialog here that requests the user to enable GPS, and use an intent
+        // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
+        // to take the user to the Settings screen to enable GPS when they click "OK"
+    }
+}
+
+&#64;Override
+protected void onRestart() {
+    super.onRestart();  // Always call the superclass method first
+    
+    // Activity being restarted from stopped state    
+}
+</pre>
+
+
+
+
+<p>システムがアクティビティを破棄する場合は、{@link android.app.Activity} に対して {@link android.app.Activity#onDestroy()} メソッドが呼び出されます。
+通常、{@link android.app.Activity#onStop()} を使用してリソースのほとんどを解放している可能性があるため、{@link
+android.app.Activity#onDestroy()} の呼び出しを受信する時点では、大抵のアプリでは必要な作業は少なくなっています。
+このメソッドは、メモリ リークにつながる可能性を持つリソースを一掃する最後のチャンスであるため、付加的なスレッドが破棄され、さらにメソッドのトレースのような長時間実行するその他のアクションも停止するようにする必要があります。
+
+
+</p>
+
diff --git a/docs/html-intl/intl/ja/training/basics/data-storage/databases.jd b/docs/html-intl/intl/ja/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..d0a4d8f
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/data-storage/databases.jd
@@ -0,0 +1,317 @@
+page.title=SQL データベースにデータを保存する
+page.tags=データ保存
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#DefineContract">スキーマとコントラクトを定義する</a></li>
+  <li><a href="#DbHelper">SQL ヘルパーを使用してデータベースを作成する</a></li>
+  <li><a href="#WriteDbRow">データベースに情報を格納する</a></li>
+  <li><a href="#ReadDbRow">データベースから情報を読み取る</a></li>
+  <li><a href="#DeleteDbRow">データベースから情報を削除する</a></li>
+  <li><a href="#UpdateDbRow">データベースを更新する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">データベースを使用する</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+  <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>データベースへのデータ保存は、連絡先情報などの繰り返し使用する、または構造化されたデータに最適です。
+このクラスでは、受講者が全般的な SQL データベースの知識に精通していることを前提としており、Android 上での SQLite データベースの導入を支援します。
+
+Android 上でのデータベース使用の際に必要な API は、{@link android.database.sqlite} パッケージに含まれています。
+</p>
+
+
+<h2 id="DefineContract">スキーマとコントラクトを定義する</h2>
+
+<p>SQL データベースの重要な要素の 1 つがスキーマであり、これはデータベースの編成方法に関する正式な宣言です。
+スキーマは、データベースを作成するために使用する SQL 文に反映されます。
+<em>コントラクト</em> クラスとして知られているコンパニオン クラスの作成が有用です。コンパニオン クラスでは、スキーマのレイアウトを明示的に、そして体系的な自己文書化する方法で指定します。
+
+</p>
+
+<p>コントラクト クラスは、URI、表、列の名前を定義する定数のコンテナです。
+コントラクト クラスを使用すると、同じパッケージ内の他のすべてのクラスで、同じ定数を使用することができます。
+これにより、1 つの場所で列名を変更した場合に、それをコード全体にプロパゲートすることができます。
+</p>
+
+<p>コントラクト クラスを編成するお勧めの方法の 1 つは、クラスのルート レベルでデータベース全体に対しグローバルな定義を設定することです。
+その後、その列を列挙する各表の内部クラスを作成します。
+</p>
+
+<p class="note"><strong>注:</strong> {@link
+android.provider.BaseColumns} インターフェースを実装することで、内部クラスでは、カーソル アダプタのようないくつかの Android クラスでも存在を想定されている、
+{@code _ID} と呼ばれるプライマリキーフィールドを継承することができます。
+これは必須ではありませんが、データベースが Android フレームワークと調和して動作する上で役立ちます。
+</p>
+
+<p>たとえば、次のスニペットでは、単一の表の表名と列名を定義します。
+</p>
+
+
+<pre>
+public final class FeedReaderContract {
+    // To prevent someone from accidentally instantiating the contract class,
+    // give it an empty constructor.
+    public FeedReaderContract() {}
+
+    /* Inner class that defines the table contents */
+    public static abstract class FeedEntry implements BaseColumns {
+        public static final String TABLE_NAME = &quot;entry&quot;;
+        public static final String COLUMN_NAME_ENTRY_ID = &quot;entryid&quot;;
+        public static final String COLUMN_NAME_TITLE = &quot;title&quot;;
+        public static final String COLUMN_NAME_SUBTITLE = &quot;subtitle&quot;;
+        ...
+    }
+}
+</pre>
+
+
+
+<h2 id="DbHelper">SQL ヘルパーを使用してデータベースを作成する</h2>
+
+<p>データベースの概要を定義した後、データベースと表を作成、管理するメソッドを実装する必要があります。
+表を作成して削除するための一般的な宣言の例を次にいくつか示します。
+</P>
+
+<pre>
+private static final String TEXT_TYPE = &quot; TEXT&quot;;
+private static final String COMMA_SEP = &quot;,&quot;;
+private static final String SQL_CREATE_ENTRIES =
+    &quot;CREATE TABLE &quot; + FeedEntry.TABLE_NAME + &quot; (&quot; +
+    FeedEntry._ID + &quot; INTEGER PRIMARY KEY,&quot; +
+    FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+    FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+    ... // Any other options for the CREATE command
+    &quot; )&quot;;
+
+private static final String SQL_DELETE_ENTRIES =
+    &quot;DROP TABLE IF EXISTS &quot; + FeedEntry.TABLE_NAME;
+</pre>
+
+<p>デバイスの<a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">内部ストレージ</a>にファイルを保存する場合と同様に、Android はアプリケーションに関連付けられているプライベート ディスク スペースにデータベースを格納します。
+
+デフォルトでは、この領域は他のアプリケーションからアクセスできないため、データの安全性は確保されています。
+</p>
+
+<p>一連の便利な API が、{@link
+android.database.sqlite.SQLiteOpenHelper}クラスで利用できます。このクラスを使用してデータベースへの参照を取得すると、<em>アプリケーションの起動時にではなく</em>必要な場合にのみ、データベースの作成、更新などの時間がかかる可能性が高い操作が実行されます。
+
+
+
+
+{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} または
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} の呼び出し以外は必要ありません。</p>
+
+<p class="note"><strong>注:</strong> 長時間実行する可能性があるため、
+{@link android.os.AsyncTask} または {@link android.app.IntentService} などを使用して、{@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} または {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} をバックグラウンド スレッドで呼び出すようにしてください。
+</p>
+
+<p>{@link android.database.sqlite.SQLiteOpenHelper} を使用するには、
+{@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}、{@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()}、{@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()} コールバック メソッドを上書きするサブクラスを作成します。また
+{@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()} を実装することもできますが、必須ではありません。
+</p>
+
+<p>次に、上記に示したいくつかのコマンドを使用した {@link
+android.database.sqlite.SQLiteOpenHelper} の実装例を示します。</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+    // If you change the database schema, you must increment the database version.
+    public static final int DATABASE_VERSION = 1;
+    public static final String DATABASE_NAME = &quot;FeedReader.db&quot;;
+
+    public FeedReaderDbHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+    public void onCreate(SQLiteDatabase db) {
+        db.execSQL(SQL_CREATE_ENTRIES);
+    }
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        // This database is only a cache for online data, so its upgrade policy is
+        // to simply to discard the data and start over
+        db.execSQL(SQL_DELETE_ENTRIES);
+        onCreate(db);
+    }
+    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        onUpgrade(db, oldVersion, newVersion);
+    }
+}
+</pre>
+
+<p>データベースにアクセスするには、{@link
+android.database.sqlite.SQLiteOpenHelper} のサブクラスのインスタンスを作成します。</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">データベースに情報を格納する</h2>
+
+<p>{@link android.content.ContentValues}オブジェクトを {@link android.database.sqlite.SQLiteDatabase#insert insert()} メソッドに渡してデータベースにデータを格納できます。
+</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+         FeedEntry.TABLE_NAME,
+         FeedEntry.COLUMN_NAME_NULLABLE,
+         values);
+</pre>
+
+<p>{@link android.database.sqlite.SQLiteDatabase#insert insert()}の最初の引数は単なる表の名前です。
+2 番目の引数は列の名前を指定します。この列では、{@link android.content.ContentValues} が空の場合にフレームワークが NULL を挿入できます(これを {@code "null"} に設定した場合、フレームワークは値がない場合には行を挿入しません)。
+
+
+</p>
+
+
+
+
+<h2 id="ReadDbRow">データベースから情報を読み取る</h2>
+
+<p>データベースから情報を読み取るには、{@link android.database.sqlite.SQLiteDatabase#query query()}メソッドを使用して選択条件および対象となる列をこれに渡します。このメソッドは、{@link android.database.sqlite.SQLiteDatabase#insert insert()}と {@link android.database.sqlite.SQLiteDatabase#update update()} 要素を組み合わせたもので(列リストを除く)、挿入するデータではなく取得対象のデータを定義します。
+
+
+
+クエリの結果は、
+{@link android.database.Cursor} オブジェクトとして返されます。</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+    FeedEntry._ID,
+    FeedEntry.COLUMN_NAME_TITLE,
+    FeedEntry.COLUMN_NAME_UPDATED,
+    ...
+    };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+    FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+    FeedEntry.TABLE_NAME,  // The table to query
+    projection,                               // The columns to return
+    selection,                                // The columns for the WHERE clause
+    selectionArgs,                            // The values for the WHERE clause
+    null,                                     // don't group the rows
+    null,                                     // don't filter by row groups
+    sortOrder                                 // The sort order
+    );
+</pre>
+
+<p>Cursor 内の特定の行に注目するには、いずれかの {@link android.database.Cursor} 移動メソッドを使用します。これは、必ず値の読み取りを開始する前に呼び出す必要があります。
+通常、初めに
+{@link android.database.Cursor#moveToFirst} を呼び出します。これは、結果の最初のエントリ上に「読み取り位置」を置きます。
+各行では、{@link android.database.Cursor#getString
+getString()} または {@link android.database.Cursor#getLong getLong()} のような
+{@link android.database.Cursor} 取得メソッドのいずれかを呼び出すことによって、列の値を読み取ることができます。各取得メソッドに対して、必要な列のインデックス位置を渡す必要があります。これは、{@link android.database.Cursor#getColumnIndex getColumnIndex()} または
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()}を呼び出すことによって取得できます。以下に例を示します。
+
+
+</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+    cursor.getColumnIndexOrThrow(FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">データベースから情報を削除する</h2>
+
+<p>表から行を削除するには、削除対象の行を特定するための条件を指定する必要があります。
+データベース API により、SQL インジェクションから保護される選択条件を作成するメカニズムが提供されます。
+このメカニズムでは、選択の指定を選択句と選択引数に分割します。
+句では参照対象の列を定義し、また、列のテストを組み合わせることができます。
+
+引数はテスト対象の値であり、句にバインドされます。結果は通常の SQL 文と同様には扱われないため、SQL インジェクションの影響を受けません。
+
+</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+// Specify arguments in placeholder order.
+String[] selectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, selection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">データベースを更新する</h2>
+
+<p>データベースの値のサブセットを変更する必要がある場合には、{@link
+android.database.sqlite.SQLiteDatabase#update update()} メソッドを使用します。</p>
+
+<p>表の更新では、{@link
+android.database.sqlite.SQLiteDatabase#insert insert()} のコンテンツ値の構文と、
+{@link android.database.sqlite.SQLiteDatabase#delete delete()} の {@code where} 構文が組み合わされます。</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+String[] selectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+    values,
+    selection,
+    selectionArgs);
+</pre>
+
diff --git a/docs/html-intl/intl/ja/training/basics/data-storage/files.jd b/docs/html-intl/intl/ja/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..dddfe37
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/data-storage/files.jd
@@ -0,0 +1,379 @@
+page.title=ファイルを保存する
+page.tags=データ ストレージ
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#InternalVsExternalStorage">内部または外部ストレージを選択する</a></li>
+  <li><a href="#GetWritePermission">外部ストレージのパーミッションを取得する</a></li>
+  <li><a href="#WriteInternalStorage">内部ストレージ上にファイルを保存する</a></li>
+  <li><a href="#WriteExternalStorage">外部ストレージ上にファイルを保存する</a></li>
+  <li><a href="#GetFreeSpace">空き領域をクエリする</a></li>
+  <li><a href="#DeleteFile">ファイルを削除する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">内部ストレージを使用する</a>
+</li>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部ストレージを使用する</a>
+</li>
+</ul>
+
+</div>
+</div>
+
+<p>Android は、他のプラットフォーム上のディスクベースの
+ファイル システムと同様なファイルシステムを使用しています。このレッスンでは、
+{@link java.io.File} API を使用したファイルの読み書きに関する Android ファイルシステムの操作方法について説明します。
+</p>
+
+<p>{@link java.io.File} オブジェクトは、スキップすることなく開始から終了までの順序で大量のデータを読み取りまたは書き込みするのに適しています。
+これは、たとえば画像ファイルやネットワークを介して交換される任意のファイルに対して有効です。
+</p>
+
+<p>このレッスンでは、自分のアプリで基本的なファイル関連のタスクを実行する方法を紹介します。ここでは、Linux ファイルシステムの基礎と
+{@link java.io} での標準的なファイル入力/出力の API に精通していることを前提としています。
+</p>
+
+
+<h2 id="InternalVsExternalStorage">内部または外部ストレージを選択する</h2>
+
+<p>すべての Android 端末には、「内部」ストレージと「外部」ストレージの 2 つのファイル記憶領域があります。これらの名前は初期の Android の名残として、当時ほとんどの端末が内蔵の不揮発性メモリ(内部ストレージ)を備えていたのに加え、マイクロ SD カードのような取り外し可能な記憶媒体(外部記憶装置)も備えていたことから来ています。一部の端末では、永続的なストレージ領域を「内部」と「外部」のパーティションに分割しており、リムーバブル記憶媒体が備わっていない場合でも常に 2 つのストレージ スペースがあり、外部ストレージが取り外し可能であるか否かにかかわらず、API の動作は同じです。以下のリストでは、各ストレージ スペースの特徴を要約しています。
+
+
+
+
+
+</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>内部ストレージ:</b></p>
+<ul>
+<li>常に使用可能。</li>
+<li>ここに保存されたファイルは、デフォルトでは自分のアプリからのみアクセスできます。</li>
+<li>ユーザーがアプリをアンインストールすると、システムは内部ストレージから当該アプリのファイルをすべて削除します。
+</li>
+</ul>
+<p>ユーザーからも他のアプリからも、自分のファイルにアクセスできないようにしたい場合、内部ストレージが最適です。
+</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>外部ストレージ:</b></p>
+<ul>
+<li>ユーザーは、USB ストレージなどの外部記憶装置をマウントできますが、端末から取り外す場合もあるため、常に使用可能というわけではありません。
+</li>
+<li>誰でも読み取り可能なため、ここに保存されたファイルは自分のコントロールの及ばない所で読み取られる可能性があります。
+</li>
+<li>ユーザーがアプリをアンインストールすると、当該アプリのファイルは、{@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} からディレクトリに保存された場合に限り、ここからすべて削除されます。
+</li>
+</ul>
+<p>アクセス制限を必要としないファイルや、他のアプリと共有したり、ユーザーがコンピュータ経由でアクセスできるようにしたりするファイルの場合、外部ストレージが最適です。
+
+</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>ヒント: </strong>アプリはデフォルトでは内部ストレージにインストールされますが、自分のアプリが外部ストレージにインストールされるように、マニフェスト内で <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> 属性を指定できます。
+
+APK のサイズが非常に大きく、内部ストレージよりも外部ストレージ容量が大きい場合、ユーザーにとってこのオプションは便利なものとなります。
+詳細については、<a href="{@docRoot}guide/topics/data/install-location.html">App Install Location</a> をご覧ください。
+</p>
+
+
+<h2 id="GetWritePermission">外部ストレージのパーミッションを取得する</h2>
+
+<p>外部ストレージに書き込むには、自分の<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">マニフェスト ファイル</a>で
+{@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} パーミッションをリクエストする必要があります。</p>
+
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+
+<div class="caution"><p><strong>警告: </strong>現在、すべてのアプリは特別なパーミッションを必要とせずに、外部ストレージからの読み取りが可能です。
+
+ただし、これは将来のリリースで変更される予定です。自分のアプリで外部ストレージの読み取り(書き込みではなく)の必要がある場合は、{@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE} パーミッションを宣言する必要があります。
+アプリが正常に動作し続けるようにするには、すぐにこのパーミッションを宣言して、変更を有効にする必要があります。
+</p>
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+<p>ただし、自分のアプリで {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}パーミッションを使用している場合は、暗黙的に外部ストレージの読み取りパーミッションも持つことになります。
+</p>
+</div>
+
+<p>内部ストレージにファイルを保存する際には、一切のパーミッションを必要としません。
+自分のアプリは常に、内部ストレージ ディレクトリ内のファイルの読み取りおよび書き込みパーミッションを持っています。
+</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">内部ストレージ上にファイルを保存する</h2>
+
+<p>内部ストレージにファイルを保存する場合は、次の 2 つのメソッドのいずれかを呼び出すことにより、
+{@link java.io.File} として適切なディレクトリを取得することができます。</p>
+
+<dl>
+  <dt>{@link android.content.Context#getFilesDir}</dt>
+  <dd>自分のアプリ用の内部ディレクトリを示す {@link java.io.File} を返します。</dd>
+  <dt>{@link android.content.Context#getCacheDir}</dt>
+  <dd>自分のアプリの一時キャッシュ ファイル用の内部ディレクトリを示す {@link java.io.File} を返します。
+必要がなくなった各ファイルを削除して、1MB などの、任意の時点で使用するメモリ量として適度なサイズ制限を実装してください。
+
+システムはストレージが不足し始めた場合、警告なしでキャッシュ ファイルを削除することがあります。
+</dd>
+</dl>
+
+<p>これらのディレクトリのいずれかに新しいファイルを作成するには、自分の内部ストレージ ディレクトリを指定する、上記のいずれかのメソッドで提供された {@link java.io.File} を渡して、{@link
+java.io.File#File(File,String) File()} コンストラクタを使用することができます。
+次に例を示します。</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>代わりに {@link
+android.content.Context#openFileOutput openFileOutput()} を呼び出して、自分の内部ディレクトリ内のファイルに書き込みを行う {@link java.io.FileOutputStream}を取得することができます。
+ファイルにテキストを書き込む方法の例を次に示します。
+</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+  outputStream.write(string.getBytes());
+  outputStream.close();
+} catch (Exception e) {
+  e.printStackTrace();
+}
+</pre>
+
+<p>または、いくつかのファイルをキャッシュする必要がある場合は、代わりに {@link
+java.io.File#createTempFile createTempFile()} を使用してください。たとえば、次のメソッドでは {@link java.net.URL} からファイル名を抽出し、自分のアプリの内部キャッシュ ディレクトリに、抽出した名前でファイルを作成します。
+
+</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+    File file;
+    try {
+        String fileName = Uri.parse(url).getLastPathSegment();
+        file = File.createTempFile(fileName, null, context.getCacheDir());
+    catch (IOException e) {
+        // Error while creating file
+    }
+    return file;
+}
+</pre>
+
+<p class="note"><strong>注:</strong>アプリの内部ストレージ ディレクトリは、Android ファイルシステムの特定の場所にアプリのパッケージ名で指定されています。技術的には、読み取り可能になるようファイル モードを設定した場合、別のアプリから自分の内部ストレージのファイルを読むことができます。
+
+
+
+ただし、他のアプリ側でもアプリのパッケージ名とファイル名が既知である必要があります。
+他のアプリからは、自分のアプリの内部ディレクトリを参照することはできず、明示的にファイルを読み取り可能または書き込み可能に設定しない限り、読み書きのアクセス権もないからです。
+すなわち、内部ストレージ上のファイルに対して {@link android.content.Context#MODE_PRIVATE} を使用する限り、ファイルは他のアプリからアクセス可能になることはありません。
+
+</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">外部ストレージ上にファイルを保存する</h2>
+
+<p>外部ストレージは使用できない場合があります(ユーザーが PC にストレージをマウントしているか、外部ストレージを提供する SD カードを取り外した場合など)。アクセスする前に、当該ボリュームが利用可能であるかを常に確認する必要があります。
+
+{@link android.os.Environment#getExternalStorageState} を呼び出すことによって、外部ストレージの状態をクエリすることができます。
+返された状態が {@link android.os.Environment#MEDIA_MOUNTED} に等しい場合は、ファイルの読み取りと書き込みができます。
+
+たとえば、次のメソッドは、ストレージの可用性を判断するのに有用です。
+</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state)) {
+        return true;
+    }
+    return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state) ||
+        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+        return true;
+    }
+    return false;
+}
+</pre>
+
+<p>外部ストレージは、ユーザーや他のアプリから変更可能ですが、ここで保存可能なファイルには次の 2 つのカテゴリがあります。
+</p>
+
+<dl>
+  <dt>パブリック ファイル</dt>
+  <dd>他のアプリおよびユーザーから自由に利用可能にすべきファイル。
+ユーザーがアプリをアンインストールしても、これらのファイルはユーザーから利用可能なままにしておく必要があります。
+
+  <p>たとえば、アプリで撮影した写真、その他のダウンロードされたファイルなどです。</p>
+  </dd>
+  <dt>プライベート ファイル</dt>
+  <dd>正当に自分のアプリに帰属しているファイルは、ユーザーがアプリをアンインストールした時点で削除する必要があります。これらのファイルは外部ストレージ上にあるため、技術的にはユーザーと他のアプリからアクセス可能ですが、現実問題としてアプリを離れたユーザーにとって価値を持たないファイルです。そのため、ユーザーがアプリをアンインストールすると、アプリの外部プライベート ディレクトリ内のすべてのファイルが削除されます。
+
+
+
+ 
+  <p>たとえば、自分のアプリでダウンロードした追加のリソースや一時的なメディア ファイルです。</p>
+  </dd>
+</dl>
+
+<p>外部ストレージにパブリック ファイルを保存する場合は、
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} メソッドを使用して、外部ストレージ上の適切なディレクトリを示す {@link java.io.File} を取得します。
+このメソッドは、{@link android.os.Environment#DIRECTORY_MUSIC} または {@link
+android.os.Environment#DIRECTORY_PICTURES} などの保存するファイルの種類を指定する引数を取り、他のパブリック ファイルとともに論理的に整理することができます。
+
+次に例を示します。</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+    // Get the directory for the user's public pictures directory. 
+    File file = new File(Environment.getExternalStoragePublicDirectory(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+
+<p>自分のアプリのプライベート ファイルを保存する場合は、{@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} を呼び出して希望するディレクトリのタイプを示す名前を渡し、適切なディレクトリを取得することができます。
+
+このように作成した各ディレクトリは、ユーザーがアプリをアンインストールするときにシステムが削除するアプリの外部ストレージ ファイルのすべてをカプセル化する親ディレクトリに追加されます。
+
+</p>
+
+<p>ここでは、個々のフォト アルバム用のディレクトリを作成するために使用できるメソッドの例を次に示します。</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+    // Get the directory for the app's private pictures directory. 
+    File file = new File(context.getExternalFilesDir(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+<p>あらかじめ定義されたサブディレクトリ名のいずれもが自分のファイルに適合しない場合、代わりに {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} を呼び出し、{@code null} を渡すことができます。これにより、外部ストレージ上のアプリのプライベート ディレクトリのルート ディレクトリが返されます。
+</p>
+
+<p>{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}は、ユーザーがアプリをアンインストールすると削除されるディレクトリ内にディレクトリを作成することに注意してください。ユーザーがアプリをアンインストールした後も、保存対象のファイルを利用可能にすべき場合(自分のアプリがカメラであり、ユーザーが撮った写真の利用を望むような場合)は、代わりに {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} を使用する必要があります。
+
+
+
+</p>
+
+
+<p>共有ファイルに対して {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} を使用しているか、自分のアプリにとってプライベートなファイルに対して
+{@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} を使用しているかどうかに関係なく、
+{@link android.os.Environment#DIRECTORY_PICTURES} のような API 定数が提供するディレクトリ名を使用することが重要です。
+
+これらのディレクトリ名により、ファイルがシステムによって正しく処理されるようになります。
+たとえば、{@link
+android.os.Environment#DIRECTORY_RINGTONES} に保存されたファイルは、システムのメディア スキャナにより音楽ではなく着信音として分類されます。
+</p>
+
+
+
+
+<h2 id="GetFreeSpace">空き領域をクエリする</h2>
+
+<p>前もって保存対象のデータ量がわかっている場合は、{@link java.io.File#getFreeSpace} または {@link
+java.io.File#getTotalSpace} 呼び出して、{@link
+java.io.IOException} を生じさせることなく十分な空き領域が利用可能かどうかを調べることができます。
+これらのメソッドでは、それぞれ、ストレージ ボリューム内の現在利用可能な領域と総領域がそれぞれ得られます。
+この情報は、一定の閾値以上のストレージ ボリュームの消費を避けるためにも有用です。
+</p>
+
+<p>しかし、システム上、{@link java.io.File#getFreeSpace} で示されたバイト数の書き込みは保証されるものではありません。
+返された数量が保存するデータのサイズよりも数 MB 上回る場合、またはファイルシステムの使用率が 90%未満の場合は、続行しても安全でしょう。それ以外の場合は、ストレージへの書き込みは避けるべきです。
+
+
+</p>
+
+<p class="note"><strong>注:</strong> ファイルを保存する前に、使用可能な領域の量をチェックする必要はありません。
+代わりにすぐにファイルを書き込んでみて、不都合が生じた場合に {@link java.io.IOException} を受け取ることができます。
+正確にどのくらいの領域が必要か不明な場合は、これを行う必要がある場合があります。
+たとえばファイルを保存する前に、PNG 画像を JPEG に 変換してエンコーディングを変更した場合、事前にファイルのサイズを知ることができません。
+
+</p>
+
+
+
+
+<h2 id="DeleteFile">ファイルを削除する</h2>
+
+<p>不要になったファイルは、常に削除する必要があります。ファイルを削除する最も簡単な方法は、
+開かれたファイル上で参照呼び出し {@link java.io.File#delete} を行うことです。</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>ファイルが内部ストレージに保存されている場合は、{@link android.content.Context} を使用して場所を特定し、
+{@link android.content.Context#deleteFile deleteFile()} を呼び出してファイルを削除することもできます。</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>注:</strong> ユーザーがアプリをアンインストールすると、Android システムは次を削除します。
+</p> 
+<ul>
+<li>内部ストレージに保存したすべてのファイル</li>
+<li>{@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} を使用して外部ストレージに保存したすべてのファイル</li>
+</ul>
+<p>ただし、定期的に
+{@link android.content.Context#getCacheDir()} で作成されたすべてのキャッシュ済みファイルを手動で削除し、必要なくなったファイルも定期的に削除する必要があります。
+</p>
+</div>
+
diff --git a/docs/html-intl/intl/ja/training/basics/data-storage/index.jd b/docs/html-intl/intl/ja/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..9109143
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/data-storage/index.jd
@@ -0,0 +1,57 @@
+page.title=データの保存
+page.tags=データ ストレージ、ファイル、SQL、データベース、環境設定
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>必要な知識と前提条件</h2>
+<ul>
+  <li>Android 1.6(API レベル 4)以降</li>
+  <li>Map のキー値コレクションに精通していること</li>
+  <li>Java ファイルの I/O API に精通していること</li>
+  <li>SQL データベースに精通していること</li>
+</ul>
+
+<h2>関連ドキュメント</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html">ストレージ オプション</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>ほとんどの Android アプリは、ユーザー操作の進行状況が失われないように {@link android.app.Activity#onPause onPause()} 中のアプリの状態に関する情報を保存する目的のみの場合でも、データを保存する必要があります。
+多くの主要アプリではユーザー設定も保存する必要があり、一部のアプリでは、ファイルやデータベース内の大量の情報を管理する必要があります。
+
+このクラスでは、次のような Android の主要なデータ ストレージ オプションを紹介します。
+</p>
+
+<ul>
+    <li>単純なデータ タイプのキー値のペアを共有の環境設定ファイル内に保存する
+</li>
+    <li>Android のファイル システム内に任意のファイルを保存する</li>
+    <li>SQLite で管理されたデータベースを使用する</li>
+</ul>
+
+
+<h2>レッスン</h2>
+
+<dl>
+  <dt><b><a href="shared-preferences.html">キー値セットを保存する</a></b></dt>
+    <dd>キー値ペアの少量の情報を格納するための、共有環境設定ファイルの使用について学びます。
+</dd>
+
+  <dt><b><a href="files.html">ファイルを保存する</a></b></dt>
+    <dd>通常順に読み取られる長いデータ シーケンスの格納方法など、基本的なファイルの保存について学びます。
+</dd>
+
+ <dt><b><a href="databases.html">SQL データベースにデータを保存する</a></b></dt>
+   <dd>構造化データを読み書きする際の SQLite データベースの使用について学びます。</dd>
+
+</dl>
diff --git a/docs/html-intl/intl/ja/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/ja/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..5f6d5ff
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,120 @@
+page.title=キー値セットを保存する
+page.tags=データ ストレージ
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#GetSharedPreferences">SharedPreferences を操作する</a></li>
+  <li><a href="#WriteSharedPreference">共有の環境設定に書き込む</a></li>
+  <li><a href="#ReadSharedPreference">共有の環境設定から読み取る</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">共有の環境設定を使用する</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>保存しようとするキー値の比較的小さなコレクションがある場合は、
+{@link android.content.SharedPreferences} API を使用する必要があります。
+{@link android.content.SharedPreferences} オブジェクトは、キー値のペアを含むファイルをポイントし、読み取りと書き込み用の単純なメソッドを提供します。
+各
+{@link android.content.SharedPreferences} ファイルは、フレームワークによって管理され、プライベートまたは共有にすることができます。
+</p>
+
+<p>このクラスでは、{@link android.content.SharedPreferences} API を使用して単純な値を格納し、取得する方法について説明します。
+</p>
+
+<p class="note"><strong>注:</strong> {@link android.content.SharedPreferences} API は、キー値のペアの読み取りおよび書き込みの目的にのみ使用できます。自分のアプリの設定用のユーザー インタフェースのビルドを支援する
+ {@link android.preference.Preference} API と混同しないようにしてください(ただし、これらは
+ {@link android.content.SharedPreferences} を実装として使用してアプリの設定を保存します)。
+
+{@link
+android.preference.Preference} API の使用方法については、<a href="{@docRoot}guide/topics/ui/settings.html">設定</a>のガイドを参照してください。</p>
+
+<h2 id="GetSharedPreferences">SharedPreferences を操作する</h2>
+
+<p>新しい共有の環境設定ファイルを作成したり、次の 2 つのメソッドのいずれかを呼び出すことにより、既存のファイルにアクセスできます。
+</p>
+<ul>
+  <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} - 最初のパラメータで指定した名前で識別される共有の環境設定ファイルが複数必要な場合に使用します。
+自分のアプリの任意の
+{@link android.content.Context} から、これを呼び出すことができます。</li>
+  <li>{@link android.app.Activity#getPreferences(int) getPreferences()} - アクティビティに対して共有の環境設定ファイルを 1 つのみ使用する必要がある場合、
+{@link android.app.Activity} からこれを使用します。
+これにより、アクティビティに属するデフォルトの共有の環境設定ファイルを取得できるので、名前を指定する必要はありません。
+</li>
+</ul>
+
+<p>たとえば、{@link android.app.Fragment} 内で次のコードが実行されます。これにより、リソース文字列 {@code R.string.preference_file_key} で識別する共有の環境設定ファイルにアクセスし、自分のアプリからのみアクセス可能になるよう、プライベート モードを使用して開きます。
+
+
+</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>共有の環境設定ファイルに名前を付ける場合は、{@code "com.example.myapp.PREFERENCE_FILE_KEY"} のような、自分のアプリを識別できる、一意の名前を使用する必要があります。
+</p>
+
+<p>または、アクティビティ用に共有の環境設定ファイルが 1 つのみ必要な場合、
+{@link android.app.Activity#getPreferences(int) getPreferences()} メソッドを使用することができます。</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>警告: </strong>{@link android.content.Context#MODE_WORLD_READABLE} または {@link
+android.content.Context#MODE_WORLD_WRITEABLE} を使用して共有の環境設定を作成した場合、ファイル識別子が既知である任意の他のアプリが自分のデータにアクセスできるようになります。
+
+</p>
+
+
+<h2 id="WriteSharedPreference">共有の環境設定に書き込む</h2>
+
+<p>共有の環境設定ファイルに書き込むには、自分の {@link android.content.SharedPreferences} で {@link
+android.content.SharedPreferences#edit} を呼び出して、{@link
+android.content.SharedPreferences.Editor} を作成します。</p>
+
+<p>{@link
+android.content.SharedPreferences.Editor#putInt putInt()} や {@link
+android.content.SharedPreferences.Editor#putString putString()} などのメソッドを使用して、書き込む対象のキーと値を渡します。{@link
+android.content.SharedPreferences.Editor#commit} を呼び出して変更を保存します。次に例を示します。</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">共有の環境設定から読み取る</h2>
+
+<p>共有の環境設定ファイルから希望の値を取得するには、{@link
+android.content.SharedPreferences#getInt getInt()} や {@link
+android.content.SharedPreferences#getString getString()} などのメソッドを呼び出して値のキーを指定しますが、オプションで、キーが存在しない場合に戻すデフォルト値を指定します。
+
+次に例を示します。</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
+</pre>
+
diff --git a/docs/html-intl/intl/ja/training/basics/intents/filters.jd b/docs/html-intl/intl/ja/training/basics/intents/filters.jd
new file mode 100644
index 0000000..5f0d69a
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/intents/filters.jd
@@ -0,0 +1,236 @@
+page.title=他のアプリからのアクティビティの開始を許可する
+page.tags=インテント
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#AddIntentFilter">インテント フィルタを追加する</a></li>
+  <li><a href="#HandleIntent">自分のアクティビティでインテントを処理する</a></li>
+  <li><a href="#ReturnResult">結果を返す</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">単純なデータの共有</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">ファイルの共有</a>
+</ul>
+  </div>
+</div>
+
+<p>前 2 回のレッスンでは、自分のアプリから別のアプリのアクティビティを開始する場合について焦点を当てました。一方、自分のアプリで別のアプリにとって役に立つかもしれないアクションを実行できる場合について、自分のアプリが他のアプリからのアクション要求に応答できるようにする必要があります。
+
+たとえば、友人とメッセージや写真を共有できるソーシャル アプリをビルドした場合、ユーザーが別のアプリから「共有」アクションを開始し、こちら側のアプリを起動してそのアクションを実行できるよう、{@link android.content.Intent#ACTION_SEND} インテントをサポートすることが最善の方法です。
+
+
+</p>
+
+<p>他のアプリからアクティビティを開始できるようにするには、対応する <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>要素のマニフェスト ファイルに <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a> 要素を追加する必要があります。
+</p>
+
+<p>アプリが端末にインストールされている場合、システムはインテント フィルタを識別し、インストールされているすべてのアプリでサポートされるインテントの内部カタログに情報を追加します。アプリが暗黙的インテントを使って {@link android.app.Activity#startActivity
+startActivity()} または {@link android.app.Activity#startActivityForResult startActivityForResult()}を呼び出すと、システムがどのアクティビティ(または複数のアクティビティ)がインテントに応答できるかを特定します。
+
+
+
+</p>
+
+
+
+<h2 id="AddIntentFilter">インテント フィルタを追加する</h2>
+
+<p>アクティビティがどのインテントを処理できるか適切に定義するためには、アクティビティが受け入れるアクションとデータのタイプについて、追加する各インテント フィルタをできるだけ具体的にする必要があります。
+
+</p>
+
+<p>アクティビティが {@link android.content.Intent} オブジェクトに関する次の基準を満たしているインテント フィルタを持つ場合、システムは、アクティビティに対して所定の {@link android.content.Intent} を送信することができます。
+</p>
+
+<dl>
+  <dt>アクション</dt>
+    <dd>実行するアクション名を表す文字列。通常、
+{@link android.content.Intent#ACTION_SEND} や {@link android.content.Intent#ACTION_VIEW} などのプラットフォームに定義された値のいずれか。
+    <p><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code &lt;action&gt;}</a> 要素を使用してインテント フィルタでこれを指定します。この要素で指定した値は、API 定数ではなく、アクションの完全な文字列名(下記の例を参照)である必要があります。
+
+</p></dd>
+
+  <dt>データ</dt>
+    <dd>インテントに関連するデータの詳細。
+    <p><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code &lt;data&gt;}</a> 要素を使用して、インテント フィルタでこれを指定します。この要素で 1 つ以上の属性を
+使用して、MIME タイプのみ、URI 接頭辞のみ、URI スキームのみ、またはこれらと受け入れられるデータ タイプを示すその他の項目の組み合わせを指定することができます。
+
+</p>
+    <p class="note"><strong>注:</strong> {@link android.net.Uri} データに関する詳細を宣言する必要がない場合(アクティビティが URI ではなく他の種類の「特別」データを処理するときなど)は、
+{@code text/plain} {@code image/jpeg} のようなアクティビティが処理するデータのタイプを宣言する {@code android:mimeType} 属性のみを指定する必要があります。
+
+</p>
+</dd>
+  <dt>カテゴリ</dt>
+    <dd>インテントを処理するアクティビティを特徴づけるための追加的な方法を提供し、通常はユーザーの操作や起動元の場所に関連付けられます。
+システムでサポートされているいくつかの異なるカテゴリがありますが、大抵のカテゴリはほとんど使用されません。
+しかし、すべての暗黙的インテントは、デフォルトでは
+{@link android.content.Intent#CATEGORY_DEFAULT} を使用して定義されています。
+    <p><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code &lt;category&gt;}</a>
+要素を使用して、インテント フィルタでこれを指定します。</p></dd>
+</dl>
+
+<p>インテント フィルタでは、それぞれの基準を<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a> 要素内でネストした対応する XML 要素を使用して宣言することによって、アクティビティが受け入れる基準を宣言することができます。
+
+</p>
+
+<p>次に、データ タイプがテキストまたは画像の場合に、{@link
+android.content.Intent#ACTION_SEND} インテントを処理するインテント フィルタを使用したアクティビティの例を示します。</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="text/plain"/>
+        &lt;data android:mimeType="image/*"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p>受信するインテントはそれぞれ 1 つのアクションと 1 つのデータ タイプのみを指定しますが、各
+<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> 内で <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a>、<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+&lt;data&gt;}</a> 要素の複数のインスタンスを宣言することもできます。
+</p>
+
+<p>アクションとデータのいずれか 2 つのペアが、各自の動作において相互に排他的である場合は、別のインテント フィルタを作成して、どのデータ タイプと組み合わされたときにとのアクションが受け入れられるかを指定する必要があります。
+
+</p>
+
+<p>たとえば、アクティビティが {@link
+android.content.Intent#ACTION_SEND} と {@link
+android.content.Intent#ACTION_SENDTO} の両方のインテントに関してテキストと画像の両方を処理するとします。この場合は、次の 2 つのアクションのための 2 つの別々のインテント フィルタを定義する必要があります。なぜなら {@link
+android.content.Intent#ACTION_SENDTO} インテントは、URI スキームの {@code send} または {@code sendto} を使用して受信者のアドレスを指定するために、
+{@link android.net.Uri} データを使用する必要があるからです。
+次に例を示します。</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SENDTO"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:scheme="sms" />
+        &lt;data android:scheme="smsto" />
+    &lt;/intent-filter>
+    &lt;!-- filter for sending text or images; accepts SEND action and text or image data -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="image/*"/>
+        &lt;data android:mimeType="text/plain"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>注:</strong> 暗黙的インテントを受信するためには、インテント フィルタで
+{@link android.content.Intent#CATEGORY_DEFAULT} カテゴリを含める必要があります。{@link
+android.app.Activity#startActivity startActivity()} と {@link
+android.app.Activity#startActivityForResult startActivityForResult()} メソッドは、すべてのインテントを {@link android.content.Intent#CATEGORY_DEFAULT} カテゴリを宣言しているものとして処理します。
+インテント フィルタで宣言していない場合、暗黙的インテントはアクティビティに紐付けされません。
+</p>
+
+<p>ソーシャル共有行動を実行する {@link android.content.Intent#ACTION_SEND}インテントの送受信方法の詳細については、<a href="{@docRoot}training/sharing/receive.html">他のアプリから単純なデータを受信する</a> のレッスンを参照してください。
+</p>
+
+
+<h2 id="HandleIntent">自分のアクティビティでインテントを処理する</h2>
+
+<p>アクティビティで実行するアクションを決定するために、起動時に使用された {@link
+android.content.Intent} を読み取ることができます。</p>
+
+<p>アクティビティが開始されたら、{@link android.app.Activity#getIntent()} を呼び出して、アクティビティを開始した 
+{@link android.content.Intent} を取得します。アクティビティのライフサイクル中はいつでもこれを行うことができますが、通常は、
+{@link android.app.Activity#onCreate onCreate()} や {@link android.app.Activity#onStart()} などの早い段階のコールバックの間に行う必要があります。
+</p>
+
+<p>次に例を示します。</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    setContentView(R.layout.main);
+
+    // Get the intent that started this activity
+    Intent intent = getIntent();
+    Uri data = intent.getData();
+
+    // Figure out what to do based on the intent type
+    if (intent.getType().indexOf("image/") != -1) {
+        // Handle intents with image data ...
+    } else if (intent.getType().equals("text/plain")) {
+        // Handle intents with text ...
+    }
+}
+</pre>
+
+
+<h2 id="ReturnResult">結果を返す</h2>
+
+<p>呼び出し元のアクティビティに結果を返したい場合は、{@link
+android.app.Activity#setResult(int,Intent) setResult()} を呼び出して結果コードと結果の {@link
+android.content.Intent} を指定します。操作が実行され、ユーザーが元のアクティビティに復帰する必要がある場合、
+{@link android.app.Activity#finish()} を呼び出してアクティビティを閉じます(その後破棄します)。次に例を示します。
+</p>
+
+<pre>
+// Create intent to deliver some kind of result data
+Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
+setResult(Activity.RESULT_OK, result);
+finish();
+</pre>
+
+<p>結果に対しては常に結果コードを指定する必要があります。通常は {@link
+android.app.Activity#RESULT_OK} または {@link android.app.Activity#RESULT_CANCELED} のいずれかになります。その後、必要に応じて {@link android.content.Intent} を使用して、追加のデータを指定することができます。
+</p>
+
+<p class="note"><strong>注:</strong> 結果は、デフォルトでは {@link
+android.app.Activity#RESULT_CANCELED} に設定されています。したがって、ユーザーがアクションを完了する前に<em>戻る</em>ボタンを押して、結果がまだ設定されていない場合、元のアクティビティは「キャンセルされた」結果を受け取ります。
+
+</p>
+
+<p>いくつかの結果オプションのいずれかを示す整数を返す必要がある場合は、0 よりも大きい任意の値に結果コードを設定することができます。
+結果コードを使用して整数を返す場合に {@link android.content.Intent} を含める必要がなければ、{@link
+android.app.Activity#setResult(int) setResult()} を呼び出して結果コードのみを渡すことができます。
+次に例を示します。</p>
+
+<pre>
+setResult(RESULT_COLOR_RED);
+finish();
+</pre>
+
+<p>この場合、可能性のある結果の数はわずかであるため、結果コードは、ローカルに定義されている整数(0 より大きい)になります。
+これは、自分が作成したアプリのアクティビティに結果を返す場合に役立ちます。結果を受け取るアクティビティがパブリック定数を参照でき、結果コードの値を判断できるためです。
+
+</p>
+
+<p class="note"><strong>注:</strong> 自分のアクティビティが {@link
+android.app.Activity#startActivity startActivity()} または {@link
+android.app.Activity#startActivityForResult startActivityForResult()} を使用して開始されたかどうかをチェックする必要はありません。
+アクティビティを開始したインテントが結果を待っている場合は、{@link
+android.app.Activity#setResult(int,Intent) setResult()} を呼び出します。
+元のアクティビティが {@link
+android.app.Activity#startActivityForResult startActivityForResult()} を呼び出していた場合、
+{@link android.app.Activity#setResult(int,Intent) setResult()} に提供した結果がそこに送られます。それ以外の場合は、結果は無視されます。
+</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ja/training/basics/intents/index.jd b/docs/html-intl/intl/ja/training/basics/intents/index.jd
new file mode 100644
index 0000000..ac14fd5
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/intents/index.jd
@@ -0,0 +1,62 @@
+page.title=他のアプリとの相互操作
+page.tags=インテント、アクティビティ
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>必要な知識と前提条件</h2>
+<ul>
+  <li>アクティビティのライフサイクルに関する基本知識(<a href="{@docRoot}training/basics/activity-lifecycle/index.html">アクティビティのライフサイクル管理</a>を参照)
+</li>
+</ul>
+
+
+<h2>関連ドキュメント</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">単純なデータの共有</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">ファイルの共有</a>
+  <li><a href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">Integrating Application with Intents(ブログ投稿)</a>
+</li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテントフィルタ</a>
+</li>
+</ul>
+
+</div>
+</div>
+
+<p>Android アプリには通常、いくつかの<a href="{@docRoot}guide/components/activities.html">アクティビティ</a>があります。各アクティビティでは、ユーザーが特定のタスク(マップの表示や写真の撮影など)を実行できるユーザー インターフェースが表示されます。あるアクティビティから別のアクティビティにユーザーを移動させるためには、アプリで {@link
+android.content.Intent} を使用して、ある動作に至るアプリの「インテント(意図)」を定義する必要があります。
+
+{@link
+android.app.Activity#startActivity startActivity()} のようなメソッドでシステムに
+{@link android.content.Intent} を渡すと、システムは {@link
+android.content.Intent} を使用して適切なアプリ コンポーネントを特定して起動します。インテントを使用すると、自分のアプリから別のアプリにあるアクティビティを開始させることもできます。
+</p>
+
+<p>{@link android.content.Intent} は、特定のコンポーネント(特定の {@link android.app.Activity} インスタンス)を開始するために<em>明示的</em>にしたり、または(「写真を撮影する」などの)意図したアクションを処理できる任意のコンポーネントを開始するために<em>暗黙的</em>にしたりすることができます。
+
+</p>
+
+<p>このクラスでは {@link android.content.Intent} を使用して、別のアプリを起動する、そのアプリから結果を受け取る、などの他のアプリとの間でいくつかの基本的な相互操作を実行し、他のアプリのインテントに自分のアプリが応答できるようにする方法を示します。
+
+</p>
+
+<h2>レッスン</h2>
+
+<dl>
+  <dt><b><a href="sending.html">別のアプリにユーザーを送る</a></b></dt>
+  <dd>あるアクションを実行する他のアプリを起動するために、暗黙的なインテントを作成する方法を示します。
+</dd>
+  <dt><b><a href="result.html">アクティビティから結果を取得する</a></b></dt>
+  <dd>別のアクティビティを開始し、そのアクティビティの結果を受け取る方法を示します。</dd>
+  <dt><b><a href="filters.html">他のアプリからのアクティビティの開始を許可する</a></b></dt>
+  <dd>自分のアプリが受け入れる暗黙的なインテントを宣言するインテント フィルタを定義することによって、他のアプリからの使用に供するために、自分のアプリ内のアクティビティをオープンにする方法を示します。
+</dd>
+</dl>
+
diff --git a/docs/html-intl/intl/ja/training/basics/intents/result.jd b/docs/html-intl/intl/ja/training/basics/intents/result.jd
new file mode 100644
index 0000000..62c06ae
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/intents/result.jd
@@ -0,0 +1,178 @@
+page.title=アクティビティから結果を取得する
+page.tags=インテント
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#StartActivity">アクティビティを開始する</a></li>
+  <li><a href="#ReceiveResult">結果を受け取る</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">単純なデータの共有</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">ファイルの共有</a>
+</ul>
+
+  </div>
+</div>
+
+<p>別のアクティビティを開始する場合、必ずしも一方向である必要はありません。別のアクティビティを開始して、結果を受け取ることもできます。
+結果を受け取るには、({@link android.app.Activity#startActivity
+startActivity()} ではなく) {@link android.app.Activity#startActivityForResult
+startActivityForResult()} を呼び出します。</p>
+
+<p>たとえば、自分のアプリでカメラアプリを起動し、結果として撮影した写真を受け取ることができます。または、ユーザーが連絡先を選択するケースにおいて、連絡帳アプリを起動し、結果として連絡先の詳細を受け取ることができます。
+
+</p>
+
+<p>もちろん、応答するアクティビティは結果を返すように設計されていなければなりません。その場合は、別の {@link android.content.Intent} オブジェクトとして結果を送信します。
+自分のアクティビティ側では、
+{@link android.app.Activity#onActivityResult onActivityResult()} コールバック内で結果を受け取ります。</p>
+
+<p class="note"><strong>注: </strong>
+{@link android.app.Activity#startActivityForResult startActivityForResult()} を呼び出す際は、明示的または暗黙的インテントを使用することができます。自分のアクティビティのいずれかを開始して結果を受け取ろうとする場合は、想定通りの結果を受け取れるようにするため、明示的なインテントを使用する必要があります。
+
+</p>
+
+
+<h2 id="StartActivity">アクティビティを開始する</h2>
+
+<p>結果を受け取るためにアクティビティを開始する際、使用する {@link android.content.Intent} オブジェクトに関して特に記すべき内容はありませんが、{@link
+android.app.Activity#startActivityForResult startActivityForResult()} メソッドに対して追加で整数の引数を渡す必要があります。
+</p>
+
+<p>整数の引数は、リクエストを識別する「要求コード」です。結果の
+{@link android.content.Intent} を受け取ると、アプリが正常に結果を識別し、その処理方法を決定することができるように、コールバックが同じ要求コードを提供します。
+</p>
+
+<p>たとえば、ユーザーが連絡先を選択できるようにするアクティビティの開始方法について、次に例を示します。</p>
+
+<pre>
+static final int PICK_CONTACT_REQUEST = 1;  // The request code
+...
+private void pickContact() {
+    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
+    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
+    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
+}
+</pre>
+
+
+<h2 id="ReceiveResult">結果を受け取る</h2>
+
+<p>ユーザーが、その後のアクティビティを終えて復帰すると、システムは自分のアクティビティの
+{@link android.app.Activity#onActivityResult onActivityResult()} メソッドを呼び出します。このメソッドには、次の 3 つの引数が含まれます。
+</p>
+
+<ul>
+  <li>{@link
+android.app.Activity#startActivityForResult startActivityForResult()} に渡した要求コード。</li>
+  <li>第 2 のアクティビティによって指定された結果コード。これは、操作が成功した場合の {@link
+android.app.Activity#RESULT_OK} か、ユーザーがバックアウトしたり、何らかの理由で失敗したりした場合の {@link
+android.app.Activity#RESULT_CANCELED} か、いずれか一方です。
+</li>
+  <li>結果のデータを運ぶ {@link android.content.Intent}。</li>
+</ul>
+
+<p>たとえば、「連絡先を選ぶ」インテント用に結果を処理する方法について、次に例を示します。</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // The user picked a contact.
+            // The Intent's data Uri identifies which contact was selected.
+
+            // Do something with the contact here (bigger example below)
+        }
+    }
+}
+</pre>
+
+<p>この例では、Android の連絡先または連絡帳アプリから返される結果の {@link android.content.Intent} は、ユーザーが選択した連絡先を識別するコンテンツ {@link android.net.Uri} を提供します。
+
+</p>
+
+<p>正常に結果を処理するためには、結果の
+{@link android.content.Intent} の形式がどうなるかを理解する必要があります。これは、結果を返すアクティビティが自分のアクティビティの 1 つである場合には簡単です。
+Android プラットフォームに付属のアプリでは、特定の結果データに対して役立つ、独自の API を提供しています。
+たとえば、連絡帳アプリ(一部の古いバージョンでは連絡先アプリ)は常に選択した連絡先を識別するコンテンツ URI を含む結果を返し、カメラアプリは別に {@code "data"} で {@link android.graphics.Bitmap} を返します(<a href="{@docRoot}training/camera/index.html">写真を撮影する</a>のクラスを参照)。
+
+
+</p>
+
+
+<h4>ボーナス: 連絡先データを読み取る</h4>
+
+<p>連絡帳アプリから結果を取得する方法を示した上記のコードでは、実際に結果からデータを読み取る方法の詳細には触れていませんが、これは、<a href="{@docRoot}guide/topics/providers/content-providers.html">コンテンツプロバイダ</a>に関する高度な説明が必要であるためです。
+
+
+ここでは興味がある方向けに、結果データをクエリして、選択された連絡先から電話番号を取得する方法について、次にコード例を示します。
+</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request it is that we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // Get the URI that points to the selected contact
+            Uri contactUri = data.getData();
+            // We only need the NUMBER column, because there will be only one row in the result
+            String[] projection = {Phone.NUMBER};
+
+            // Perform the query on the contact to get the NUMBER column
+            // We don't need a selection or sort order (there's only one result for the given URI)
+            // CAUTION: The query() method should be called from a separate thread to avoid blocking
+            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
+            // Consider using {@link android.content.CursorLoader} to perform the query.
+            Cursor cursor = getContentResolver()
+                    .query(contactUri, projection, null, null, null);
+            cursor.moveToFirst();
+
+            // Retrieve the phone number from the NUMBER column
+            int column = cursor.getColumnIndex(Phone.NUMBER);
+            String number = cursor.getString(column);
+
+            // Do something with the phone number...
+        }
+    }
+}
+</pre>
+
+<p class="note"><strong>注: </strong>Android 2.3(API レベル 9)以前では、
+{@link android.provider.ContactsContract.Contacts Contacts Provider} でクエリ(上記のような)を実行する場合、自分のアプリで {@link
+android.Manifest.permission#READ_CONTACTS} パーミッション(<a href="{@docRoot}guide/topics/security/security.html">セキュリティとパーミッション</a>を参照)を宣言することが必要です。
+ただし、Android 2.3 からは連絡先または連絡帳アプリにより、結果を返すときに連絡先プロバイダから読み取るための一時的パーミッションが付与されます。
+
+一時的パーミッションは要求された特定の連絡先にのみ適用されるため、{@link
+android.Manifest.permission#READ_CONTACTS} パーミッションを宣言した場合を除き、インテントの {@link android.net.Uri} で指定したもの以外の連絡先はクエリできません。
+
+</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ja/training/basics/intents/sending.jd b/docs/html-intl/intl/ja/training/basics/intents/sending.jd
new file mode 100644
index 0000000..586bc15
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/intents/sending.jd
@@ -0,0 +1,256 @@
+page.title=別のアプリにユーザーを送る
+page.tags=インテント
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#Build">暗黙的インテントをビルドする</a></li>
+  <li><a href="#Verify">インテントを受け取るアプリがあるか確認する</a></li>
+  <li><a href="#StartActivity">インテントを使ってアクティビティを開始する</a></li>
+  <li><a href="#AppChooser">アプリ チューザを表示する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">単純なデータの共有</a></li>
+</ul>
+
+  </div>
+</div>
+
+<p>Android の最も重要な特長の一つに、ユーザーが実行を希望する「アクション」に基づいて、別のアプリにユーザーを送信するアプリの機能があります。
+たとえば、自分のアプリで地図上に表示したいお店やサービスの住所がある場合、アプリでマップを表示するアクティビティをビルドする必要はありません。
+
+代わりに {@link android.content.Intent} 使用して、住所を表示するための要求を作成することができます。
+Android システムは、マップ上に住所を表示できるアプリを起動します。
+</p>
+
+<p>第 1 回のクラス<a href="{@docRoot}training/basics/firstapp/index.html">初めてのアプリ作成</a>で説明したように、自分のアプリでのアクティビティ間を移動するためにインテントを使用する必要があります。通常それには、起動するコンポーネントの正確なクラス名を定義する、<em>明示的なインテント</em>を使用します。
+
+
+ただし、「マップを表示する」などのアクションを別のアプリに実行させたい場合、<em>暗黙的なインテント</em>を使用する必要があります。
+</p>
+
+<p>このレッスンでは、特定のアクションの暗黙的インテントを作成する方法や、他のアプリでアクションを実行するアクティビティを開始させる目的で、暗黙的インテントを使用する方法を示します。
+</p>
+
+
+
+<h2 id="Build">暗黙的インテントをビルドする</h2>
+
+<p>暗黙的インテントは、開始するコンポーネントのクラス名を宣言せず、代わりに実行するアクションを宣言します。
+アクションでは、<em>表示</em>、<em>編集</em>、<em>送信</em>や、<em>取得</em>などの、希望する操作を指定します。
+インテントは、多くの場合、表示対象の住所、送信対象の電子メール メッセージなど、アクションに関連するデータを含みます。作成するインテントにもよりますが、データは {@link android.net.Uri}、またはその他のいくつかのデータ タイプのいずれかとなるか、データ自体全く必要とならない場合もあります。
+
+
+</p>
+
+<p>データが {@link android.net.Uri} である場合は、単純な {@link
+android.content.Intent#Intent(String,Uri) Intent()} コンストラクタを使用してアクションとデータを定義することができます。
+</p>
+
+<p>ここでは、電話番号を指定するための {@link
+android.net.Uri} のデータを使用して、電話をかけるインテントを作成する方法について次の例を示します。</p>
+
+<pre>
+Uri number = Uri.parse("tel:5551234");
+Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
+</pre>
+
+<p>{@link android.app.Activity#startActivity
+startActivity()} を呼び出すことにより、自分のアプリでインテントが起動されると、電話アプリは指定された電話番号への通話を開始します。</p>
+
+<p>ここでは他の 2 つのインテント、およびそのアクションと{@link android.net.Uri} データのペアの例を示します。
+</p>
+
+<ul>
+  <li>マップを表示する:
+<pre>
+// Map point based on address
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+// Or map point based on latitude/longitude
+// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+</pre>
+  </li>
+  <li>ウェブ ページを表示する:
+<pre>
+Uri webpage = Uri.parse("http://www.android.com");
+Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
+</pre>
+  </li>
+</ul>
+
+<p>暗黙的インテントのその他の種類には、文字列などのさまざまなデータ タイプを提供する「特別」データを必要とします。
+さまざまな {@link
+android.content.Intent#putExtra(String,String) putExtra()} メソッドを使用して、特別データを 1 つ以上追加することができます。</p>
+
+<p>デフォルトでは、インテントに含まれる 
+{@link android.net.Uri} データに基づいて、インテントに必要な適切な MIME タイプをシステムが決定します。インテントに {@link android.net.Uri} が含まれていない場合は、通常は {@link android.content.Intent#setType setType()} を使用して、インテントに関連するデータのタイプを指定する必要があります。
+
+MIME タイプの詳細な指定により、どの種類のアクティビティがインテントを受け取るかが指定されます。
+</p>
+
+<p>ここでは、目的のアクションを指定するための特別データを追加しているインテントの例を示します。</p>
+
+<ul>
+  <li>添付ファイル付きのメールを送信する:
+<pre>
+Intent emailIntent = new Intent(Intent.ACTION_SEND);
+// The intent does not have a URI, so declare the "text/plain" MIME type
+emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
+emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
+emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
+emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
+emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
+// You can also attach multiple items by passing an ArrayList of Uris
+</pre>
+  </li>
+  <li>カレンダーイベントを作成する:
+<pre>
+Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
+Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
+Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
+calendarIntent.putExtra(Events.TITLE, "Ninja class");
+calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
+</pre>
+<p class="note"><strong>注:</strong> カレンダー イベント用のこのインテントは、API レベル 14 以降でのみサポートされています。
+</p>
+  </li>
+</ul>
+
+<p class="note"><strong>注:</strong> できるだけ具体的に {@link
+android.content.Intent} を定義することが重要です。たとえば、
+{@link android.content.Intent#ACTION_VIEW} のインテントを使用して画像を表示する場合、
+{@code image/*} の MIME タイプを指定する必要があります。これにより、他のタイプのデータを「表示」できる(マップ アプリのような)アプリがインテントによってトリガーされることを回避します。
+</p>
+
+
+
+<h2 id="Verify">インテントを受け取るアプリがあるか確認する</h2>
+
+<p>Android プラットフォームは、特定のインテント(電話、メール、カレンダーアプリなど)が内蔵のアプリのいずれかへ解決することを保証しますが、インテントを呼び出す前に常に検証ステップを含める必要があります。
+
+</p>
+
+<p class="caution"><strong>警告: </strong>インテントを呼び出した際、端末上で利用可能なインテントを処理できるアプリがない場合、アプリがクラッシュします。
+</p>
+
+<p>インテントに応答できる利用可能なアクティビティがあるかどうかを確認するには {@link
+android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} を呼び出して、
+{@link android.content.Intent} を処理できるアクティビティのリストを取得します。返された {@link
+java.util.List} が空ではない場合、安全にインテントを使用することができます。次に例を示します。</p>
+
+<pre>
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
+        PackageManager.MATCH_DEFAULT_ONLY);
+boolean isIntentSafe = activities.size() > 0;
+</pre>
+
+<p><code>isIntentSafe</code> が <code>true</code> であれば、少なくとも 1 つのアプリがインテントに応答します。
+<code>false</code> であれば、インテントを処理するアプリが存在しません。</p>
+
+<p class="note"><strong>注:</strong> ユーザーがインテントを使用する前にインテントを使用する機能を無効化する必要がある場合、アクティビティが最初に起動するときにこのチェックを実行する必要があります。
+
+インテントを処理できるアプリが具体的に分かっている場合、当該アプリをダウンロードするユーザーのためにリンクを提供することができます(<a href="{@docRoot}distribute/tools/promote/linking.html">Google
+Play 上の自分の製品にリンクする方法</a>を参照)。
+</p>
+
+
+<h2 id="StartActivity">インテントを使ってアクティビティを開始する</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intents-choice.png" alt="" />
+  <p class="img-caption"><strong>図 1.</strong> 複数のアプリがインテントを処理することができるときに表示される選択ダイアログの例です。
+</p>
+</div>
+
+<p>{@link android.content.Intent} を作成し、付加情報を設定したら、{@link
+android.app.Activity#startActivity startActivity()} を呼び出してシステムに送信します。システムがインテントを処理することができる複数のアクティビティを特定した場合、図 1 に示すように使用するアプリを選択できるダイアログをユーザーに表示します。
+
+インテントを処理できるアクティビティが 1 つのみの場合、システムはすぐにそのアクティビティを起動します。
+</p>
+
+<pre>
+startActivity(intent);
+</pre>
+
+<p>次に、マップを表示するためのインテントを作成し、そのインテントを処理するアプリが存在するかを確認してから起動する、一連の方法について例を示します。
+</p>
+
+<pre>
+// Build the intent
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+
+// Verify it resolves
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List&lt;ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
+boolean isIntentSafe = activities.size() > 0;
+
+// Start an activity if it's safe
+if (isIntentSafe) {
+    startActivity(mapIntent);
+}
+</pre>
+
+
+
+<h2 id="AppChooser">アプリ チューザを表示する</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="" />
+  <p class="img-caption"><strong>図 2.</strong> チューザのダイアログ</p>
+</div>
+
+<p>自分の {@link android.content.Intent} を {@link
+android.app.Activity#startActivity startActivity()} に渡してアクティビティを開始した際に、インテントに応答できる複数のアプリがある場合、ユーザーがデフォルトで使用するアプリを選択できること(ダイアログの下部にあるチェックボックスを選択してこれを行います。図 1 参照)に注意してください。
+
+これは、(1 つのウェブ ブラウザのみを使用する傾向にあるユーザーが)ウェブ ページを開いたり、(1 つのカメラを選ぶ傾向にあるユーザーが)写真を撮影したりするときのように、ユーザーがアクション実行時に毎回同じアプリの使用を希望するような場合には有用です。
+
+</p>
+
+<p>一方、実行対象のアクションが複数のアプリによって処理できる場合、ユーザーは毎回異なるアプリを選ぶかもしれません。たとえば「共有」アクションなど、いくつかのアプリを介してアイテムを共有する可能性があります。この場合、図 2 に示すように、チューザのダイアログを明示的に表示する必要があります。
+
+
+チューザのダイアログは、アクションのたびに使用するアプリを選択するよう、ユーザーを強制します(ユーザーはアクションのデフォルトのアプリを選択することはできません)。
+
+</p>
+
+<p>チューザを表示するには、{@link
+android.content.Intent#createChooser createChooser()} を使用して {@link android.content.Intent} を作成し、{@link
+android.app.Activity#startActivity startActivity()} に渡します。次に例を示します。</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+...
+
+// Always use string resources for UI text.
+// This says something like "Share this photo with"
+String title = getResources().getString(R.string.chooser_title);
+// Create intent to show chooser
+Intent chooser = Intent.createChooser(intent, title);
+
+// Verify the intent will resolve to at least one activity
+if (intent.resolveActivity(getPackageManager()) != null) {
+    startActivity(chooser);
+}
+</pre>
+
+<p>これにより、{@link
+android.content.Intent#createChooser createChooser()} メソッドに渡されたインテントに応答するアプリのリストを示すダイアログが表示され、指定されたテキストがダイアログのタイトルになります。
+</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/design/get-started/principles.jd b/docs/html-intl/intl/ko/design/get-started/principles.jd
new file mode 100644
index 0000000..aba8a9b
--- /dev/null
+++ b/docs/html-intl/intl/ko/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Android 디자인 원칙
+@jd:body
+
+<p>이러한 디자인 원칙은 사용자의 이익을 가장 염두에 두고 Android
+사용자 환경 팀(User Experience Team)에 의해서와 이 팀을 위해 개발되었습니다. Android 개발자 및 디자이너를
+위해 Android 사용자 환경 팀은 계속해서 여러
+유형의 기기를 위한 상세한 디자인 가이드라인의
+기저를 이루고 있습니다.</p>
+
+<p>
+본인의
+창의성과 디자인 사고를 적용할 때 이러한 원칙을 고려해 보시기 바랍니다. 목적을 가지고 여러 가지 참신한 발상을 실현해 보세요.
+</p>
+
+<h2 id="enchant-me">황홀하게 만들기</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="delight-me">놀라운 방식으로 기쁨을 주기</h4>
+<p>아름다운 표면, 신중하게 위치한 애니메이션 또는 시간적으로 잘 짜여진 소리 효과는 사람들에게 즐거운
+경험을 줍니다. 잔잔한 효과는 자연스러움을 느끼게 해주며, 강력한
+힘을 가지고 있다고 느끼게 해줍니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="real-objects-more-fun">버튼 및 메뉴보다 더 흥미로운 실제 사물</h4>
+<p>사람들이 직접 앱 내 사물을 터치하고 조작할 수 있게 해보세요. 이는 태스크를 수행할 때
+필요한 인지 노력을 줄이는 동시에 정서적인 만족을 가져다 줍니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-it-mine">내 것으로 만들게 하기</h4>
+<p>사람들은 개인적인 취향을 더하고 싶어 하는데, 그렇게 하면 마음이 편안해지고 통제할 수 있다고 느끼게 되기 때문입니다. 합리적이고
+아름다운 기본 설정을 제공하는 동시에
+주요 태스크를 저해하지 않는 범위에서 재미있고, 선택 가능한 맞춤 기능을 제공할 것을 고려해 보십시오.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="get-to-know-me">사용자에 대해 파악하기</h4>
+<p>시간이 지남에 따라 사람들이 선호하는 것을 알아보세요. 똑같은 선택을 매번
+하도록 요구하기 보다는 이전 선택을 쉽게 접근할 수 있는 곳에 둡니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2 id="simplify-my-life">사용자의 생활을 단순하게 만들기</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="keep-it-brief">간결하게 만들기</h4>
+<p>간단한 단어로 이루어진 짧은 문구를 사용하세요. 문장이 길면 사람들이 보지 않고 넘길 가능성이 커집니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="pictures-faster-than-words">말보다 빠른 사진</h4>
+<p>생각을 전달하는 데 사진을 이용할 것을 고려해 보세요. 사람들의 시선을 끌고 말보다
+더 효과적일 수 있습니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="decide-for-me">사용자를 대신해서 결정해 주되 최종 결정권은 사용자에게 주기</h4>
+<p>먼저 물어보기 보다는 최선의 추측을 하고 조치를 취해 보세요. 선택하고 결정해야 하는 사항이 너무 많으면 사람들이
+짜증을 내게 됩니다. 만약을 대비해 '실행 취소' 기능을 제공합니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="only-show-when-i-need-it">사용자가 필요로 할 때 필요한 사항만 보여주기</h4>
+<p>사람들은 한 번에 너무 많은 것을 보면 버거워합니다. 태스크 및 정보를 소화 가능한
+작은 크기로 나누세요. 현재 필요하지 않은 옵션은 숨기고 사람들의 작업 진행에 맞게 옵션을 표시하세요.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="always-know-where-i-am">사용자 자신이 현재 어디에 있는지 항상 알도록 하기</h4>
+<p>사람들에게 현재 자신이 어디에 있는지에 대한 확신을 주어야 합니다. 앱에서 장소가 명확하게 표시되게 하고,
+전환을 사용하여 화면 간 관계를 보여줍니다. 현재 작업 중인 태스크에 대한 피드백을 제공합니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="never-lose-my-stuff">사용자가 가지고 있는 것들을 절대 잃어버리지 않도록 하기</h4>
+<p>사람들이 공들여 만든 것을 저장하고 어디서든지 액세스할 수 있게 합니다. 휴대폰, 태블릿 및 컴퓨터에 걸쳐 설정,
+개인적 특색, 그리고 만든 것들이 저장되도록 합니다. 그렇게 하면 업그레이드가 세상에서
+가장 쉬워집니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="looks-same-should-act-same">똑같이 보이면 똑같이 동작되도록 하기</h4>
+<p>기능을 시각적으로 단순하게 만들기 보다는 눈에 띄게 만들어 사람들이 기능적 차이를 알아볼 수 있게 합니다.
+비슷하게 보이는 장소지만 같은 입력에 대해 다르게 실행되는 모드는 피하도록 합니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="interrupt-only-if-important">중요할 때만 작업을 중단하기</h4>
+<p>유능한 개인 비서와 같이 중요하지 않은 일로 사람들의 작업을 중단하지 않도록 합니다. 사람들은
+작업에 계속 집중하기를 바라며, 중요하고 시간을 다투는 일을 제외하고는 작업이 중단되면 부담스럽고 짜증이 날 수 있습니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2 id="make-me-amazing">사용자를 놀래킬 수 있는 환경 만들기</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="give-me-tricks">어디서든 적용될 수 있는 팁 제공하기</h4>
+<p>사람들은 스스로 알아내는 것을 좋아합니다. 다른 Android 앱의 시각적 패턴과 머슬 메모리(muscle memory)를 활용하여
+앱을 쉽게 배울 수 있게 만드세요. 예를 들어 스와이프 제스처는
+좋은 탐색 지름길이 될 수 있습니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="its-not-my-fault">사용자가 자기 탓으로 느끼지 않게 하기</h4>
+<p>사람들의 실수를 바로잡아 줄 때는 부드럽게 합니다. 사람들은
+앱을 사용할 때 스마트하게 느끼고 싶어 합니다. 뭔가 잘못될 경우, 명확한 복구 지침을 제공하되, 기술적인 세부 사항은 제공하지 않습니다.
+사람들 모르게 복구할 수 있으면 더 좋습니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="sprinkle-encouragement">격려하기</h4>
+<p>복잡한 태스크를 쉽게 완료할 수 있도록 여러 단계로 나눕니다. 미묘한 반짝임일지라도
+작업에 대해서 피드백을 줍니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="do-heavy-lifting-for-me">힘든 건 대신해주기</h4>
+<p>초보자들이 할 수 있을 것이라 생각하지 못한 일들을 해서 전문가처럼 느낄 수 있게 합니다. 예를
+들어, 여러 사진 효과를 결합한 단축키 기능은 아마추어 사진이
+겨우 몇 단계를 거치는 것만으로 멋진 사진으로 보이게 할 수 있습니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-important-things-fast">중요한 일은 빨리 해결되도록 하기</h4>
+<p>모든 작업이 같지는 않습니다. 앱에서 가장 중요한 것이 무엇인지 결정한 후 쉽게 찾을 수 있고
+빨리 사용할 수 있도록 합니다. 일례로 카메라의 셔터 버튼이나 음악 플레이어의 일시정지 버튼이 이에 해당됩니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/ko/design/material/index.jd b/docs/html-intl/intl/ko/design/material/index.jd
new file mode 100644
index 0000000..31992fa
--- /dev/null
+++ b/docs/html-intl/intl/ko/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=머티어리얼 디자인
+page.tags=Material,design
+page.type=design
+page.image=design/material/images/MaterialLight.png
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+  <div>
+    <h3>개발자 문서</h3>
+    <p>머티어리얼 디자인으로 앱 생성</p>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+    <h3>비디오</h3>
+    <p>머티어리얼 디자인 소개</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+    <h3>비디오</h3>
+    <p>종이와 잉크: 중요한 머티어리얼</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+    <h3>비디오</h3>
+    <p>Google I/O 앱 내 머티어리얼 디자인</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">머티어리얼 디자인은 플랫폼 및 기기 전반의 표현 방식, 모션 및
+상호 작용 디자인에 대한 종합적인 지침입니다. Android에는 이제
+머티어리얼 디자인 앱에 대한 지원이 포함되었습니다. Android 앱에서 머티어리얼 디자인을 사용하려면 <a href="http://www.google.com/design/spec">머티어리얼 디자인 사양</a>에
+규정되어 있는 지침을 따르세요. 또한 Android 5.0(API 레벨 21) 이상에서 제공하는
+새 구성 요소 및 기능을 사용하세요.</p>
+
+<p>Android는 머티어리얼 디자인 앱을 구축하는 데 사용할 수 있는 다음 요소를 제공합니다.</p>
+
+<ul>
+  <li>새로운 테마</li>
+  <li>복잡한 뷰를 위한 새로운 위젯</li>
+  <li>사용자 지정 그림자 및 애니메이션을 위한 새로운 API</li>
+</ul>
+
+<p>Android에서 머티어리얼 디자인을 구현하는 방법에 대한 자세한 내용은
+<a href="{@docRoot}training/material/index.html">머티어리얼 디자인으로 앱 생성</a>을 참조하세요.</p>
+
+
+<h3>머티어리얼 테마</h3>
+
+<p>머티어리얼 테마는 앱에 사용할 수 있는 새로운 스타일, 색상표를
+설정할 수 있는 시스템 위젯, 그리고 터치 피드백 및 액티비티 전환을 위한 기본 애니메이션을 제공합니다.</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">어두운 머티어리얼 테마</p>
+  </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">밝은 머티어리얼 테마</p>
+  </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>자세한 내용은 <a href="{@docRoot}training/material/theme.html">머티어리얼
+테마 사용</a>을 참조하세요.</p>
+
+
+<h3>목록 및 카드</h3>
+
+<p>Android는 머티어리얼 디자인 스타일
+및 애니메이션으로 카드 및 목록을 표시하는 데 사용할 수 있는 두 개의 새로운 위젯을 제공합니다.</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+  <p>새로운 <code>RecyclerView</code> 위젯은 <code>ListView</code>의
+플러그 기능이 개선된 버전으로, 다양한 레이아웃 유형을 지원하고 향상된 성능을 제공합니다.</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+  <p>새로운 <code>CardView</code> 위젯은 일관적인 모양 및 느낌이 있는
+카드 내 정보의 중요한 부분을 표시할 수 있게 해줍니다.</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>자세한 내용은 <a href="{@docRoot}training/material/lists-cards.html">목록
+및 카드 생성</a>을 참조하세요.</p>
+
+
+<h3>뷰 그림자</h3>
+
+<p>X 및 Y 속성과 더불어 이제 Android의 뷰에는 Z
+속성이 추가되었습니다. 이 새로운 속성은 다음을 결정하는 뷰의 엘리베이션을 나타냅니다.</p>
+
+<ul>
+<li>그림자 크기: 뷰의 Z 값이 클수록 표시되는 그림자도 커집니다.</li>
+<li>그리기 순서: 뷰의 Z 값이 클수록 다른 뷰의 위에 표시됩니다.</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+  <div class="framed-nexus5-port-span-5">
+  <video class="play-on-hover" autoplay>
+    <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+  </video>
+  </div>
+  <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+    <em>영화를 재생하려면 기기 화면을 클릭합니다.</em>
+  </div>
+</div>
+
+<p>자세한 내용은 <a href="{@docRoot}training/material/shadows-clipping.html">그림자
+정의 및 뷰 클리핑</a>을 참조하세요.</p>
+
+
+<h3>애니메이션</h3>
+
+<p>새 애니메이션 API는 UI 컨트롤 내의 터치 피드백, 뷰 상태
+변화, 그리고 액티비티 전환을 위한 사용자 지정 애니메이션을 생성할 수 있게 해줍니다.</p>
+
+<p>이 API를 사용하면 다음 작업을 수행할 수 있습니다.</p>
+
+<ul>
+<li style="margin-bottom:15px">
+<strong>터치 피드백</strong> 애니메이션으로 뷰 내 터치 이벤트에 응답하기.
+</li>
+<li style="margin-bottom:15px">
+<strong>회전하며 나타나기</strong> 애니메이션으로 뷰 감추기 및 표시하기.
+</li>
+<li style="margin-bottom:15px">
+사용자 지정 <strong>액티비티 전환</strong> 애니메이션으로 액티비티 간 전환하기.
+</li>
+<li style="margin-bottom:15px">
+<strong>커브 모션</strong>으로 더 자연스러운 애니메이션 생성하기.
+</li>
+<li style="margin-bottom:15px">
+<strong>뷰 상태 변경</strong> 애니메이션으로 하나 이상의 뷰 속성 변경 사항 애니메이션화하기.
+</li>
+<li style="margin-bottom:15px">
+뷰 상태 변경 간에 <strong>상태 목록 드로어블</strong>에서 애니메이션 표시하기.
+</li>
+</ul>
+
+<p>터치 피드백 애니메이션은 버튼과 같은 여러 기본 뷰에 내장되어 있습니다. 새 API를 사용하면 이러한 애니메이션을 사용자 지정하고 사용자 지정 뷰에 추가할 수
+있습니다.</p>
+
+<p>자세한 내용은 <a href="{@docRoot}training/material/animations.html">사용자지정
+애니메이션 정의</a>를 참조하세요.</p>
+
+
+<h3>드로어블</h3>
+
+<p>드로어블에 대한 다음과 같은 새 기능을 통해 머티어리얼 디자인 앱을 쉽게 구현할 수 있습니다.</p>
+
+<ul>
+<li><strong>벡터 드로어블</strong>은 단색 인앱 아이콘에
+적합하며, 정의 손실 없이 확장 가능합니다.</li>
+<li><strong>드로어블 색조</strong>를 사용하면 비트맵을 알파 마스크로 정의할 수 있으며, 런타임에
+색을 입힐 수 있습니다.</li>
+<li><strong>색상 추출</strong>은
+비트맵 이미지에서 주요 색상을 자동으로 추출할 수 있게 해줍니다.</li>
+</ul>
+
+<p>자세한 내용은 <a href="{@docRoot}training/material/drawables.html">Drawable
+사용</a>을 참조하세요.</p>
diff --git a/docs/html-intl/intl/ko/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/ko/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..2444b0e
--- /dev/null
+++ b/docs/html-intl/intl/ko/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=확인 및 승인하기
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>사용자가 앱에서 작업을 호출할 때와 같은 몇몇 상황에서는 텍스트를 통해 해당 작업을 <em>확인</em>하거나 <em>승인</em>하는 것이 좋습니다.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+    <p><strong>확인하기</strong>란, 사용자에게 방금 호출한 작업을 정말로 진행할 것인지 묻는 것입니다. 경우에 따라 확인은 고려해야 할 작업과 관련된 경고 또는 중요한 정보와 함께 표시됩니다.</p>
+  </div>
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+    <p><strong>승인하기</strong>란, 사용자에게 방금 호출한 작업이 완료되었음을 알리는 텍스트를 표시하는 것입니다. 이는 시스템이 수행하는 암시적인 작업에 대한 불확실성을 제거해 줍니다. 경우에 따라 승인은 작업의 실행을 취소하는 옵션과 함께 표시됩니다.</p>
+  </div>
+</div>
+
+<p>이런 방식의 사용자와의 소통은 이미 일어난 일이나 일어날 일에 대한 불확실성을 완화시키는 데 도움이 될 수 있습니다. 또한, 확인하기 또는 승인하기는 사용자가 후회할지도 모르는 실수를 미연에 방지합니다.</p>
+
+<h2>사용자 작업을 확인 또는 승인하기 적절한 경우</h2>
+<p>모든 작업에 확인 또는 승인이 적합한 것은 아닙니다. 다음 순서도를 참고하여 디자인을 결정하는 데 도움을 받으세요.</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>확인하기</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>예: Google Play 도서</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+    <p>이 예에서는 사용자가 Google Play 라이브러리에서 도서 삭제를 요청했습니다. 이 작업을 확인하기 위해 <a href="{@docRoot}design/building-blocks/dialogs.html#alerts">경고</a>가 나타납니다. 왜냐하면 해당 도서를 더 이상 어떠한 기기에서도 이용할 수 없다는 것을 알려야 하기 때문입니다.</p>
+    <p>확인 대화 상자를 작성할 때, 요청된 작업을 반향하여 제목을 의미 있게 만듭니다.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>예: Android Beam</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+    <p>확인을 두 개의 버튼을 포함한 경고로 표시할 필요는 없습니다. Android Beam을 시작하면 사용자에게 공유할 콘텐츠를 터치하라는 메시지가 표시됩니다(이 예의 경우 사진). 진행하지 않기로 결정한 경우에는 휴대폰에서 벗어나면 됩니다.</p>
+  </div>
+</div>
+
+<h2>승인하기</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>예: 방치된 Gmail 초안 저장</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+    <p>이 예에서는 사용자가 Gmail의 메일 작성 화면에서 뒤로 또는 위로 탐색을 수행하면 예상치 못한 일이 일어나는데, 그건 바로 현재 초안이 자동으로 저장되는 것입니다. 승인은 알림 메시지 형식으로 나타납니다. 그리고 몇 초 후 사라집니다.</p>
+    <p>이때, 저장이 사용자가 아닌 앱에 의해 이뤄졌기 때문에 실행 취소는 적합하지 않습니다. 그리고 초안 목록으로 이동하면 쉽고 빠르게 메일 작성을 재개할 수 있습니다.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+    <h4>예: Gmail 대화 삭제</h4>
+    <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+    <p>사용자가 Gmail 목록에서 대화를 삭제하면, 승인이 실행 취소 옵션과 함께 표시됩니다. 승인은 사용자가 목록을 스크롤하는 등의 관련 없는 작업을 수행하기 전까지 그대로 남아 있습니다.</p>
+  </div>
+</div>
+
+<h2>확인 또는 승인이 필요 없는 경우</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>예: +1 누르기</h4>
+    <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+    <p><strong>확인이 필요 없습니다</strong>. 사용자가 실수로 +1을 누른 경우, 별문제가 되지 않습니다. 버튼을 다시 터치하여 해당 작업의 실행을 취소하면 됩니다.</p>
+    <p><strong>승인이 필요 없습니다</strong>. 사용자는 +1 버튼이 바운스되고 빨간색으로 바뀌는 것을 볼 수 있습니다. 이는 매우 분명한 신호입니다.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>예: 홈 화면에서 앱 제거하기</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+    <p><strong>확인이 필요 없습니다</strong>. 이는 의도적인 작업으로, 사용자는 상대적으로 크고 고립된 대상으로 항목을 끌어다 놓을 것입니다. 따라서 실수가 발생할 가능성이 매우 낮습니다. 하지만 사용자가 이 결정을 후회하는 경우, 다시 복구하는 데는 몇 초면 됩니다.</p>
+    <p><strong>승인이 필요 없습니다</strong>. 사용자는 앱이 홈 화면에서 사라진 것을 알게 되는데, 이는 앱을 외부로 끌어서 화면에서 사라지게 했기 때문입니다.</p>
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/ko/design/patterns/navigation.jd b/docs/html-intl/intl/ko/design/patterns/navigation.jd
new file mode 100644
index 0000000..8e5c30b
--- /dev/null
+++ b/docs/html-intl/intl/ko/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=뒤로 및 위로 탐색 기능이 포함된 탐색
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+  <div>
+    <h3>개발자 문서</h3>
+    <p>효과적인 탐색 구현하기</p>
+  </div>
+</a>
+
+<p itemprop="description">일관적인 탐색 기능은 전반적인 사용자 환경에 필수적인 요소입니다. 일관성 없고 예상대로 진행되지 않는 기본 탐색은
+사용자에게 많은 실망을 줍니다. Android 3.0에서는
+글로벌 탐색 동작에 중요한 변경 사항을 도입했습니다. 뒤로 및 위로 탐색에 대한
+가이드라인을 꼼꼼히 따르면 사용자가 예상 가능하고 신뢰할 수 있는 탐색 기능이 탑재된 앱을 만들 수 있습니다.</p>
+<p>Android 2.3 이하 버전에서는
+앱 내 탐색 기능을 지원하기 위해 시스템의 <em>뒤로</em> 버튼에 의존했습니다. Android 3.0에서는 작업 모음을 도입함으로써 앱 아이콘 및 왼쪽 방향 캐럿으로 이루어진 2차 탐색 메커니즘인
+<em>위로</em> 버튼이 추가되었습니다.</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">위로 및 뒤로 비교</h2>
+
+<p>위로 버튼은 화면
+간의 계층적 관계를 기반으로 앱 내에서 탐색할 때 사용됩니다. 예를 들어, 화면 A에 표시된 항목 목록에서 항목을 선택하면 항목에 대한 세부 정보를 표시하는 화면 B로 이동하게 되는데, 이때
+화면 B는 화면 A로
+돌아가는 위로 버튼을 제공해야 합니다.</p>
+<p>화면이 앱의 최상단에 있는 경우(즉, 앱의 홈인 경우), 위로
+버튼이 표시되지 않아야 합니다.</p>
+
+<p>시스템의 뒤로 버튼은 사용자가 최근에 작업한 화면
+기록을 역순으로 탐색할 때 사용됩니다. 일반적으로 이 버튼은 앱의 계층 구조가 아닌 화면
+간의 일시적인 관계를 기반으로 합니다.</p>
+
+<p>또한, 앞서 본 화면이 현재 화면의 계층적 상위 화면일 경우
+뒤로 버튼을 누르는 것과 위로 버튼을 누르는 것의 결과가 동일하며, 이는 흔하게
+발생하는 동작입니다. 하지만 사용자가 앱 내에 머무는 위로 버튼과 달리, 뒤로
+버튼을 누르면 홈 화면 또는 다른 앱으로 돌아갈 수 있습니다.</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>뒤로 버튼은 화면 간 탐색과 직접적으로 관련 없는 몇 가지 동작도 지원합니다.
+</p>
+<ul>
+<li>부동 창 해제(대화 상자, 팝업)</li>
+<li>상황에 맞는 작업 모음 해제 및 선택한 항목에서 강조 표시 제거</li>
+<li>화상 키보드(IME) 감추기</li>
+</ul>
+<h2 id="within-app">앱 내 탐색</h2>
+
+<h4>진입 지점이 여러 개인 화면으로 이동하기</h4>
+<p>일부 화면은 앱의 계층 구조 내에서 엄격한 위치를 가지고 있지 않는 경우가 있으며, 이 경우 여러 진입 지점을
+통해서 접근할 수 있습니다. 예를 들어 설정 화면은 앱
+내의 다른 어떤 화면에서도 접근이 가능합니다. 이러한 경우, 위로 버튼을 누르면 뒤로 버튼과
+동일하게 참조하는 화면으로 돌아가게 됩니다.</p>
+<h4>화면 내에서 뷰 변경하기</h4>
+<p>화면의 뷰 옵션 변경은 위로 또는 뒤로 버튼의 동작을 변경하지 않습니다. 이는 화면이 앱 계층 구조 내에서 여전히 동일한 위치에
+있고, 어떠한 탐색 기록도 새로 생성되지 않기 때문입니다.</p>
+<p>이러한 뷰 변경의 예는 다음과 같습니다.</p>
+<ul>
+<li>탭 및/또는 좌우 스와이프를 사용하여 뷰 전환하기</li>
+<li>드롭다운(겹쳐진 탭이라고도 함)을 사용하여 뷰 전환하기</li>
+<li>목록 필터링하기</li>
+<li>목록 정렬하기</li>
+<li>표시 문자 변경하기(예: 확대/축소)</li>
+</ul>
+<h4>형제 화면 간 탐색하기</h4>
+<p>항목 목록에서 개별 항목의 상세 뷰로의 이동을 앱에서 지원하는 경우, 해당 항목에서 목록의 이전/이후
+항목으로 직접 이동할 수 있도록 지원하는 것이 바람직한
+경우도 있습니다. 예를 들어 Gmail의 대화에서 왼쪽 또는 오른쪽으로 간단하게 스와이프하여 동일한 받은 편지함에 있는 신규 또는 이전 메일을
+볼 수 있습니다. 화면 내에서 뷰를 변경하는 것과 마찬가지로,
+탐색은 위로 또는 뒤로 버튼의 동작을 바꾸지 않습니다.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>하지만 참조 목록으로 같이
+묶여 있지 않은 연관된 상세 뷰 사이를 탐색할 때는 주목할 만한 예외적인 상황이 발생합니다. 예를 들어, Play Store에서
+동일한 개발자가 만든 여러 앱 또는 동일한 아티스트의 여러 앨범을 탐색하는 경우가 그렇습니다. 이러한 경우, 링크를 따라갈 때마다
+기록이 생성되므로, 뒤로 버튼을 누르면 이전에 본 화면으로 이동합니다. 위로 버튼을 누르면 계속해서 이러한 연관된 화면을
+거치지 않고 가장 최근에 본 컨테이너 화면으로 이동합니다.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>상세
+뷰에 대한 지식을 바탕으로 더욱 스마트한 위로 버튼 동작을 구현할 수 있습니다. 위에서 설명한 Play Store 예를 확장하여 사용자가
+마지막으로 본 도서에서 해당 도서를 각색한 영화의 세부 정보 화면으로 이동했다고 가정해 봅니다. 그러한 경우, 위로 버튼을 누르면 사용자가 이전에 탐색한 적이 없는
+컨테이너(영화)로 이동할 수 있습니다.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">홈 화면 위젯 및 알림을 통한 앱 탐색</h2>
+
+<p>홈 화면 위젯이나 알림을 사용하여 사용자가 앱 계층 구조 내에
+있는 화면으로 바로 이동할 수 있게 할 수 있습니다. 예를 들어, Gmail의 받은 편지함 위젯과 새 메시지 알림은
+모두 받은 편지함 화면을 건너뛰고 사용자가 해당 메일로 바로 이동할 수 있게 해줍니다.</p>
+
+<p>이러한 두 경우 모두 위로 버튼을 다음과 같이 처리합니다.</p>
+
+<ul>
+<li><em>일반적으로 목적지 화면이
+앱 내의 특정 화면에서 출발한 경우</em>, 위로 버튼은 해당 화면으로 이동해야 합니다.</li>
+<li><em>그 외의 경우</em>, 위로 버튼은 앱의 최상위("홈") 화면으로 이동해야 합니다.</li>
+</ul>
+
+<p>뒤로 버튼의 경우,
+앱의 최상위 화면으로 이동하는 완전한 상위 탐색 경로를 태스크의 백 스택에 삽입하여 탐색을 더욱 예측 가능하게 만들어야 합니다. 이는 앱에 어떻게 진입했는지 잊어버린
+사용자가 앱에서 나가기
+전에 앱의 최상위 화면으로 이동할 수 있게 해줍니다.</p>
+
+<p>예를 들어 Gmail의 홈 화면 위젯은 메일 작성
+화면으로 바로 진입할 수 있는 버튼을 제공합니다. 메일 작성 화면에서 위로 또는
+뒤로 버튼을 누르면 받은 편지함으로 이동하게 되고, 받은 편지함에서 뒤로 버튼을 누르면 홈으로 돌아가게 됩니다.</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>간접 알림</h4>
+
+<p>앱이 동시에 다양한 이벤트 정보를 제공해야 하는 경우, 사용자를 틈새 화면(interstitial screen)으로 이동하게 하는
+단일 알림을 사용할 수 있습니다. 이 화면은
+이러한 이벤트를 요약하고, 사용자가 앱을 세부적으로 탐색할 수 있는 경로를 제공합니다. 이러한 스타일의 알림을 <em>간접 알림</em>이라고
+합니다.</p>
+
+<p>기본(직접) 알림과 달리, 간접 알림의
+틈새 화면에서 뒤로 버튼을 누르면 백 스택에 다른 화면이
+추가되지 않고 알림이 트리거된 지점으로 사용자를 이동시킵니다. 사용자가
+틈새 화면에서 앱으로 들어가면, 위로 버튼 및 뒤로 버튼은 위에서 설명한 바와 같이 틈새 화면으로 돌아가지 않고, 기본 알림과 마찬가지로 앱 내에서
+탐색을 수행합니다.</p>
+
+<p>예를 들어 Gmail을 사용 중인 사용자가 캘린더로부터 간접 알림을 받았다고 가정해 봅니다. 해당
+알림을 터치하면 틈새 화면이 열립니다. 이 화면에는 다른
+여러 이벤트에 대한 알림도 표시됩니다. 틈새 화면에서 뒤로 버튼을 터치하면 Gmail로 돌아갑니다. 특정
+이벤트를 터치하면 사용자를 틈새 화면에서 나오게 하여
+해당 이벤트의 세부 정보를 보여주는 완전한 캘린더 앱으로 이동하게 됩니다. 이벤트 세부 정보 화면에서 위로 버튼과 뒤로 버튼을 누르면 캘린더의 최상위 뷰로 이동하게 됩니다.</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>팝업 알림</h4>
+
+<p><em>팝업 알림</em>은 알림 창을 거치지 않고 바로 사용자에게
+표시되는 알림입니다. <strong>팝업 알림은 시기적절한
+응답이 요구되는 경우와 사용자의 컨텍스트를 중단하는 것이 필요한 경우에 한하여</strong> 드물게 사용됩니다. 예를 들어
+Talk는 친구가 화상 채팅에 참여하도록 보낸
+초대를 사용자에게 알리기 위해 이러한 스타일의 알림을 사용하며, 이 초대는 몇 초 후에 자동으로 만료됩니다.</p>
+
+<p>탐색 동작 측면에서, 팝업 알림은 간접
+알림의 틈새 화면 동작을 상당히 많이 따릅니다. 뒤로 버튼을 누르면 팝업 알림이 해제됩니다. 사용자가 팝업을
+통해 앱으로 이동하면, 위로 및 뒤로 버튼은 기본 알림의 규칙에 따라 앱 내에서
+탐색합니다.</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">앱 간 탐색</h2>
+
+<p>Android 시스템의 기본이 되는 강점 중 하나는 앱이
+다른 앱을 실행할 수 있다는 점이며, 이로 인해 사용자는 한 앱에서 다른 앱으로 직접 이동할 수 있습니다. 예를 들어, 사진을 캡처해야 하는
+앱은 카메라 앱을 작동시킬 수 있으며, 카메라 앱은 사진을 해당 앱으로
+돌려줍니다. 이러한 기능은 개발자와 사용자 모두에게 매우 유용합니다. 왜냐하면 개발자는 쉽게 다른 앱의
+코드를 활용할 수 있고, 사용자는 흔히 수행하는
+작업을 일관된 환경으로 즐길 수 있기 때문입니다.</p>
+
+<p>앱 간 탐색을 이해하려면 아래에서
+설명하는 Android 프레임워크 동작을 알아야 합니다.</p>
+
+<h4>액티비티, 태스크 및 인텐트</h4>
+
+<p>Android에서 <strong>액티비티</strong>는
+정보 및 사용자가 수행할 수 있는 모든 관련 작업이 포함된 화면을 정의하는 애플리케이션 구성 요소입니다. 앱은 본인이 직접 생성하는
+액티비티와 다른 앱에서 재활용하는 액티비티로 구성되어 있는 액티비티 컬렉션입니다.</p>
+
+<p><strong>태스크</strong>는 사용자가 목적을 달성하기 위해서 따르는 일련의 액티비티입니다. 단일
+태스크는 단 한 가지 앱의 액티비티만 사용할 수도 있고,
+여러 앱의 액티비티를 사용할 수도 있습니다.</p>
+
+<p><strong>인텐트</strong>는 어떤 앱이 작업을 수행하는 데 다른
+앱의 도움을 받고자 한다는 신호를 보내는 메커니즘입니다. 앱의 액티비티는
+어떠한 인텐트에 응답을 보낼 수 있는지 알려줄 수 있습니다. "공유하기"와 같이 일반적인 인텐트의 경우, 사용자는 해당 요청을 수행할 수 있는 여러 앱을
+설치했을 수도 있습니다.</p>
+
+<h4>예: "공유하기"를 지원하는 앱 간에 탐색하기</h4>
+
+<p>액티비티, 태스크, 인텐트가 어떻게 같이 동작하는지 이해하려면 한 앱이 다른 앱을 사용하여 콘텐츠
+공유를 어떻게 가능하게 하는지 생각해 보세요. 예를 들어, 홈에서 Play Store 앱을 실행하면
+새로운 태스크 A가 시작됩니다(아래 그림 참조). Play Store에서 탐색하다가 홍보 도서의 세부 정보를
+보기 위해 터치하면, 다른 액티비티를 추가하여 태스크를 연장하는 방식으로 사용자는 동일한 태스크에 머물게 됩니다. 공유하기
+작업을 트리거하면 공유하기 인텐트를 처리하도록
+등록된 액티비티(다양한 앱에서 제공)가 나열된 목록을 보여주는 대화 상자가 표시됩니다.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>사용자가 Gmail을 통해 공유하기를 선택할 경우, 새로운 태스크가 생성되는 것이 아니라
+태스크 A의 연장으로 Gmail의 메일 작성 액티비티가 추가됩니다. Gmail의 백그라운드에서 실행되는 자체적인 태스크가 있을 경우, 해당 태스크는 아무런
+영향도 받지 않습니다.</p>
+
+<p>메일 작성 액티비티에서 메시지를 보내거나 뒤로 버튼을 터치하면, 사용자는
+도서 세부 정보 액티비티로 돌아가게 됩니다. 뒤로 버튼을 연이어 터치하면 Play
+Store에서 탐색한 페이지로 되돌아가게 되어 결국에는 홈 화면에 이르게 됩니다.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>하지만 사용자가 메일 작성 액티비티에서 위로 버튼을 터치하는 것은
+Gmail에 남아 있고자 하는 의지를 보이는 것입니다. 따라서, 이 경우 Gmail의 대화 목록 액티비티가 표시되고, 새로운 태스크 B가 생성됩니다. 새로운 태스크는
+항상 홈에 기반을 두고 있기 때문에, 대화 목록에서 뒤로 버튼을 터치하면 홈으로 되돌아가게 됩니다.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>태스크 A는 백그라운드에 남아 있기 때문에 나중에 돌아올 수 있습니다(예를 들어,
+최근 앱 화면을 통해). Gmail에 이미 백그라운드에서 실행 중인 자체적인 태스크가 있을 경우,
+해당 태스크는 태스크 B로 대체됩니다. 이전 컨텍스트는 사용자의 새로운 목적에 따라 제거됩니다.</p>
+
+<p>앱 계층 구조 내의 액티비티에서 인텐트를 처리하도록 앱에서 등록하는 경우, 위로 탐색을 지정하는 방법에 대한 지침을 확인하려면
+<a href="#into-your-app">홈 화면 위젯 및
+알림을 통한 앱 탐색</a>을 참조하세요.</p>
diff --git a/docs/html-intl/intl/ko/design/patterns/notifications.jd b/docs/html-intl/intl/ko/design/patterns/notifications.jd
new file mode 100644
index 0000000..aab5eac
--- /dev/null
+++ b/docs/html-intl/intl/ko/design/patterns/notifications.jd
@@ -0,0 +1,872 @@
+page.title=알림
+page.tags="notifications","design","L"
+@jd:body
+
+  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
+  <div>
+    <h3>개발자 문서</h3>
+    <p>사용자에게 알리기</p>
+  </div>
+</a>
+
+<a class="notice-designers" href="notifications_k.html">
+  <div>
+    <h3>Android 4.4 이하 버전의 알림</h3>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
+<div>
+    <h3>비디오</h3>
+    <p>DevBytes: Android L Developer Preview의 알림</p>
+</div>
+</a>
+
+<style>
+  .col-5, .col-6, .col-7 {
+    margin-left:0px;
+  }
+</style>
+
+<p>알림 시스템을 사용하면 친구로부터 받은 새 채팅 메시지나 캘린더 이벤트와 같이 앱에서 관련된
+시기 적절한
+이벤트에 대한 알림을 사용자에게 표시할 수 있습니다.
+알림을 중요한
+이벤트가
+발생한 경우 사용자에게 이에 대해 알리는 뉴스 채널이나 사용자가 앱에 집중하고
+있지 않은 동안에 이벤트를 시간순으로 기록하는 로그라고 생각하세요. 또한, 적절한 경우 모든 Android 기기에 걸쳐 동기화될 수도 있습니다.</p>
+
+<h4 id="New"><strong>Android 5.0의 새로운 기능</strong></h4>
+
+<p>Android 5.0에서는 구조적,
+시각적, 그리고 기능적으로 중요한 업데이트를 알림을 통해 받을 수 있습니다.</p>
+
+<ul>
+  <li>새로운
+머티어리얼 디자인 테마와 일치하도록 알림이 시각적으로 바뀌었습니다.</li>
+  <li> 알림이 이제 기기 잠금 화면에 표시되나,
+민감한 콘텐츠는 여전히
+숨길 수 있습니다.</li>
+  <li>기기가 사용 중일 때 수신되는 최우선 순위의 알림은 이제
+헤드업 알림이라는 새로운 형식을 사용합니다.</li>
+  <li>클라우드와 동기화되는 알림: Android
+기기 중 하나에서 알림을 해지하면
+다른 기기에서도 해지됩니다.</li>
+</ul>
+
+<p class="note"><strong>참고:</strong> 이
+Android 버전의 알림 디자인은 이전 버전과 많이
+다릅니다. 이전
+버전의 알림 디자인에 대한 자세한 내용은 <a href="./notifications_k.html">Android 4.4 이하 버전의 알림</a>을 참조하세요.</p>
+
+<h2 id="Anatomy">알림의 해부학적 구조</h2>
+
+<p>이 섹션에서는 알림의 기본적인 부분과 다양한 유형의 기기에서 알림이 어떻게
+표시될 수 있는지에 대해 살펴봅니다.</p>
+
+<h3 id="BaseLayout">기본 레이아웃</h3>
+
+<p>모든 알림은 기본적으로 다음을 포함하는 기본 레이아웃으로 구성됩니다.</p>
+
+<ul>
+  <li> 알림 <strong>아이콘</strong>. 알림 아이콘은
+알림을 발생시킨 앱을 나타냅니다. 또한,
+앱이 두 가지 이상의
+유형을 생성하는 경우 알림 유형을 나타낼 수도 있습니다.</li>
+  <li> 알림 <strong>제목</strong> 및 추가
+<strong>텍스트</strong>.</li>
+  <li> <strong>타임스탬프</strong>.</li>
+</ul>
+
+<p>이전 플랫폼 버전의
+{@link android.app.Notification.Builder Notification.Builder}로 생성된 알림은 시스템이 대신
+처리하는 사소한 스타일 변화를 제외하면 Android
+5.0에서 똑같이 표시되고 동작합니다. 이전
+Android 버전의 알림에 대한 자세한 내용은
+<a href="./notifications_k.html">Android 4.4 이하 버전의 알림</a>을 참조하세요.</p></p>
+
+
+    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
+
+
+<div style="clear:both;margin-top:20px">
+      <p class="img-caption">
+      핸드헬드 알림(왼쪽) 및 Wear에서 표시되는 동일한 알림(오른쪽)의 기본 레이아웃
+- 사용자 사진 및 알림 아이콘 포함
+    </p>
+  </div>
+
+<h3 id="ExpandedLayouts">확장 레이아웃</h3>
+
+
+<p>앱 알림이 얼마나 자세한 정보를
+제공하도록 할지는 직접 선택할 수 있습니다. 메시지의 처음
+몇 줄을 보여주거나 더 큰 이미지 미리보기를 보여줄 수 있습니다. 이러한 추가
+정보는 사용자에게 더 많은
+컨텍스트를 제공하며, 경우에 따라 이를 통해 사용자는 메시지
+전체를 읽을 수도 있습니다. 사용자는
+핀치-줌(pinch-zoom) 또는 한 손가락으로 밀기를 이용하여 축소 레이아웃과
+확장 레이아웃 간을 전환할 수 있습니다.
+ Android는 단일 이벤트 알림에 대해 세 개의 확장 레이아웃
+템플릿(텍스트, 받은 편지함,
+이미지)을 애플리케이션에 사용할 수 있도록 제공합니다. 다음 이미지는
+단일 이벤트 알림이
+핸드헬드(왼쪽) 및 웨어러블(오른쪽)에서 어떻게 표시되는지 보여줍니다.</p>
+
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
+    alt="" width="311px" height;="450px" />
+
+<h3 id="actions" style="clear:both; margin-top:40px">작업</h3>
+
+<p>Android는 알림의
+맨 아래 부분에 표시되는 선택적인 작업을 지원합니다.
+이러한 작업을 통해 사용자는 알림을 발생시킨
+애플리케이션을 열 필요 없이 알림 창에서 특정
+알림에 대한 가장 일반적인 태스크를 처리할 수 있습니다.
+이 기능은 밀어서 해제하기와 함께 작용하여 상호 작용의 속도를 향상시키며, 사용자가 자신에게 중요한 알림에
+집중하는 데 도움이 됩니다.</p>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
+
+
+
+<p style="clear:both">알림에
+포함할 작업의 수는 신중하게 결정해야 합니다. 더 많은
+작업을 포함할수록 인지적 복합성이 가중됩니다. 당장에 중요하며 의미
+있는 작업만 포함하여 작업
+수를 최소한으로
+제한해야 합니다.</p>
+
+<p>알림에 포함하기에 적합한 작업은 다음과 같습니다.</p>
+
+<ul>
+  <li> 표시하려는
+콘텐츠 유형과 관련하여 필수적이고, 자주 사용되며 전형적인 작업
+  <li> 사용자가 신속하게 태스크를 완료할 수 있게 하는 작업
+</ul>
+
+<p>다음과 같은 작업은 피합니다.</p>
+
+<ul>
+  <li> 애매모호한 작업
+  <li> "읽기" 또는
+"열기"와 같이 알림의 기본 작업과 동일한 작업
+</ul>
+
+
+
+<p>작업
+아이콘 및 이름으로 각각 구성된, 최대 세 개의 작업을 지정할 수 있습니다.
+ 단순한 기본 레이아웃에 작업을 추가하면 알림이 확장 가능하게 되며,
+알림에
+확장 레이아웃이 없는 경우에도 이러한 사항이 적용됩니다. 작업은
+확장된
+알림에서만 표시되고 그 외에는 숨겨져 있으므로
+사용자가 알림에서
+호출할 수 있는 모든 작업을 관련 애플리케이션 내에서도
+사용할 수 있는지 확인해야 합니다.</p>
+
+<h2 style="clear:left">헤드업 알림</h2>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
+  <p class="img-caption">
+    몰입형 앱의
+최상위에
+표시되는 헤드업 알림의 예(걸려오는 전화, 최우선 순위)
+  </p>
+</div>
+
+<p>최우선 순위의 알림을 수신하면(오른쪽), 가능한 작업을 보여주는 확장된 레이아웃 형태로
+잠시 동안 사용자에게
+표시됩니다.</p>
+<p> 그런 다음, 알림이 알림
+창으로 돌아갑니다. 알림에 대한 <a href="#correctly_set_and_manage_notification_priority">우선 순위</a> 플래그가 HIGH, MAX 또는 전체 화면으로
+지정된 경우 헤드업 알림이 표시됩니다.</p>
+
+<p><b>헤드업 알림의 좋은 예</b></p>
+
+<ul>
+  <li> 기기 사용 시 걸려오는 전화</li>
+  <li> 기기 사용 시 알람</li>
+  <li> 새 SMS 메시지</li>
+  <li> 배터리 부족</li>
+</ul>
+
+<h2 style="clear:both" id="guidelines">가이드라인</h2>
+
+
+<h3 id="MakeItPersonal">개인에 맞게 만들기</h3>
+
+<p>다른 사람이 보낸 항목(메시지 또는
+상태 업데이트)에 대한 알림의 경우
+{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}을 사용하여 그 사람의 이미지를 포함합니다. 또한
+그 사람에 대한 정보를 알림의 메타데이터에 추가합니다({@link android.app.Notification#EXTRA_PEOPLE} 참조).</p>
+
+<p>알림의 기본 아이콘이 여전히 표시됩니다. 따라서 사용자는
+해당 아이콘을 상태 표시줄에
+보이는 아이콘과 관련시킬 수 있습니다.</p>
+
+
+<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
+<p style="margin-top:10px" class="img-caption">
+  누가 트리거했는지와 보낸 내용을 보여주는 알림입니다.
+</p>
+
+
+<h3 id="navigate_to_the_right_place">적합한 곳으로 이동하기</h3>
+
+<p>사용자가 작업
+버튼 외부에서 알림을 터치하면, 사용자가 알림에서
+참조되는 데이터를 확인하고 처리할 수 있는 곳에서
+앱이 열리도록 합니다. 대부분의 경우, 메시지와 같은 단일 데이터 항목을 표시하는 상세 뷰가 이에 해당합니다.
+하지만 알림이 중첩되어 있을 경우에는
+요약 뷰일 수도 있습니다. 앱이
+최상위 레벨 아래의 위치에서 열린 경우
+사용자가 시스템의 뒤로 버튼을 눌러 최상위 레벨로 돌아갈 수 있도록 앱의 백 스택에 탐색 경로를 삽입합니다. 자세한 내용은
+<a href="{@docRoot}design/patterns/navigation.html#into-your-app">탐색</a>
+디자인 패턴의 <em>홈 화면 위젯 및 알림을 통한 앱 탐색</em>을 참조하세요.</p>
+
+<h3 id="correctly_set_and_manage_notification_priority">알림의
+우선 순위를 정확하게 설정하고
+관리하기</h3>
+
+<p>Android는 알림 우선 순위 플래그를 지원합니다. 이 플래그를 통해 다른 알림에 상대적으로 알림이 표시되는 위치가
+결정되도록 할 수 있습니다. 또한
+사용자가 가장 중요한 알림을 항상 가장 먼저 볼 수 있게
+할 수 있습니다. 알림을 게시할 때
+다음 우선 순위 중에서
+선택할 수 있습니다.</p>
+<table>
+ <tr>
+    <td class="tab0">
+<p><strong>우선 순위</strong></p>
+</td>
+    <td class="tab0">
+<p><strong>용도</strong></p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MAX</code></p>
+</td>
+    <td class="tab1">
+<p>시간에 민감한
+또는
+특정 태스크를 계속 진행하기 전에 처리해야 할
+상황을 사용자에게 알리는 중요하고 긴급한 알림에 사용합니다.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>HIGH</code></p>
+</td>
+    <td class="tab1">
+<p>중요한 대화에 주로 사용합니다. 일례로 사용자에게 특별히 흥미로운 내용이 포함된 메시지 또는 채팅
+이벤트가 이에 해당합니다.
+최우선 순위의 알림은 헤드업 알림이 표시되도록 합니다.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>DEFAULT</code></p>
+</td>
+    <td class="tab1">
+<p>여기서 설명하지 않은 기타 모든 우선 순위의 알림에 사용합니다.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>LOW</code></p>
+</td>
+    <td class="tab1">
+<p>사용자에게 알려야 하지만 긴급하지 않은
+알림에 사용합니다. 우선 순위가 낮은 알림은 보통 목록의 맨 아래에 표시되며,
+공개 또는 대상이 불특정한 소셜 업데이트에 사용하기
+좋습니다. 사용자가
+요구한
+알림이지만, 이러한 알림은 긴급하거나 직접적인
+대화를 우선할 수 없습니다.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MIN</code></p>
+</td>
+    <td class="tab1">
+<p>날씨 정보 또는 상황에 맞는
+위치 정보와 같은 상황별 또는 배경 정보에 사용합니다.
+최소 우선 순위 알림은 상태 표시줄에 표시되지 않습니다. 이러한 알림은 사용자가 알림 창을 확대하면
+볼 수 있습니다.</p>
+</td>
+ </tr>
+</table>
+
+
+<h4 id="how_to_choose_an_appropriate_priority"><strong>
+적절한
+우선 순위를 선택하는 방법</strong></h4>
+
+<p><code>DEFAULT</code>, <code>HIGH</code> 및 <code>MAX</code>는 작업을 중단시키는 우선 순위이며, 사용자의 액티비티를
+중단시키는
+위험 요소입니다. 앱 사용자를 성가시게 하지 않으려면 다음과 같은
+알림에만 작업을 중단시키는 우선 순위를 지정해야 합니다.</p>
+
+<ul>
+  <li> 다른 사람이 관련된 알림</li>
+  <li> 시간에 민감한 알림</li>
+  <li> 실제 환경에서의 사용자 행동을 즉시 바꿀 수 있는 알림</li>
+</ul>
+
+<p><code>LOW</code> 및 <code>MIN</code>으로 설정된 알림도 사용자에게
+중요할 수 있습니다. 대부분은 아니지만 많은 알림이 사용자의
+즉각적인 주의를 필요로 하지 않거나 사용자의 손목에 진동을 줄 필요가 없지만, 사용자가 알림을 확인하고자
+했을 때 유용하다고
+여길 정보를 포함합니다. <code>LOW</code> 및 <code>MIN</code>
+우선 순위 알림에 대한 조건은 다음과 같습니다.</p>
+
+<ul>
+  <li> 다른 사람이 관련되지 않음</li>
+  <li> 시간에 민감하지 않음</li>
+  <li> 사용자가 흥미를 가질 만하지만 시간이 있을 때
+보기를 원할 수 있는 내용을 포함함</li>
+</ul>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
+
+
+<h3 style="clear:both" id="set_a_notification_category">알림
+범주 설정하기</h3>
+
+<p>알림이 미리 정의된 범주에 포함될 경우(아래
+참조),
+그에 따라 할당합니다.  알림 창(또는
+다른 알림
+수신자)과 같은 시스템 UI의 기능은 순위 및 필터링 결정을 내리는 데 이 정보를 활용할 수 있습니다.</p>
+<table>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
+</td>
+    <td>
+<p>수신 전화(음성 또는 화상) 또는 이와 유사한 동기적 대화
+요청</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
+</td>
+    <td>
+<p>수신되는 직접 메시지(SMS, 인스턴트 메시지 등)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
+</td>
+    <td>
+<p>비동기적 대량 메시지(이메일)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
+</td>
+    <td>
+<p>캘린더 이벤트</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
+</td>
+    <td>
+<p>홍보 또는 광고</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
+</td>
+    <td>
+<p>알람 또는 타이머</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
+</td>
+    <td>
+<p>장기간 실행 중인 백그라운드 작업의 진행 상황</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
+</td>
+    <td>
+<p>소셜 네트워크 또는 공유 업데이트</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
+</td>
+    <td>
+<p>백그라운드 작업 또는 인증 상태 오류</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
+</td>
+    <td>
+<p>재생에 대한 미디어 전송 제어</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
+</td>
+    <td>
+<p>시스템 또는 기기 상태 업데이트.  시스템용으로 예약됨</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
+</td>
+    <td>
+<p>실행 중인 백그라운드 서비스에 대한 표시</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
+</td>
+    <td>
+<p>한 가지 특정 항목에 대한 구체적이고 시기적절한 권장 사항.  예를 들어, 뉴스
+앱이 사용자가 다음으로 읽기 원할 것이라고 생각하는 뉴스를
+권하고자 하는 경우</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
+</td>
+    <td>
+<p>기기 또는 상황별 상태에 대한 지속적인 정보</p>
+</td>
+ </tr>
+</table>
+
+<h3 id="summarize_your_notifications">알림 요약하기</h3>
+
+<p>특정 유형의 알림이 이미 보류 중일 때 앱에서 같은 유형의 새
+알림을 보내려고 하는 경우, 이 앱에 대해 두 알림을 하나의 요약 알림으로 결합합니다. 새로운 개체는
+생성하지 않아야 합니다.</p>
+
+<p>요약 알림은 사용자가 특정 종류의 알림이
+몇 개나 보류 중인지
+파악할 수 있도록 간단한 개요를 표시합니다.</p>
+
+<div class="col-6">
+
+<p><strong>잘못된 사용</strong></p>
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
+</div>
+
+<div>
+<p><strong>올바른 사용</strong></p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
+</div>
+
+<p style="clear:left; padding-top:30px; padding-bottom:20px">확장된 다이제스트 레이아웃을 사용하여
+요약에 포함된 각각의 알림에 대한
+더 자세한 정보를 제공할 수 있습니다. 이 방식을 통해 사용자는
+어떠한 알림이 보류 중이고,
+관련된 앱에서
+상세 정보를 읽고 싶을 정도로 알림이 흥미로운지를
+판단할 수 있습니다.</p>
+<div class="col-6">
+  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
+  <p class="img-caption">
+  확장된 알림 및 축소된 요약 알림(<code>InboxStyle</code> 사용)
+  </p>
+</div>
+
+<h3 style="clear:both" id="make_notifications_optional">알림을
+선택 항목으로 만들기</h3>
+
+<p>사용자는 항상 알림을 통제할 수 있어야 합니다. 애플리케이션 설정에 알림 설정 항목을 추가하여
+사용자가 앱의
+알림을
+해제하거나 경고 속성(예: 경고음 및 진동 사용
+여부)을 변경할 수 있도록 허용합니다.</p>
+
+<h3 id="use_distinct_icons">뚜렷한 아이콘 사용</h3>
+<p>알림 영역을 봄으로써 사용자는 현재
+어떠한 종류의
+알림이 보류 중인지 파악할 수 있어야 합니다.</p>
+
+<div class="figure">
+  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
+</div>
+
+  <div><p><strong>올바른 사용</strong></p>
+    <p>Android 앱이 이미 제공하는 알림 아이콘을 살펴본 후 본인의 앱에서
+뚜렷히 나타날 수 있는
+알림 아이콘을 만듭니다.</p>
+
+    <p><strong>올바른 사용</strong></p>
+    <p>작은 아이콘에
+적절한 <a href="/design/style/iconography.html#notification">알림 아이콘 스타일</a>을 사용하며, 작업
+아이콘에는 머티어리얼 라이트
+<a href="/design/style/iconography.html#action-bar">작업 모음 아이콘
+스타일</a>을 사용합니다.</p>
+<p ><strong>올바른 사용</strong></p>
+<p >아이콘은 시각적으로 단순하게 유지하고,
+알아차리기 힘들 정도로 과도하게 세부적인 디자인은 피합니다.</p>
+
+  <div><p><strong>잘못된 사용</strong></p>
+    <p>작은
+아이콘 및 작업
+아이콘에 알파(어둡게 설정 또는 페이드 효과)를 추가합니다. 아이콘의 가장자리를 안티-앨리어싱할 수는 있지만, Android가 이러한
+아이콘을 마스크(즉,
+알파 채널만 사용됨)로 사용하기 때문에 일반적으로 이미지는 최대 수준의
+불투명도로 그려집니다.</p>
+
+</div>
+<p style="clear:both"><strong>잘못된 사용</strong></p>
+
+<p>다른 앱과의 차별화를 위해 색상을 사용합니다. 알림 아이콘은 투명한 배경 이미지에 흰색 아이콘이어야만
+합니다.</p>
+
+
+<h3 id="pulse_the_notification_led_appropriately">알림 LED를
+적절하게 사용하기</h3>
+
+<p>많은 Android 기기에는 알림 LED가 내장되어 있으며, 이러한 알림 LED는 화면이 꺼져 있을 때
+사용자에게
+이벤트에 대해 알리기 위해 사용됩니다. 우선 순위가 <code>MAX</code>,
+<code>HIGH</code> 또는 <code>DEFAULT</code>인 알림의 경우
+LED가 켜지며, 낮은 우선 순위(<code>LOW</code> 및
+<code>MIN</code>)의 알림의 경우 LED가 켜지지 않습니다.</p>
+
+<p>알림과 관련하여 사용자는 LED도 제어할 수 있어야 합니다.
+DEFAULT_LIGHTS를 사용하는 경우
+LED는 흰색으로 켜집니다. 사용자가
+명시적으로 지정한 경우 외에는 다른 알림
+색상을 사용할 수 없습니다.</p>
+
+<h2 id="building_notifications_that_users_care_about">사용자가 관심을 가질 만한
+알림 만들기</h2>
+
+<p>사용자의 사랑을 받는 앱을 만들기 위해서는
+알림을 신중하게 디자인해야 합니다.
+알림은 앱의 목소리를 대변하며, 앱의
+개성에 큰 영향을 미칩니다. 원하지 않거나
+중요하지 않은 알림은 사용자를 성가시게 하거나 앱에서
+많은 신경을
+쓰게 하는 것에 대해 짜증이 나게 합니다. 따라서 알림을 사용할 때는 현명하게 판단해야 합니다.</p>
+
+<h3 id="when_to_display_a_notification">알림을 표시해야 하는 경우</h3>
+
+<p>사람들이 즐겨 사용하는 애플리케이션을 만들려면 사용자의
+주의와 집중을 흐트러뜨리지 않고 보호해야 하는 리소스임을
+인지하는 것이 중요합니다. Android의
+알림 시스템은 알림이 사용자의 주의를 최대한 방해하지 않도록
+디자인되었습니다.
+하지만
+알림이
+사용자의 태스크 흐름을 방해한다는 사실을 계속해서 인지해야 합니다.
+알림을 계획할 때 알림이 사용자의 작업을 중단할 만큼
+중요한지 곰곰히 생각해 보시기 바랍니다. 잘 모르겠는 경우, 사용자가 앱의 알림 설정을 사용하여 알림에 대한 수신 동의를
+선택할 수 있도록 허용하거나 알림 우선 순위 플래그를 <code>LOW</code> 또는 <code>MIN</code>으로
+조정하여 사용자 작업을
+방해하지
+않도록 합니다.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
+  <p style="margin-top:10px" class="img-caption">
+   시간에 민감한 알림의 예
+  </p>
+
+<p>일반적으로 잘 만들어진 앱은 사용자의 요청이 있을 때에만 정보를 알리고
+요청하지 않은 알림은 꼭 필요한 경우에만 표시하도록 합니다.</p>
+
+<p>알림은 <strong>시간에 민감한 이벤트</strong>에 주로 사용하며, 특히
+이러한 동기적 이벤트에 <strong>다른 사람이 관련된 경우</strong>에 사용합니다. 예를
+들어 수신되는 채팅 메시지는
+실시간으로 진행되는 동기적 대화 형식이며, 이때 다른 사람은
+적극적으로 응답을 기다립니다. 캘린더 이벤트는 언제
+알림을 사용하고
+사용자의 주의를 끌어야 하는지에 대해 알 수 있는 또 다른 좋은 예입니다. 왜냐하면 이는 임박한 이벤트이며, 캘린더 이벤트에는 종종 다른 사람이
+관련되기 때문입니다.</p>
+
+<h3 style="clear:both" id="when_not_to_display_a_notification">알림을
+표시하지 않아야 하는 경우</h3>
+
+<div class="figure" style="margin-top:60px">
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
+</div>
+
+<p>다른 대부분의 경우 알림은 적합하지 않습니다.</p>
+
+<ul>
+  <li> 사용자와
+직접 관련이 없는 정보나 시간에 민감하지 않은
+정보는 알리지 않도록 합니다. 예를 들어 소셜 네트워크를 통한 비동기적이며
+대상이 불특정한 업데이트는
+일반적으로 실시간으로
+사용자를 방해할 수 없습니다. 그러한 업데이트를 원하는 사용자의
+경우에는 사전에 수신 동의를 설정할 수 있게 하면 됩니다.</li>
+  <li> 관련된 새 정보가 현재
+화면에 표시된 경우에는 알림을 생성하지 않아야 합니다. 대신 애플리케이션 UI를
+사용하여 컨텍스트 내에 새로운 정보가 있음을 사용자에게
+직접 알립니다.
+  예를 들어 채팅 애플리케이션은
+사용자가 다른 사용자와 대화 중일 때는 시스템 알림을 생성하지 않아야 합니다.</li>
+  <li> 정보 저장
+또는 동기화, 애플리케이션 업데이트와 같은 낮은 수준의 기술 정보의 경우 사용자가 개입하지
+않아도 앱이나 시스템에서 스스로 알아서 처리할 수 있다면 사용자를 방해하지 않도록 합니다.</li>
+  <li> 사용자가 아무런 조치를
+취하지 않아도 애플리케이션 스스로 오류를 복구할
+수 있는 경우, 이러한 오류에 대해 사용자에게 알리지 않도록 합니다.</li>
+  <li> 알리는 내용은 없고
+단순히 앱을
+홍보하는 알림은 만들지 않습니다. 알림은 유용하고, 시기적절하며 새로운 정보를 제공해야 하며, 단지 앱 출시를 위한 용도로는
+사용하지
+않습니다.</li>
+  <li> 단지
+사용자에게 브랜드를 알리기 위한 불필요한 알림은 만들지 않도록 합니다.
+  그러한 알림은 사용자를 짜증 나게 만들어 앱에 대한 관심을 멀어지게 합니다. 소량의
+업데이트된 정보를 제공하면서 사용자가 지속적으로
+앱에 관심을
+갖게 만드는 최고의
+방법은
+홈 화면에 추가할 수 있는 위젯을 개발하는 것입니다.</li>
+</ul>
+
+<h2 style="clear:left" id="interacting_with_notifications">알림과
+상호 작용하기</h2>
+
+<p>알림은 상태 표시줄에 아이콘으로 표시되며,
+알림 창을 열어서
+확인할 수 있습니다.</p>
+
+<p>알림을 터치하면 관련 앱이 열리고 알림에
+해당되는 세부 내용이 표시됩니다. 알림을 왼쪽이나 오른쪽으로
+스와이프하면 알림 창에서 제거됩니다.</p>
+
+<h3 id="ongoing_notifications">지속적인 알림</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
+      <p class="img-caption">
+    음악 재생으로 인한 지속적인 알림
+  </p>
+</div>
+<p>지속적인 알림은
+백그라운드에서 진행 중인 프로세스에 대해 사용자에게 알립니다.
+예를 들어 음악 플레이어는 사용자가 재생을 멈출 때까지
+알림 시스템 내에 현재 재생 중인 트랙을
+계속 표시합니다. 또한 지속적인 알림은 파일을 다운로드하거나 비디오를 인코딩하는 등의 장기 태스크에 대한
+피드백을 사용자에게
+표시할 수도 있습니다. 지속적인 알림은 사용자가 알림 창에서 직접
+제거할 수 없습니다.</p>
+
+<h3 id="ongoing_notifications">미디어 재생</h3>
+<p>Android 5.0에서는 잠금 화면에 사용이 중단된
+{@link android.media.RemoteControlClient} 클래스에 대한 전송 제어가 표시되지 않습니다. 하지만 알림은 <em>표시되며</em>, 각
+앱의 재생 알림이 현재 사용자가 잠금 상태에서 재생을 제어하는 기본
+방법입니다. 이 동작은 화면의 잠금 여부와 상관없이 사용자에게
+일관된 환경을 제공하면서, 어떠한 버튼을
+어떻게 표시할지에 대해 앱이 더 세부적으로 제어할 수 있도록
+지원합니다.</p>
+
+<h3 style="clear:both"
+id="dialogs_and_toasts_are_for_feedback_not_notification">대화 상자
+및 알림 메시지</h3>
+
+<p>현재
+화면에 표시되어 있는 경우가 아니라면 앱은 대화 상자나 알림 메시지를 생성해서는 안 됩니다. 대화 상자나 알림 메시지는
+앱 내에서
+사용자가 어떠한 행동을 취했을 때 이에 대한 즉각적인 응답으로만 표시되어야 합니다.
+대화 상자 및 알림 메시지 사용에 대한 자세한 지침은
+<a href="/design/patterns/confirming-acknowledging.html">확인 및 승인하기</a>를 참조하세요.</p>
+
+<h3>순위 및 순서</h3>
+
+<p>알림은 뉴스이므로, 기본적으로 발생한 순서의 역순으로
+표시되며, 특히
+앱에서 명시된 알림
+<a href="#correctly_set_and_manage_notification_priority">우선 순위</a>에 따라 순서가 결정됩니다.</p>
+
+<p>알림은 잠금 화면에서 중요한 부분이며, 기기의 화면이 켜질
+때마다
+표시됩니다. 잠금 화면의 공간은 협소하기 때문에 가장 긴급하고 관련 있는 알림을 식별하는 것이
+가장
+중요합니다. 이러한
+이유 때문에 Android에는 다음을 고려한
+더욱 정교한 정렬 알고리즘이 있습니다.</p>
+
+<ul>
+  <li> 타임스탬프 및 애플리케이션에 명시된 우선 순위.</li>
+  <li> 알림이 최근에 소리 또는
+진동으로 사용자를 방해했는지에 대한 여부. (즉,
+휴대폰에서 방금 소리가 났을 때 사용자가 "방금 무슨
+일이 있었지?"에 대해 알고 싶어하는 경우 잠금 화면을
+보면 한 눈에 알 수 있어야 합니다.)</li>
+  <li> {@link android.app.Notification#EXTRA_PEOPLE}을 사용하여 알림에 첨부된 사람,
+그리고 특히 즐겨찾기에 추가된 연락처인지에 대한 여부.</li>
+</ul>
+
+<p>이러한 정렬 알고리즘을 잘 이용하기 위해서는 목록의 특정 부분에 초점을 두기 보다는 생성하고자
+하는 사용자
+환경에 초점을 둡니다.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
+
+  <p class="img-caption" style="margin-top:10px">Gmail 알림은
+기본 우선 순위이기 때문에
+보통은 행아웃과 같은 인스턴트 메시징 앱에서 온 메시지보다 하위에 정렬됩니다. 하지만
+새 메시지가 들어오면
+일시적으로 순위가 올라갑니다.
+  </p>
+
+
+<h3>잠금 화면</h3>
+
+<p>알림은 잠금 화면에 표시되기 때문에 사용자의 개인 정보 보호가
+특히
+중요하게 고려해야 할 사항입니다. 알림은 종종 민감한 정보를 포함하기 때문에, 아무나
+기기의 화면을 켰을 때 볼 수 있게 할 필요는
+없습니다.</p>
+
+<ul>
+  <li> 보안 잠금 화면(PIN, 패턴 또는 암호)이 있는 기기의 인터페이스에는
+공개 및 비공개 부분이 있습니다. 공개 인터페이스는 보안 잠금 화면에 표시될 수 있기 때문에
+누구나 볼 수 있습니다. 비공개 인터페이스는 잠금 화면 뒤에 있기 때문에
+기기의 잠금 화면을 푼 사람만 볼 수 있습니다.</li>
+</ul>
+
+<h3>보안 잠금 화면에 표시된 정보에 대한 사용자 제어</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
+      <p class="img-caption">
+    사용자가 기기의 잠금을 푼 후 보이는 콘텐츠와 함께 잠금 화면에 표시된 알림
+  </p>
+</div>
+
+<p>보안 잠금 화면을 설정할 때 사용자는
+민감한 세부 정보를 보안 잠금 화면에서 숨기도록 선택할 수 있습니다. 이러한 경우 시스템 UI는 알림의 <em>정보 공개 수준</em>을
+고려하여
+안전하게 표시할 수 있는 정보를 파악합니다.</p>
+<p> 정보 공개 수준을 제어하려면
+<code><a
+href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>를 호출한 후
+다음 값 중 하나를 지정합니다.</p>
+
+<ul>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>. 알림의 전체 내용을
+표시합니다.
+  정보 공개 수준을 지정하지 않을 경우 시스템 기본값입니다.</li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
+잠금 화면에 알림의
+아이콘과 알림을 게시한 앱의 이름을 포함하여 해당 알림의 존재에 대한 기본 정보를 표시합니다. 알림의 나머지 세부 사항은 표시되지 않습니다.
+다음과 같은 몇 가지 유용한 사항을 염두해야 합니다.
+  <ul>
+    <li> 시스템이 보안 잠금 화면에 다른 공개 버전의 알림을
+표시하도록 제공하려는 경우, <code><a
+href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>
+필드에 대체
+알림 개체를 제공해야 합니다.
+    <li> 이렇게 설정하면 앱에서 여전히 유용하지만 개인 정보를 노출하지 않는 편집된 버전의
+내용을 생성할 수 있습니다. 예를 들어, 알림에 SMS 텍스트, 발신자 이름 및 연락처 아이콘을 포함하는
+SMS 앱이 있다고 가정합니다.
+이 알림은 <code>VISIBILITY_PRIVATE</code>여야 하지만, <code>publicVersion</code>은 다른 식별
+정보 없이 "3개의 새 메시지"와 같이 여전히 유용한 정보를
+포함할 수 있습니다.
+  </ul>
+  </li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>. 최소한의 정보만 표시하며, 알림의 아이콘마저
+표시하지 않습니다.</li>
+</ul>
+<h2 style="clear:both" id="notifications_on_android_wear">Android Wear에
+표시되는 알림</h2>
+
+<p>Android Wear에 표시되는 알림과 해당 <em>작업</em>은 기본적으로 Wear 기기에 연결되어 있습니다.
+개발자는 어떠한 알림을
+휴대폰에서 워치로,
+그리고 그 반대로 연결할지 제어할 수 있습니다. 또한 개발자는 어떠한 작업을 연결할지도 제어할 수 있습니다. 앱이
+단일 탭으로 실행할 수 없는
+작업을 포함하는 경우, 이러한 작업을
+Wear
+알림에 표시되지 않도록 숨기거나 Wear 앱에 연결하여 사용자가
+워치에서 작업을
+끝낼 수 있도록 합니다.</p>
+
+<h4>알림과 작업 연결하기</h4>
+
+<p>휴대폰과 같이 연결된 기기는 알림을 Wear 기기에 연결하여 해당 기기에서
+알림이 표시될 수 있게 합니다. 마찬가지로 작업도 연결할 수 있기 때문에 사용자는 Wear 기기에서
+알림을 바로 처리할 수 있습니다.</p>
+
+<p><strong>연결해야 할 사항</strong></p>
+
+<ul>
+  <li> 새 인스턴트 메시지</li>
+  <li> +1, Like, Heart와 같은 단일 탭 작업</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
+
+<p><strong>연결하지 않아야 할 사항</strong></p>
+
+<ul>
+  <li> 새로 도착한 팟캐스트의 알림</li>
+  <li> 워치에서 수행할 수 없는 기능에 매핑되는 작업</li>
+</ul>
+
+
+
+<p><h4>Wear에 대해서만 정의할 수 있는 고유한 작업</h4></p>
+
+<p>Wear에서만 수행할 수 있는 작업이 몇 가지 있으며, 이러한 작업은 다음과 같습니다.</p>
+
+<ul>
+  <li> "금방 올게"와 같은 미리 준비된 대답으로 구성된 빠른 목록</li>
+  <li> 휴대폰에서 열기</li>
+  <li> 음성 입력 화면을 불러오는 "댓글 달기" 또는 "응답" 작업</li>
+  <li> Wear에 특화된 앱을 실행하는 작업</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/about.jd b/docs/html-intl/intl/ko/distribute/googleplay/about.jd
new file mode 100644
index 0000000..57b5226
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/about.jd
@@ -0,0 +1,367 @@
+page.title=Google Play 활용 기회
+meta.tags="visibility, growth, distributing"
+page.tags="play, apps, distributing, publishing"
+page.metaDescription=매달 다운로드 건수가 수십억 이상이며 증가 추세에 있습니다. Google을 통해 앱을 사용자에게 소개하십시오.
+page.image=/distribute/images/about-play.jpg
+
+@jd:body
+
+    <div id="qv-wrapper">           
+  <div id="qv">
+  <h2>Google Play 정보</h2>
+    <ol style="list-style-type:none;">
+      <li><a href="#reach">전 세계에서 사용, 급속 성장</a></li>
+      <li><a href="#ratings-reviews">사용자 평점 및 리뷰</a></li>
+      <li><a href="#category-browsing">카테고리 검색</a></li>
+      <li><a href="#search">검색</a></li>
+      <li><a href="#top-charts-and-lists">인기 차트 및 목록</a></li>
+      <li><a href="#featured-staff-picks">추천, 직원 선정, 컬렉션 및 배지</a></li>
+      <li><a href="#product-detail-pages">스토어 목록 페이지</a></li>
+      <li><a href="#related-resources">관련 자료</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  Google Play는 Android 앱 배포를 위한 최고의 스토어입니다. Google Play에 게시하면 전 세계 190개국 이상의 Android 사용자에게 앱을 소개할 수 있습니다.
+
+
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-about-0.jpg" alt="Google Play on an Android Tablet" style="width:480px;position:relative" />
+</div>
+
+<p>
+  Google Play는 Android를 경험할 수 있는 중심부입니다. 신규 사용자는 앱, 게임 및 기타 Google Play 콘텐츠를 장치에 개인 설정할 수 있습니다.
+
+  기존 사용자는 정기적으로 방문하여 인기 항목과 신규 항목을 확인할 수 있습니다. Google Play는 사용자의 장치에 무선으로 즉시 앱을 전송하므로 매우 편리하고 빠르게 신규 앱을 다운로드할 수 있습니다.
+
+
+</p>
+
+<p>
+  또한 Google Play는 웹 사용자가 가장 선호하는 장소입니다. 누구나 브라우저를 사용하여 웹에서 Google Play를 탐색할 수 있습니다.
+ Android 사용자는 원하는 앱을 구매하고 설치할 수 있으며 Google Play는 케이블을 사용하지 않고 사용자의 장치로 앱을 자동 전송합니다.
+
+
+</p>
+
+<p>
+  Google Play 웹사이트의 접근성과 편의성은 온라인 광고, 웹 검색 및 교차 링크 등 다양한 소스에서 사용자의 제품으로 트래픽을 전송하는 새로운 방식을 제공합니다.
+
+ Google Play는 우수한 앱과 게임을 사용자에게 제공하도록 고안되었습니다.
+ 이 통로를 활용하여 앱을 소개하여 인기를 얻을 수 있습니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="ratings-reviews">
+    사용자 평점 및 리뷰
+  </h2>
+
+
+</div>
+
+<p>
+  잠재적 사용자는 평점과 리뷰를 앱 품질의 핵심 척도로 간주합니다.
+ Android 사용자는 별 1-5개로 앱의 등급을 매기고 리뷰를 게시하여 다운로드한 앱을 평가합니다.
+
+</p>
+
+<p>
+  <strong>앱의 평점은 Google Play 목록 및 검색 결과의 순위에 영향을 미치는 가장 중요한 요소 중 하나입니다.</strong>
+ 또한 앱의 평점은 편집 담당자가 스토어에서 앱과 게임을 관리할 때 핵심적인 홍보 기준 중 하나입니다.
+
+
+</p>
+
+<div class="img" style="padding: 1em auto;width:96%;">
+  <img src="{@docRoot}images/gp-rating-web.png" style="border:1px solid #ddd;">
+</div>
+
+<div class="headerLine">
+  <h2 id="category-browsing">
+    카테고리 검색
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play에 앱을 게시할 때 30여 개의 앱 카테고리 중 하나를 선택합니다.
+ 각 카테고리 내에서 앱은 평점, 리뷰, 다운로드 횟수, 국가 및 기타 요소의 조합에 따라 순위가 매겨집니다.
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="search">
+    검색
+  </h2>
+
+
+</div>
+
+<p>
+  사용자는 Google Play에서 검색을 통해 앱이나 게임을 빠르고 정확하게 찾을 수 있습니다. 검색은 강력한 추론을 사용하여 사용자 유형에 따라 검색어를 제안하고 그 검색어와 일치하는 직접적인 앱 링크를 제공합니다.
+
+ 검색하면 가장 관련 있고 가장 인기 있는 앱이 맨 위에 표시됩니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="top-charts-and-lists">
+    인기 차트 및 목록
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-top.jpg">
+</div>
+
+<p>
+  인기 차트는 앱 및 게임 홈 페이지에서 인기 있는 앱을 Android 사용자에게 지속적으로 제공합니다.
+ 인기 차트는 최근 다운로드 횟수에 따라 매일 여러 번 업데이트하여 최신 상태를 유지합니다.
+ 앱의 평점과 다운로드 횟수가 증가하면 차트 순위가 상승할 수 있습니다.
+
+</p>
+
+<p>
+  또한 Google Play를 많이 사용하는 국가별로 차트를 제공하여 사용자와 밀접한 관련성이 있는 차트를 표시합니다.
+ 앱이 관심을 끌고 다운로드 횟수와 평점이 증가하면 하나 이상의 인기 차트에 오르고 더 많이 노출됩니다.
+
+
+</p>
+
+<table style="width:50%;">
+  <tr>
+    <td>
+      인기 무료
+    </td>
+    <td>
+      무료 앱 및 무료 게임 목록
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      인기 유료
+    </td>
+    <td>
+      유료 앱 및 유료 게임 목록
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      최고 매출
+    </td>
+    <td>
+      유료 또는 무료 총 매출액
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      신규 인기 무료
+    </td>
+    <td>
+      30일 미만
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      신규 인기 유료
+    </td>
+    <td>
+      30일 미만
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      인기 있는 앱
+    </td>
+    <td>
+      빠르게 설치가 늘어나는 신규 앱
+    </td>
+  </tr>
+</table>
+
+<div class="headerLine">
+  <h2 id="featured-staff-picks">
+    추천, 직원 선정, 컬렉션 및 배지
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 편집팀은 스토어에서 최고의 앱이 사용자의 주목을 받게 하고 앱 품질의 등급을 설정하기 위해 노력하고 있습니다.
+
+  편집팀은 가장 잘 알려진 앱과 게임은 물론 '진흙 속에 묻힌 보석'을 찾아 더 많은 사람들에게 소개하기 위해 Google Play의 앱을 지속적으로 검토합니다.
+
+ 편집팀은 <em>추천</em>, <em>직원 선정</em> 및 기타 컬렉션에서 우수한 앱을 소개합니다.
+
+</p>
+
+<p>
+  개발자는 자신의 앱을 직접 추천 후보로 올릴 수 없습니다. 편집팀이 항상 Google Play에서 우수한 앱을 찾기 위해 모니터링하고 있습니다.
+ 편집팀은 사용자에게 인기 있고 Android 장치에서 훌륭히 작동하는 앱을 주목합니다.
+
+</p>
+
+<h3 id="featured-staff-picks2">
+  추천 및 직원 선정
+</h3>
+
+<p>
+  Google Play 편집팀 직원이 매주 인기 있는 <em>추천</em> 및 <em>직원 선정</em> 컬렉션에서 소개할 신규 앱을 선정합니다.
+
+
+</p>
+
+<p>
+  <em>추천</em> 컬렉션은 Android에서 사용할 수 있는 가장 뛰어난 최신 앱과 게임 타이틀을 소개합니다.
+ 인기 카테고리에서 가장 뛰어나고 인기 있는 앱도 추천 목록에 포함됩니다.
+ <em>직원 선정</em>은 Google Play에서 최근에 추천된 모든 앱과 게임을 소개합니다.
+ 태블릿 사용자를 위해 특별 <em>직원 선정</em> 컬렉션은 최고의 Android 태블릿용 앱을 소개합니다.
+
+
+</p>
+
+<table style="text-align:center;margin:1.5em 0;">
+  <tr>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks1.jpg">
+      <p>
+        추천
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks2.jpg">
+      <p>
+        컬렉션
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks3.jpg">
+      <p>
+        에디터 추천
+      </p>
+    </td>
+  </tr>
+</table>
+
+<h3 id="collections">
+  앱 컬렉션
+</h3>
+
+<p>
+  때로는 편집팀 직원이 테마나 시즌 이벤트에 따라 앱 컬렉션을 따로 분류합니다
+ 사용자는 적시에 제공된 컬렉션에 매력을 느끼고 해당 목록에서 앱을 선택할 확률이 높습니다.
+
+</p>
+
+<p>
+  편집팀 직원은 휴대폰과 태블릿에서 Android의 성능을 가장 잘 보여주는 고품질 앱을 컬렉션에서 소개할 앱으로 선정합니다.
+ 또한 컬렉션 전체에 관심을 유도하고 고유하게 기여할 수 있는 앱을 찾습니다.
+
+
+</p>
+
+<h3 id="editors-choice">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/editorschoice_ann.png"> 에디터 추천
+</h3>
+
+<p>
+  <em>에디터 추천</em>은 Android에서 제공하는 최고의 앱을 집중 조명하는 선별된 앱 컬렉션입니다.
+ 에디터는 품질, 뛰어난 사용자 인터페이스, 장기간의 인기 및 Android 기능의 혁신적 사용을 기준으로 이러한 앱을 선정합니다.
+
+
+</p>
+
+<p>
+  <em>에디터 추천</em>에 선정된 앱은 Google Play에 앱 이름이 나타날 때마다 표시되는 배지도 받게 됩니다.
+
+</p>
+
+<h3 id="top-developer">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/topdev_ann.png"> 최고 개발자
+</h3>
+
+<p>
+  최고 개발자는 Android에서 혁신적인 고품질 앱을 출시하는 데 공헌한 명성 있고 존경받는 개발자에게 부여되는 배지입니다.
+
+  Google Play 편집팀 직원은 개발자의 누적된 작업에 따라 수시로 최고 개발자 배지를 수여합니다.
+
+</p>
+
+<p>
+  최고 개발자 배지는 개발자 이름이 Google Play에 표시될 때마다 그 옆에 나타납니다.
+ 이 배지는 개발자의 모든 앱을 장기적으로 인정함을 의미합니다.
+ 사용자는 이 배지가 있는 개발자의 제품을 신뢰할 수 있습니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="product-detail-pages">
+    스토어 목록 페이지
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-listing.jpg">
+</div>
+
+<p>
+  Google Play 스토어 첫 화면은 풍부하고 화려한 <em>스토어 목록 페이지</em>이며 개발자는 여기서 앱을 홍보하고 평점과 리뷰를 소개하고 앱의 기능을 보여줄 수 있습니다.
+
+
+</p>
+
+<p>
+  스토어 목록은 사용자가 앱에 대한 모든 정보를 확인하는 장소입니다. 검색 결과, 인기 차트, 카테고리 목록 및 컬렉션에 나열된 앱을 한 번만 누르면 스토어 목록으로 이동합니다.
+
+
+</p>
+
+<p>
+  웹 브라우저에서 <a href="https://play.google.com/apps/publish/">Google Play 개발자 콘솔</a>을 통해 제품 세부정보 페이지를 관리할 수 있습니다.
+ 로그인하여 브랜드 자산을 업로드하거나 업데이트하고 해당 언어로 제품 세부정보를 입력하십시오.
+
+</p>
+
+<p>
+  게시하면 Google Play가 앱 평점, 리뷰, 다른 제품 링크 등을 추가합니다.
+ 또한 휴대폰, 태블릿 및 웹 브라우저에서 스토어 목록 페이지가 멋있게 보이도록 만듭니다.
+
+</p>
+
+<p>
+  개발자는 웹 사이트, 광고 캠페인, 리뷰, 소셜 미디어 게시물 등 Google Play 외부의 제품 세부정보 페이지에 대한 링크를 제공할 수 있습니다.
+
+ 자세한 내용은 <a href="{@docRoot}distribute/tools/promote/linking.html">제품 링크</a>를 참조하십시오.
+
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="headerLine">
+<h2>관련 자료</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="4"></div>
+    </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/auto.jd b/docs/html-intl/intl/ko/distribute/googleplay/auto.jd
new file mode 100644
index 0000000..6536f1a
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/auto.jd
@@ -0,0 +1,230 @@
+page.title=Android Auto에 배포
+page.image=/design/auto/images/auto-overview.png
+meta.tags="auto", "publish", "quality"
+page.tags="auto", "publish", "googleplay"
+page.metaDescription=Android Auto에 앱 및 콘텐츠를 배포합니다.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>참여 방법</h2>
+<ol>
+<li><a href="#understand_guidelines">가이드라인 이해</a></li>
+<li><a href="#develop_app">우수한 Auto 앱 개발</a></li>
+<li><a href="#test_app">Auto 앱 품질 테스트</a></li>
+<li><a href="#opt_in">약관에 동의</a></li>
+<li><a href="#track_review">검토 추적</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Android Auto 및 Google Play를 통해 우수한 앱을 차량 사용자에게 제공할 수 있습니다.
+ 신규 또는 기존 앱을 Auto용으로 확장한 다음 Google Play에서 익숙한 도구 및 프로세스를 사용하여 게시할 수 있습니다.
+
+
+</p>
+
+<p>
+  시작하려면 이 문서를 참조하여 Google Play를 통해 사용자에게 Auto 앱을 배포하는 방법을 배우십시오.
+ 앱이 충족해야 하는 유용성, 품질 및 안전 관련 가이드라인에 대한 내용은 
+<a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a>
+을 참조하십시오.
+ 앱이 준비되면 개발자 콘솔의 약관에 동의하고 검토용 APK를 업로드할 수 있습니다.
+
+</p>
+
+<h2 id="how_to_participate">
+  참여 방법
+</h2>
+
+<p>
+  Google Play를 통해 차량용 앱을 제공할 수 있습니다. 기존 개발자 콘솔 계정과 현재 배포 및 가격 책정 설정을 사용하여 개발하고 게시할 수 있습니다.
+ 쉽게 참여할 수 있습니다. 과정에 대한 간략한 설명은 아래 절을 참조하십시오.
+
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-auto-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1. 가이드라인 및 요구사항 이해
+</h3>
+
+<p>
+  Android Auto에 성공적인 출시를 준비하려면 먼저 Auto에서 뛰어난 경험을 생성하는 방법에 대한 가이드라인을 자세히 읽어보십시오.
+ 앱을 Auto용으로 확장하는 아이디어와 디자인 및 유용성에 대한 자세한 내용은 <a href="{@docRoot}design/auto/index.html">Android Auto 디자인 가이드라인</a>을 참조하십시오.
+
+</p>
+
+<p>
+  Auto 경험 디자인 시작 시 Auto 앱 품질 기준을 읽고 숙지하십시오.
+ Auto에서 사용할 수 있는 앱만 Google Play에서 Auto 앱으로 지정됩니다. 앱이 기본 품질 기준을 충족하는 경우에 참여할 수 있습니다.
+
+ 자세한 내용은 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a>을 참조하십시오.
+
+
+</p>
+
+<h3 id="develop_app">2. 우수한 Auto 앱 개발</h3>
+
+<p>
+  우수한 Auto 앱은 차량용으로 설계되었으며 Android Auto의 기능을 활용합니다.
+  Auto 앱은 사용자가 오디오 콘텐츠 재생 또는 메시지 액세스 등의 작업을 수행할 때 고품질 경험을 제공합니다.
+
+</p>
+
+<p>
+  Auto 앱을 고려할 때는 <a href="{@docRoot}training/auto/start/index.html">개발자 문서</a> 및 유용성 가이드라인을 검토하고 최대한 지원할 계획을 수립하십시오.
+
+ 운전자의 주의가 산만해지지 않도록 가이드라인을 준수하고 고객 만족을 위해 디자인하십시오.
+
+</p>
+
+<p>
+  동일한 패키지 이름과 스토어 목록을 사용하여 휴대폰, 태블릿 및 기타 장치용 기존 앱의 일부로 Auto 경험을 제공해야 합니다.
+
+</p>
+
+<h3 id="test_app">3. Auto 앱 품질 테스트</h3>
+
+<p>
+  Auto 앱은 잘 작동하고 차 안에서 멋있게 보이고 최고의 사용자 경험을 제공하도록 디자인해야 합니다.
+   Google Play는 사용자가 Google Play에서 쉽게 검색할 수 있도록 선정된 고품질 Auto 앱을 소개합니다.
+ 다음과 같은 방법으로 참여하여 사용자에게 멋진 Android Auto 앱을 제공할 수 있습니다.
+  
+</p>
+
+<ul>
+  <li><a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> 가이드라인을 충족합니다.
+
+    <ul>
+      <li>당사의 <a href="{@docRoot}training/auto/index.html">Auto 앱 개발</a> 모범 사례를 따릅니다.
+</li>
+      <li>앱이 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> 기준을 모두 충족하는지 확인합니다.</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4. Android Auto 약관에 동의 및 게시</h3>
+
+<p>
+  개발자 계정 소유자는 APK를 업로드하고 검토용 앱을 게시하기 전에 개발자 콘솔의 <strong>가격 책정 및 배포</strong> 섹션에서 <a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html">Android Auto 약관</a>에 동의해야 합니다.
+
+
+
+ 약관 동의는 Android Auto 사용자가 Google Play를 통해 앱을 사용할 수 있고 앱이 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> 가이드라인을 충족함을 의미합니다.
+
+
+
+</p>
+
+<p>
+  약관에 동의한 후에만 Auto 앱을 업로드할 수 있습니다. 다음은 Auto 앱을 지정하는 기준에 대한 설명입니다.
+  
+</p>
+
+<ul>
+  <li>앱 매니페스트는 앱이 사용하는 차량 기능을 포함한 매니페스트에 <code>com.google.android.gms.car.application</code>메타데이터 항목을 선언해야 합니다.
+  앱을 Android Auto에서 사용하도록 구성하는 방법에 대한 자세한 내용은 <a href="{@docRoot}training/auto/start/index.html#auto-metadata">Auto 시작하기</a>를 참조하십시오.
+
+
+  </li>
+</ul>
+
+<p>
+  릴리스 준비된 APK를 작성하여 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> 가이드라인을 모두 충족하는지 테스트한 후에 개발자 콘솔로 업로드합니다.
+
+ 추가 Auto 기능 정보로 스토어 목록을 업데이트하고 필요한 경우 배포 옵션을 설정합니다.
+
+   Google Play에서 출시를 준비하는 방법에 익숙하지 않은 경우 <a href="{@docRoot}distribute/googleplay/publish/preparing.html">출시 검사 목록</a>을 참조하십시오.
+
+
+</p>
+
+<p>
+  약관에 동의하고 변경 내용을 저장한 후에 평소처럼 앱을 업로드하고 게시할 수 있습니다.
+  Android Auto 사용자에게 앱을 제공하기 전에 Google Play는 앱을 제출하여 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> 기준을 충족하는지 검토한 후에 그 결과를 개발자에게 알려줍니다.
+
+ 앱이 승인되면 Google Play에서 Android Auto 사용자가 해당 앱을 사용할 수 있습니다.
+ 앱의 승인 상태를 추적하는 방법은 다음 절을 참조하십시오.
+
+</p>
+
+<p>
+  검토는 휴대폰이나 태블릿 등 Google Play 스토어의 다른 장치에서 앱의 사용 가능성을 결정합니다.
+  
+  휴대폰/태블릿 구성요소 업데이트를 포함한 기존 앱이 있는 경우, Android Auto 구성요소가 검토를 통과해야 Google Play 스토어에서 업데이트된 앱을 사용할 수 있습니다.
+
+  
+</p>
+
+<p>
+  다음은 개발자 콘솔에서 Android Auto 약관에 동의하는 단계입니다.
+</p>
+
+<ol>
+  <li>앱이 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> 기준을 모두 충족하는지 확인합니다.
+  </li>
+
+  <li><strong>모든 애플리케이션</strong> 페이지에서 게시하려는 앱을 클릭합니다.
+  </li>
+
+  <li><strong>가격 책정 및 배포</strong>에서 아래로 스크롤하여 <em>Android Auto</em> 및 약관 링크를 찾습니다.
+
+  </li>
+
+  <li><em>약관</em> 링크를 클릭합니다.
+  </li>
+
+  <li>약관을 모두 읽고 <em>동의함</em>을 클릭합니다.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png">
+  <p class="caption">
+    <strong>Auto 약관에 동의:</strong> 개발자 콘솔에서 약관에 동의하면 앱이 Android Auto에 포함됩니다.
+
+  </p>
+</div>
+
+<h3 id="track_review">5. 검토 추적</h3>
+
+<p>
+  위에서 설명한 운전자 주의 산만 예방 가이드라인과 기술 및 품질 기준을 앱이 준수하는지 검토합니다.
+ 이 세부 검토 과정은 휴대폰/태블릿 앱을 제출할 때보다 더 많은 시간이 걸릴 수 있습니다.
+
+  앱이 승인될 때까지 해당 앱 또는 앱 업데이트가 Google Play 스토어에 게시되지 않습니다.
+  검토 결과가 좋은 앱은 Google Play
+ 스토어에 게시되고 사용할 수 있게 됩니다.
+</p>
+
+<p>앱이 승인되지 않으면 개발자는 해결해야 할 문제에 대한 요약이 포함된 <strong>알림 이메일을 개발자 계정 주소</strong>로 받게 됩니다.
+   필요한 조정을 거친 후에 새로운 앱 버전을 개발자 콘솔에 업로드할 수 있습니다.
+
+  
+</p>
+
+<p>
+  제출한 앱이 기존 앱의 업데이트이고 업데이트된 앱이 검토 기준을 충족하지 않으면, 업데이트가 거부되고 기존 앱이 Google Play 스토어에 그대로 게시됩니다.
+
+
+</p>
+
+<p>앱이 어떻게 평가되는지 이해하려면 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 앱 품질</a> 문서를 참조하십시오. </p>
+
+
+  <h3>관련 자료</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:autolanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/ko/distribute/googleplay/developer-console.jd
new file mode 100644
index 0000000..b2dc6d5
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/developer-console.jd
@@ -0,0 +1,584 @@
+page.title=개발자 콘솔
+page.metaDescription=Google Play의 앱 게시용 홈인 개발자 콘솔에 대해 알아봅니다.
+page.image=/distribute/images/developer-console.jpg
+Xnonavpage=true
+
+@jd:body
+    
+    <div id="qv-wrapper">           
+  <div id="qv">
+    <h2>게시 기능</h2>
+    <ol>
+      <li><a href="#allapps">모든 애플리케이션</a></li>
+      <li><a href="#account-details">계정 세부정보</a></li>
+      <li><a href="#merchant-account">판매자 계정 링크</a></li>
+      <li><a href="#multiple-user-accounts">다중 사용자 계정</a></li>
+      <li><a href="#alpha-beta">알파 및 베타 테스트</a></li>
+      <li><a href="#staged-rollouts">출시 준비</a></li>
+      <li><a href="#multiple-apk">다중 APK 지원</a></li>
+      <li><a href="#selling-pricing-your-products">판매 및 가격 책정</a></li>
+      <li><a href="#in-app-products">인앱 제품</a></li>
+      <li><a href="#distribution-controls">배포 컨트롤</a></li>
+      <li><a href="#reviews-reports">사용자 리뷰, 작동 중단 보고서</a></li>
+      <li><a href="#app-stats">앱 통계</a></li>
+      <li><a href="#related-resources">관련 자료</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  <a href="https://play.google.com/apps/publish/">Google Play 개발자 콘솔</a>은 게시 작업 및 도구를 지원하는 홈입니다.
+
+</p>
+<!-- <img src="{@docRoot}images/gp-dc-startscreen.jpg" style="width:480px;" /> -->
+<img src="{@docRoot}images/gp-devconsole-home.png" style="width:480px;">
+<p>
+  앱을 업로드하고 제품 페이지를 작성하고 가격 및 배포를 구성하고 게시합니다.
+ 웹 브라우저에서 개발자 콘솔을 통해 Google Play에 게시하는 모든 단계를 관리할 수 있습니다.
+
+</p>
+
+<p>
+  <a href="{@docRoot}distribute/googleplay/start.html">등록</a>하고 확인 이메일을 수신한 후에 Google Play 개발자 콘솔에 로그인할 수 있습니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="allapps">
+    모든 애플리케이션
+  </h2>
+
+
+</div>
+
+<p>
+  모든 애플리케이션에서 시작합니다. 여기에서 앱의 개요를 빠르게 살펴보거나 통계, 리뷰 및 제품 세부정보로 이동하거나 신규 앱을 업로드할 수 있습니다.
+
+</p>
+
+<div style="padding:1em 0em 0em 0em;">
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine" style="margin-top:-6px">
+  <h2 id="account-details">
+    계정 세부정보
+  </h2>
+
+
+</div>
+
+<p>
+  계정 세부정보 페이지에서 개발자나 개발 회사에 대한 기본 개발자 프로필 정보를 지정합니다.
+ Google Play와 고객이 이 정보를 통해 개발자를 식별합니다.
+ 개발자는 언제든지 여기로 돌아와서 정보를 편집하고 설정을 변경할 수 있습니다.
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-profile.png" class="frame">
+</div>
+
+<p>
+  개발자 프로필에는 다음 항목이 포함됩니다.
+</p>
+
+<ul>
+  <li>
+    <p>
+      개발자 이름:  Google Play의 스토어 목록 페이지 등에 표시됩니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      연락처 정보: Google에서만 사용하고 고객은 이 정보를 볼 수 없습니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      웹사이트 URL: 스토어 목록 페이지에 표시됩니다.
+    </p>
+  </li>
+</ul>
+
+<p>
+  계정 세부정보 페이지에서 마케터 및 다른 팀에 대해 제한된 액세스를 추가하거나 판매자 계정을 등록하거나 Google Play 라이선스에 대한 테스트 계정을 설정할 수도 있습니다.
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    판매자 계정 링크
+  </h2>
+
+
+</div>
+
+<p>
+  앱 또는 인앱 제품을 판매하려면 Google Wallet 판매자 계정을 개발자 프로필에 링크합니다.
+ Google Play는 재무 및 세금 확인과 월별 판매 대금 결제를 위해 링크된 판매자 계정을 사용합니다.
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-user-accounts">
+    다중 사용자 계정
+  </h2>
+
+
+</div>
+
+<p>
+  개발자 콘솔의 다른 부분에 액세스할 수 있도록 다른 팀원의 사용자 계정을 설정합니다.
+
+</p>
+
+<div style="width:550px;">
+  <img src="{@docRoot}images/gp-dc-invite.png" class="frame">
+</div>
+
+<p>
+  처음 등록되는 계정은 <em>계정 소유자</em>로 콘솔의 모든 부분에 액세스할 수 있습니다.
+ 소유자는 <em>사용자 계정</em>을 추가하고 콘솔 액세스 권한을 관리할 수 있습니다.
+
+</p>
+
+<p>
+  예를 들어, 소유자가 사용자에게 게시 및 앱 구성에 액세스할 수 있지만 재무 보고서에는 액세스하지 못하도록 권한을 부여할 수 있습니다.
+ 이제 <a href="https://support.google.com/googleplay/android-developer/answer/2528691">다중 계정을 설정</a>하는 방법을 알아봅시다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="store-listing-details">
+    스토어 목록 세부정보
+  </h2>
+
+
+</div>
+
+<p>
+  개발자 콘솔을 사용하여 <em>스토어 목록 페이지</em>를 설정합니다. 이 페이지는 Google Play에서 앱의 홈입니다.
+ 사용자의 휴대폰이나 웹에 표시되는 페이지입니다. 사용자는 여기에서 앱에 대해 알아보고 다운로드할 수 있습니다.
+
+</p>
+
+<p>
+  앱의 장점을 강조하는 맞춤형 브랜드 자산, 스크린샷 및 동영상을 업로드합니다. 현지화된 설명, 최신 버전에 대한 정보 등을 제공합니다.
+
+ 언제든지 스토어 목록을 업데이트할 수 있습니다.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-details.png" class="frame">
+</div>
+
+<div class="headerLine">
+  <h2 id="upload-instantly-publish">
+    업로드 및 즉시 게시
+  </h2>
+
+
+</div>
+
+<p>
+  개발자 콘솔에서 릴리스 준비된 Android 애플리케이션 패키지 파일을 빠르게 업로드하고 게시할 수 있습니다.
+ 앱을 게시하기 전 <em>초안</em> 단계에서 Google Play가 스토어 목록 페이지를 만들고 사용자가 앱을 사용할 수 있게 만듭니다. 앱은 몇 주가 아니라 몇 시간 이내에 스토어 목록에 나타납니다.
+
+
+
+</p>
+
+<p>
+  앱이 게시된 후에 필요할 때마다 자주 업데이트할 수 있습니다. 앱 바이너리를 업데이트하지 않고 가격, 구성 및 배포 옵션을 언제든지 변경할 수 있습니다.
+
+
+</p>
+
+<p>
+  기능을 추가하거나 코드 문제를 수정한 경우 언제든지 업데이트된 바이너리를 게시할 수 있습니다.
+ 새 버전은 거의 즉시 사용할 수 있습니다. 기존 고객에게는 업데이트를 다운로드할 준비가 되었음을 알려줍니다.
+ 사용자가 앱의 자동 업데이트를 승인할 수도 있습니다. 그러면   업데이트를 게시하는 즉시 전송되고 설치됩니다.
+
+ 언제든지 앱의 게시를 취소할 수 있습니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="alpha-beta">
+    알파 및 베타 테스트
+  </h2>
+
+
+</div>
+
+<p>
+  출시하기 전에 사용자의 실제 피드백을 받는 것은 항상 중요합니다.
+ Google Play를 통해 전 세계 모든 지역의 알파 및 베타 테스트 그룹에 앱의 시험판 버전을 쉽게 배포할 수 있습니다.
+
+</p>
+
+<p>
+  Google Play 개발자 콘솔의 <strong>APK</strong> 섹션에 <strong>알파 테스트</strong> 및 <strong>베타 테스트</strong> 탭이 있습니다.
+
+ 여기에서 앱의 APK 파일 버전을 업로드하고 테스터 목록을 <a href="https://support.google.com/groups/answer/46601">Google 그룹</a> 또는 <a href="https://support.google.com/plus/topic/2888488">Google+ 커뮤니티</a>로 정의할 수 있습니다.
+ 이 과정이 완료되면 개발자는 테스터에게 전달할 URL을 받게 되며 그 URL을 사용하여 테스트 프로그램에 옵트인할 수 있습니다.
+
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-ab.png" class="frame">
+</div>
+
+<p>
+  옵트인 후에 테스터가 앱의 제품 페이지로 이동하여 앱을 다운로드하면 Google Play가 해당 알파 및 베타 버전을 제공합니다.
+
+ 실수로 사용자가 양쪽 테스트 그룹에 모두 옵트인하면 Google Play가 항상 알파 테스트 버전을 제공합니다.
+
+</p>
+
+<p>
+  알파 및 베타 버전 앱에서는 사용자가 피드백 및 리뷰를 제공할 수 없습니다.
+ 피드백을 받으려면 <a href="https://support.google.com/groups/answer/46601">Google 그룹</a> 또는 <a href="https://support.google.com/plus/topic/2888488">Google+ 커뮤니티</a>를 사용하거나 이메일 주소나 본인의 웹사이트를 설정하면 됩니다.
+
+</p>
+
+<p>
+  이러한 테스트 프로그램을 사용하여 <a href="{@docRoot}distribute/essentials/optimizing-your-app.html">앱을 최적화</a>하고 <a href="{@docRoot}distribute/users/expand-to-new-markets.html">신규 시장 출시</a>를 지원하고 <a href="{@docRoot}distribute/users/build-community.html">커뮤니티 구축</a>을 시작할 수 있습니다.
+
+
+ <a href="{@docRoot}distribute/tools/launch-checklist.html">출시 검사 목록</a> 및 <a href="{@docRoot}distribute/tools/localization-checklist.html">현지화 검사 목록</a>에서 베타 테스트 사용에 대한 추가 정보도 있습니다.
+
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="staged-rollouts">
+    출시 준비
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 개발자 콘솔의 APK 섹션에서 프로덕션 탭을 사용하여 앱의 출시를 준비할 수도 있습니다.
+ 여기에서 앱을 다운로드할 수 있는 사용자의 비율(%)을 정의할 수 있습니다.
+
+</p>
+
+<p>
+  출시 준비를 통해 예상치 않은 버그나 서버 부하의 영향을 제한하고 편향되지 않은 사용자 샘플로 사용자 피드백을 측정할 수 있습니다.
+
+  출시를 준비하는 동안 사용자가 앱의 평점을 매기고 리뷰할 수 있으므로 내키지 않은 경우 먼저 소규모 사용자에게 출시하십시오.
+ 부정적인 리뷰를 관찰하고 응답하십시오.
+
+</p>
+
+<p>
+  Android 플랫폼의 <a href="{@docRoot}tools/publishing/versioning.html">앱 버전 관리 요구사항</a> 때문에 롤백은 지원되지 않습니다.
+ 롤백이 필요한 경우 이전 APK를 새 버전 번호로 출시하는 것을 고려하십시오.
+ 하지만 이 방법은 사용자가 새로운 기능에 액세스할 수 없고 이전 앱이 서버 변경사항이나 데이터 형식과 호환되지 않을 수도 있으므로 마지막 수단으로만 사용하고 업데이트의 <a href="#alpha-beta">알파 및 베타 테스트</a>를 실행해야 합니다.
+
+
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-apk">
+    다중 APK 지원
+  </h2>
+
+
+</div>
+
+<p>
+  대부분의 경우 단일 앱 패키지(APK)만 필요하며 이는 앱을 관리 및 유지 관리하는 가장 쉬운 방법입니다. 하지만 다양한 장치에 다양한 APK를 제공할 필요가 있는 경우 Google Play는 그러한 방법을 제공합니다.
+
+
+
+</p>
+
+<p>
+  <em>다중 APK 지원</em>을 통해 패키지 이름은 동일하지만 OpenGL 텍스처 압축 형식, 화면 크기 지원 또는 지원되는 Android 플랫폼 버전은 다른 다중 앱 패키지를 생성할 수 있습니다.
+
+ 단순히 모든 APK를 단일 제품 목록 아래에 업로드하면 Google Play가 장치의 특징에 따라 가장 적합한 APK를 선택하여 사용자에게 제공합니다.
+
+
+
+</p>
+
+<p>
+  <em>APK 확장 파일</em> 옵션을 사용하여 각 게시된 APK에 대해 최대 2개의 부차적 다운로드(다중 APK 포함)를 업로드할 수도 있습니다.
+ 각 확장 파일의 크기는 최대 2GB이고 모든 유형의 코드나 자산을 포함할 수 있습니다.
+
+  Google Play는 이들을 무료로 호스팅하고 파일 다운로드를 정상적인 앱 설치의 일부로 처리합니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="selling-pricing-your-products">
+    제품 판매 및 가격 책정
+  </h2>
+
+
+</div>
+
+<div class="figure-right">
+  <img src="{@docRoot}images/gp-buyer-currency.png" class="frame">
+</div>
+
+<p>
+  앱 및 인앱 제품의 가격을 책정할 수 있는 도구가 있습니다. 앱을 무료 또는 유로로 다운로드하도록 설정할 수 있으며, 유료의 경우 다운로드하기 전에 결제가 필요합니다.
+
+</p>
+
+<ul>
+  <li>앱을 무료로 게시하는 경우 <strong>앱의 수명주기 동안 무료로 유지</strong>해야 합니다. 무료 앱은 Google Play에서 모든 사용자가 다운로드할 수 있습니다.
+
+  </li>
+
+  <li>앱을 유료로 게시하는 경우 나중에 무료로 변경할 수 있습니다. 유료 앱은 Google Play에서 결제 양식을 등록한 사용자만 구입하고 다운로드할 수 있습니다.
+
+
+  </li>
+</ul>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <p>
+      앱을 배포하거나 판매할 수 있는 국가 목록은 <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294&amp;topic=2365624&amp;ctx=topic">애플리케이션 배포 지원 위치</a>를 참조하십시오.
+
+
+    </p>
+  </div>
+</div>
+
+<p>
+  앱이 무료이든 유로이든 상관없이 인앱 제품과 구독도 제공할 수 있습니다.
+ 유료 앱, 인앱 제품 및 구독에 대해 개별적으로 가격을 책정하십시오.
+
+</p>
+
+<p>
+  사용자가 앱 제품 페이지를 탐색하거나 구입을 시작하면 Google Play가 현지 통화로 결제할 가격을 표시합니다.
+
+</p>
+
+<p>
+  처음에는 개발자가 각 제품에 대해 자국 통화로 기본 가격을 책정합니다. 별도의 작업이 없으면 Google Play가 한 달에 한 번 앱의 미화 가격을 기준으로 현지 가격을 자동 책정합니다.
+
+
+</p>
+
+<p>
+  하지만 Google Play는 개발자에게 국가별 제품 가격을 책정할 수 있는 전권을 부여합니다.
+ 이를 적용하려면 <strong>지금 가격 자동 변환</strong> 기능을 사용하여 기본 가격에서 고정 현지 가격을 수동으로 책정할 수 있습니다.
+
+ 그런 다음 가격을 검토하고 원하는 국가에 대해 새로운 가격을 책정할 수 있습니다. 국가별 가격은 독립적이므로 다른 가격에 영향을 주지 않고 가격을 조정할 수 있습니다.
+
+ 대부분의 국가에서 책정 가격은 세금을 포함하여 사용자에게 청구되는 최종 가격입니다.
+
+</p>
+
+<p>
+  앱 가격 책정에 대한 자세한 내용은 <a href="{@docRoot}distribute/users/expand-to-new-markets.html#localize-your-google-play-listing">신규 시장 확장</a>을 참조하십시오.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="in-app-products">
+    인앱 제품
+  </h2>
+
+
+</div>
+
+<p>
+  앱을 통해 수익을 창출하는 수단으로 <a href="{@docRoot}google/play/billing/index.html">Google Play 인앱 결제</a>를 사용하여 인앱 제품 및 구독을 판매할 수 있습니다.
+ 인앱 제품은 일회 구매 방식이고 구독은 매달 또는 연간 단위로 반복 결제되는 방식입니다.
+
+</p>
+
+<p>
+  게시된 특정 APK 또는 초안 APK에 대해 <strong>인앱 제품</strong> 섹션에서 다음 작업을 수행합니다.
+
+</p>
+
+<ul>
+  <li>인앱 제품 및 구독에 대한 제품 목록을 생성합니다.
+  </li>
+
+  <li>가격을 책정합니다.
+  </li>
+
+  <li>앱을 포함한 제품을 게시하거나, 사용하지 않는 제품을 회수합니다. 
+  </li>
+</ul>
+
+<p>
+  인앱 결제를 구현하는 자세한 방법은 개발자용 <a href="{@docRoot}google/play/billing/index.html">인앱 결제</a> 문서를 참조하십시오.
+ <a href="{@docRoot}distribute/monetize/premium.html">Premium</a>, <a href="{@docRoot}distribute/monetize/freemium.html">Freemium</a> 및 <a href="{@docRoot}distribute/monetize/subscriptions.html">구독</a> 수익 모델에 인앱 제품을 활용합니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="distribution-controls">
+    배포 컨트롤
+  </h2>
+
+
+</div>
+
+<p>
+  앱의 배포 대상 국가와 지역을 관리합니다. 일부 국가의 경우 대상 통신사를 선택할 수 있습니다.
+ 매니페스트 파일에  선언된 배포 규칙에 따라 앱에서 사용할 수 있는 장치 목록을 확인할 수도 있습니다.
+
+
+</p>
+
+<h3 id="geotargeting">
+  대상 지역 지정
+</h3>
+
+<p>
+  Google Play 개발자 콘솔의 컨트롤을 사용하여 애플리케이션 바이너리를 변경하지 않고 앱의 지리적 배포를 손쉽게 관리할 수 있습니다.
+
+ 배포 대상 국가와 지역은 물론 (일부 국가의 경우) 통신사도 지정할 수 있습니다.
+
+</p>
+
+<p>
+  Google Play는 사용자가 스토어를 방문하면 사용자가 앱을 다운로드하기 전에 대상 국가로 지정된 국가에 소속되어 있는지 확인합니다. 대상 국가 및 통신사를 변경하려면 Google Play 개발자 콘솔에서 언제든지 변경하여 저장하면 됩니다.
+
+
+
+</p>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-supported-dev-requirements.png" class="frame">
+</div>
+
+<p>
+  전 세계 사용자를 대상으로 마케팅하려면 앱 세부정보 및 설명, 홍보 그래픽, 스크린샷 등을 포함한 <a href="{@docRoot}distribute/tools/launch-checklist.html#start-localization">스토어 목록을 현지화</a>하면 됩니다.
+
+
+</p>
+
+<h3 id="captargeting">
+  대상 기능 지정
+</h3>
+
+<p>
+  Google Play에서 앱이 사용하는 장치 기능 또는 성능에 따라 배포를 컨트롤할 수도 있습니다.
+ 하드웨어 기능, OpenGL 텍스처 압축 형식, 라이브러리, Android 플랫폼 버전 등 앱이 매니페스트에 정의할 수 있는 여러 유형의 종속성이 있습니다.
+
+
+
+</p>
+
+<p>
+  앱을 업로드하면 Google Play가 종속성을 읽고 필요한 배포 규칙을 설정합니다.
+ 종속성 선언에 대한 기술 정보는 <a href="{@docRoot}google/play/filters.html">Google Play 필터</a>를 참조하십시오.
+
+
+</p>
+
+<p>
+  정확한 배포 컨트롤을 위해 Google Play에서 종속성에 따라 앱이 사용할 수 있는 모든 장치를 확인할 수 있습니다(해당되는 경우).
+ Google Play 개발자 콘솔에서 지원되는 장치를 나열함은 물론 필요한 경우 특정 장치를 제외시킬 수도 있습니다.
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="reviews-reports">
+    사용자 리뷰 및 작동 중단 보고서
+  </h2>
+
+
+</div>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-dc-reviews.png" class="frame">
+  <p class="img-caption">
+    사용자 리뷰 섹션에서 특정 앱의 사용자 리뷰에 액세스할 수 있습니다. 다양한 방법으로 리뷰를 필터링하여 더 쉽게 문제를 찾아내고 더욱 효과적으로 고객을 지원할 수 있습니다.
+
+
+  </p>
+</div>
+
+<p>
+  Google Play에서 사용자가 다른 사용자에게 도움이 되는 앱 리뷰를 손쉽게 제출할 수 있습니다.
+ 리뷰는 고객이 직접 제공하는 유용성 피드백, 지원 요청 및 상세한 중요 기능 문제 정보입니다.
+
+
+</p>
+
+<p>
+  개발자는 작동 중단 보고서를 앱 디버깅 및 개선에 사용할 수 있습니다. Android 장치에서 자동으로 제출되는 스택 추적 및 기타 데이터가 포함된 작동 중단 보고서를 볼 수 있습니다.
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="app-stats">
+    앱 통계
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:500px">
+  <img src="{@docRoot}images/gp-dc-stats.png">
+  <p class="img-caption">
+    <b>앱 통계 페이지</b>: 특정 앱의 설치 성능에 대한 다양한 통계를 보여줍니다.
+
+  </p>
+</div>
+
+<p>
+  앱의 설치 성능에 대한 상세한 통계를 얻을 수 있습니다.
+</p>
+
+<p>
+  고유한 사용자는 물론 고유한 장치를 통해 측정된 설치 메트릭을 보여줍니다.
+ 활성 설치, 총 설치, 업그레이드, 일별 설치 및 제거, 평점에 대한 메트릭을 보여줍니다.
+
+</p>
+
+<p>
+  Android 플랫폼 버전, 장치, 국가, 언어, 앱 버전 및 통신사를 포함한 메트릭으로 설치 수를 상세히 보여줍니다.
+ 타임라인 차트의 각 차원에 대한 설치 데이터를 보여줍니다.
+
+</p>
+
+<p>
+  이 차트는 앱의 설치 최대치와 장기 동향을 강조하여 나타냅니다.
+  이를 통해 사용자의 채택 동작을 살펴보고 통계와 홍보의 상관관계, 앱 개선의 효과 및 기타 요소를 확인할 수 있습니다.
+ 타임라인에 특정 지점을 추가하여 차원 내의 데이터를 중점적으로 살펴봅니다.
+
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="dynamic-grid">
+<div class="headerLine">
+<h2 id="related-resources">관련 자료</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/developerconsole"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+  </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/families/about.jd b/docs/html-intl/intl/ko/distribute/googleplay/families/about.jd
new file mode 100644
index 0000000..36dc0c9
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/families/about.jd
@@ -0,0 +1,61 @@
+page.title=Designed for Families
+page.metaDescription=Designed for Families는 앱과 게임을 가족이 더 쉽게 검색할 수 있도록 지원합니다.
+page.image=/distribute/images/about-dff-sm.jpg
+meta.tags="families, googleplay, distribution"
+page.tags="families"
+
+@jd:body
+
+<p>
+  몇 주 이내에 Google Play의 새로운 가족 중심 경험을 통해 사용자는 새로운 방식으로 가족용 고품질 앱과 게임을 검색하고 찾을 수 있게 될 것입니다.
+
+
+</p>
+
+<p>
+  가족 친화적인 스토어를 지원하기 위해 가족 중심 앱 및 게임을 옵트인하도록 새 Designed for Families 프로그램에 개발자를 초대합니다.
+ <a href="https://support.google.com/googleplay/android-developer/answer/6184502"> 프로그램 요구사항</a>을 충족하는 앱은 부모가 적합하고 신뢰할 수 있는 고품질 앱과 게임을 쉽게 찾을 수 있도록 새로운 가족 친화적인 앱에 표시됩니다.
+
+
+
+</p>
+
+<img src="{@docRoot}distribute/images/about-dff-sm.jpg">
+
+<p>
+  현재 개발자 콘솔에서 앱을 관리하는 데 사용하는 도구와 프로세스를 사용하여 앱과 게임을 옵트인하십시오.
+ Designed for Families 프로그램의 앱은 Google Play 스토어에서 기존 카테고리, 순위 및 리뷰를 그대로 유지하면서 고급 검색 기능을 활용할 수 있습니다.
+
+
+
+</p>
+
+<h2 id="elibibility">자격</h2>
+
+<p>
+  Google Play의 가족 친화적인 앱을 통해 부모와 가족은 연령에 적합한 앱을 더 쉽게 검색할 수 있습니다.
+
+ Designed for Families 프로그램은 아이들은 물론 전체 가족이 즐길 수 있는 앱을 포함하도록 고안되었습니다.
+
+ 이러한 목표를 구현하기 위해 앱이 충족해야 하는 특정 가이드라인 및 정책이 있는데, 이는 앱 콘텐츠 리뷰에서 평가합니다.
+
+
+</p>
+
+<p>
+  앱이 준수해야 하는 정책을 숙지하십시오.
+ 여기에는 <a href="http://play.google.com/about/developer-content-policy.html">콘텐츠 정책</a>, <a href="http://play.google.com/about/developer-distribution-agreement.html">개발자 배포 계약</a> 및 <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA 추록</a>이 포함됩니다.
+
+
+
+</p>
+
+<p>
+  또한 앱이 Google Play 개발자 도움말 센터에 나오는 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 프로그램 요구사항</a>도 충족해야 합니다.
+
+
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">다음: 옵트인</a>
+</div>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/ko/distribute/googleplay/families/faq.jd
new file mode 100644
index 0000000..92dbcf0
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/families/faq.jd
@@ -0,0 +1,329 @@
+page.title=질문과 대답(FAQ)
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+Designed for Families에 대한 질문과page.metaDescription= 대답
+
+@jd:body
+
+    <style>
+  dt {
+    font-weight:bold;
+  }
+  </style>
+  
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>이 문서의 내용</h2>
+<ol>
+  <li><a href="#review">앱 리뷰 및 옵트인</a></li>
+  <li><a href="#monetization">수익 창출</a></li>
+  <li><a href="#other">기타 질문</a></li>
+</ol>
+</div>
+
+<p>
+  이 절에서는 Designed for Families에 대한 자세한 정보를 제공하고 제기될 수 있는 일반적인 질문에 답변합니다.
+
+</p>
+
+
+<h2 id="review">앱 리뷰 및 옵트인</h2>
+
+<dl>
+<dt>앱을 어떻게 옵트인합니까?</dt>
+
+<dl>
+  <dd>
+    Google Play 개발자 콘솔에서 앱에 대한 가격 책정 및 배포 탭에서 Designed for Families에 옵트인할 수 있습니다.
+ 다음은 <a href="{@docRoot}distribute/googleplay/families/start.html">단계별 과정</a>입니다.
+
+  </dd>
+
+  <dt>
+    앱의 대화형 기능을 어디에 공개합니까? 이 정보를 왜 수집합니까?
+
+  </dt>
+
+  <dd>
+    대화형 기능 공개는 콘텐츠 등급 질문서의 일부입니다.
+ Designed for Families 프로그램 옵트인 과정의 일부로 대화형 기능 공개를 검토합니다.
+ 당사는 사용자가 앱 평가 시 정보에 근거하여 선택할 수 있도록 이 정보를 수집합니다.
+
+
+  </dd>
+
+  <dt>
+    COPPA란 무엇입니까?
+  </dt>
+
+  <dd>
+    COPPA는 FTC(Federal Trade Commission)의 아동 온라인 개인정보 보호법입니다.
+ 자세한 내용은 <a href="http://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions">FTC의 COPPA FAQ</a>를 참조하십시오.
+ Google Play는 개발자에게 COPPA 또는 기타 아동법규를 준수하는 방법에 대해 법률 안내를 제공하지 않습니다.
+
+  </dd>
+
+  <dt>
+    최신 개인정보 보호정책을 제공해야 합니까? 그런 경우 어디에 제공합니까?
+  </dt>
+
+  <dd>
+    예, 앱 스토어 목록에 지속적인 개인정보 보호정책 링크를 제공하고 개발자 콘솔에서 현지 개인정보보호법을 준수하는지 확인해야 합니다.
+
+ 개인정보 보호정책을 추가하거나 검토하려면 개발자 콘솔에서 앱을 선택한 다음 <strong>스토어 목록</strong> 섹션 하단으로 스크롤하십시오.
+
+
+  </dd>
+
+  <dt>
+    몇 개의 연령층을 선택할 수 있습니까?
+  </dt>
+
+  <dd>
+    최대 두 개의 인접한 연령층을 선택할 수 있습니다. 연령층은 5세 이하, 6-8세, 9-12세가 있습니다.
+ 하지만 앱이 아동과 성인을 대상으로 하는 경우 <em>모든 연령</em> 카테고리를 선택해야 합니다.
+
+
+  </dd>
+
+  <dt>
+    Designed for Families 프로그램에서 몇 개의 콘텐츠 카테고리를 선택할 수 있습니까?
+
+  </dt>
+
+  <dd>
+    카테고리는 Designed for Families 프로그램의 일부로 하나를 선택하고, 전체 Google Play 스토어용으로 하나를 선택할 수 있습니다.
+
+  </dd>
+
+  <dt>
+    Designed for Families 카테고리란 무엇입니까?
+  </dt>
+
+<ul>
+<li><strong>액션 및 어드벤처</strong>: 레이싱 게임, 동화 어드벤처 등을 포함하는 액션 지향 앱/게임입니다.
+
+  </li>
+
+  <li style="list-style: none"><strong>두뇌 게임</strong>: 이 카테고리에는 생각하게 만드는 게임과 퍼즐, 짝 맞추기 게임 및 유사 게임이 포함됩니다.
+
+
+  </li>
+
+  <li><strong>창의력</strong>: 창의력을 촉진시키는 앱/게임입니다.
+  이 카테고리에서 예상되는 앱/게임 유형의 예로는 그리기, 색칠하기 및 만들기 게임이 포함됩니다.
+
+  </li>
+
+  <li><strong>교육</strong>: 수학, 과학, 글자 공부, 숫자 공부, 지리 및 역사와 같은 다양한 유형의 교육 콘텐츠 등 교육적 가치를 지닌 앱/게임입니다.
+
+
+  </li>
+
+  <li><strong>음악 및 동영상</strong>: 피아노 연주, 동영상 시청 등 음악적 요소나 동영상 구성요소를 포함하는 앱/게임입니다.
+
+
+  </li>
+
+  <li><strong>역할 놀이</strong>: 요리사나 의사 등 가상적인 역할을 수행할 수 있는 앱/게임입니다.
+
+  </li>
+</ul>
+
+<dl>
+  <dt>
+    Designed for Families 프로그램에 옵트인하면 앱을 게시하는 데 시간이 더 걸립니까?
+
+  </dt>
+
+  <dd>
+    Designed for Families에 옵트인하면 Google Play가 앱이 가족에게 적합한지 확인하기 위해 검토합니다.
+ 앱이 모든 프로그램 요구사항을 준수할 경우 게시 시간이 평소보다 오래 걸리지 않습니다. 하지만 Designed for Families 검토 중에 앱이 거부되면 게시가 지연될 수 있습니다.
+
+
+ 
+  </dd>
+
+  <dt>
+    앱이 Designed for Families 프로그램에서 거부되면 어떻게 됩니까?
+  </dt>
+
+  <dd>
+    앱이 Designed for Families 프로그램에서 거부되면 개발자 콘솔과 이메일을 통해 그 이유를 상세히 알려드립니다.
+ 개발자는 문제를 수정하여 앱을 다시 제출하거나 옵트인 응답을 변경할 수 있는 기회가 부여됩니다.
+
+ Google Play에 기존 활성 앱이 있는 경우 앱 업데이트만 거부됩니다(기존 앱은 Play 스토어에서 활성 상태를 유지함).
+
+ 요구사항을 충족하지 않는 신규 앱을 Designed for Families 프로그램에 제출하면 전체 앱 제출이 거부되고 Play에 게시되지 않습니다.
+
+
+ 개발자는 확인된 문제를 해결하여 앱을 Designed for Families 프로그램에 다시 제출하거나 프로그램에서 옵트아웃할 수 있습니다.
+
+  </dd>
+
+  <dt>
+    앱을 게시한 후에 Designed for Families 프로그램 요구사항을 준수하지 않는 것으로 확인되면 어떻게 됩니까?
+ 
+  </dt>
+
+  <dd>
+    해당 앱이 Designed for Families 프로그램은 물론 Google Play 스토어에서도 제거되거나 일시 중단됩니다.
+  제거된 앱은 거부된 앱과 동일한 해결 방법을 따를 수 있습니다.
+ 일시 중단된 앱은 개발자 이의 제기 과정을 통해 이의를 제기할 수 있습니다.
+
+  </dd>
+
+  <dt>
+    Designed for Families 프로그램에 옵트인했다가 나중에 옵트아웃할 수 있습니까?
+  </dt>
+
+  <dd>
+    예, 언제든지 해당 프로그램에서 옵트아웃할 수 있습니다. 옵트아웃하면 가족 친화적인 환경에서 앱을 사용할 수 없고 해당 프로그램의 기타 이점도 잃게 됩니다.
+
+
+  </dd>
+
+  <dt>
+    Designed for Families 프로그램에서 승인된 앱을 업데이트하면 어떻게 됩니까?
+    
+  </dt>
+
+  <dd>
+    Designed for Families 프로그램의 일부인 앱은 자격 요구사항을 항상 준수해야 합니다.
+ 앱과 연관된 Designed for Families 메타데이터를 편집해야 하는 경우 Google Play 개발자 콘솔의 가격 책정 및 배포 섹션으로 이동하여 해당 정보를 편집하십시오.
+
+
+ 앱을 업데이트하면서 대상 연령층이 변경되는 경우 이미 앱을 설치한 사용자에게 알리는 것이 좋습니다.
+
+
+  </dd>
+
+  <dt>
+    Google 로그인 또는 Google Play Game 서비스를 사용하는 앱이나 게임을 Designed for Families 프로그램에 옵트인할 수 있습니까?
+
+  </dt>
+
+  <dd>
+    5세 이하, 6-8세 또는 9-12세의 연령층을 대상으로 하는 아동 전용의 Designed for Families에 참가하는 앱은 애플리케이션의 로그인 경험으로 Google+ 로그인 또는 Google Play Game 서비스를 사용할 수 <strong>없습니다</strong>.
+
+
+
+
+
+    <p>
+      아동과 성인을 모두 대상으로 하는 Designed for Families에 참가하는 앱은 Google+ 로그인 또는 Google Play Game 서비스를 <strong>옵션</strong> 기능으로 사용할 수 있습니다.
+
+ 아동 사용자는 Google+ 또는 Google Play Game 서비스에 로그인하지 않고 앱 또는 게임에 완전히 액세스할 수 있어야 합니다.
+
+    </p>
+  </dd>
+
+  <dt>
+    학생들이 학교 계정으로 로그인할 수 있도록 앱을 Google Play for Education에 옵트인하고 Google 로그인과 통합한 경우
+ 앱에서 Google 로그인 작동 방식을 변경해야 합니까?
+
+   </dt>
+
+  <dd>
+    Google Play for Education에 참가하는 앱은 모든 앱 사용자에 대한 차단 요구사항이 아니라면 학생 계정용 Google 로그인을 사용할 수 있습니다.
+
+  </dd>
+</dl>
+
+<h2 id="monetization">
+  Designed for Families 프로그램 수익 창출
+</h2>
+
+<dl>
+  <dt>
+    Designed for Families의 광고 정책에 대해 자세한 정보를 제공해줄 수 있습니까?
+
+  </dt>
+
+  <dd>
+    <a href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">Designed for Families의 광고 정책</a>을 참조하십시오.
+
+  </dd>
+
+  <dt>
+    앱에 중간 광고를 제공할 수 있습니까?
+  </dt>
+
+  <dd>
+    중간 광고는 일부 앱에만 적용됩니다. 하지만 광고가 제공되기 전에 사용자가 기본 작업으로 이동할 수 있어야 합니다.
+
+  </dd>
+
+  <dt>
+    광고 대행사가 Designed for Families의 광고 정책을 준수하는지 어떻게 알 수 있습니까?
+
+  </dt>
+
+  <dd>
+    콘텐츠 정책 및 광고 방식에 대한 내용은 광고 대행사에 문의하십시오.
+ AdMob을 사용하는 경우 앱 또는 특정 광고 단위에 아동 대상 서비스로 취급하도록 요청하는 태그를 지정하는 자세한 방법은 <a href="https://support.google.com/admob/answer/3248194">AdMob 도움말 센터</a>를 참조하십시오.
+
+ 인앱 광고를 포함한 전반적인 사용자 경험이 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 프로그램 요구사항</a>을 충족하도록 보장하는 것은 개발자의 책임입니다.
+
+ 
+  </dd>
+
+  <dt>
+    앱에 인앱 구매를 포함할 수 있습니까?
+  </dt>
+
+  <dd>
+    <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA</a> 및 기타 해당 법률 요구사항 준수 이외에 Designed for Families 프로그램에 참여하는 앱의 인앱 구매(IAP)와 관련된 특별한 제한사항은 없지만 Google Play는 지나치게 공격적인 상술을 구현하는 앱을 거부할 수 있습니다.
+
+
+
+
+ Google Play는 주로 아동을 대상으로 Designed for Families 프로그램에 참여하는 모든 앱에 대해 아동이 아니라 부모가 구매를 승인하도록 보장하기 위해 IAP 암호 보호를 적용합니다.
+
+
+ 이 취급 방침은 모든 연령을 대상으로 하는 앱에는 적용되지 않습니다.
+
+  </dd>
+</dl>
+
+<h2 id="other">
+  기타 질문
+</h2>
+
+<dl>
+  <dt>
+    Designed for Families 앱의 대상은 누구입니까?
+
+  </dt>
+
+  <dd>
+    당사는 부모와 보호자가 Google Play 스토어에서 신뢰할 수 있는 브랜드와 개발자가 제작한 우수한 아동 및 가족용 앱을 찾을 수 있도록 하는 것을 목표로 합니다. 
+
+
+  </dd>
+
+  <dt>
+    Designed for Families 프로그램은 특정 국가의 개발자만 이용할 수 있습니까?
+
+  </dt>
+
+  <dd>
+    Designed for Families는 글로벌 프로그램입니다.
+  </dd>
+
+  <dt>
+    가족 게임 카테고리에 현재 게시된 앱은 어떻게 됩니까?
+
+  </dt>
+
+  <dd>
+    가족 게임 카테고리는 2015년 5월부터 사용 중단됩니다. 현재 가족 게임 카테고리에 속한 앱은 Play 스토어에서 다른 카테고리를 선택해야 합니다.
+
+ 다른 카테고리를 선택하지 않은 앱은 캐주얼 게임 카테고리로 분류됩니다.
+
+  </dd>
+</dl>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="https://docs.google.com/forms/d/1EtvUWqlkxS6RxHJjeI-3-7uzdbIZx6n9Cocy2D369B8/viewform" class="next-class-link">다음: 관련 소식 받기</a>
+</div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/families/start.jd b/docs/html-intl/intl/ko/distribute/googleplay/families/start.jd
new file mode 100644
index 0000000..06f76b5
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/families/start.jd
@@ -0,0 +1,106 @@
+page.title=Designed for Families에 옵트인
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=간단한 몇 단계로 Designed for Families에 가입합니다.
+
+@jd:body
+
+<p>
+  아동과 가족용으로 디자인된 앱을 작성 중인 경우 Designed for Families 프로그램에 옵트인할 준비를 하기 <em>전에</em> 다음과 같은 몇 가지 작업을 수행해야 합니다.
+
+
+</p>
+
+<ul>
+  <li>앱 콘텐츠 등급 질문서를 작성하고 '전체 이용가' 또는 '10세 이상'의 ESRB 등급 충족해야 합니다.
+
+  </li>
+
+  <li>앱의 <strong>스토어 목록</strong> 페이지에 개인정보 보호정책 링크를 추가해야 합니다.
+
+  </li>
+
+  <li>앱이 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 프로그램 요구사항</a>을 모두 충족하는지 확인해야 합니다.
+
+  </li>
+</ul>
+
+<p>
+  앱을 게시할 준비가 되면 <a href="https://play.google.com/apps/publish/">개발자 콘솔</a>에서 직접 Designed for Families에 옵트인할 수 있습니다.
+ 옵트인은 Google Play 스토어에서 선택한 카테고리뿐만 아니라 Google Play의 새 가족 친화적인 환경에서 앱을 사용할 수 있도록 만드는 것을 의미합니다.
+
+
+
+</p>
+
+<p>
+  또한 옵트인은 앱이 <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA 추록</a>, <a href="http://play.google.com/about/developer-content-policy.html">Google Play 개발자 프로그램 정책</a> 및 <a href="http://play.google.com/about/developer-distribution-agreement.html">개발자 배포 계약</a>을 준수하는지 확인합니다.
+
+
+ 이러한 정책 문서나 추록에 익숙하지 않은 경우 옵트인하기 전에 읽어보십시오.
+
+</p>
+
+<p>
+  준비가 되면 특정 앱에 대해 Designed for Families에 옵트인하는 다음 방법을 따릅니다.
+</p>
+
+<ol>
+<li>개발자 콘솔 <strong>모든 애플리케이션</strong> 페이지에서 옵트인하려는 앱을 클릭합니다.
+ 가격 책정 및 배포에서 아래로 스크롤하여 <strong>Designed for  Families</strong> 및 옵트인 확인란을 찾습니다.<img src="/images/gp-dff-optin.png" style="border:2px solid #ddd;margin:1em 0;">
+
+  </li>
+
+  <li>옵트인 과정을 시작하고 앱이 자격 요구사항을 충족하는지 확인합니다.
+</li>
+  <li>앱에 광고가 있으면 광고 정책을 충족하는지 확인합니다.
+  <img src="/images/gp-dff-appinfo.png" style="border:2px solid #ddd;margin:1em 0;"></li>
+  <li>대상 연령층을 5세 이하, 6 - 8세 또는 9 - 12세 또는 모든 연령(앱이 아동과 성인을 대상으로 하는 경우) 중에서 선택합니다.
+
+ 앱의 대상 연령층이 두 개 이상인 경우 최대 2개의 인접한 연령층을 선택할 수 있습니다.
+ ESRB 10세 이상 등급의 앱은 9-12세 또는 모든 연령만 대상으로 선택할 수 있습니다.
+
+  </li>
+
+  <li>Google Play에서 새 가족 중심 앱 카테고리를 선택합니다.
+ Google Play의 기존 카테고리에서 앱을 검색할 수도 있습니다.
+</li>
+  <li>링크된 문서를 검토하고 동의한 다음 <strong>옵트인</strong>을 클릭합니다.
+ 마지막으로 가격 책정 및 배포 페이지에서 <strong>업데이트 제출</strong>을 클릭하여 앱을 게시하거나 업데이트합니다.
+
+  </li>
+</ol>
+
+<p>
+  옵트인한 앱은 Designed for Families 프로그램으로 채택되기 전에 철저한 검토 과정을 거칩니다.
+
+</p>
+
+<p class="note">
+  <strong>참고:</strong> Designed for Families 프로그램에 게시된 앱은 Google Play의 모든 사용자도 사용할 수 있습니다.
+ 
+</p>
+
+<p>
+  처음 게시하려는 앱을 옵트인하고 해당 앱이 Designed for Families 프로그램 요구사항을 충족하지 못하는 경우 앱이 프로그램 요구사항을 충족하도록 업데이트하기 전까지<strong>또는</strong><strong></strong> 옵트인 상자의 선택을 취소하고 Google Play의 기본 검토 프로세스를 통과하기 전까지 Google Play에서 앱을 사용할 수 없게 됩니다.
+
+
+
+
+</p>
+
+<p>
+  이미 Google Play에 게시된 앱을 옵트인하고 해당 앱이 Designed for Families 프로그램 요구사항을 충족하지 못하는 경우 모든 사용자가 계속 사용할 수 있지만 앱이 프로그램 요구사항을 충족하도록 업데이트하기 전까지 새 가족 중심 앱에 추가되지 않습니다.
+
+
+
+</p>
+
+<p>
+  Designed for Families에 옵트인된 앱의 업데이트를 게시하는 경우 먼저 앱 업데이트가 Designed for Families 검토를 통과해야 Google Play에서 모든 사용자가 사용할 수 있게 됩니다.
+
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">다음: 질문과 대답(FAQ)</a>
+</div>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/guide.jd b/docs/html-intl/intl/ko/distribute/googleplay/guide.jd
new file mode 100644
index 0000000..e8d25ff
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/guide.jd
@@ -0,0 +1,70 @@
+page.title=Google Play에서 성공 모색
+page.metaDescription=Google Play에서 앱 또는 게임 비즈니스가 성공할 수 있도록 안내하는 가이드입니다.
+meta.tags="distribute", "bestpractices"
+page.tags="google play", "business", "monetize", "engagement"
+page.image=distribute/images/play_dev_guide.png
+
+@jd:body
+
+<p>
+  Google Play에서 앱 또는 게임 비즈니스가 성공할 수 있도록 안내하는 다운로드 가능한 가이드를 제작했습니다.
+ 여기에서 효과적인 전략 수립에 도움이 되는 기능과 팁 및 모범 사례를 찾을 수 있습니다.
+
+</p>
+
+<p>
+  이 가이드는 다음 절로 구성되어 있습니다.
+</p>
+<ul>
+  <li>
+    <strong>Google Play에 게시</strong> &mdash; Google Play 개발자 콘솔을 사용하여 전 세계 10억 명 이상의 Android 사용자에게 앱을 배포합니다.
+
+
+  </li>
+
+  <li>
+    <strong>품질</strong> &mdash; 뛰어난 앱 작성의 기초 및 Google Play 가이드라인 및 정책에 대한 통찰력 관련 정보를 제공합니다.
+
+  </li>
+
+  <li>
+    <strong>검색 가능성 및 접근성</strong> &mdash; 앱 검색 가능성을 극대화하고 최대한 광범위한 사용자에게 접근할 수 있는 방법을 안내합니다.
+
+  </li>
+
+  <li>
+    <strong>사용자 확보 및 유지</strong> &mdash; 앱을 설치한 사람을 실제 사용자로 확보하고 해당 사용자를 효율적으로 유지하는 방법을 안내합니다.
+    
+  </li>
+
+  <li>
+    <strong>수익 창출</strong> &mdash; 지속적으로 증가하는 수익 흐름을 생성하는 수익 창출 전략을 안내합니다.
+
+  </li>
+
+  <li>
+    <strong>Google Analytics를 통한 측정</strong> &mdash; 사용자 이해 및 앱 경험, 전환 및 마케팅 개선을 안내합니다.
+
+  </li>
+
+  <li>
+    <strong>세계화</strong> &mdash; 전 세계에 앱을 출시하는 방법을 안내합니다.
+
+  </li>
+</ul>
+
+<p>
+  가이드는 아래 이미지를 클릭하여 다운로드하거나 <a href="http://goo.gl/DFjbrS">Google Play에서 구할 수 있습니다</a>.
+</p>
+
+<p>
+  몇 개월 내에 더 많은 언어로 가이드를 릴리스할 예정입니다. 당사는 앱을 배포하고 수익을 창출하는 데 도움이 되는 새로운 기능 및 모범 사례에 대한 정보를 게시하므로 이 웹사이트를 정기적으로 확인하십시오.
+
+
+</p>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:play_dev_guide"
+    data-cardSizes="9x6"
+    data-maxResults="1">
+  </div>
+
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/auto.jd
new file mode 100644
index 0000000..fbb04a7
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/auto.jd
@@ -0,0 +1,488 @@
+
+page.title=Auto 앱 품질
+page.metaDescription=Auto 앱은 차량의 입력 컨트롤과 디스플레이를 통합하고 운전자의 주의 산만을 최소화하여 탁월한 경험을 제공합니다.
+page.image=/distribute/images/gp-auto-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>품질 기준</h2>
+  <ol>
+    <li><a href="#core">핵심 앱 품질</a></li>
+    <li><a href="#ux">시각적 디자인 및 상호작용</a></li>
+    <li><a href="#fn">기능</a></li>
+    <li><a href="#faq">질문과 대답(FAQ)</a></li>
+  </ol>
+
+  <h2>필독 항목</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+     핵심 앱 품질</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+      앱 최적화</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">오디오 애플리케이션용 Android Auto UX 가이드라인</a>
+</li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">메시징 애플리케이션용 Android Auto UX 가이드라인</a>
+</li>
+  </ol>
+</div>
+</div>
+
+
+  <img src="{@docRoot}distribute/images/gp-auto-quality.png" style="width:480px;">
+
+
+<p>앱에서 Android Auto 지원을 디자인할 때 무엇보다도 운전자의 주의가 산만해지지 않도록 해야 합니다.
+  Auto 사용자 인터페이스를 사용하여 작동하는 앱은 음성 명령 및 매우 간단한 시각적 디자인 등 모범 사례를 통해 운전자의 주의를 산만하게 하는 요소를 최소화해야 합니다.
+
+</p>
+
+<p>
+  뛰어난 Auto 경험은 예측되고 예측 가능해야 합니다.  Android Auto를 지원하는 앱은 운전자에게 관련된 정보만 적시에 표시하고 일반적인 작업에 대해 간단하고 예측 가능한 패턴을 사용해야 합니다.
+
+
+</p>
+
+<p class="caution">
+  <strong>중요:</strong> 이 페이지에 나열된 기준은 Android Auto 화면에 연결된 장치를 실행할 때 앱 사용자 인터페이스와 동작에만 적용됩니다.
+ 앱이 Google Play에서 Android Auto 앱 자격을 획득하려면 이러한 기준을 충족해야 합니다.
+
+</p>
+
+
+<div class="headerLine">
+  <h2 id="core">
+  핵심 앱 품질
+  </h2>
+
+<p>
+ Auto 앱은 아래에 나열된 Auto 특정 기준뿐만 아니라 <a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질</a> 기준에 상세히 설명된 Android 플랫폼에 대한 모든 관련 핵심 앱 품질 기준을 충족해야 합니다.
+
+ 탐색 및 디자인에 대한 Android 표준을 충족하도록 앱이 이러한 기준을 충족하는지 테스트하십시오.
+
+ 그런 다음 앱이 모든 Auto 특정 기준을 충족하는지 테스트하십시오. Android Auto에 연결된 장치에서 앱을 실행할 때 앱이 이 페이지에 나열된 요구사항을 충족해야 합니다.
+
+
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  시각적 디자인 및 사용자 상호작용
+  </h2>
+
+</div>
+
+<p>
+  이 기준은 앱이 Android Auto에서 일관되고 직관적이며 즐거운 사용자 경험을 보장하는 핵심 디자인 및 상호작용 패턴을 따르도록 보장합니다.
+ 시스템이 탐색 서랍, 카드 배경, 글꼴 및 아이콘 색상 등 다양한 요소를 설정하고 렌더링합니다.
+
+ 고유한 앱 특정 디자인 요소는 다음 기준을 충족해야 합니다.
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    유형
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  <th>
+    설명
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="safety">
+    운전자 주의
+  </td>
+
+  <td id="AU-MV">
+    AU-MV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 Auto 화면에 애니메이션 그래픽, 게임, 동영상, 진행률 표시줄 등과 같은 애니메이션 요소를 표시하지 않습니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VA">
+    AU-VA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 Auto 화면에 어떠한 형태의 시각적 광고 또는 텍스트 광고도 표시하지 않습니다.  오디오 광고만 허용됩니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-IM">
+    AU-IM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱 요소가 Auto 화면에 어떠한 이미지도 표시하지 않습니다. 예외: 앱이 앨범 아트 등 활성 화면의 배경에 나오는 콘텐츠 컨텍스트에 대해 단일 정적 이미지를 표시할 수 있고 콘텐츠 탐색 서랍에 아이콘을 표시할 수 있습니다.
+
+
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-DS">
+    AU-DS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 운전자의 주의를 산만하게 하는 어떠한 기능도 포함하지 않습니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VI">
+    AU-VI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 Android Auto에서 활성화된 동안 휴대폰 화면에 어떠한 형태의 시각적 정보(알림, 알림 메시지, 동영상, 이미지, 광고 등)도 제공하지 않습니다.
+
+    </p>
+  </td>
+</tr>
+
+
+
+<tr>
+  <td rowspan="3" id="layout">
+    레이아웃
+  </td>
+
+  <td id="AU-SC">
+    AU-SC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 자동으로 움직이는 텍스트를 표시하지 않습니다.
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td id="AU-FT">
+    AU-FT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 기본 Roboto 글꼴을 사용하여 두 가지 승인된 크기로 모든 문자열을 표시합니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-ST">
+    AU-ST
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 120자가 넘는 개별 문자열을 표시하지 않습니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="contrast">
+    시각적 대비
+  </td>
+
+  <td id="AU-DM">
+    AU-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 어두운 텍스트와 컨트롤을 밝은 배경에서 렌더링하는 주간 모드를 지원합니다.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NM">
+    AU-NM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 밝은 텍스트와 컨트롤을 어두운 배경에서 렌더링하는 야간 모드를 지원합니다.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-WI">
+    AU-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 시스템이 색상을 적용하여 자동 대비 보정 기능을 제공하는 흰색 아이콘 집합을 제공합니다.
+
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-OC">
+    AU-OC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 시스템이 차 안에서 쉽게 읽을 수 있도록 최적화할 수 있는 색상을 제공합니다.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="interaction">
+    상호작용
+  </td>
+
+  <td id="AU-VC">
+    AU-VC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 음성 명령을 지원해야 합니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-AB">
+    AU-AB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 특정 버튼이 사용자의 동작에 2초 이상 지연 없이 반응합니다.
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  기능
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 정확히 구성되고 예상되는 기능 동작을 제공하도록 보장합니다.
+
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    유형
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  <th>
+    설명
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="general">
+   일반
+  </td>
+
+  <td id="AU-LT">
+    AU-LT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 10 초 이내에 로드됩니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-FP">
+    AU-FP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Auto 앱 기능이 예상대로 작동하거나 앱의 Google Play 스토어 목록에 설명한 대로 작동합니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-RL">
+    AU-RL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 홈 화면에서 다시 시작하는 경우 이전 상태에 최대한 가깝게 앱 상태를 복원합니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SS">
+    AU-SS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱의 모든 작업을 6단계 이내에 완료합니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-GO">
+    AU-GO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     작동하지 않거나 비활성화된 앱 버튼은 회색으로 비활성화되어야 합니다.
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="media">
+    미디어
+  </td>
+
+
+  <td id="AU-PA">
+    AU-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 4개의 기본 작업과 하나의 선택적 작업 오버플로 토글을 갖습니다(또는 작업 오버플로가 사용되지 않는 경우 5개).
+
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SA">
+    AU-SA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 4개의 선택적 보조 작업과 하나의 작업 오버플로 토글을 갖습니다.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="notifications">
+    알림
+  </td>
+
+  <td id="AU-NA">
+    AU-NA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 알림을 통해 광고를 제공하지 않습니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NT">
+    AU-NT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     앱이 운전자의 필요와 관련된 경우에만 알림을 표시합니다.
+   </p>
+   <p>
+    예:<br />
+    좋은 사례: 새 메시지가 도착했음을 사용자에게 알립니다.<br />
+    나쁜 사례: 새 앨범 출시에 대해 사용자에게 알립니다.
+    </p>
+  </td>
+</tr>
+
+</table>
+
+<!--
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+-->
+
+<div class="headerLine">
+  <h2 id="faq">
+  질문과 대답(FAQ)
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>제출한 앱이 Android Auto의 모든 요구사항을 충족하는지 여부를 어떻게 알 수 있습니까?</strong>
+
+</p>
+<p>Auto 앱을 개발할 계획인 경우 앱을 활성화하고 테스트를 시작해 보십시오.
+ 하지만 이 시점에서 Auto 지원 앱을 게시할 수 없습니다. 언제 Auto 지원 앱을 제출할 수 있는지에 대해 최신 정보를 받아보려면 <a href="http://g.co/AndroidAutoDev" class="external-link">Auto Developers Google+ 커뮤니티</a>에 가입하십시오.
+
+
+</p>
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Android Auto 이외의 항목도 대상으로 앱을 만들었습니다. 앱이 Auto 요구사항을 충족하지 않는 경우 신규 또는 업데이트된 앱이 휴대폰 및 태블릿용 Google Play에 계속 나타납니까?</strong>
+
+
+</p>
+<p>
+  아니요. Google이 승인 프로세스를 시작하면 Auto 앱의 운전자 안전을 검토합니다. 승인될 때까지 앱을 배포할 수 없습니다.
+
+ 이는 휴대폰 및 태블릿용과 동일한 APK이기 때문에 Auto 승인 프로세스가 완료될 때까지 해당 장치에 대한 Play 스토어 업데이트를 사용할 수 없습니다.
+
+
+</p>
+
+<p class="caution">
+  <strong>중요:</strong> 이러한 제한 때문에 Auto 지원 프로토타입 생성에 프로덕션 APK를 사용하면 안 됩니다.
+
+</p>
+
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..c914aab
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/core.jd
@@ -0,0 +1,1148 @@
+page.title=핵심 앱 품질
+page.metaDescription=앱 품질은 설치, 사용자 평점 및 리뷰, 사용자 확보 및 유지 측면에서 앱의 장기간 성공에 직접적인 영향을 미칩니다.
+page.image=/distribute/images/core-quality-guidelines.jpg
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>품질 기준</h2>
+  <ol>
+    <li><a href="#ux">디자인 및 상호작용</a></li>
+        <li><a href="#fn">기능</a></li>
+        <li><a href="#ps">성능 및 안정성</a></li>
+        <li><a href="#listing">Google Play</a></li>
+
+  </ol>
+  
+  <h2>테스트</h2>
+  <ol>
+    <li><a href="#test-environment">테스트 환경 설정</a></li>
+        <li><a href="#tests">테스트 절차</a></li>
+        </ol>
+
+  <h2>필독 항목</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">태블릿 앱 품질</a></li>
+        <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">앱 최적화</a></li>
+  </ol>
+  
+
+</div>
+</div>
+
+<div class="top-right-float">
+  <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;">
+</div>
+
+<p>
+  Android 사용자는 고품질 앱을 기대합니다. 앱 품질은 설치, 사용자 평점 및 리뷰, 사용자 확보 및 유지 측면에서 앱의 장기간 성공에 직접적인 영향을 미칩니다.
+
+
+</p>
+
+<p>
+  이 문서는 핵심 앱 품질 기준 및 연관된 테스트의 간결한 집합을 통해 기본적인 앱 품질을 평가하는 데 도움이 됩니다.
+ 모든 Android 앱은 이 기준을 충족해야 합니다.
+
+</p>
+
+<p>
+  앱을 게시하기 전에 이 기준에 대한 테스트를 거쳐 다양한 장치에서 잘 작동하는지, Android 탐색 및 디자인 표준을 충족하는지 확인하고, Google Play 스토어에서 홍보 기회를 잡으십시오.
+
+
+ 테스트는 여기에서 설명한 기준을 충족할 것입니다. 이 문서의 목적은 모든 앱이 표시해야 하는 필수 품질 특성을 지정하는 것이므로 테스트 계획에 필수 품질 특성을 포함할 수 있습니다.
+
+
+</p>
+
+<p>
+  태블릿 앱 및/또는 교육용 Google Play 앱을 만드는 경우 고려해야 하는 추가 품질 기준이 있는데, 해당 기준은 <a href="{@docRoot}distribute/essentials/quality/tablets.html">태블릿 앱 품질</a> 가이드라인 및 <a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">교육 가이드라인</a>에 정의되어 있습니다.
+
+
+
+  
+</p>
+
+<div class="headerLine">
+  <h2 id="ux">
+  시각적 디자인 및 사용자 상호작용
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 일관되고 직관적인 사용자 경험을 위해 필요한 경우 표준 Android 시각적 디자인 및 상호작용 패턴을 제공하도록 보장합니다.
+
+
+</p>
+
+<table>
+  <tr>
+    <th style="width:2px;">
+      영역
+    </th>
+    <th style="width:54px;">
+      ID
+    </th>
+    
+
+    <th>
+      설명
+    </th>
+    <th style="width:54px;">
+      테스트
+    </th>
+  </tr>
+  <tr id="UX-B1">
+  <td>표준 디자인</td>
+  <td>
+    UX-B1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 <a href="{@docRoot}design/index.html">Android 디자인</a> 가이드라인을 따르고 공통 <a href="{@docRoot}design/patterns/index.html">UI 패턴 및 아이콘</a>을 사용합니다.
+
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>앱이 시스템 아이콘의 예상되는 기능(예: 뒤로 버튼)을 재정의하지 않습니다.
+
+    </li>
+
+    <li>앱이 표준 UI 동작을 트리거하는 경우 시스템 아이콘을 완전히 다른 아이콘으로 대체하지 않습니다.
+
+    </li>
+
+    <li>앱이 표준 시스템 아이콘의 사용자 지정 버전을 제공하는 경우 해당 아이콘은 시스템 아이콘과 매우 유사하고 표준 시스템 동작을 트리거합니다.
+
+
+    </li>
+
+    <li>앱이 아이콘이나 동작이 사용자를 잘못 안내하거나 혼란스럽게 하지 않도록 Android UI 패턴을 재정의하거나 오용하지 않습니다.
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td rowspan="3">
+    탐색
+  </td>
+  <td id="UX-N1">
+    UX-N1
+  </td>
+  <td>
+    <p>
+    앱이 표준 시스템 <a href="{@docRoot}design/patterns/navigation.html">뒤로 버튼 탐색</a>을 지원하고 화면에 표시되는 사용자 지정 "뒤로 버튼" 프롬프트를 사용하지 않습니다.
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td id="UX-N2">
+    UX-N2
+  </td>
+  <td>
+    <p>
+    뒤로 버튼을 사용하여 모든 대화 상자를 취소할 수 있습니다.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr id="UX-N3">
+  <td>
+    UX-N3
+  </td>
+  <td>
+    어디서든지 홈 버튼을 누르면 장치의 홈 화면으로 이동합니다.
+    
+  </td>
+  <td>
+    <a href="#core">CR-1</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S1">
+  <td rowspan="2">
+    알림
+  </td>
+  <td>
+    UX-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    알림은 Android 디자인 <a href="{@docRoot}design/patterns/notifications.html">가이드라인</a>을 따릅니다. 특히
+
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>다중 알림은 단일 알림 개체로 누적됩니다(가능한 경우).
+
+    </li>
+
+    <li>알림은 진행 중인 이벤트(예: 음악 재생 또는 통화)와 관련된 경우에만 지속됩니다.
+
+    </li>
+
+    <li>알림은 사용자가 명시적으로 동의한 경우를 제외하고 앱의 핵심 기능과 관련되지 않은 광고를 포함하지 않습니다.
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S2">
+  <td>
+    UX-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱은 다음과 같은 경우에만 알림을 사용합니다.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>개인적으로 사용자와 관련된 컨텍스트 변경(예: 수신 메시지)을 나타냅니다.
+
+    </li>
+
+    <li>진행 중인 이벤트(예: 음악 재생 또는 통화)와 관련된 정보/컨트롤을 표시합니다.
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="fn">
+  기능
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 적절한 권한 수준과 함께 예상되는 기능 동작을 제공하도록 보장합니다.
+
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    영역
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    설명
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  </tr>
+
+  <tr id="FN-P1">
+  <td rowspan="2">
+    권한
+  </td>
+  <td>
+    FN-P1
+  </td>
+  <td>
+    앱이 핵심 기능을 지원하는 데 필요한 <em>절대 최소</em> 권한만 요청합니다.
+
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="FN-P2">
+  <td>
+    FN-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 핵심 기능과 관련되지 않은 경우 사용자가 비용을 지불할 수 있는 서비스(예: 전화 걸기 또는 SMS) 또는 민감한 데이터(예: 연락처 또는 시스템 로그)에 대한 액세스 권한을 요청하지 않습니다.
+
+
+    
+    </p>
+  </td>
+  </tr>
+
+  <tr id="FN-L1">
+  <td>
+    설치 위치
+  </td>
+  <td>
+    FN-L1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 SD 카드에 설치된 경우 정상적으로 작동합니다(앱에서 지원하는 경우).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    SD 카드에 설치 지원은 대부분의 대형 앱(10MB 이상)에서 권장됩니다.
+     SD 카드에 설치를 지원해야 하는 앱 유형에 대한 자세한 내용은 <a href="{@docRoot}guide/topics/data/install-location.html">앱  설치 위치</a> 개발자 가이드를 참조하십시오.
+
+
+    </p>
+  </td>
+  <td>
+    <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A1">
+  <td rowspan="4">
+    오디오
+  </td>
+  <td>
+    FN-A1
+  </td>
+  <td>
+    핵심 기능이 아닌 경우 화면이 꺼지면 오디오가 재생되지 않습니다(예: 앱이 뮤직 플레이어인 경우).
+
+  </td>
+  <td>
+    <a href="#core">CR-7</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A2">
+  <td>
+    FN-A2
+  </td>
+  <td>
+    핵심 기능이 아닌 경우 오디오가 <a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">화면 잠금 상태에서 재생</a>되지 않습니다.
+
+  </td>
+  <td>
+    <a href="#core">CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A3">
+  <td>
+    FN-A3
+  </td>
+  <td>
+    핵심 기능이 아닌 경우 오디오가 홈 화면이나 다른 앱에서 재생되지 않습니다.
+
+  </td>
+  <td>
+    <a href="#core">CR-1,<br>
+    CR-2</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A4">
+  <td>
+    FN-A4
+  </td>
+  <td>
+    앱이 포그라운드로 돌아오면 오디오가 다시 시작되거나 사용자에게 재생이 일시 중지된 상태임을 알립니다.
+
+  </td>
+  <td>
+    <a href="#core">CR-1, CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U1">
+  <td rowspan="3">
+    UI 및 그래픽
+  </td>
+  <td>
+    FN-U1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 가로 방향과 세로 방향을 모두 지원합니다(가능한 경우).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    방향은 동일한 기능과 동작을 대부분 표시하고 기능 패리티를 보존합니다.
+ 콘텐츠 또는 보기의 사소한 변경은 허용됩니다.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U2">
+  <td>
+    FN-U2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 양쪽 방향에서 전체 화면을 사용하고, 방향 변경을 설명하기 위해 레터박스는 허용하지 않습니다.
+
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    화면상의 기하학적 형태의 미세한 변화를 보정하기 위한 사소한 레터박스는 허용됩니다.
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U3">
+  <td>
+    FN-U3
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 렌더링 문제 없이 표시 방향 전환을 신속하고 정확하게 처리합니다.
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S1">
+  <td rowspan="2">
+    사용자/앱 상태
+  </td>
+  <td>
+    FN-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱의 핵심 기능과 관련되지 않은 경우 앱이 백그라운드 상태에서 서비스를 실행해서는 안 됩니다.
+
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    예를 들어, 앱이 알림을 위해 네트워크 연결을 유지하거나 Bluetooth 연결을 유지하거나 GPS를 켜진 상태로 유지하는 서비스를 실행해서는 안 됩니다.
+
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-6</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S2">
+  <td>
+    FN-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 사용자 또는 앱 상태를 정확히 보존하고 복원합니다.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    앱이 포그라운드를 떠날 때 사용자 또는 앱 상태를 보존하고 뒤로 탐색 및 기타 상태 변경으로 인해 실수로 데이터를 손실하는 것을 방지합니다.
+
+ 앱이 포그라운드로 돌아올 때 앱 또는 게임의 편집 가능한 필드, 게임 진행률, 메뉴, 동영상, 기타 섹션의 변경 내용 등 보류 중인 중요한 상태 저장 트랜잭션과 보존된 상태를 복원해야 합니다.
+
+
+
+    </p>
+
+    <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+    <li>앱이 Recents 앱 전환기에서 다시 시작한 경우 마지막으로 사용된 정확한 상태로 돌아갑니다.
+
+    </li>
+
+    <li>장치가 절전(잠금) 상태에서 해제된 후에 앱이 다시 시작하는 경우 앱이 마지막으로 사용된 정확한 상태로 돌아갑니다.
+
+
+    </li>
+
+    <li>앱이 홈 또는 모든 앱에서 다시 시작하는 경우 이전 상태에 최대한 가깝게 앱 상태를 복원합니다.
+
+    </li>
+
+    <li>뒤로 키를 누를 때 앱이 뒤로 탐색에서 손실할 수도 있는 앱 또는 사용자 상태를 저장하는 옵션을 제공합니다.
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-1, CR-3, CR-5</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ps">
+  성능 및 안정성
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 사용자가 기대하는 성능, 안정성 및 응답성을 제공하도록 보장합니다.
+
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    영역
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    설명
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  </tr>
+
+  <tr id="PS-S1">
+  <td>
+    안정성
+  </td>
+  <td>
+    PS-S1
+  </td>
+  <td>
+    앱이 대상 장치에서 작동 중단하거나 강제로 닫히거나 멈추거나 비정상적으로 작동하지 않습니다.
+
+  </td>
+  <td>
+    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P1">
+  <td rowspan="2">
+    성능
+  </td>
+  <td>
+    PS-P1
+  </td>
+  <td>
+    앱이 빨리 로드되거나, 로드하는 데 3초 이상 걸리는 경우 화면에 피드백을 표시합니다(진행률 표시기 또는 유사 기능).
+
+
+  </td>
+  <td>
+    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P2">
+  <td>
+    PS-P2
+  </td>
+  <td>
+    StrictMode가 활성화된 상태에서(아래 <a href="#strictmode">StrictMode 테스트</a> 참조) 앱의 게임 실행, 애니메이션 및 UI 전환, 기타 부분 실행 등 앱을 실행할 때 빨간색 깜박임(StrictMode의 성능 경고)이 표시되지 않습니다.
+
+
+
+  </td>
+  <td>
+    <a href="#PM-1">PM-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-M1">
+  <td>
+    미디어
+  </td>
+  <td>
+    PS-M1
+  </td>
+  <td>
+    정상적인 앱 사용 및 로드 시 음악 및 동영상 재생이 매끄럽고 잔금, 버벅거림 또는 기타 아티팩트가 없습니다.
+ 
+  </td>
+  <td>
+    <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V1">
+  <td rowspan="2">
+    시각적 품질
+  </td>
+  <td>
+    PS-V1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 현저한 왜곡, 흐림 또는 모자이크 현상 없이 그래픽, 텍스트 및 기타 UI 요소를 표시합니다.
+
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>앱이 <a href="{@docRoot}distribute/essentials/quality/tablet.html">태블릿과 같은 대형 화면 장치</a>를 포함한 다양한 장치의 모든 대상 화면 크기 및 폼 팩터에 고품질 그래픽을 제공합니다.
+
+
+    </li>
+
+    <li>메뉴, 버튼 및 기타 UI 요소의 가장자리에 앨리어싱이 표시되지 않습니다.
+
+    </li>
+    </ol>
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V2">
+  <td>
+    PS-V2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱이 허용되는 방식으로 텍스트 및 텍스트 블록을 표시합니다.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>태블릿과 같은 대형 화면 장치를 포함한 다양한 장치의 모든 지원되는 폼 팩터에서 컴퍼지션이 허용됩니다.
+
+    </li>
+
+    <li>잘린 문자나 단어가 표시되지 않습니다.
+    </li>
+
+    <li>버튼 또는 아이콘 내에서 부적합한 자동 줄바꿈이 표시되지 않습니다.
+    </li>
+
+    <li>텍스트와 주변 요소 사이에 충분한 간격이 있습니다.
+    </li>
+    </ol>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/performance" data-sortorder="-timestamp"
+data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="listing">
+  Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱을 Google Play에 게시할 수 있도록 보장합니다.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    영역
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    설명
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  </tr>
+
+  <tr id="GP-P1">
+  <td rowspan="2">
+    정책
+  </td>
+  <td>
+    GP-P1
+  </td>
+  <td>
+    앱이 <a href="http://play.google.com/about/developer-content-policy.html">Google Play 개발자 콘텐츠 정책</a>의 약관을 철저히 준수하고, 부적절한 콘텐츠를 제공하지 않고 다른 사람의 지적 재산권이나 브랜드 등을 사용하지 않습니다.
+
+
+  </td>
+  <td>
+    <a href="#gp">GP-all</a>
+  </td>
+  </tr>
+
+  <tr id="GP-P2">
+  <td>
+    GP-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱 완성도가 <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=188189">콘텐츠 등급 가이드라인</a>에 따라 적절히 설정되었습니다.
+
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    특히, 장치 위치 사용 권한을 요청하는 앱은 "전체 이용가" 완성도를 부여받을 수 없습니다.
+
+    </p>
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D1">
+  <td rowspan="3">
+    앱 세부정보 페이지
+  </td>
+  <td>
+    GP-D1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱 대표 그래픽은 이 <a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">블로그 게시물</a>에 나오는 가이드라인을 따릅니다.
+ 다음을 확인하십시오.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>앱 목록에 고품질 대표 그래픽을 포함합니다.
+    </li>
+
+    <li>앱이 대상으로 하는 가장 작은 화면에서 배율을 축소하여 표시할 때 대표 그래픽에 식별할 수 없는 장치 이미지, 스크린샷 또는 작은 텍스트를 포함하지 않습니다.
+
+
+    </li>
+
+    <li>대표 그래픽은 광고와 비슷하지 않습니다.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#gp">GP-1, GP-2</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D2">
+  <td>
+    GP-D2
+  </td>
+  <td>
+    앱 스크린샷 및 동영상이 비 Android 장치를 표시하거나 참조하지 않습니다.
+  </td>
+  <td rowspan="2">
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D3">
+  <td>
+    GP-D3
+  </td>
+  <td>
+    앱 스크린샷 또는 동영상이 앱의 콘텐츠와 경험을 잘못된 방식으로 나타내지 않습니다.
+
+  </td>
+  </tr>
+
+  <tr id="GP-X1">
+  <td>
+    사용자 지원
+  </td>
+  <td>
+    GP-X1
+  </td>
+  <td>
+    Google Play 페이지의 리뷰 탭에서 일반 사용자가 보고하는 버그는 재현될 수 있고 많은 다른 장치에서 발생하는 경우 처리됩니다.
+
+    몇몇 장치에서만 버그가 발생하는 경우라도 해당 장치가 매우 인기 있거나 신기종인 경우 처리해야 합니다.
+
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/play" data-sortorder="-timestamp"
+data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-environment">
+  테스트 환경 설정
+  </h2>
+
+
+</div>
+
+<p>
+  앱의 품질을 평가하려면 테스트용으로 적합한 하드웨어 또는 에뮬레이터 환경을 설정해야 합니다.
+
+</p>
+
+<p>
+  이상적인 테스트 환경은 현재 소비자에게 제공되는 핵심 폼 팩터와 하드웨어/소프트웨어 조합을 나타내는 소수의 실제 하드웨어 장치를 포함합니다.
+
+ 시장에 출시된 <em>모든</em> 장치에서 테스트할 필요는 없습니다. 오히려 폼 팩터당 한두 대의 장치를 사용하더라도 소수의 대표 장치에 초점을 맞춰야 합니다.
+
+
+
+</p>
+
+<p>
+  테스트용 실제 하드웨어 장치를 구할 수 없는 경우 가장 일반적인 폼 팩터와 하드웨어/소프트웨어 조합을 나타내는 <a href="{@docRoot}tools/devices/index.html">에뮬레이트된 장치(AVD)를 설치</a>해야 합니다.
+
+
+
+</p>
+
+<p>
+  기본 테스트 이상을 수행하려면 장치, 폼 팩터 또는 새 하드웨어/소프트웨어 조합을 테스트 환경에 추가하면 됩니다.
+ 테스트 수량이나 복잡성 및 품질 기준을 높일 수도 있습니다.
+
+</p>
+
+<div class="headerLine">
+  <h2 id="tests">
+  테스트 절차
+  </h2>
+
+
+</div>
+
+<p>
+  이 테스트 절차를 통해 앱에서 다양한 품질 문제 유형을 찾아낼 수 있습니다. 테스트를 조합하거나 테스트 그룹을 본인의 테스트 계획에 통합할 수 있습니다.
+
+ 특정 기준과 특정 테스트의 연관성은 위의 절을 참조하십시오.
+
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    유형
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  <th>
+    설명
+  </th>
+  </tr>
+
+  <tr>
+  <td rowspan="12" id="core">
+    핵심 테스트 도구 모음
+  </td>
+  <td>
+    CR-0
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    앱의 모든 부분(모든 화면, 대화 상자, 설정 및 모든 사용자 흐름)을 탐색합니다.
+
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>애플리케이션이 편집, 콘텐츠 만들기, 게임 실행 또는 미디어 재생을 허용하면 해당 흐름으로 진입하여 콘텐츠를 만들거나 수정합니다.
+
+
+    </li>
+
+    <li>앱을 실행하는 동안 네트워크 연결, 배터리 기능, GPS 또는 위치 사용 가능성, 시스템 로드 등의 일시적인 변경 내용을 소개합니다.
+
+
+    </li>
+    </ol>
+  </td>
+  </tr>
+
+  <tr id="tg2">
+  <td id="core2">
+    CR-1
+  </td>
+  <td>
+    각 앱 화면에서 장치의 홈 키를 누른 다음 모든 앱 화면에서 앱을 다시 시작합니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-2">
+  <td>
+    CR-2
+  </td>
+  <td>
+    각 앱 화면에서 실행 중인 다른 앱으로 전환한 다음 Recents 앱 전환기를 사용하여 테스트 중인 앱으로 돌아갑니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-3">
+  <td>
+    CR-3
+  </td>
+  <td>
+    각 앱 화면(및 대화 상자)에서 뒤로 버튼을 누릅니다.
+  </td>
+  </tr>
+
+  <tr id="CR-5">
+  <td>
+    CR-5
+  </td>
+  <td>
+    각 앱 화면에서 가로 방향과 세로 방향이 바뀌도록 장치를 세 번 이상 회전합니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-6">
+  <td>
+    CR-6
+  </td>
+  <td>
+    다른 앱으로 전환하여 테스트 앱을 백그라운드로 보냅니다. 설정으로 이동하여 테스트 앱에 백그라운드로 실행 중인 서비스가 있는지 확인합니다.
+
+ Android 4.0 이상에서는 앱 화면으로 이동하여 "실행 중" 탭에서 앱을 찾습니다.
+ 이전 버전에서는 "애플리케이션 관리"를 사용하여 실행 중인 서비스가 있는지 확인합니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-7">
+  <td>
+    CR-7
+  </td>
+  <td>
+    전원 버튼을 눌러 장치를 절전 상태로 전환한 다음 전원 버튼을 다시 눌러 화면을 활성화합니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-8">
+  <td>
+    CR-8
+  </td>
+  <td>
+    전원 버튼을 누르면 장치를 잠금 설정합니다. 전원 버튼을 눌러 장치를 절전 상태로 전환한 다음 전원 버튼을 다시 눌러 화면을 활성화하고 장치의 잠금을 해제합니다.
+
+
+  </td>
+  </tr>
+
+  <tr id="CR-9">
+  <!-- Hardware features -->
+
+  <td>
+    CR-9
+  </td>
+  <td>
+    장치에 슬라이드아웃 키보드가 있는 경우 키보드를 한 번 이상 슬라이드인 또는 슬라이드아웃합니다.
+ 장치에 키보드 도크가 있는 경우 장치를 키보드 도크에 장착합니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-10">
+  <td>
+    CR-10
+  </td>
+  <td>
+    장치에 외부 디스플레이 포트가 있는 경우 외부 디스플레이를 연결합니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-11">
+  <td>
+    CR-11
+  </td>
+  <td>
+    알림 서랍에서 앱이 표시할 수 있는 모든 유형의 알림을 트리거하고 관찰합니다.
+ 적용 가능한 경우 알림을 확장하고(Android 4.1 이상) 제공된 모든 작업을 누릅니다.
+
+  </td>
+  </tr>
+
+  <tr id="CR-12">
+  <td>
+    CR-12
+  </td>
+  <td>
+    설정 &gt; 앱 정보로 이동하여 앱이 요청한 권한을 검사합니다.
+
+  </td>
+  </tr>
+
+  <tr id="tg3">
+  <td>
+    SD 카드에 설치
+  </td>
+  <td>
+    SD-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    <a href="{@docRoot}guide/topics/data/install-location.html">장치 SD 카드</a>에 앱이 설치된 상태에서 <em>핵심 테스트 도구 모음</em>을 반복합니다(앱에서 지원하는 경우).
+
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    앱을 SD 카드로 이동하려면 설정 &gt; 앱 정보 &gt; SD 카드로 이동을 사용하면 됩니다.
+
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg32">
+  <td>
+    하드웨어 가속
+  </td>
+  <td>
+    HA-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    하드웨어 가속이 활성화된 상태에서 <em>핵심 테스트 도구 모음</em>을 반복합니다.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    하드웨어 가속을 강제로 활성화하려면(장치에서 지원하는 경우) <code>hardware-accelerated="true"</code>를 앱 매니페스트의 <code>&lt;application&gt;</code>에 추가하고 다시 컴파일합니다.
+
+
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg33">
+  <td>
+    성능 모니터링
+  </td>
+  <td>
+    PM-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    <a href="#strictmode">아래 설명처럼</a> StrictMode 프로파일링이 활성화된 상태에서 <em>핵심 테스트 도구 모음</em>을 반복합니다.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    가비지 수집 및 사용자 경험에 미치는 영향에 세심한 주의를 기울이십시오.
+
+    </p>
+  </td>
+  </tr>
+
+  <tr id="gp">
+  <td rowspan="3">
+    Google Play
+  </td>
+  <td>
+    GP-1
+  </td>
+  <td>
+    <a href="https://play.google.com/apps/publish/">개발자 콘솔</a>에 로그인하여 개발자 프로필, 앱 설명, 스크린샷, 대표 그래픽, 완성도 설정 및 사용자 피드백을 검토합니다.
+
+
+  </td>
+  </tr>
+
+  <tr id="GP-2">
+  <td>
+    GP-2
+  </td>
+  <td>
+    대표 그래픽과 스크린샷을 다운로드하고 대상으로 하는 장치 및 폼 팩터의 디스플레이 크기에 맞게 배율을 축소합니다.
+
+
+  </td>
+  </tr>
+
+  <tr id="GP-3">
+  <td>
+    GP-3
+  </td>
+  <td>
+    앱 또는 확장 파일 다운로드에 패키지로 포함된 모든 그래픽 자산, 미디어, 텍스트, 코드 라이브러리 및 기타 콘텐츠를 검토합니다.
+
+  </td>
+  </tr>
+
+  <tr id="GP-4">
+  <td>
+    결제
+  </td>
+  <td>
+    GP-4
+  </td>
+  <td>
+    앱의 모든 화면을 탐색하고 모든 인앱 구매 흐름으로 진입합니다.
+  </td>
+  </tr>
+</table>
+
+<h3 id="strictmode">
+  StrictMode로 테스트
+</h3>
+
+<p>
+  성능을 테스트하려면 앱에서 {@link android.os.StrictMode}를 활성화하고 이를 사용하여 성능, 네트워크 액세스, 파일 읽기/쓰기 등에 영향을 줄 수 있는 기본 스레드 및 기타 스레드에서 작업을 캐치하는 것이 좋습니다.
+
+
+
+</p>
+
+<p>
+  {@link
+  android.os.StrictMode.ThreadPolicy.Builder}를 사용하여 스레드별 모니터링 정책을 수립하고 {@link
+  android.os.StrictMode.ThreadPolicy.Builder#detectAll()}을 사용하여 <code>ThreadPolicy</code>에서 지원되는 모든 모니터링을 활성화할 수 있습니다.
+
+</p>
+
+<p>
+  {@link
+  android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen()
+  penaltyFlashScreen()}을 사용하여 <code>ThreadPolicy</code> 정책 위반의 <strong>시각적 알림</strong>을 활성화하십시오.
+
+</p>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/tablets.jd
new file mode 100644
index 0000000..6cf38c3
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/tablets.jd
@@ -0,0 +1,846 @@
+page.title=태블릿 앱 품질
+page.metaDescription=태블릿은 Android 설치 기반에서 빠르게 성장하는 분야로, 앱을 위한 새로운 기회를 제공합니다.
+page.image=/distribute/images/tablet-guidelines-color.jpg
+Xnonavpage=true
+
+@jd:body
+<div id="qv-wrapper"><div id="qv">
+<h2>검사 목록</h2>
+<ol>
+<li><a href="#core-app-quality">1. 기본 태블릿 앱 품질 테스트</a></li>
+<li><a href="#optimize-layouts">2. 레이아웃 최적화</a></li>
+<li><a href="#use-extra-space">3. 추가 화면 영역 사용</a></li>
+<li><a href="#use-tablet-icons">4. 태블릿용으로 디자인된 자산 사용</a></li>
+<li><a href="#adjust-font-sizes">5. 글꼴 및 터치 대상 조정</a></li>
+<li><a href="#adjust-widgets">6. 홈 화면 위젯 조정</a></li>
+<li><a href="#offer-full-feature-set">7. 완벽한 기능 집합 제공</a></li>
+<li><a href="#android-versions">8. 올바른 대상 Android 버전 지정</a></li>
+<li><a href="#hardware-requirements">9. 올바른 종속성 선언</a></li>
+<li><a href="#support-screens">10. 태블릿 화면 지원 선언</a></li>
+<li><a href="#google-play">11. 태블릿 UI 소개</a></li>
+<li><a href="#google-play-best-practices">12. Google Play에서 게시 모범 사례 준수</a></li>
+
+</ol>
+<h2>테스트</h2>
+<ol>
+<li><a href="#test-environment">테스트 환경 설정</a></li>
+</ol>
+</div></div>
+
+<div class="todp-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/tablet-guidelines-color.jpg" style="width:480px;">
+</div>
+
+<p>
+  태블릿은 Android 설치 기반에서 빠르게 성장하는 분야로, <a href="{@docRoot}distribute/stories/tablets.html">사용자 확보 및 수익 창출</a>을 위한 새로운 기회를 제공합니다.
+
+ 이 문서의 가이드라인은 매력적인 기능과 직관적이고 잘 디자인된 UI를 통해 태블릿 사용자의 기대치를 충족하는 데 도움이 됩니다.
+
+
+</p>
+
+<p>
+  가이드라인에 번호가 매겨져 있지만 원하는 순서로 진행할 수 있습니다. 앱에 해당하는 범위 내에서 각 가이드라인의 권장사항을 구현하면 되지만 고객에게 최고의 제품을 제공하려면 권장사항을 최대한 따르는 것이 좋습니다.
+
+
+
+
+</p>
+
+<p>
+  이 문서 전체에 걸쳐 각 권장사항을 구현하는 데 도움이 되는 자료의 링크가 제공됩니다.
+
+</p>
+
+<div class="headerLine"><h2 id="core-app-quality">1. 기본 태블릿 앱 품질 테스트</h2></div>
+
+<p>뛰어난 태블릿 앱 경험을 제공하는 첫 번째 단계는 앱이 대상으로 삼은 모든 장치 및 폼 팩터에 대한 <em>핵심 앱 품질 기준</em>을 충족하는지 확인하는 것입니다.
+
+ 자세한 내용은 <a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질 가이드라인</a>을 참조하십시오. 
+</p>
+
+<p>
+게시하기 전에 앱이 다음과 같은 기본 기술 검사 및 출시 기준을 통과하는지 확인하십시오.
+</p>
+
+<ul>
+  <li><a href="#android-versions">적합한 대상 Android 버전 지정</a></li>
+  <li><a href="#hardware-requirements">올바른 하드웨어 종속성 지정</a></li>
+  <li><a href="#support-screens">적합한 화면 지원 선언</a></li>
+  <li><a href="#use-extra-space">사용 가능한 모든 화면 공간 사용</a></li>
+  <li><a href="#google-play">Google Play에 스크린샷 업로드</a></li>
+</ul>
+
+<p>이미 Google Play 개발자 콘솔에 앱을 업로드한 경우 <a href="#google-play-optimization-tips">최적화 팁 페이지</a>를 방문하여 이러한 검사가 어떻게 진행되고 있는지 확인할 수 있습니다.
+
+
+</p>
+
+
+<div class="headerLine">
+<h2 id="optimize-layouts">2. 대형 화면의 레이아웃 최적화</h2></div>
+
+<p>
+  Android를 통해 다양한 장치 화면 크기와 폼 팩터에서 제대로 실행되는 앱을 쉽게 개발할 수 있습니다.
+ 이 광범위한 호환성을 제대로 활용하면 모든 대상 장치에 널리 배포할 수 있는 단일 앱을 디자인하는 데 도움이 됩니다.
+
+ 하지만 사용자에게 (특히 태블릿의) 각 화면 구성에 대한 최고의 경험을 제공하려면 각 대상 화면 구성에 대한 레이아웃과 기타 UI 구성요소를 최적화해야 합니다.
+
+
+ 태블릿에서 UI를 최적화하여 새 기능 제공, 새 콘텐츠 제공 또는 사용자에게 매력적인 기타 특징 제공을 위해 사용 가능한 추가 화면을 충분히 활용할 수 있습니다.
+
+
+
+</p>
+
+<p>
+  핸드셋용으로 개발한 앱을 태블릿에 배포하려는 경우 레이아웃, 글꼴 및 간격의 사소한 조정부터 시작할 수 있습니다.
+
+ 어떤 경우(7인치 태블릿 또는 대형 캔버스를 사용하는 게임 등)에는 이러한 것만 조정해도 앱이 매력적으로 보일 수 있습니다.
+
+ 어떤 경우(대형 태블릿 등)에는 "늘어진 UI"를 효율적인 다중창 UI, 더 쉬운 탐색 및 추가 콘텐츠로 대체하기 위해 UI의 일부를 다시 디자인할 수 있습니다.
+
+
+</p>
+
+
+<div style="width:500px;margin:1.5em;margin-top:-16px;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">"늘어진" UI 제거</span>: 태블릿에서 단일창 레이아웃은 어색한 공백과 지나치게 긴 줄로 나타납니다.
+ 여백을 사용하여 UI 요소의 너비를 줄이고 다중창 레이아웃 사용을 고려하십시오.
+</p>
+</div>
+
+<p>다음은 몇 가지 제안입니다.</p>
+
+
+<ul>
+  <li>필요한 경우 <code>large</code> 및 <code>xlarge</code> 화면에 대해 사용자 지정 레이아웃을 제공합니다.
+ 화면의 <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">가장 짧은 치수</a> 또는 <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">사용 가능한 최소 너비 및 높이</a>를 기준으로 로드되는 레이아웃을 제공할 수도 있습니다.
+
+
+
+  </li>
+
+  <li>최소한 대형 화면에 대해 글꼴 크기, 여백, 간격 등 치수를 사용자 지정하여 공백과 콘텐츠의 가독성을 개선합니다.
+
+  </li>
+
+  <li>사용자가 태블릿을 가로 방향 등 옆쪽으로 잡고 있을 때 쉽게 액세스할 수 있도록 UI 컨트롤의 배치를 조정합니다.
+
+
+  </li>
+
+  <li>UI 요소의 여백은 일반적으로 핸드셋보다 태블릿에서 더 커야 합니다.
+ <a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm">48dp 리듬</a>(및 16dp 그리드)을 권장합니다.
+
+  </li>
+
+  <li>텍스트 콘텐츠가 화면 가장자리에 정렬되지 않도록 텍스트 콘텐츠의 여백을 알맞게 조정합니다.
+ 화면 가장자리 근처의 콘텐츠 주위에 최소 <code>16dp</code> 여백을 사용합니다.
+
+  </li>
+</ul>
+
+<p>특히 레이아웃이 화면에서 "늘어져" 나타나지 않는지 확인하십시오.
+</p>
+
+<ul>
+<li>텍스트 줄이 지나치게 길면 안 됩니다. 줄당 최대 100자로 제한하고 50-75자 범위에서 최상의 결과를 나타내도록 최적화합니다.
+</li>
+<li>목록 보기와 메뉴는 전체 화면 너비를 사용해서는 안 됩니다.</li>
+<li>여백을 사용하여 화면 내 요소의 너비를 관리하거나 태블릿의 경우 다중창 UI로 전환합니다(다음 절 참조).
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/optimize"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="use-extra-space">3. 추가 화면 영역 사용</h2></div>
+
+<div style="width:340px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">다중창 레이아웃은 태블릿 화면에서 시각적 균형감을 개선하고 효용성과 가독성을 높여줍니다.</span>
+</p>
+</div>
+
+<p>태블릿 화면은 특히 가로 방향일 때 앱에 더욱 뛰어난 현실감을 제공합니다.
+ 특히 10인치 태블릿은 상당히 확장된 영역을 제공하지만 7인치 태블릿도 콘텐츠를 표시하고 사용자가 활동할 수 있는 더 많은 공간을 제공합니다.
+
+ </p>
+
+<p>태블릿에서 실행되는 앱의 UI를 고려할 때 태블릿에서 사용할 수 있는 추가 화면 영역을 충분히 활용하는지 확인하십시오.
+ 다음은 몇 가지 제안입니다.
+</p>
+
+<ul>
+<li>추가 콘텐츠를 포함하거나 기존 콘텐츠의 대체 항목을 사용할 기회를 찾습니다.
+</li>
+<li>태블릿 화면에서 <a href="{@docRoot}design/patterns/multi-pane-layouts.html">다중창 레이아웃</a>을 사용하여 단일 보기를 복합 보기로 결합합니다.
+ 그러면 추가 화면 영역을 더욱 효율적으로 사용할 수 있고 사용자가 앱을 탐색하기가 더욱 쉬워집니다.
+
+ </li>
+<li>화면 방향이 변경될 때 복합 보기의 패널을 어떻게 재구성할지 계획을 세웁니다.
+</li>
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+<div style="">
+<img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
+<img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">복합 보기는 핸드셋 UI의 여러 단일 보기<em>(위)</em>를 더욱 풍부하고 효율적인 태블릿용 UI<em>(아래)</em>로 결합합니다.</span>
+
+ </p>
+</div>
+</div>
+
+<li>단일 화면을 {@link android.app.Activity}
+서브클래스로 구현할 때 개별 콘텐츠 패널을 {@link
+android.app.Fragment} 서브클래스로 구현하는 것을 고려합니다. 그러면 서로 다른 폼 팩터와, 콘텐츠를 공유하는 화면에서 코드 재사용을 극대화할 수 있습니다.
+
+</li>
+<li>다중창 UI를 사용할 화면 크기를 결정한 다음 적합한 화면 크기 버킷(예: <code>large</code>/<code>xlarge</code>) 또는 최소 화면 너비(예: <code>sw600dp</code>/<code>sw720</code>)에서 서로 다른 레이아웃을 제공합니다.
+
+
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/extrascreen"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="use-tablet-icons">4. 태블릿 화면용으로 디자인된 자산 사용</h2></div>
+
+<div><img src="{@docRoot}design/media/devices_displays_density@2x.png"></div>
+
+<p>앱을 가장 멋진 모습으로 나타내려면 태블릿에서 공통적으로 지원되는 범위에서 각 밀도에 맞는 아이콘과 기타 비트맵 자산을 제공하십시오.
+ 특히 작업 모음, 알림 및 시작 관리자용 아이콘이 흐려지거나 기타 배율 관련 아티팩트를 발생시키지 않고 모든 화면에서 적절한 크기로 나타나도록 <a href="{@docRoot}design/style/iconography.html">아이콘 체계</a> 가이드라인에 따라 디자인하고 다양한 밀도로 이들을 제공해야 합니다.
+
+
+
+</p>
+
+<p class="table-caption"><strong>표 1</strong>. 아이콘 유형용 원시 자산 크기.<table>
+<tr>
+<th>밀도</th>
+<th>시작 관리자</th>
+<th>작업 모음</th>
+<th>작게/상황별</th>
+<th>알림</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48 px</td>
+<td>32x32 px</td>
+<td>16x16 px</td>
+<td>24x24 px</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72 px</td>
+<td>48x48 px</td>
+<td>24x24 px</td>
+<td>36x36 px</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(hdpi 사용)</em></td>
+<td><em>(hdpi 사용)</em></td>
+<td><em>(hdpi 사용)</em></td>
+<td><em>(hdpi 사용)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96 px</td>
+<td>64x64 px</td>
+<td>32x32 px</td>
+<td>48x48 px</td>
+</tr>
+<tr>
+<td><code>xxhdpi</code></td>
+<td>144x144 px</td>
+<td>96x96 px</td>
+<td>48x48 px</td>
+<td>72x72 px</td>
+</tr>
+
+</table>
+
+<p>
+  최소한 다음 공통 태블릿 화면 밀도 중 <strong>하나 이상</strong>에 최적화된 각 아이콘 및 비트맵 자산의 버전을 제공하십시오.
+
+
+</p>
+<ul>
+  <li><code>hdpi</code></li>
+  <li><code>xhdpi</code></li>
+  <li><code>xxhdpi</code></li>
+</ul>
+
+<p>기타 팁:</p>
+
+<ul>
+<li>아이콘을 디자인할 때 세부정보나 가장자리 선명도를 잃지 않고 배율을 조정할 수 있도록 벡터 도형을 사용하십시오.</li>
+<li>밀도별 <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">리소스 한정자</a>를 사용하여 각 화면 밀도에 대해 적합한 아이콘이 로드되도록 하십시오.
+</li>
+<li>태블릿과 기타 대형 화면 장치는 종종 밀도 크기가 장치의 실제 밀도보다 큰 시작 관리자 아이콘을 요구하므로 가급적 가장 높은 밀도로 시작 관리자 아이콘을 제공해야 합니다.
+
+ 예를 들어, 태블릿 화면이 {@code xhdpi} 화면인 경우 태블릿이 시작 관리자 아이콘의 {@code xxhdpi} 버전을 요청합니다.
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/assets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-font-sizes">5.
+글꼴 및 터치 대상 조정</h2></div>
+
+<p>앱을 태블릿에서 사용하기 쉽게 하려면 대상으로 삼은 모든 화면 구성에 대해 태블릿 UI에서 글꼴 크기와 터치 대상을 조정하십시오.
+
+ 위에 설명된 것처럼 <a href="{@docRoot}guide/topics/ui/themes.html">styleable 특성</a> 또는 <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">치수 리소스</a>를 통해 글꼴 크기를 조정하고 레이아웃 및 비트맵 drawable을 통해 터치 대상을 조정할 수 있습니다.
+
+ </p>
+
+<p>다음은 몇 가지 고려사항입니다.</p>
+<ul>
+<li>태블릿 화면 크기와 밀도에서 텍스트가 너무 크거나 작으면 안 됩니다.
+ 해당 UI 요소에 대해 레이블 크기가 알맞게 조정되었는지 확인하고 레이블, 제목 및 기타 요소에서 잘못된 줄바꿈이 없는지 확인하십시오.
+
+</li>
+<li>화면 내 요소의 권장 터치 대상 크기는 48dp(최소 32dp)입니다. 태블릿 UI에서 일부 조정이 필요할 수도 있습니다. 대부분의 사용자에게 적합한 구현 전략에 대해 알아보려면 <a href="{@docRoot}design/style/metrics-grids.html">메트릭 및 그리드</a>를 참조하십시오.
+
+
+ 특정 사용자의 접근성 요구사항을 충족하려면 더 큰 터치 대상을 사용하는 것이 적절할 수도 있습니다.
+
+ </li>
+<li>가능하면 작은 아이콘의 경우 {@link android.view.TouchDelegate}를 사용하거나 투명한 버튼 내에 아이콘을 가운데 배치하여 터치 가능한 영역을 48dp 이상으로 확대하십시오.
+
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/fonts"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-widgets">6. 홈 화면 위젯 크기 조정</h2></div>
+
+<p>앱에 홈 화면 위젯이 포함된 경우 태블릿 화면에서 뛰어난 사용자 경험을 보장하기 위해 고려할 몇 가지 사항이 있습니다.
+ </p>
+
+<ul>
+<li>위젯의 기본 높이와 너비를 태블릿 화면에 맞게 적절히 설정하고 최소 및 최대 높이와 너비를 조정하십시오.
+
+</li>
+<li>위젯은 5개 이상의 홈 화면 행(세로 또는 사각형 위젯인 경우)이나 열(가로 또는 사각형 위젯인 경우)을 수용할 수 있도록 420dp 이상으로 크기를 조정할 수 있어야 합니다.
+
+ </li>
+<li>9 패치 이미지가 올바로 렌더링되는지 확인하십시오.</li>
+<li>기본 시스템 여백을 사용하십시오.</li>
+<li>가능하면 앱의 <code>targetSdkVersion</code>을 14 이상으로 설정하십시오.
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/widgets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="offer-full-feature-set">7. 태블릿 사용자를 위한 완벽한 기능 집합</h2></div>
+
+<div class="centered-full-image" style="width:600px;margin:1.5em"><img src="{@docRoot}images/gp-tablets-full-feature-set.png" alt="Tablet feature sets"></div>
+
+<p>태블릿 사용자가 최고의 앱 기능을 경험할 수 있도록 하십시오. 다음은 몇 가지 권장사항입니다.
+</p>
+
+<ul>
+  <li>태블릿에서 최소한 휴대폰과 동일한 기능 집합을 제공하도록 앱을 디자인하십시오.
+
+  </li>
+
+  <li>예외적으로 하드웨어나 대부분의 태블릿 사용에서 지원되지 않는 경우 앱이 태블릿에서 특정 기능을 생략하거나 대체할 수 있습니다.
+
+ 예를 들면 다음과 같습니다.
+    <ul>
+      <li>핸드셋이 전화통신 기능을 사용하지만 현재 태블릿에서 전화통신을 사용할 수 없는 경우 관련 기능을 생략하거나 대체할 수 있습니다.
+
+      </li>
+
+      <li>대부분의 태블릿에 GPS 센서가 있지만 일반적으로 대부분의 사용자는 달릴 때 태블릿을 휴대하지 않습니다.
+ 휴대폰을 휴대한 사용자가 달릴 때 GPS 추적을 기록할 수 있는 앱의 기능이 태블릿에서는 꼭 필요하지는 않으므로 제공할 필요가 없습니다.
+
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>태블릿 UI에서 특정 기능을 생략하는 경우 사용자가 해당 기능에 액세스할 수 없는지 또는 대체 기능에 대해 “정상적인 성능 저하”를 제공하는지 확인하십시오(아래 하드웨어 기능 절 참조).
+
+
+  </li>
+</ul>
+
+<div class="headerLine"><h2 id="android-versions">8. 올바른 대상 Android 버전 지정</h2></div>
+
+<p>
+  최대한 광범위하게 태블릿에 배포하려면 앱이 태블릿을 지원하는 대상 Android 버전을 올바르게 지정하는지 확인하십시오.
+ <a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a>(API 레벨 11)부터 태블릿을 지원하기 시작했습니다.
+
+  <a href="{@docRoot}about/versions/android-4.0.html">Android 4.0</a>에서 태블릿, 휴대폰 및 기타 장치에 대한 통합 UI 프레임워크 지원이 도입되었습니다.
+
+
+</p>
+
+<p>
+  매니페스트 파일의 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a> 요소에서 앱의 대상 Android 버전 범위를 설정할 수 있습니다.
+
+ 대부분의 경우 요소의 <code>targetSdkVersion</code> 특성을 사용 가능한 가장 높은 API 레벨로 설정하는 방식으로 대상 Android 버전을 올바르게 지정할 수 있습니다.
+
+
+</p>
+
+<p style="margin-bottom:.5em;">
+  최소한 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a> 요소에서 다음 사항을 확인하십시오.
+
+</p>
+
+<ol style="list-style-type:lower-alpha;margin-top:0em;">
+  <li>
+    <code>targetSdkVersion</code>이 11 이상의 값으로 선언되었는지 여부(14 이상 권장) 또는
+
+  </li>
+
+  <li>
+    <code>minSdkVersion</code>이 11 이상의 값으로 선언되었는지 여부.
+  </li>
+
+  <li><code>maxSdkVersion</code> 특성이 선언된 경우 11 이상의 값을 가져야 합니다.
+ 일반적으로 <code>maxSdkVersion</code> 사용은 <em>권장되지 않습니다</em>.
+
+  </li>
+</ol>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/versions"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="hardware-requirements">9. 올바른 하드웨어 기능 종속성 선언</h2></div>
+
+<p>
+  핸드셋과 태블릿은 일반적으로 센서, 카메라, 전화통신 및 기타 기능에 대해 약간 다른 하드웨어 지원을 제공합니다.
+ 예를 들어, 대부분의 태블릿은 전화통신 지원을 포함하지 않는 "Wi-Fi" 구성에서 사용할 수 있습니다.
+
+</p>
+
+<p>
+  전체 휴대폰 및 태블릿 고객 기반에 단일 APK를 널리 배포할 수 있도록 태블릿에서 일반적으로 제공되지 않는 하드웨어 기능에 대한 요구사항을 앱에서 선언하지 마십시오.
+
+
+  대신 아래 설명된 것처럼 앱 매니페스트에서 하드웨어 기능을 <em>필요하지 않음</em>으로 선언하십시오.
+
+</p>
+
+<ul>
+<li>앱 매니페스트에서 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> 요소를 찾으십시오.
+ 특히 다음과 같이 일부 태블릿에서 제공되지 않을 수 있는 하드웨어 기능을 찾으십시오.
+
+
+<ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code> (후방 카메라 참조) 또는 </li>
+<li><code>android.hardware.camera.front</code></li>
+</ul></li>
+
+<li><code>android:required=”false”</code> 특성을 포함하여 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> 요소를 <em>필요하지 않음</em>으로 선언하십시오.
+
+
+
+<p>
+  예를 들어, 다음은 전화통신을 제공하지 않는 장치에도 앱을 널리 배포할 수 있도록 <code>android.hardware.telephony</code>에서 종속성을 선언하는 올바른 방법입니다.
+
+
+</p>
+
+<pre>&lt;uses-feature android:name="android.hardware.telephony" android:required="false" /&gt;</pre></li>
+
+<li>마찬가지로, 태블릿에 적합하지 않은 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">하드웨어 기능 요구사항을 포함</a>하는  <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permission&gt;</code></a> 요소의 매니페스트를 확인하십시오.
+
+ 이러한 권한을 찾으면 해당 기능의 <code>&lt;uses-feature&gt;</code> 요소를 명시적으로 선언하고 <code>android:required=”false”</code> 특성을 포함하십시오.
+
+
+</li>
+</ul>
+
+
+<p>
+  하드웨어 기능을 <em>필요하지 않음</em>으로 선언한 후에 다양한 장치에서 앱을 테스트하십시오.
+ 앱이 사용하는 하드웨어 기능을 제공하지 않는 경우에도 앱은 정상적으로 작동해야 하며, 필요한 경우 "정상적인 성능 저하" 및 대체 기능을 제공해야 합니다.
+
+
+</p>
+
+<p>
+  예를 들어, 앱이 위치를 설정하기 위해 정상적으로 GPS를 사용하지만 장치에서 GPS가 지원되지 않는 경우 앱에서 사용자가 수동으로 위치를 설정하도록 할 수 있습니다.
+
+ 필요에 따라 앱이 런타임에 장치 하드웨어 기능을 점검하고 처리할 수 있습니다.
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/hardware"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="support-screens">10. 태블릿 화면 지원 선언</h2></div>
+
+<p>앱을 광범위한 태블릿에 배포할 수 있도록 보장하려면 앱이 다음과 같이 매니페스트 파일에서 태블릿 화면 크기 지원을 선언해야 합니다.
+</p>
+
+<ul>
+  <li><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> 요소는 선언된 경우 <code>android:largeScreens="false"</code> 또는 <code>android:xlargeScreens="false"</code>를 지정하면 안 됩니다.
+
+
+</li>
+  <li>13 미만의 <code>minSdkVersion</code> 값을 대상으로 하는 앱의 경우 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> 요소가 <code>android:largeScreens="true"</code> 및 <code>android:xlargeScreens="true"</code>와 함께 선언되어야 합니다.
+
+
+</li>
+</ul>
+
+<p>앱이 매니페스트에서 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a> 요소를 선언하는 경우 앱이 지원하는 <em>태블릿 화면의 모든 크기 및 밀도 조합</em>을 지정하는 특성을 해당 요소에 포함해야 합니다.
+
+
+
+ 가급적 앱에서 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a> 요소의 사용을 피하십시오.
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/tabletscreens"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="google-play">11. Google Play에 태블릿 UI 소개</h2></div>
+
+<p>
+  풍부하고 최적화된 태블릿 앱용 UI를 만드는 작업을 완료한 후에 고객에게 이러한 사실을 알리십시오!
+ 다음은 Google Play에서 태블릿 앱을 사용자에게 홍보하는 몇 가지 주요 방법입니다.
+
+</p>
+
+<div><img class="border-img" src="{@docRoot}images/gp-tablet-quality-4.jpg"></div>
+
+
+<h4>
+  태블릿 UI 스크린샷 업로드
+</h4>
+
+<p>
+  태블릿 사용자는 앱이 휴대폰이 아니라 태블릿 장치에서 어떤 모습으로 나타나는지 알고 싶어합니다.
+ 태블릿 앱을 개발한 경우 태블릿 UI의 스크린샷을 Google Play 개발자 콘솔에 업로드하십시오.
+ 다음은 몇 가지 가이드라인입니다.
+  </p>
+
+<ul style="margin-top:0;">
+  <li>시작 또는 로그인 페이지가 아니라 앱의 핵심 기능을 보여주십시오.
+ 사용자가 대부분의 시간을 보내는 앱 화면을 스크린샷해서 보여주어야 합니다.
+
+  </li>
+
+  <li>7인치 및 10인치 태블릿에서 찍은 스크린샷을 모두 추가하십시오.
+  </li>
+
+  <li>가능하면 가로 방향과 세로 방향으로 찍은 스크린샷을 모두 추가하십시오.
+
+  </li>
+
+  <li>가능하면 화면 캡처를 사용하십시오. 스크린샷에 실제 장치 하드웨어가 표시되지 않도록 하십시오.
+</li>
+
+  <li>각 방향에서 태블릿 스크린샷의 권장 해상도는 <strong>1280 x 720</strong> 이상입니다.
+
+  </li>
+
+  <li>7인치 태블릿의 경우 8개의 태블릿 UI 스크린샷을, 10인치 태블릿의 경우 추가로 8개의 태블릿 UI 스크린샷을 업로드하십시오.
+
+  </li>
+</ul>
+
+<h4>
+  앱 설명 및 릴리스 정보 업데이트
+</h4>
+
+<ul>
+  <li>앱 설명에서 앱이 태블릿 사용자를 위한 뛰어난 기능과 태블릿에 최적화된 UI를 제공함을 강조하십시오.
+ 태블릿 UI의 작동 방식과 장점에 대해 자세히 설명하십시오.
+
+  </li>
+
+  <li>앱의 릴리스 정보 및 업데이트 정보에 태블릿 지원 정보를 포함하십시오.
+
+  </li>
+</ul>
+
+<h4>
+  홍보 동영상 업데이트
+</h4>
+
+<p>
+  많은 사용자가 앱의 홍보 동영상을 보고 앱의 용도를 파악하고 사용할지 여부를 결정합니다.
+ 홍보 동영상에서 앱의 태블릿 UI를 강조하여 관심 있는 태블릿 사용자가 앱을 사용하도록 유도할 수 있습니다.
+ 다음은 몇 가지 팁과 가이드라인입니다.
+
+</p>
+
+<ul>
+  <li>태블릿에서 실행되는 앱의 샷을 하나 이상 추가하십시오. 가장 효율적으로 태블릿 사용자를 확보하려면 휴대폰 UI와 거의 동일한 비율로 태블릿 UI를 홍보하는 것이 좋습니다.
+
+
+  </li>
+
+  <li>가능하면 동영상에서 일찍 태블릿 UI를 보여주십시오. 태블릿 사용자가 휴대폰 UI의 기능 안내가 모두 끝날 때까지 인내심을 갖고 기다릴 것이라고 가정하지 마십시오. 이상적으로는 최초 10초 이내에 또는 휴대폰 UI 소개와 동시에 태블릿 UI를 보여주는 방식으로 태블릿 사용자와 즉시 소통해야 합니다.
+
+
+
+  </li>
+
+  <li>태블릿 UI를 명확히 보여주려면 핸드헬드 태블릿 장치에서 실행되는 앱의 샷을 포함하십시오.
+
+  </li>
+
+  <li>동영상 내레이션이나 보이스오버에서 앱의 태블릿 UI를 강조하십시오.
+  </li>
+</ul>
+
+<h4>
+  홍보 캠페인에서 태블릿 UI 강조
+</h4>
+
+<p>
+  홍보 캠페인, 웹사이트, 소셜 게시물, 광고 등을 통해 태블릿 사용자에게 태블릿 UI에 대해 알리십시오.
+ 다음은 몇 가지 제안입니다.
+
+</p>
+
+<ul>
+  <li>태블릿에서 앱 사용을 강조하는 마케팅 또는 광고 캠페인을 기획하십시오.
+</li>
+
+  <li>홍보 캠페인에서 태블릿 앱을 멋있게 소개하십시오. <a href="{@docRoot}distribute/tools/promote/device-art.html">장치 아트 생성기</a>를 사용하여 7인치 또는 10인치 태블릿에서 실행 중인 앱의 고품질 홍보 이미지를 그림자 및 화면 번쩍임에 상관없이 선택 방향에서 빠르게 생성할 수 있습니다.
+
+
+ 이미지 생성은 캡처, 끌기 및 놓기만큼 간단합니다.
+  </li>
+
+  <li>사용자가 앱의 스토어 목록에 바로 연결할 수 있도록 온라인 홍보에 Google Play 배지를 포함하십시오.
+ <a href="{@docRoot}distribute/tools/promote/badges.html">배지 생성기</a>를 사용하여 다양한 언어로 배지를 생성할 수 있습니다.
+
+  </li>
+</ul>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/showcase"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine">
+  <h2 id="google-play-best-practices">
+    12. Google Play에서 게시에 대한 모범 사례 준수
+  </h2>
+
+
+</div>
+
+<p>
+  다음은 Google Play에서 성공적인 태블릿 앱을 제공하기 위한 몇 가지 모범 사례입니다.
+
+</p>
+
+<div>
+  <img class="border-img" src="{@docRoot}images/gp-tablet-quality-5.jpg" style="1px solid #ddd">
+</div>
+
+<h4 id="google-play-optimization-tips">
+  앱의 최적화 팁 확인
+</h4>
+
+<p>이제 Google Play 개발자 콘솔에서 앱이 태블릿 앱 배포 및 품질에 대한 기본 가이드라인을 준수하는지 빠르게 확인할 수 있는 최적화 팁 페이지를 제공합니다.
+
+ 이 페이지를 방문하려면 개발자 콘솔에 로그인한 다음 모든 애플리케이션에서 앱을 로드하고 왼쪽 탐색에서 최적화 팁을 클릭하십시오.
+
+</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>피드백을 보내는 방법</h2>
+
+<p>피드백을 보내거나 최적화 팁의 수동 검토를 요청하려면 아래 링크를 사용하십시오.
+</p>
+
+<p>피드백을 보내기 전에 태블릿 앱 품질 가이드라인의 관련 절을 읽으십시오.
+</p>
+
+<p><strong><a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">태블릿용 디자인 관련 문의 &raquo;</a></strong></p>
+</div>
+</div>
+
+<p>개발자 콘솔은 기본 품질 기준을 확인하기 위해 일련의 검사를 실행하는 방식으로 앱의 최적화 팁 페이지를 생성합니다.
+
+ 문제가 발견되면 최적화 팁 페이지에서 "할 일" 항목으로 알려줍니다.
+</p>
+
+<p>태블릿용 앱을 개발한 경우 최적화 팁 페이지를 방문하여 앱의 기본 검사가 어떻게 진행되는지 확인하십시오.
+
+  문제가 있으면 앱에서 해결하고 필요한 경우 새 배포용 바이너리를 업로드하는 것이 좋습니다.
+
+ </p>
+
+<p>앱에 적용되지 않거나 태블릿에서 품질에 영향을 줄 수 있는 "할 일" 문제가 최적화 팁 페이지에 나열되면 <a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">태블릿용 디자인 관련 문의 &raquo;</a>를 사용하여 당사에 알려주십시오.
+
+ 당사는 앱을 검토하고 필요한 경우 최적화 팁 페이지를 업데이트합니다.
+
+</p>
+
+
+<h4>앱의 필터링 확인</h4>
+
+<p>
+  앱을 <a href="https://play.google.com/apps/publish/">개발자 콘솔</a>에 업로드한 후에 APK의 지원되는 장치 목록을 점검하고 대상으로 삼으려는 태블릿 장치에서 앱이 필터링되지 않는지 확인하십시오.
+
+
+</p>
+
+<h4>단일 APK로 배포</h4>
+
+<p>
+  모든 화면 크기(휴대폰 및 태블릿)에 대해 단일 Google Play 목록을 사용하여 단일 APK로 앱을 게시하는 것이 좋습니다.
+ 이 접근방식은 몇 가지 중요한 이점이 있습니다.
+
+</p>
+
+<ul style="margin-top:.25em;">
+  <li>사용자가 검색, 탐색 또는 홍보 자료에서 앱을 더 쉽게 찾을 수 있습니다.
+  </li>
+
+  <li>사용자가 새 장치를 사용하는 경우 더 쉽게 앱을 자동으로 복원할 수 있습니다.
+
+  </li>
+
+  <li>평점과 다운로드 통계가 모든 장치에서 통합됩니다.
+  </li>
+
+  <li>태블릿 앱을 두 번째 목록에 게시하면 브랜드의 등급을 저하시킬 수 있습니다.
+
+  </li>
+</ul>
+
+<p>
+  대부분의 경우에 단일 APK를 사용하여 모든 장치에 도달하는 것을 적극 권장하지만 필요에 따라 대안으로 <a href="{@docRoot}google/play/publishing/multiple-apks.html">다중 APK 지원</a>을 사용하여 앱을 제공할 수 있습니다.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine">
+  <h2 id="test-environment">
+    태블릿용 테스트 환경 설정
+  </h2>
+
+
+</div>
+
+<p>
+  테스트용으로 적합한 하드웨어 또는 에뮬레이터 환경을 통해 태블릿에서 앱의 품질(핵심 앱 품질 및 태블릿 앱 품질)을 평가하십시오.
+
+
+</p>
+
+<p>
+  핵심 앱 품질 기준 테스트에 대한 <a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">권장 테스트 환경</a>과 비교하여 중간 크기 태블릿과 하드웨어/소프트웨어 기능이 더 많거나 적은 태블릿을 포함하십시오.
+
+
+
+</p>
+
+<p class="table-caption"><strong>표 1</strong>. 일반적인 태블릿 테스트 환경은 나열된 플랫폼 버전, 화면 구성 및 하드웨어 기능 구성 중 하나와 함께 아래 표의 각 행에 나열된 한두 대의 장치를 포함할 수 있습니다.
+
+</p>
+
+<table>
+<tr>
+<th>유형</th>
+<th>크기</th>
+<th>밀도</th>
+<th>버전</th>
+<th>AVD 스킨</th>
+</tr>
+
+<tr>
+<td>7인치 태블릿</td>
+<td><span style="white-space:nowrap"><code>large</code> 또는</span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
+<td>Android 4.0 이상(API 레벨 14 이상)</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">10인치</span> 태블릿</td>
+<td><span style="white-space:nowrap"><code>xlarge</code> 또는</span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>,<br /><code>hdpi</code>,<br /><code>xhdpi</code></td>
+<td>Android 3.2 이상(API 레벨 13 이상)</td>
+<td>WXGA800</td>
+</tr>
+</table>
+
+<div class="headerLine"><h2 id="related-resources">관련 자료</h2></div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/tv.jd
new file mode 100644
index 0000000..83d71e9
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/tv.jd
@@ -0,0 +1,509 @@
+page.title=TV 앱 품질
+page.metaDescription=TV는 Android 장치에서 점차 성장하는 분야로, 뛰어난 경험을 생성하기 위해 앱 디자인 및 기능에 특별한 주의가 필요합니다.
+page.image=/distribute/images/gp-tv-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>품질 기준</h2>
+  <ol>
+    <li><a href="#ux">디자인 및 상호작용</a></li>
+    <li><a href="#fn">기능</a></li>
+    <li><a href="#faq">질문과 대답(FAQ)</a></li>
+  </ol>
+
+  <h2>필독 항목</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+     핵심 앱 품질</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+      앱 최적화</a></li>
+  </ol>
+</div>
+</div>
+
+<div class="top-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/gp-tv-quality.png" style="width:480px;">
+</div>
+
+<p>
+  사용자는 TV를 시청할 때 휴대폰이나 태블릿을 사용할 때와는 다른 것을 기대합니다.
+  보통 TV 사용자는 화면에서 3m 정도 떨어져서 앉아 있기 때문에 작은 세부 내용은 눈에 잘 띄지 않고 작은 문자는 읽기 힘듭니다.
+  사용자가 TV에서 떨어져서 앉아 있기 때문에 화면의 요소를 터치하는 대신 리모컨을 사용하여 탐색하고 선택해야 합니다.
+ 이러한 차이로 인해 훌륭한 TV 사용자 경험을 만드는 데 필요한 요구사항은 현저히 다릅니다.
+
+</p>
+
+<p>
+  TV 사용자를 위한 뛰어난 경험을 만드는 첫 번째 단계는 최고의 TV 앱 사용자 경험을 제공하는 방법에 대한 지침을 안내하는 <a href="{@docRoot}design/tv/index.html">Android TV 디자인 가이드라인</a>을 검토하고 따르는 것입니다.
+
+ 또한 <a href="{@docRoot}training/tv/start/index.html">TV 앱 작성</a> 교육 자료를 검토하여 기본적인 TV 앱 구현 요구사항을 이해해야 합니다.
+
+
+</p>
+
+<p class="caution">
+  <strong>중요:</strong> 뛰어난 사용자 경험을 보장하려면, TV 장치용 앱이 유용성에 대한 몇 가지 특정 요구사항을 충족해야 합니다.
+ 다음 품질 기준을 충족하는 앱만 Google Play에서 Android TV 앱의 자격을 취득합니다.
+
+</p>
+
+<p class="note"><strong>참고:</strong> Google Play에서 TV 앱을 게시하는 방법은 <a href="{@docRoot}distribute/googleplay/tv.html">Android TV에 배포</a>를 참조하십시오.
+</p>
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  시각적 디자인 및 사용자 상호작용
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 TV 장치에서 일관되고 직관적이며 즐거운 사용자 경험을 보장하는 핵심 디자인 및 상호작용 패턴을 따르도록 보장합니다.
+
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    유형
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  <th>
+    설명
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="4" id="launcher">
+    시작 관리자
+  </td>
+
+  <td id="TV-LM">
+    TV-LM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      설치 후에 앱이 Android TV Launcher에 시작 관리자 아이콘을 표시합니다.
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LB">
+    TV-LB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 Android TV Launcher에 320px x 180px 최대 크기 배너를 시작 관리자 아이콘으로 표시합니다.
+      (<a href="{@docRoot}design/tv/patterns.html#banner">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-BN">
+    TV-BN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 시작 배너에 앱의 이름이 포함됩니다.
+      (<a href="{@docRoot}design/tv/patterns.html#banner">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LG">
+    TV-LG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 게임인 경우, Android TV Launcher의 Games 행에 나타납니다.<br>
+      (<a href="{@docRoot}training/tv/games/index.html#manifest">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="layout">
+    레이아웃
+  </td>
+
+  <td id="TV-LO">
+    TV-LO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      모든 앱 인터페이스가 가로 방향으로 표시됩니다.
+      (<a href="{@docRoot}training/tv/start/layouts.html#structure">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TC">
+    TV-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 핵심 텍스트를 16sp 이상 크기로 표시합니다.
+      (<a href="{@docRoot}design/tv/style.html#typography">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TA">
+    TV-TA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 모든 텍스트를 12sp 이상 크기로 표시합니다.
+      (<a href="{@docRoot}design/tv/style.html#typography">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-OV">
+    TV-OV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 화면 가장자리에서 부분적으로 잘린 텍스트나 기능을 표시하지 않습니다.
+
+      (<a href="{@docRoot}training/tv/start/layouts.html#overscan">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TR">
+    TV-TR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 다른 앱을 부분적으로 가리지 않습니다. 앱이 전체 화면을 채우고 배경은 불투명합니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="navigation">
+    탐색
+  </td>
+
+  <td id="TV-DP">
+    TV-DP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 <a href="#TV-GP">TV-GP</a>에 지정된 게임패드 컨트롤러를 요구하지 않는 경우 5방향 D 패드 컨트롤을 사용하여 앱 기능을 탐색할 수 있습니다.
+
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DK">
+    TV-DK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 <a href="#TV-GP">TV-GP</a>에 지정된 게임패드 컨트롤러를 요구하는 경우 표준 Android 게임 컨트롤러 키를 사용하여 모든 기능을 탐색할 수 있습니다.
+
+      (<a href="{@docRoot}training/game-controllers/controller-input.html#button">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DM">
+    TV-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 사용자 인터페이스 컨트롤에 액세스하기 위해 메뉴 버튼이 있는 리모컨에 의존하지 않습니다.
+
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  기능
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 정확히 구성되고 예상되는 기능 동작을 제공하도록 보장합니다.
+
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    유형
+  </th>
+  <th style="width:54px;">
+    테스트
+  </th>
+  <th>
+    설명
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="2" id="manifest">
+   매니페스트
+  </td>
+
+  <td id="TV-ML">
+    TV-ML
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 매니페스트가 {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER} 카테고리와 {@link android.content.Intent#ACTION_MAIN} 인텐트 유형을 설정합니다.
+
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+</tr>
+  <td id="TV-MT">
+    TV-MT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 매니페스트가 {@code android.hardware.touchscreen} 하드웨어 기능을 필요하지 않음으로 설정합니다.
+      (<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">방법 알아보기</a>)
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="game-controllers">
+    게임 컨트롤러
+  </td>
+
+  <td id="TV-GP">
+    TV-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 게임 컨트롤러를 기본 입력 방법으로 사용하는 경우 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> 매니페스트 태그로 적합한 요구사항을 선언합니다.
+
+      (<a href="{@docRoot}training/tv/games/index.html#gamepad">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-GC">
+    TV-GC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 게임 컨트롤러 사용에 대한 시각적 지침을 제공하는 경우 지침은 브랜딩에 구애되지 않고 호환되는 버튼 레이아웃을 표시해야 합니다.
+
+      (<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="advertising">
+    광고
+  </td>
+
+  <td id="TV-AP">
+    TV-AP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 D 패드 컨트롤을 사용하여 광고와 상호작용할 수 있도록 허용합니다.
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AD">
+    TV-AD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      전체 화면을 사용하는 비동영상 광고의 경우 앱이 사용자가 D 패드 컨트롤을 사용하여 광고를 즉시 건너뛸 수 있도록 허용합니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AU">
+    TV-AU
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      클릭 가능하고 전체 화면이 아닌 비동영상 광고의 경우 앱이 웹 URL에 광고를 링크하는 것을 허용하지 않습니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AA">
+    TV-AA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      클릭 가능하고 전체 화면이 아닌 비동영상 광고의 경우 앱이 TV 장치에서 사용할 수 없는 다른 앱에 광고를 링크하는 것을 허용하지 않습니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="web">
+    웹 콘텐츠
+  </td>
+
+  <td id="TV-WB">
+    TV-WB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      웹 콘텐츠의 경우 앱이 {@link android.webkit.WebView} 구성요소를 사용하고 웹 브라우저 앱은 실행하지 않습니다.
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="media-playback">
+    미디어 재생
+  </td>
+
+  <td id="TV-NP">
+    TV-NP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 사용자가 떠난 후에도 사운드를 계속 재생하는 경우 사용자가 앱으로 돌아와서 재생을 제어할 수 있도록 홈 화면 권장 사항 행에 <em>지금 재생(Now Playing)</em> 카드를 제공합니다.
+
+
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PA">
+    TV-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 <em>지금 재생(Now Playing)</em> 카드를 제공하는 경우 이 카드를 선택하면 재생을 일시 중지할 수 있는 화면이 표시됩니다.
+
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PP">
+    TV-PP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 동영상이나 음악 콘텐츠를 재생하는 경우 재생 중에 재생 또는 일시 중지 키 이벤트를 보내면 미디어 재생과 일시 중지 간에 전환합니다.
+<br>
+      (<a href="{@docRoot}reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE">방법 알아보기</a>)
+
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+<div class="headerLine">
+  <h2 id="faq">
+  질문과 대답(FAQ)
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>제출한 앱이 TV 장치의 모든 요구사항을 충족하는지 여부를 어떻게 알 수 있습니까?</strong>
+
+</p>
+<p>
+  앱이 이 페이지에 설명된 유용성 요구사항을 충족하지 않는 경우 Play 스토어 팀이 해당 앱과 연관된 기본 <a href="https://play.google.com/apps/publish/">Google Play 개발자 콘솔</a> 계정에 지정된 이메일 주소로 연락을 드립니다.
+
+
+</p>
+<p class="caution">
+  <strong>주의:</strong> 앱은 TV 장치에 대한 <a href="{@docRoot}preview/tv/start/index.html#tv-activity">필수 매니페스트 항목</a>을 포함해야 합니다.  그렇지 않으면 TV 앱으로 간주되지 않고 TV 유용성 요구사항을 검토하지 않습니다.
+
+
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>TV 장치 이외의 항목도 대상으로 앱을 만들었습니다. TV 장치 요구사항을 충족하지 않는 신규 또는 업데이트된 앱이 휴대폰 및 태블릿용 Google Play에 계속 나타납니까?</strong>
+
+
+</p>
+<p>
+  예. 위에서 설명한 요구사항은 TV 장치의Google Play 스토어 배포에만 제한됩니다.
+ 휴대폰, 태블릿 및 기타 장치 등 다른 장치 유형에 대한 배포는 영향을 받지 않습니다.
+
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>앱이 게시 요구사항을 충족하는 경우 Google Play 스토어의 TV 장치 부문에서 언제 사용할 수 있습니까?</strong>
+
+</p>
+
+<p>
+  TV에 대한 요구사항을 충족하는 앱은 Android 5.0의 공식 릴리스 <em>후에</em> Google Play 스토어의 TV 장치 부문에 나타납니다.
+
+</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/wear.jd
new file mode 100644
index 0000000..7ab9367
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/wear.jd
@@ -0,0 +1,452 @@
+page.title=Wear 앱 품질
+page.tags="wear","wearables","quality","guidelines"
+page.metaDescription=웨어러블은 한 눈에 알아볼 수 있도록 만든 소형 장치로 적시에 정확한 정보를 제공하는 고유한 앱을 필요로 합니다.
+page.image=/distribute/images/gp-wear-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>품질 기준</h2>
+  <ol>
+    <li><a href="#ux">디자인 및 상호작용</a></li>
+    <li><a href="#fn">기능</a></li>
+    <li><a href="#faq">질문과 대답(FAQ)</a></li>
+  </ol>
+
+  <h2>필독 항목</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+     핵심 앱 품질</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+      앱 최적화</a></li>
+    <li><a href="{@docRoot}design/patterns/notifications.html">
+      알림</a></li>
+  </ol>
+</div>
+</div>
+
+<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;">
+
+<p>
+  Android Wear는 사용자에게 정확한 정보를 적시에 제공하는 것을 목표로 합니다. 뛰어난 Android Wear 경험은 자동으로 시작되고, 한 눈에 파악할 수 있으며, 사용자 상호작용이 전혀 또는 거의 필요하지 않습니다.
+
+ 웨어러블용 앱 디자인은 휴대폰이나 태블릿용 디자인과 본질적으로 다릅니다.
+ 휴대폰이나 태블릿용 디자인과 구별되는 장단점, 사용 사례 및 인간공학적인 측면을 고려해야 합니다.
+
+</p>
+
+<p>
+  Wear 사용자를 위한 뛰어난 경험을 만드는 첫 번째 단계는 최고의 Wear 앱 사용자 경험을 제공하는 방법에 대한 지침을 안내하는 <a href="{@docRoot}design/wear/index.html">Android Wear 디자인 가이드라인</a>을 읽는 것입니다.
+
+ 또한 <a href="{@docRoot}training/building-wearables.html">웨어러블 앱 작성</a> 교육 자료를 검토하여 기본적인 Wear 앱 구현 요구사항을 이해해야 합니다.
+
+
+</p>
+
+<p class="caution">
+  <strong>중요:</strong> 뛰어난 사용자 경험을 보장하려면, 웨어러블용 앱이 유용성에 대한 몇 가지 특정 요구사항을 충족해야 합니다.
+ 다음 품질 기준을 충족하는 앱만 Google Play에서 Android Wear 앱의 자격을 취득합니다.
+ Wear 앱 자격을 취득하면 Android Wear 사용자가 Google Play에서 더 쉽게 앱을 검색할 수 있게 됩니다.
+
+</p>
+
+<p class="note">
+ <strong>참고:</strong> Google Play에서 Wear 앱을 게시하는 방법은 <a href="{@docRoot}distribute/googleplay/wear.html">Android Wear에 배포</a>를 참조하십시오.
+</p>
+
+<div class="headerLine">
+  <h2 id="fn">
+  기능
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 정확히 구성되고 예상되는 기능 동작을 제공하도록 보장합니다.
+
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    유형
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    설명
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="general">
+   일반
+  </td>
+
+  <td id="WR-GL">
+    WR-GL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      핸드헬드 앱이 Wear 장치에서 직접 실행되는 웨어러블 앱 또는 웨어러블 특정 기능을 사용하는 알림을 포함합니다.
+
+      (<a href="{@docRoot}training/building-wearables.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-VF">
+    WR-VF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱에 사용자에게 표시되는 Wear 기능이 있습니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-BF">
+    WR-BF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Wear 기능이 예상대로 작동하거나 앱의 Google Play 스토어 목록에 설명된 대로 작동합니다.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="packaging">
+   패키징
+  </td>
+
+  <td id="WR-PK">
+    WR-PK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      기능이 핸드헬드 앱에 종속된 웨어러블 앱이 해당 핸드헬드 앱 내부에 패키지로 포함됩니다.
+
+      (<a href="{@docRoot}training/wearables/apps/packaging.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="functional-notifications">
+    알림
+  </td>
+
+  <td id="WR-FW">
+    WR-FW
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      웨어러블 특정 기능을 사용하는 알림이 {@code RemoteInput} 또는 {@code WearableExtender}를 사용합니다.
+
+      (<a href="{@docRoot}training/wearables/notifications/index.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FR">
+    WR-FR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      사용자가 메시징 앱의 알림을 사용하여 음성 입력이나 빠른 응답을 통해 회신할 수 있습니다.
+      (<a href="{@docRoot}training/wearables/notifications/voice-input.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FG">
+    WR-FG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      유사한 알림이 한 묶음으로 그룹화됩니다.
+      (<a href="{@docRoot}training/wearables/notifications/stacks.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="gestures">
+    제스처
+  </td>
+
+  <td id="WR-GP">
+    WR-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      전체 화면 작업에서 종료 확인 목적으로만 길게 누르기를 사용합니다.
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/exit.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-GD">
+    WR-GD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 전체 화면 작업에서 살짝 밀어서 해제하기 제스처를 비활성화한 경우 길게 눌러 해제하기 제스처에 응답합니다.
+
+      (<a href="{@docRoot}training/wearables/ui/exit.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="watchface">
+    Watch Face
+  </td>
+
+  <td id="WR-WF">
+    WR-WF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Watch Face를 포함하는 앱이 공식 Watch Face API를 사용합니다.
+      (<a href="{@docRoot}training/wearables/watch-faces/index.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ux">
+  시각적 디자인 및 사용자 상호작용
+  </h2>
+
+
+</div>
+
+<p>
+  이 기준은 앱이 웨어러블에서 일관되고 직관적이며 즐거운 사용자 경험을 제공하는 핵심 디자인 및 상호작용 패턴을 따르도록 보장합니다.
+
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    유형
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    설명
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="layout">
+    레이아웃
+  </td>
+
+  <td id="WR-LS">
+    WR-LS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 사용자 인터페이스가 정사각형 디스플레이에 알맞은 형식으로 구성됩니다. 앱 콘텐츠가 실제 디스플레이 영역 내에 배치되고 텍스트나 컨트롤이 화면 가장자리에서 잘리지 않습니다.
+
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-LR">
+    WR-LR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 사용자 인터페이스가 화면 하단에 삽입물(또는 "턱")이 있는 장치를 포함한 둥근 디스플레이에 알맞은 형식으로 구성됩니다.
+ 앱 콘텐츠가 실제 디스플레이 영역 내에 배치되고 텍스트나 컨트롤이 화면 가장자리에서 잘리지 않습니다.
+
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-TC">
+    WR-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 텍스트가 제안 최소 크기인 16sp로 크고 한 눈에 파악할 수 있습니다.
+      (<a href="{@docRoot}design/wear/style.html#Typography">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="launcher">
+    시작 관리자
+  </td>
+
+  <td id="WR-LN">
+    WR-LN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱 시작 관리자 문자열이 명령 구문이 아니라 앱 이름입니다.
+      (<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="notifications">
+    알림
+  </td>
+
+  <td id="WR-NC">
+    WR-NC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 필요한 경우 확인 애니메이션을 표시합니다. 
+      (<a href="{@docRoot}design/wear/patterns.html#Countdown">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-NR">
+    WR-NR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      알림 카드에 오른쪽 상단 가장자리에 표시되는 앱 아이콘이 있습니다. 한 가지 예외는 미디어 재생 카드처럼 알림 카드에 단일 작업 컨트롤이 있는 경우입니다.
+
+      <br/>
+      (<a href="{@docRoot}design/wear/style.html#Assets">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-WI">
+    WR-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      알림 작업에 흰색 아이콘, 작업 제목, 투명한 배경이 있습니다.
+      <br/>
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PB">
+    WR-PB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      알림 사진 배경이 카드 표시가 아니라 정보 전달용으로만 사용됩니다.
+      (<a href="{@docRoot}design/wear/style.html#Branding">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PR">
+    WR-PR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      알림 사진 배경의 해상도가 400x400 이상입니다.
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="googleplay">
+    Google Play
+  </td>
+
+  <td id="WR-GS">
+    WR-GS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      앱이 Play 스토어 목록에 하나 이상의 Wear 스크린샷을 포함합니다.
+      (<a href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">방법 알아보기</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="faq">
+  질문과 대답(FAQ)
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>Android Wear 검토용으로 제출한 앱이 Wear의 모든 요구사항을 충족하는지 여부를 어떻게 알 수 있습니까?</strong>
+
+</p>
+<p>
+  앱이 이 페이지에 설명된 유용성 요구사항을 충족하지 않는 경우 Play 스토어 팀이 해당 앱과 연관된 <a href="https://play.google.com/apps/publish/">Google Play 개발자 콘솔</a> 계정에 지정된 이메일 주소로 연락을 드립니다.
+
+
+</p>
+<p class="caution">
+  <strong>주의:</strong> 앱은 <a href="#fn">기능 요구사항</a>을 충족해야 합니다. 그렇지 않으면 Wear 앱으로 간주되지 않고 Wear <a href="#ux">디자인 및 상호작용</a>을 검토하지 않습니다.
+
+
+</p>
+<p class="note">
+ <strong>참고:</strong> Google Play에서 Wear 앱을 게시하는 방법은 <a href="{@docRoot}distribute/googleplay/wear.html">Android Wear에 배포</a>를 참조하십시오.
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>앱이 Wear 요구사항을 충족하지 않는 경우 신규 또는 업데이트된 앱이 휴대폰 및 태블릿용 Google Play에 계속 나타나고 웨어러블에 계속 설치할 수 있습니까?</strong>
+
+</p>
+<p>
+  예. 위에 설명된 요구사항은 앱이 Google Play에서 Android Wear 앱으로 식별되고 Android Wear 사용자가 더 쉽게 검색할 수 있는지 여부만 판별합니다.
+ Wear 앱으로 승인되지 않은 경우 휴대폰이나 태블릿 등 다른 장치 유형에서 계속 사용할 수 있고 웨어러블에 계속 설치할 수 있습니다.
+
+
+</p>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/start.jd b/docs/html-intl/intl/ko/distribute/googleplay/start.jd
new file mode 100644
index 0000000..f5dd1b3
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/start.jd
@@ -0,0 +1,156 @@
+page.title=게시 시작하기
+page.metaDescription=잠시 시간을 내어 개발자 계정을 등록하여 Google Play에서 게시를 시작하십시오.
+meta.tags="publishing"
+page.tags="google play", "publishing", "register", "signup"
+page.image=/distribute/images/getting-started.jpg
+
+@jd:body
+
+<div class="top-right-float" style="margin-right:24px;margin-top:-18px">
+  <a href="https://play.google.com/apps/publish/"><img src="{@docRoot}images/gp-start-button.png"></a>
+</div>
+
+<p>
+  잠시 시간을 내어 다음과 같은 방법을 통해 Google Play에서 게시를 시작하십시오.
+</p>
+
+<ul>
+  <li>Google Play 게시자 계정을 등록합니다.
+  </li>
+
+  <li>앱 또는 인앱 제품을 판매할 예정인 경우 Google Wallet 판매자 계정을 설정합니다.
+
+  </li>
+
+  <li><a href="https://play.google.com/apps/publish/">Google Play 개발자 콘솔</a> 및 게시 도구를 탐색합니다.
+
+  </li>
+</ul>
+
+<p>
+  준비가 되면 시작(Start) 버튼을 눌러 개발자 콘솔로 이동하십시오.
+</p>
+
+<div class="headerLine">
+  <h2>
+    게시자 계정 등록
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      팁
+    </h2>
+
+    <ul>
+      <li>등록하려면 Google 계정이 필요합니다. 프로세스 진행 중에 계정을 만들 수 있습니다.
+
+      </li>
+
+      <li>조직인 경우 개인 계정을 사용하지 말고 새 Google 계정을 등록하십시오.
+
+      </li>
+
+      <li>앱을 배포하고 판매할 수 있는 <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294">개발자 등록 허용 국가</a> 및 <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">판매자 등록 허용 국가</a>를 검토하십시오.
+
+
+      </li>
+    </ul>
+  </div>
+</div>
+
+<ol>
+  <li><a href="https://play.google.com/apps/publish/">Google Play 개발자 콘솔</a>을 방문합니다.
+
+  </li>
+
+  <li><strong>개발자 ID</strong>에 대한 기본 정보(이름, 이메일 주소 등)를 입력합니다.
+ 이 정보는 나중에 수정할 수 있습니다.
+
+  </li>
+
+  <li>해당 국가 또는 지역의 <strong>개발자 배포 계약</strong>을 읽고 동의합니다.
+ Google Play에 게시하는 앱 및 스토어 목록은 개발자 프로그램 정책 및 미국 수출 법규를 준수해야 합니다.
+
+  
+  </li>
+
+  <li>Google Wallet을 사용하여 <strong>등록 수수료로 미화 25달러</strong>를 지불합니다. Google Wallet 계정이 없는 경우 프로세스 진행 중에 계정을 설정할 수 있습니다.
+
+
+  </li>
+
+  <li>등록이 확인되면 등록 시 입력한 이메일 주소로 통지됩니다.
+
+  </li>
+</ol>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    Google Wallet 판매자 계정 설정
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:200px;">
+  <img src="{@docRoot}images/gp-start-wallet-icon.png">
+</div>
+
+<p>
+  가격이 책정된 앱, 인앱 제품 또는 구독물을 판매하려면 Google Wallet 판매자 계정이 필요합니다.
+ 언제든지 계정을 설정할 수 있지만 먼저 <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">판매자 등록 허용 국가</a> 목록을 검토하십시오.
+
+<br>
+  <br>
+  Google Wallet 판매자 계정을 설정하려면<br>
+  <br>
+</p>
+
+<ol>
+  <li>
+    <a href="https://play.google.com/apps/publish/" target="_blank">https://play.google.com/apps/publish/</a>에서 Google Play 개발자 콘솔에 <strong>로그인</strong>합니다.
+  </li>
+
+  <li>측면 탐색 창에서 <strong>재무 보고서</strong> <img src="{@docRoot}images/distribute/console-reports.png">를 엽니다.
+  </li>
+
+  <li><strong>지금 판매자 계정 설정</strong>을 클릭합니다.
+  </li>
+</ol>
+
+<p>
+  그러면 Google Wallet 사이트로 이동합니다. 이 단계를 완료하려면 비즈니스 정보가 필요합니다.
+
+</p>
+
+<div class="headerLine">
+  <h2>
+    개발자 콘솔 탐색
+  </h2>
+
+
+</div>
+
+<p>
+  등록이 확인되면 개발자 콘솔에 로그인할 수 있습니다. 이곳은 Google Play에서 앱 게시 작업 및 도구를 위한 홈입니다.
+
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine">
+<h2 id="related-resources">관련 자료</h2><hr />
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/gettingstarted"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/tv.jd b/docs/html-intl/intl/ko/distribute/googleplay/tv.jd
new file mode 100644
index 0000000..58f4c2e
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/tv.jd
@@ -0,0 +1,305 @@
+page.title=Android TV에 배포
+page.image=/design/tv/images/atv-home.jpg
+meta.tags="tv", "publish", "quality"
+page.tags="tv", "publish", "googleplay"
+page.metaDescription=앱, 게임 및 콘텐츠를 Android TV에 배포합니다.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>참여 방법</h2>
+<ol>
+<li><a href="#understand_guidelines">가이드라인 이해</a></li>
+<li><a href="#develop_app">우수한 TV 앱 개발</a></li>
+<li><a href="#test_app">TV 앱 품질 테스트</a></li>
+<li><a href="#opt_in">옵트인</a></li>
+<li><a href="#track_review">검토 추적</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Android TV 및 Google Play를 통해 우수한 앱이나 게임을 거실에 있는 사용자에게 제공할 수 있습니다.
+ TV에 최적화된 스토어 첫 화면에서 앱과 게임을 제공할 수 있습니다. 신규 또는 기존 TV 앱을 확장한 다음 Google Play에서 익숙한 도구와 프로세스를 사용하여 게시할 수 있습니다.
+
+
+
+</p>
+
+<p>
+  시작하려면 이 문서를 참조하여 Google Play를 통해 사용자에게 TV 앱을 배포하는 방법을 배우십시오.
+ 앱이 충족해야 하는 유용성 및 품질 표준에 대한 내용은 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a>을 참조하십시오.
+
+
+ 앱이 준비되면 개발자 콘솔에서 Android TV 스토어 첫 화면에 게시하도록 옵트인할 수 있습니다.
+
+</p>
+
+<h2 id="how_to_participate">
+  참여 방법
+</h2>
+
+<p>
+  Google Play를 통해 거실에 있는 신규 사용자에게 TV 앱을 소개할 수 있습니다.
+ 기존 개발자 콘솔 계정과 현재 배포 및 가격 책정 설정을 사용하여 개발하고 게시할 수 있습니다.
+ 쉽게 참여할 수 있습니다. 과정에 대한 간략한 설명은 아래 절을 참조하십시오.
+
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-tv-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1. 가이드라인 및 요구사항 이해
+</h3>
+
+<p>
+  Android TV에 성공적인 출시를 준비하려면 먼저 TV에서 뛰어난 앱 경험을 생성하는 방법에 대한 가이드라인을 자세히 읽어보십시오. 앱을 TV용으로 확장하는 아이디어와 디자인 및 유용성에 대한 자세한 내용은 <a href="{@docRoot}design/tv/index.html">Android TV 디자인 가이드라인</a>을 참조하십시오.
+
+
+</p>
+
+<p>
+  TV 경험 디자인 시작 시 TV 앱 품질 기준을 읽고 숙지하십시오.
+ Android TV용 Google Play 경험은 <strong>TV에서 사용할 수 있는 앱만 소개합니다.</strong>  앱이 기본 품질 기준 집합을 충족하는 경우에 참여할 수 있습니다.
+
+
+ 자세한 내용은 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a>을 참조하십시오.
+
+</p>
+
+<h3 id="develop_app">2. 우수한 TV 앱 개발</h3>
+
+<p>
+  우수한 TV 앱은 거실용으로 설계되었으며 Android TV 및 관련 입력 주변 기기(예: 게임 컨트롤러, D 패드 및 리모컨)의 기능을 활용합니다.
+
+ 앱은 대형 화면에서 사용자에게 세련된 고품질 경험을 제공하고 매력적인 기능을 제공하도록 개선됩니다.
+
+
+</p>
+
+<p>
+  TV 앱을 고려할 때는 <a href="{@docRoot}training/tv/start/index.html">개발자 문서</a> 및 유용성 가이드라인을 검토하고 최대한 지원 계획을 수립하십시오.
+
+ SDK에 포함된 린백 라이브러리로 사용자를 위한 뛰어난 린백 경험을 디자인하고 작성하십시오.
+ 앱의 다른 부분들을 TV용으로 최적화하기를 원할 경우 개발 과정 초기에 식별하는 것이 이상적입니다.
+
+
+</p>
+
+<p>
+  대부분의 경우에 동일한 패키지 이름과 스토어 목록을 사용하여 휴대폰, 태블릿 및 기타 장치용 기존 앱의 일부로 TV 경험을 제공하는 것이 좋습니다.
+
+ 이러한 방식으로 사용자가 TV 경험으로 매끄럽게 업그레이드할 수 있도록 하고, 휴대폰 및 태블릿용 앱에서 획득한 리뷰와 평점을 활용할 수 있습니다.
+
+
+</p>
+
+<p>
+  TV 인텐트, 린백 라이브러리, TV 특정 코드 및 리소스를 모든 지원되는 장치의 단일 APK 솔루션의 일부로 번들할 수 있습니다.
+ 필요한 경우 <a href="{@docRoot}google/play/publishing/multiple-apks.html">다중 APK 지원</a>을 사용하여 휴대폰 및 태블릿에 사용하는 것과 동일한 패키지 이름과 스토어 목록으로 Android TV 장치에 사용자 지정 바이너리를 제공할 수 있습니다.
+
+
+
+</p>
+
+<p>
+  디자인 및 개발 과정에서 사용자 경험의 프로토타입을 생성하고 테스트하기에 적합한 장치를 확보하는 것이 중요합니다.
+ 한 대 이상의 Android TV 장치나 에뮬레이터를 확보하고 최대한 신속하게 테스트 환경을 구축해야 합니다.
+
+ Android TV 환경에서 테스트용으로 권장되는 하드웨어 장치는 <a href="http://www.google.com/intl/all/nexus/player/">Google Play</a> 및 기타 스토어에서 구할 수 있는 Nexus Player입니다. 게임 컨트롤러 및 기타 TV 입력 장치도 확보해야 합니다.
+
+
+
+</p>
+
+<h3 id="test_app">3. TV 앱 품질 테스트</h3>
+
+<p>
+  TV 앱은 잘 작동하고 Android TV에서 멋있게 보이고 최고의 사용자 경험을 제공하도록 디자인해야 합니다.
+   Google Play는 사용자가 Google Play에서 쉽게 검색할 수 있도록 고품질 앱을 소개합니다.
+ 다음과 같은 방법으로 참여하여 사용자에게 멋진 Android TV 앱을 제공할 수 있습니다.
+
+</p>
+
+<ul>
+  <li>핵심 앱 품질 가이드라인을 충족합니다.
+    <ul>
+      <li><a href="{@docRoot}design/index.html">Android 디자인 가이드라인</a>을 따릅니다.
+ 앱에서 <a href="http://www.google.com/design/spec/material-design/introduction.html">머티리얼 디자인</a> 사용에 특히 주의를 기울입니다.
+
+      </li>
+
+      <li>앱이 <a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질 가이드라인</a>을 충족하는지 테스트합니다.
+
+      </li>
+    </ul>
+  </li>
+  <li><a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a> 가이드라인을 충족합니다.
+
+    <ul>
+      <li>당사의 <a href="{@docRoot}training/tv/index.html">TV 앱 개발</a> 모범 사례를 따릅니다.
+</li>
+      <li>앱이 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a> 기준을 모두 충족하는지 확인합니다.</li>
+    </ul>
+  </li>
+  <li>단순성 및 최고의 유용성을 추구합니다.</li>
+</ul>
+
+<h3 id="opt_in">4. Android TV에 옵트인 및 게시</h3>
+
+<p>
+  릴리스 준비된 APK를 작성하여 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a> 가이드라인을 모두 충족하는지 테스트한 후에 개발자 콘솔로 업로드합니다.
+
+ TV 스크린샷 및 TV 배너를 포함한 스토어 목록을 업데이트하고 필요한 경우 배포 옵션을 설정합니다.
+
+ Google Play에서 출시를 준비하는 방법에 익숙하지 않은 경우 <a href="{@docRoot}distribute/googleplay/publish/preparing.html">출시 검사 목록</a>을 참조하십시오.
+
+
+</p>
+
+<p>
+  Android TV 사용자에게 게시하기 전에 개발자 콘솔의 <strong>가격 책정 및 배포</strong> 절에서 Android TV에 옵트인해야 합니다.
+
+ 옵트인은 Android TV 사용자가 Google Play를 통해 앱을 사용할 수 있고 앱이 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a> 가이드라인을 충족함을 의미합니다.
+
+
+
+</p>
+
+<p>
+  APK 업로드에서 자동으로 검사되는 다음 두 가지 예비 품질 기준을 충족하는 경우에만 옵트인할 수 있습니다.
+
+</p>
+
+<ul>
+  <li>앱 매니페스트가 <a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"><code>CATEGORY_LEANBACK_LAUNCHER</code></a> 카테고리와 함께 <a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a> 인텐트 유형을 포함해야 합니다.
+
+ 자세한 내용은 <a href="{@docRoot}training/tv/start/start.html#tv-activity">여기</a>를 참조하십시오.
+  </li>
+
+  <li>앱이 터치스크린이 필요하지 않음을 선언해야 합니다. 매니페스트가 <code>android.hardware.touchscreen</code> 하드웨어를 <code>android:required="false”</code>로 선언해야 합니다.
+
+ 자세한 내용은 <a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">여기</a>를 참조하십시오.
+  </li>
+</ul>
+
+<p>
+  앱이 예비 기준을 충족하면 아래와 같이 Android TV 옵트인 확인란이 표시됩니다.
+ 옵트인 확인란이 활성화되지 않으면 APK를 검토하여 예비 기준을 충족하는지 확인하십시오.
+
+</p>
+
+<p>
+  옵트인하고 변경 내용을 저장한 후에 평소처럼 앱을 게시할 수 있습니다.
+  Android TV 사용자에게 앱을 제공하기 전에 Google Play는 앱을 제출하여 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a> 기준을 충족하는지 검토한 후에 그 결과를 개발자에게 알려줍니다.
+
+ 앱의 승인 상태를 추적하는 방법은 다음 절을 참조하십시오.
+
+</p>
+
+<p>
+  앱이 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a>을 충족하면 Google Play에서 Android TV 사용자가 해당 앱을 사용할 수 있습니다.
+
+ 또한 앱 컬렉션 및 홍보에서 앱에 더 높은 우선순위가 부여됩니다.
+ 모든 장소의 사용자에게 앱이 Android TV용으로 디자인되었음을 알려주기 위해 Google Play는 앱의 스토어 목록을 TV 배지로 장식합니다.
+
+
+</p>
+
+<p>
+  옵트인 및 검토는 Google Play 스토어에서 다른 장치의 앱 사용 가능성에 영향을 주지 않습니다. 앱을 게시하는 즉시 가령 휴대폰이나 태블릿에서 사용할 수 있습니다.
+
+
+</p>
+
+<p>
+  다음은 개발자 콘솔에서 Android TV에 옵트인하는 단계입니다.
+</p>
+
+<ol>
+  <li>앱이 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a> 기준을 모두 충족하는지 확인합니다.
+  </li>
+
+  <li>앱의 스토어 목록에 TV 스크린샷과 배너 그래픽을 추가합니다.
+  </li>
+
+  <li><strong>모든 애플리케이션</strong> 페이지에서 옵트인하려는 앱을 클릭합니다.
+  </li>
+
+  <li><strong>가격 책정 및 배포</strong>에서 아래로 스크롤하여 <em>Android TV</em>와 옵트인 확인란을 찾습니다.
+
+  </li>
+
+  <li><em>Android TV에 앱 배포(Distribute your app to Android TV)</em> 옆의 확인란을 클릭합니다.
+  </li>
+
+  <li><strong>저장</strong>을 클릭하여 변경 내용을 저장합니다.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-tv-opt-in.png">
+  <p class="caption">
+    <strong>TV 옵트인:</strong> 개발자 콘솔에서 옵트인하면 앱이 Android TV에 포함됩니다.
+
+  </p>
+</div>
+
+<h3 id="track_review">5. 검토 및 승인 추적</h3>
+
+<p>
+  위에서 설명한 Android TV 기술 및 품질 기준을 앱이 충족하면 사용자가 Android TV에서 앱을 사용할 수 있습니다. 앱이 이 기준을 충족하지 않으면 개발자는 해결해야 할 문제에 대한 요약이 포함된 <strong>알림 이메일을 개발자 계정 주소</strong>로 받게 됩니다.
+
+
+ 필요한 조정을 거친 후에 새로운 앱 버전을 개발자 콘솔에 업로드할 수 있습니다.
+
+ 
+</p>
+
+<p>
+  언제든지 개발자 콘솔에서 앱의 <strong>가격 책정 및 배포</strong> 페이지의 <em>Android TV</em>에서 앱의 검토 및 승인 상태를 확인할 수 있습니다.
+
+
+</p>
+
+<p>
+  승인 상태는 다음 3개로 구분됩니다.
+</p>
+
+<ul>
+  <li>
+    <em>보류 중</em> — 검토를 위해 앱을 보냈지만 검토가 아직 완료되지 않았습니다.
+
+  </li>
+
+  <li>
+    <em>승인됨</em> — 앱이 검토 후에 승인되었습니다. Android TV 사용자가 앱을 바로 사용할 수 있습니다.
+ 
+  </li>
+
+  <li>
+    <em>승인 안 함</em> — 앱이 검토 후에 승인되지 않았습니다. 앱이 승인되지 않은 이유는 알림 이메일을 참조하십시오.
+ 문제를 해결하고 다시 옵트인 및 게시하여 재검토를 요청할 수 있습니다.
+
+
+  </li>
+</ul>
+
+<p>앱이 어떻게 평가되는지 이해하려면 <a href="{@docRoot}distribute/essentials/quality/tv.html">TV 앱 품질</a> 문서를 참조하십시오. </p>
+
+
+  <h3>관련 자료</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:tvlanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/wear.jd b/docs/html-intl/intl/ko/distribute/googleplay/wear.jd
new file mode 100644
index 0000000..864f668
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/googleplay/wear.jd
@@ -0,0 +1,262 @@
+page.title=Android Wear에 배포
+page.image=/design/media/wear/ContextualExample.008_2x.png
+meta.tags="wear", "publish", "quality"
+page.tags="wear", "publish", "googleplay"
+page.metaDescription=Android Wear에 앱, 게임 및 콘텐츠를 배포합니다.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>참여 방법</h2>
+<ol>
+<li><a href="#understand_guidelines">가이드라인 이해</a></li>
+<li><a href="#develop_app">우수한 Wear 앱 개발</a></li>
+<li><a href="#test_app">Wear 앱 품질 테스트</a></li>
+<li><a href="#opt_in">옵트인</a></li>
+<li><a href="#track_review">검토 추적</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Android Wear 및 Google Play를 통해 우수한 앱을 사용자에게 제공할 수 있습니다. 모든 앱이 Android Wear 장치에 기본 알림을 보낼 수 있는데, 그 이상의 기능을 제공할 수 있습니다.
+
+  모든 Wear 장치에서 맞춤형 Wear 상호작용을 지원하고 세련되고 매력적인 사용자 경험을 제공하도록 앱을 확장하십시오.
+ 앱이 핸드셋에서 핵심 앱 품질 가이드라인을 충족하고 Android Wear 장치에 고품질 경험을 제공하면, Google Play가 앱을 쉽게 검색할 수 있도록 소개합니다.
+
+
+</p>
+
+<p>
+  시작하려면 이 문서를 참조하여 Google Play를 통해 사용자에게 Wear 앱을 배포하는 방법을 배우십시오.
+  앱이 충족해야 하는 유용성, 품질 표준에 대한 내용은 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a>을 참조하십시오.
+ 앱이 준비되면 개발자 콘솔에서 Android Wear 앱으로 지정하도록 옵트인할 수 있습니다.
+
+</p>
+
+<h2 id="how_to_participate">
+  참여 방법
+</h2>
+
+<p>
+  Google Play를 통해 Wear 앱을 더욱 쉽게 검색할 수 있습니다. 기존 개발자 콘솔 계정과 현재 배포 및 가격 설정을 사용하여 개발하고 게시할 수 있습니다.
+
+ 쉽게 참여할 수 있습니다. 과정에 대한 간략한 설명은 아래 절을 참조하십시오.
+</p>
+
+<h3 id="understand_guidelines">
+  1. 가이드라인 및 요구사항 이해
+</h3>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-wear-process.png">
+</div>
+
+<p>
+  Android Wear에 성공적인 출시를 준비하려면 먼저 Wear에서 뛰어난 경험을 생성하는 방법에 대한 가이드라인을 자세히 읽어보십시오.
+ 앱을 Wear용으로 확장하는 아이디어와 디자인 및 유용성에 대한 자세한 내용은 <a href="{@docRoot}design/wear/index.html">Android Wear 디자인 가이드라인</a>을 참조하십시오.
+
+
+</p>
+
+<p>
+  Wear 경험 디자인 시작 시 Wear 앱 품질 기준을 읽고 숙지하십시오.
+ Wear에서 사용할 수 있는 앱만 Google Play에서 Wear 앱으로 지정됩니다. 앱이 기본 품질 기준을 충족하는 경우에 참여할 수 있습니다.
+ 자세한 내용은 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a>을 참조하십시오.
+</p>
+
+<h3 id="develop_app">2. 우수한 Wear 앱 개발</h3>
+
+<p>
+가이드라인을 읽은 후 다음 단계는 앱을 개발하는 것입니다. 다음 절에서는 뛰어난 Wear 앱 경험을 구현하는 방법을 설명합니다.
+
+</p>
+
+<h4>디자인 우선</h4>
+
+<p>
+  Android Wear는 사용자에게 정확한 정보를 적시에 제공하는 것을 목표로 합니다. 뛰어난 Android Wear 경험은 자동으로 시작되고, 한 눈에 파악할 수 있으며, 사용자 상호작용이 전혀 또는 거의 필요하지 않습니다.
+
+ 모든 앱이 수정 없이 Wear 장치로 기본 알림을 보낼 수 있지만, Wear용으로 작성된 뛰어난 앱은 사용자에게 세련된 고품질 경험을 제공하고 서로 다른 화면 레이아웃에서 작동하고 매력적인 기능을 제공하도록 개선됩니다.
+
+
+
+</p>
+
+<p>
+  Wear 앱을 고려할 때는 <a href="{@docRoot}training/building-wearables.html">개발자 문서</a> 및 <a href="{@docRoot}design/wear/index.html">유용성 가이드라인</a>을 검토하고 최대한 활용할 계획을 수립하십시오.
+ SDK 및 지원 라이브러리에서 제공되는 API를 사용하여 사용자를 위한 뛰어난 알림 경험을 디자인할 수 있습니다.
+ 또한 웨어러블에서 직접 실행되는 앱을 작성할 수도 있습니다.
+
+</p>
+
+<h4>앱 패키징</h4>
+
+<p>
+  동일한 패키지 이름과 스토어 목록을 사용하여 휴대폰, 태블릿 및 기타 장치용 기존 앱의 일부로 Wear 경험을 제공하는 것이 좋습니다.
+ 그러면 사용자가 Wear 경험으로 매끄럽게 업그레이드하고 휴대폰 및 태블릿용 앱의 리뷰와 평점을 활용할 수 있습니다.
+
+ 기능을 앱에 의존하는 웨어러블 앱의 경우, 항상 해당 앱 내에 패키지로 만들어야 합니다. 방법은 <a href="{@docRoot}training/wearables/apps/packaging.html">웨어러블 앱 패키징</a>을 참조하십시오.
+
+</p>
+
+<h4>다양한 장치에서 테스트</h4>
+
+<p>
+  디자인 및 개발 과정에서 사용자 경험의 표준을 수립하고 테스트하기에 적합한 장치를 확보하는 것이 중요합니다.
+ 하나 이상의 Android Wear 장치를 확보하거나 서로 다른 에뮬레이터 구성을 사용하여 개발하고 최대한 신속하게 테스트 환경을 구축하는 것이 좋습니다.
+
+ 정사각형 및 원형 레이아웃에서 디자인을 최적화하는 것이 중요합니다.
+</p>
+
+<h3 id="test_app">3. Wear 앱 품질 테스트</h3>
+
+<p>
+  Wear 앱은 잘 작동하고 Android Wear에서 멋있게 보이고 최고의 사용자 경험을 제공하도록 디자인해야 합니다.
+   Google Play는 사용자가 쉽게 검색할 수 있도록 선정된 고품질 Wear 앱을 소개합니다.
+ 다음과 같은 방법으로 참여하여 사용자에게 멋진 Android Wear 앱을 제공할 수 있습니다.
+ 
+</p>
+
+<ul>
+  <li>핵심 앱 품질 가이드라인을 충족합니다.
+    <ul>
+      <li><a href="{@docRoot}design/index.html">Android 디자인 가이드라인</a>을 따릅니다.
+ 앱에서 <a href="http://www.google.com/design/spec/material-design/introduction.html">머티리얼 디자인</a> 사용에 특히 주의를 기울입니다.
+
+      </li>
+
+      <li>앱이 <a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질 가이드라인</a>을 충족하는지 테스트합니다.
+
+      </li>
+    </ul>
+  </li>
+  <li><a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 기준을 충족합니다.
+
+    <ul>
+      <li>당사의 <a href="{@docRoot}training/building-wearables.html">Wear 앱 개발</a> 모범 사례를 따릅니다.
+</li>
+      <li>앱이 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 기준을 모두 충족하는지 확인합니다.</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4. Android Wear에 옵트인 및 게시</h3>
+
+<p>
+  릴리스 준비된 APK를 작성하여 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 가이드라인을 모두 충족하는지 테스트한 후에 개발자 콘솔로 업로드합니다.
+ Wear 스크린샷으로 스토어 목록을 업데이트하고 필요한 경우 배포 옵션을 설정합니다.
+ Google Play에서 출시를 준비하는 방법에 익숙하지 않은 경우 <a href="{@docRoot}distribute/googleplay/publish/preparing.html">출시 검사 목록</a>을 참조하십시오.
+
+</p>
+
+<p>
+  사용자에게 게시하기 전에 개발자 콘솔의 <strong>가격 책정 및 배포</strong> 절에서 Android Wear에 옵트인할 수 있습니다.
+ 옵트인은 Android Wear 사용자가 Google Play를 통해 앱을 검색할 수 있고 앱이 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 기준을 충족함을 의미합니다.
+
+</p>
+
+<p>
+  옵트인하고 변경 내용을 저장한 후에 평소처럼 앱을 게시할 수 있습니다. 또한 Google Play는 앱을 제출하여 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 기준을 충족하는지 검토한 후에 그 결과를 개발자에게 알려줍니다.
+
+ 앱의 승인 상태를 추적하는 방법은 다음 절을 참조하십시오.
+
+</p>
+
+<p>
+  앱이 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 기준을 모두 충족하는 경우 Google Play에서 Android Wear 사용자가 앱을 더 쉽게 검색할 수 있습니다.
+ 또한 앱 컬렉션 및 홍보에서 앱에 더 높은 우선순위가 부여됩니다.
+
+</p>
+
+<p>
+  옵트인 및 검토는 Google Play 스토어에서 앱의 사용 가능성에 영향을 주지 않습니다. 앱은 게시되는 즉시 사용할 수 있습니다.
+
+</p>
+
+<p>
+  다음은 개발자 콘솔에서 Android Wear에 옵트인하는 단계입니다.
+</p>
+
+<ol>
+  <li>앱이 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 기준을 모두 충족하는지 확인합니다.
+  </li>
+
+  <li>앱의 스토어 목록에 Wear 스크린샷을 추가합니다.
+  </li>
+
+  <li><strong>모든 애플리케이션</strong> 페이지에서 옵트인하려는 앱을 클릭합니다.
+  </li>
+
+  <li><strong>가격 책정 및 배포</strong>에서 아래로 스크롤하여 <em>Android Wear</em>와 옵트인 확인란을 찾습니다.
+
+  </li>
+
+  <li><em>Android Wear에 앱 배포(Distribute your app on Android Wear)</em> 옆의 확인란을 클릭합니다.
+  </li>
+
+  <li><strong>저장</strong>을 클릭하여 가격 책정 및 배포 변경 내용을 저장합니다.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-wear-opt-in.png">
+  <p class="caption">
+    <strong>Wear 옵트인:</strong> 개발자 콘솔에서 옵트인하면 앱이 Android Wear에 포함됩니다.
+
+  </p>
+</div>
+
+<h3 id="track_review">5. 검토 및 승인 추적</h3>
+
+<p>
+  위에서 설명한 Android Wear의 기술 및 품질 기준을 앱이 충족하면 사용자가 Android Wear에서 앱을 더 쉽게 검색할 수 있습니다.
+ 앱이 이 기준을 충족하지 않으면 개발자는 해결해야 할 문제에 대한 요약이 포함된 <strong>알림 이메일을 개발자 계정 주소</strong>로 받게 됩니다.
+
+ 필요한 조정을 거친 후에 새로운 앱 버전을 개발자 콘솔에 업로드할 수 있습니다.
+
+</p>
+
+<p>
+  언제든지 개발자 콘솔에서 앱의 <strong>가격 책정 및 배포</strong> 페이지의 <em>Android Wear</em>에서 앱의 검토 및 승인 상태를 확인할 수 있습니다.
+
+
+</p>
+
+<p>
+  승인 상태는 다음 3개로 구분됩니다.
+</p>
+
+<ul>
+  <li>
+    <em>보류 중</em> — 검토를 위해 앱을 보냈지만 검토가 아직 완료되지 않았습니다.
+  </li>
+
+  <li>
+    <em>승인됨</em> — 앱이 검토 후에 승인되었습니다. Android Wear 사용자가 앱을 더 쉽게 검색할 수 있습니다.
+
+  </li>
+
+  <li>
+    <em>승인 안 함</em> — 앱이 검토 후에 승인되지 않았습니다. 앱이 승인되지 않은 이유는 알림 이메일을 참조하십시오.
+ 문제를 해결하고 다시 옵트인 및 게시하여 재검토를 요청할 수 있습니다.
+
+  </li>
+</ul>
+
+<p>앱이 어떻게 평가되는지 이해하려면 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 앱 품질</a> 문서를 참조하십시오. </p>
+
+
+  <h3>관련 자료</h3>
+
+  <div class="resource-widget resource-flow-layout col-13"
+    data-query="collection:wearlanding"
+    data-cardSizes="6x2"
+    data-maxResults="3">
+  </div>
diff --git a/docs/html-intl/intl/ko/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/ko/distribute/tools/launch-checklist.jd
new file mode 100644
index 0000000..a8a2dcd
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/tools/launch-checklist.jd
@@ -0,0 +1,1023 @@
+page.title=출시 검사 목록
+page.metaDescription=사용자에게 앱을 제공하는 전체 프로세스를 간략히 살펴봅니다. Google Play에 성공적으로 출시하려면 개발 시 이 검사 목록을 미리 읽어보십시오.
+meta.tags="localizing, publishing, disttools"
+page.tags="launch, publishing, Google Play"
+page.image=/distribute/images/launch-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>검사 목록</h2>
+    <ol>
+      <li><a href="#understand-publishing">1. 게시 프로세스 이해</a></li>
+      <li><a href="#understand-policies">2. Google Play 정책 이해</a></li>
+      <li><a href="#test-quality">3. 핵심 앱 품질 테스트</a></li>
+      <li><a href="#determine-rating">4. 콘텐츠 등급 결정</a></li>
+      <li><a href="#determine-country">5. 배포 대상 국가 결정</a></li>
+      <li><a href="#confirm-size">6. 전체 크기 확인</a></li>
+      <li><a href="#confirm-platform">7. 플랫폼 및 화면 범위 확인</a></li>
+      <li><a href="#decide-price">8. 무료 또는 유료 결정</a></li>
+      <li><a href="#consider-billing">9. 인앱 결제 사용</a></li>
+      <li><a href="#set-prices">10. 제품 가격 책정</a></li>
+      <li><a href="#start-localization">11. 현지화 시작</a></li>
+      <li><a href="#prepare-graphics">12. 홍보 그래픽, 스크린샷 및 동영상 준비</a></li>
+      <li><a href="#build-upload">13. 릴리스 준비된 APK 작성</a></li>
+      <li><a href="#plan-beta">14. 베타 릴리스 계획</a></li>
+      <li><a href="#complete-details">15. 스토어 목록 작성</a></li>
+      <li><a href="#use-badges">16. Google Play 배지 및 링크 사용</a></li>
+      <li><a href="#final-checks">17. 최종 확인 및 게시</a></li>
+      <li><a href="#support-users">18. 출시 후 사용자 지원</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg"></div>
+
+<p>
+  Google Play에 앱을 게시하고 사용자에게 배포하기 전에 앱을 준비하고 테스트하고 홍보 자료를 준비해야 합니다.
+
+
+</p>
+
+<p>
+  이 페이지는 Google Play의 게시 프로세스를 이해하고 성공적인 제품 출시를 준비하도록 도와줍니다.
+ 이 페이지에서는 서명 후 릴리스 준비된 애플리케이션 패키지(APK) 생성, 앱의 요구사항 이해, 각 앱의 제품 페이지 및 그래픽 자산 생성 등 Google Play에 앱을 게시하기 전에 완료해야 하는 몇 가지 작업을 간단히 설명합니다.
+
+
+
+
+</p>
+
+<p>
+  준비 및 게시 작업은 대략적인 순서를 파악할 수 있도록 번호가 매겨져 있습니다.
+ 하지만 필요에 따라 임의의 순서로 작업을 처리하거나 단계를 건너뛸 수도 있습니다.
+
+</p>
+
+<p>
+  게시 단계로 이동하면서 다양한 지원 자료를 사용할 수 있습니다.
+ 각 단계마다 관련 링크가 제공됩니다.
+</p>
+
+<div class="headerLine">
+  <h2 id="understand-publishing">
+    1. 게시 프로세스 이해
+  </h2>
+
+
+</div>
+
+<p>
+  이 검사 목록의 단계를 시작하기 전에 잠시 시간을 내서 전체 게시 워크플로를 읽고 이해하고 프로세스가 어떻게 진행되는지 파악해야 합니다.
+
+ 특히 개발 팀은 모든 Android 앱에 공통되는 프로세스를 사용하여 앱을 릴리스할 준비를 해야 합니다.
+
+  <a href="{@docRoot}tools/publishing/publishing_overview.html">게시 워크플로 문서</a>에서는 게시 프로세스의 진행 방식과 APK 릴리스 준비 방법에 대한 자세한 정보를 제공합니다.
+
+
+</p>
+
+<p>
+  전반적인 게시 프로세스에 익숙해지면, 계속 읽으면서 Google Play에 앱을 게시할 때 고려해야 하는 문제를 이해하십시오.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/understanding"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="understand-policies">
+    2. Google Play 정책 및 계약 이해
+  </h2>
+
+
+</div>
+
+<p>
+  등록 시 승인한 Google Play 프로그램 정책을 이해하고 따르십시오.
+ Google Play는 해당 정책을 적극적으로 적용하며 위반 시 앱을 일시 중단하며 반복적으로 위반할 경우 개발자 계정을 해지할 수 있습니다.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/policies" data-sortorder=
+"-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-quality">
+    3. 품질 테스트
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play에 앱을 게시하기 전에 모든 대상 장치에서 모든 Android 앱에 대한 기본 품질 기대치를 충족하는지 확인하는 것은 중요합니다.
+
+ 테스트 환경을 설정하고 앱이 <strong>모든 앱에 적용되는 몇몇 품질 기준</strong>을 충족하는지 테스트하는 방식으로 앱의 품질을 점검할 수 있습니다.
+
+ 자세한 내용은 <a href="{@docRoot}distribute/essentials/quality/core.html">핵심 앱 품질</a> 가이드라인을 참조하십시오.
+
+
+</p>
+
+<p>
+  앱이 태블릿 장치를 대상으로 하는 경우 태블릿 고객에게 풍부하고 매력적인 경험을 제공하는지 확인하십시오.
+ 앱을 태블릿용으로 최적화하는 방법에 대한 권장사항은 <a href="{@docRoot}distribute/essentials/quality/tablets.html">태블릿 앱 품질</a> 가이드라인을 참조하십시오.
+
+</p>
+
+<p>
+  앱을 Google Play for Education에서 사용할 수 있도록 하려면 해당 앱이 유치원부터 고등학교까지의 교실에 적합하고 뛰어난 교육적 가치를 제공하는지 확인해야 합니다.
+
+ 교육 앱이 갖춰야 하는 특성에 대한 내용은 <a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">교육 가이드라인</a>을 참조하십시오.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/quality" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-rating">
+    4. 앱의 콘텐츠 등급 결정
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play는 개발자가 앱의 콘텐츠 등급을 설정하여 Google Play 사용자에게 앱의 완성도를 알려주도록 요구합니다.
+ 게시하기 전에 사용하려는 등급 레벨을 확인해야 합니다.
+ 사용 가능한 콘텐츠 등급 레벨은 다음과 같습니다.
+
+</p>
+
+<ul>
+  <li>
+    <p>
+      전체 이용가
+    </p>
+  </li>
+
+  <li>
+    <p>
+      낮은 완성도
+    </p>
+  </li>
+
+  <li>
+    <p>
+      중간 완성도
+    </p>
+  </li>
+
+  <li>
+    <p>
+      높은 완성도
+    </p>
+  </li>
+</ul>
+
+<p>
+  Android 장치에서 Android 사용자는 검색에 사용할 완성도를 설정할 수 있습니다.
+ Google Play는 설정에 따라 앱을 필터링하므로 선택한 콘텐츠 등급은 사용자에게 앱을 배포하는 데 영향을 줄 수 있습니다.
+ 앱 바이너리를 변경할 필요 없이 개발자 콘솔에서 앱의 콘텐츠 등급을 할당(또는 변경)할 수 있습니다. 
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/rating" data-sortorder=
+"-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-country">
+    5. 배포 대상 국가 결정
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play에서 앱이 배포되는 국가와 지역을 제어할 수 있습니다.
+ 일반적으로 가장 넓은 도달 범위와 가장 큰 잠재적 고객층을 확보하기 위해 가능한 모든 국가와 지역에 배포하는 것이 좋지만
+
+  사업상의 필요나 앱 요구사항 또는 출시 종속성 때문에 하나 이상의 국가를 배포 대상 국가에서 제외해야 할 수도 있습니다.
+
+</p>
+
+<p>
+  다음에 영향을 줄 수 있으므로 정확한 배포 대상 국가를 조기에 결정하는 것이 중요합니다.
+
+</p>
+
+<ul>
+  <li>
+    <p>
+      앱에서 현지화된 자료의 필요성.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      개발자 콘솔에서 현지화된 앱 설명의 필요성.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      특정 국가에서 충족해야 하는 앱의 법적 요구사항.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      표준 시간대 지원, 현지 가격 책정 등.
+    </p>
+  </li>
+</ul>
+
+<p>
+  대상 국가를 염두에 두고 앱과 Google Play 목록 세부정보의 현지화 필요성을 평가하고 출시 예정일에 앞서 현지화 작업을 제대로 시작해야 합니다.
+
+
+</p>
+
+<p>
+  현지화 프로세스에서 핵심 단계와 고려사항은 <a href="{@docRoot}distribute/tools/localization-checklist.html">현지화 검사 목록</a>을 참조하십시오.
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/country" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-size">
+    6. 앱의 전체 크기 확인
+  </h2>
+
+
+</div>
+
+<p>
+  앱의 전체 크기는 앱의 디자인 및 Google Play에 앱을 게시하는 방법에 영향을 줄 수 있습니다.
+ 현재 Google Play에 게시되는 APK의 최대 크기는 <strong>50MB</strong>입니다.
+ 앱이 이 크기를 초과하거나 부차적인 다운로드를 제공하려면 Google Play가 서버 인프라에서 무료로 호스팅하고 장치에 다운로드하는 과정을 자동으로 처리하는 <a href="{@docRoot}google/play/expansion-files.html">APK 확장 파일</a>을 사용할 수 있습니다.
+
+
+
+</p>
+
+<ul>
+  <li>
+    <p>
+      Google Play에 게시되는 APK의 최대 크기는 50MB입니다.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      최대 크기가 2GB인 APK 확장 파일을 최대 두 개까지 사용할 수 있습니다.
+
+    </p>
+  </li>
+</ul>
+
+<p>
+  APK 확장 파일을 사용하여 대형 앱을 편리하고 비용 효율적으로 배포할 수 있습니다.
+ 하지만 APK 확장 파일을 사용하려면 릴리스 준비된 APK를 만들기 전에 앱 바이너리를 일부 변경해야 합니다.
+
+
+</p>
+
+<p>
+  앱 바이너리의 크기를 최소화하려면 릴리스 준비된 APK를 작성할 때 코드에서 <a href="{@docRoot}tools/help/proguard.html">ProGuard</a> 도구나 이와 유사한 오퍼스케이터(obfuscator)를 실행해야 합니다.
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/size" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-platform">
+    7. 앱의 플랫폼 및 화면 호환성 범위 확인
+  </h2>
+
+
+</div>
+
+<p>
+  앱을 게시하기 전에 대상으로 삼으려는 Android 플랫폼 버전과 장치 화면 크기에서 제대로 실행되도록 고안되었는지 확인하는 것이 중요합니다.
+
+
+</p>
+
+<p>
+  앱 호환성 측면에서 Android 플랫폼 버전은 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API 레벨</a>로 정의됩니다.
+
+ 일단 앱이 게시되면 Android 장치에 대한 배포에 영향을 주기 때문에 앱이 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;minSdkVersion&gt;</a>과 호환되는 최소 버전을 확인해야 합니다.
+
+
+</p>
+
+<p>
+  화면 크기의 경우 앱이 지원하려는 화면 크기 및 픽셀 밀도 범위에서 제대로 실행되고 모양이 어울리는지 확인해야 합니다.
+
+ <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 지원</a>의 조언에 따라 다중 화면 크기를 위한 확장성을 지원해야 합니다.
+ 그렇게 할 수 없는 경우에는 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a>를 사용하여 앱에서 지원되는 최소 화면 크기를 선언하십시오.
+
+
+  그러면 Google Play가 그에 따라 앱의 사용 가능성을 제한하고, 선언된 최소 화면 크기 이상의 화면에서 장치를 사용할 수 있게 만듭니다.
+
+</p>
+
+<p>
+  모든 Android 장치에서 Android 플랫폼 버전 및 화면 크기의 호환성에 대한 자세한 내용은 <a href="{@docRoot}about/dashboards/index.html">장치 대시보드</a> 차트를 참조하십시오.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/platform" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="decide-price">
+    8. 앱의 무료/유료 결정
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-launch-checklist-1.png">
+</div>
+
+<p>
+  Google Play에서 앱을 무료 또는 유료로 다운로드하도록 게시할 수 있습니다. 무료 앱은 Google Play에서 모든 Android 사용자가 다운로드할 수 있습니다.
+ 유료 앱은 유료 다운로드를 지원하는 국가에 거주하고 Google Play에서 신용카드 또는 휴대폰 결제(Direct Carrier Billing)와 같은 결제 양식을 등록한 사용자만 다운로드할 수 있습니다.
+
+
+
+</p>
+
+<p>
+  Google Play에서 <strong>무료 앱은 계속 무료를 유지해야</strong> 하므로 앱을 무료로 할지 유료로 할지 결정하는 것은 중요합니다.
+
+</p>
+
+<ul>
+  <li>
+    <p>
+      앱을 무료 앱으로 게시한 후에는 유료 앱으로 변경할 수 없습니다. 하지만 Google Play의 <a href="{@docRoot}google/play/billing/index.html">인앱 결제</a> 서비스를 통해 <a href="{@docRoot}google/play/billing/billing_overview.html#products">인앱 제품</a> 및 <a href="{@docRoot}google/play/billing/billing_subscriptions.html">구독</a>을 계속 판매할 수 있습니다.
+
+
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      앱을 유료 앱으로 게시한 경우 언제든지 무료 앱으로 변경할 수 <em>있습니다</em>(<strong>그러나 유료로 다시 변경하는 것은 불가능함</strong>).
+
+ 인앱 제품과 구독을 판매할 수도 있습니다.
+    </p>
+  </li>
+</ul>
+
+<p>
+  앱이 유료이거나 인앱 제품을 판매하는 경우 게시하기 전에 <a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">Google Wallet 판매자 계정을 설정</a>해야 합니다.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/price" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="consider-billing">
+    9. 인앱 결제 사용 고려
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play <a href="{@docRoot}google/play/billing/index.html">인앱 결제</a>를 사용하여 애플리케이션에서 디지털 콘텐츠를 판매할 수 있습니다.
+ 이 서비스를 사용하여 다운로드 가능한 콘텐츠(예: 미디어 파일 또는 사진)와 가상 콘텐츠(예: 게임 레벨 또는 마법의 물약)를 포함한 광범위한 콘텐츠를 판매할 수 있습니다.
+
+
+ 인앱 결제 서비스를 통해 앱 내에서 일회 구매 및 구독을 판매할 수 있습니다. 이를 통해 앱이 설치된 기간 동안 수익을 창출할 수 있습니다.
+
+
+</p>
+
+<p>
+  앱을 통해 수익을 창출하고 사용자를 확보하는 다양한 방법을 찾고 있는 경우 인앱 결제(In-app Billing) 또는 즉시 구매(Instant Buy)를 고려해 보십시오.
+ 이러한 서비스는 사용자와 개발자 모두에게 매우 인기가 있습니다.
+ 인앱 결제 또는 즉시 구매를 사용하려면 앱 바이너리를 변경해야 하므로, 릴리스 준비된 APK를 만들기 전에 구현을 완료하고 테스트해야 합니다.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/purchasemethod"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="set-prices">
+    10. 제품 가격 책정
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play에서 앱, 인앱 또는 실물 제품을 판매하려는 경우 전 세계 사용자를 위해 다양한 통화로 제품의 가격을 책정해야 합니다.
+
+ 다양한 통화로 개별적으로 가격을 책정할 수 있으므로 시장 상황과 환율에 따라 유연하게 가격을 조정할 수 있습니다.
+
+
+</p>
+
+<p>
+  게시하기 전에 제품 가격을 어떻게 책정하고 다양한 통화로 얼마로 책정할지 고려하십시오.
+ 나중에 개발자 콘솔을 통해 사용 가능한 모든 통화로 가격을 책정할 수 있습니다.
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/setprice" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="start-localization">
+    11. 현지화 시작
+  </h2>
+
+
+</div>
+
+<p>
+  대상 국가를 염두에 두고 현지화 필요성을 평가하고 앱의 국제화를 확인하고 출시 예정일에 앞서 현지화 작업을 제대로 시작하는 것이 좋습니다.
+
+
+</p>
+
+<p>
+  애플리케이션 디자인뿐만 아니라 적어도 다음과 같은 세 가지 항목도 현지화해야 합니다.
+
+</p>
+
+<ul>
+  <li>
+    <p>
+      앱의 문자열, 이미지 및 기타 자료
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Google Play에서 앱의 스토어 목록 세부정보
+    </p>
+  </li>
+
+  <li>
+    <p>
+      스토어 목록에 수반되는 앱의 그래픽 자산, 스크린샷 및 동영상
+
+    </p>
+  </li>
+</ul>
+
+<p>
+  현지화 프로세스의 핵심 단계와 고려사항은 <a href="{@docRoot}distribute/tools/localization-checklist.html">현지화 검사 목록</a></a>을 참조하십시오.
+
+</p>
+
+<p>
+  스토어 목록을 현지화하려면 먼저 앱 이름, 설명 및 홍보 문구를 작성하고 마무리하십시오.
+ 이들을 모두 수집하여 현지화를 의뢰하십시오.
+ 앱 업데이트 시 "최신 변경 사항" 텍스트도 선택적으로 번역할 수 있습니다.
+ 나중에 개발자 콘솔에서 현지화된 목록 세부정보를 추가하거나 Google Play 자동 번역을 통해 목록 세부정보를 원하는 언어로 번역할 수 있습니다.
+
+
+</p>
+
+<p>
+  앱 목록이 글로벌 고객층을 사로잡으려면 무엇보다도 홍보 그래픽, 스크린샷 및 동영상의 현지화된 버전을 만들어야 합니다.
+
+ 예를 들어, 효율성을 극대화하기 위해 앱의 대표 그래픽에 번역해야 하는 텍스트를 포함할 수 있습니다.
+ 언어마다 서로 다른 홍보 그래픽을 만들어 개발자 콘솔에 업로드할 수 있습니다.
+
+ 홍보 동영상을 제공하는 경우 개발자는 지원하는 각 언어로 현지화된 버전을 만든 다음 해당 동영상 링크를 추가할 수 있습니다.
+
+
+</p>
+
+<p>
+  번역이 완료되면 필요에 따라 앱 자료에 추가하고 제대로 로드되는지 테스트하십시오.
+ 나중을 위해 자산을 업로드하고 스토어 목록을 구성할 때 앱의 번역된 목록 세부정보를 저장하십시오.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/localization"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="prepare-graphics">
+    12. 홍보 그래픽, 스크린샷 및 동영상 준비
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play에 게시할 때 다양한 고품질 그래픽 자산을 제공하여 앱 또는 브랜드를 소개할 수 있습니다.
+ 게시한 후에 이러한 그래픽 자산은 스토어 목록 페이지, 검색 결과 및 그 밖의 장소에 나타납니다.
+ 이 그래픽 자산은 사용자의 관심을 끌고 사용자를 확보하는 성공적인 스토어 목록 페이지의 핵심 부분이므로 그래픽 디자이너에게 의뢰할 것을 고려하십시오.
+
+
+ 스크린샷과 동영상도 앱의 모양과 사용/실행 방법을 보여주므로 매우 중요합니다.
+
+</p>
+
+<p>
+  앱이나 브랜드를 쉽게 확인하고 화려하고 흥미로운 방식으로 강조할 수 있도록 모든 그래픽 자산을 디자인해야 합니다.
+ 이러한 자산은 사용자가 앱을 다운로드한 후에 모든 앱 시작 관리자에 표시된 것과 동일한 로고와 아이콘을 참조해야 합니다. 또한 게시하는 모든 앱의 그래픽 자산과 잘 어울려야 합니다. 해당 그래픽 자산은 스토어 목록 페이지에도 표시됩니다.
+
+
+
+
+</p>
+
+<p>
+  앱을 글로벌 대상에게 더욱 효과적으로 마케팅할 수 있도록 홍보 그래픽, 스크린샷 및 동영상의 현지화된 버전을 만들고 Google Play 개발자 콘솔에 업로드할 수 있습니다.
+
+ 사용자가 앱의 스토어 목록을 방문하면 사용자의 언어로 제공된 홍보 그래픽, 스크린샷 및 동영상이 표시됩니다.
+
+
+</p>
+
+<p>
+  홍보 그래픽을 현지화하려면 특정 언어로 사용자의 요구사항을 가장 잘 수용하도록 포함된 모든 텍스트를 번역하거나 서로 다른 이미지나 표현을 사용하거나 마케팅 접근방식을 변경할 수 있습니다.
+
+ 예를 들어, 대표 또는 홍보 그래픽에 제품 이름이나 기타 정보를 포함하는 경우 해당 텍스트를 번역하여 홍보 그래픽의 현지화된 버전에 추가할 수 있습니다.
+
+
+
+</p>
+
+<p>
+  현지화된 그래픽 자산과 동영상도 매우 중요하므로 게시 예정일에 앞서 그래픽 자산과 동영상을 만들고 현지화하기 시작해야 합니다.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/graphics" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="build-upload">
+    13. 릴리스 준비된 APK 작성 및 업로드
+  </h2>
+
+
+</div>
+
+<p>
+  앱이 UI, 호환성 및 품질 요구사항을 만족스럽게 충족하면 릴리스 준비된 앱 버전을 작성할 수 있습니다.
+
+  릴리스 준비된 APK를 개발자 콘솔에 업로드하고 사용자에게 배포합니다.
+
+</p>
+
+<p>
+  릴리스 준비된 APK를 준비하는 과정은 배포 방식에 관계없이 모든 앱에서 동일합니다.
+ 일반적으로 이 과정에는 기본 코드 정리 및 최적화, 릴리스 키로 작성 및 서명, 최종 테스트가 포함됩니다.
+
+
+</p>
+
+<p>
+  앱의 릴리스 준비된 버전을 만드는 자세한 방법은 <a href="{@docRoot}tools/publishing/preparing.html">릴리스 준비</a>를 참조하십시오.
+
+
+</p>
+
+<p>
+  릴리스 준비된 APK는 개발자 콘솔에 업로드할 수 있습니다.
+ 필요한 경우 게시하기 전에 APK를 최신 버전으로 교체할 수 있습니다.
+
+</p>
+<!--<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/build"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>-->
+
+<div class="headerLine">
+  <h2 id="plan-beta">
+    14. 베타 릴리스 계획
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      간편한 베타 테스트
+    </h2>
+
+    <p>
+      Google Play에서 전 세계의 알파 및 베타 테스터 그룹을 설정할 수 있습니다.
+ 다음에 개발자 콘솔에 로그인할 때 이 강력한 기능을 확인하십시오.
+
+    </p>
+  </div>
+</div>
+
+<p>
+  앱을 출시하기 전에 사용자의 실제 피드백을 받는 것은 항상 중요합니다. 신규 앱을 출시하는 경우에는 더욱 중요합니다.
+ 주요 시장에서 사용자에게 앱의 시험판 버전을 배포하고 간편한 피드백 및 버그 보고 기능을 제공하는 것이 좋습니다.
+
+
+
+</p>
+
+<p>
+  Google Play에서 앱의 베타 프로그램을 설정할 수 있습니다. 개발자 콘솔에 로그인하여 APK를 업로드한 후에, 앱의 알파 및 베타 테스트를 진행할 사용자 그룹을 설정할 수 있습니다.
+
+ 소규모 알파 테스터 그룹부터 시작하여 더 큰 규모의 베타 테스터 그룹으로 이동할 수 있습니다.
+ 테스터 그룹에 추가된 사용자는 앱의 스토어 목록에 액세스하여 앱을 설치합니다. <strong>알파 또는 베타 버전 사용자는 리뷰나 평점을 남길 수 없으므로</strong> Google Play에서 <strong>저조한 평점에 대한 위험이 없습니다.</strong>
+
+
+
+ Google 포럼이나 Google+와 같은 테스트 피드백에 대한 메커니즘을 준비해야 합니다.
+
+</p>
+
+<p>
+  사용자의 피드백은 개발자가 UI, 번역 및 스토어 목록을 조정하여 사용자의 만족도를 높이는 데 도움이 됩니다.
+
+</p>
+<!-- Related resources
+
+<table>
+  <tr>
+    <td>Beta-testing and Staged Rollouts
+See how you can facilitate testing with Google Play.</td>
+  </tr>
+</table> -->
+
+<div class="headerLine">
+  <h2 id="complete-details">
+    15. 앱의 스토어 목록 작성
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play에서 앱의 제품 정보는 Android 장치나 웹에서 스토어 목록 페이지, 사용자가 앱에 대해 더 자세히 알아보기 위해 방문하는 페이지, 앱을 구입하거나 다운로드하기로 결정하는 페이지에 나타납니다.
+
+
+
+</p>
+
+<p>
+  Google Play는 스토어 목록 페이지에서 화려한 그래픽, 스크린샷 및 동영상, 현지화된 설명, 릴리스 세부정보 및 다른 앱의 링크 등 앱을 홍보하고 사용자를 확보하는 다양한 방법을 제공합니다.
+
+
+ 앱 게시를 준비할 때 제품 세부정보 페이지에서 제공할 수 있는 모든 기능을 활용하여 앱을 사용자에게 최대한 매력적으로 보이게 만드십시오.
+
+
+</p>
+
+<p>
+  출시 예정일에 앞서 제품 페이지 계획을 시작하고 현지화된 설명, 고품질 그래픽 자산, 스크린샷 및 동영상 등을 준비해야 합니다.
+
+
+</p>
+
+<p>
+  게시 예정일이 다가옴에 따라 개발자는 개발자 콘솔의 스토어 목록 구성 페이지와 연관된 모든 필드, 옵션 및 자산을 숙지해야 합니다.
+
+ 페이지의 정보와 자산을 수집할 때 페이지 작성을 완료하고 게시 준비가 될 때까지 개발자 콘솔에 입력하거나 업로드하십시오.
+
+
+</p>
+
+<p>
+  개발자 콘솔에서 앱의 대상 지역을 설정한 후에 지원하는 모든 언어에 대해 현지화된 스토어 목록, 홍보 그래픽 등을 추가하십시오.
+ 
+
+</p>
+
+<p>
+  앱이 태블릿 장치를 대상으로 하는 경우 태블릿에서 실행되는 앱의 스크린샷을 하나 이상 포함하고 앱 설명, 릴리스 정보, 홍보 캠페인 등에서 태블릿 지원을 강조하십시오.
+
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/productdetails"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="use-badges">
+    16. 홍보 캠페인에서 Google Play 배지 및 링크 사용
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 배지는 Android 사용자에게 공식적인 브랜드를 통해 앱을 홍보하는 수단을 제공합니다.
+ <a href="{@docRoot}distribute/tools/promote/badges.html">Google Play 배지 생성기</a>로 배지를 빠르게 만들어 웹 페이지, 광고, 리뷰 등을 통해 사용자를 제품에 연결할 수 있습니다
+
+ 특수 <a href="{@docRoot}distribute/tools/promote/linking.html">링크 형식</a>을 사용하여 스토어 목록 페이지, 제품 목록 또는 검색 결과에 직접 연결할 수도 있습니다.
+
+
+</p>
+
+<p>
+  출시 후에 앱이 주목을 받도록 하려면 가능한 한 많은 국가에서 많은 채널을 통해 제품을 알리는 홍보 캠페인을 진행하여 출시를 지원하는 것이 좋습니다.
+
+ 예를 들어, 광고 배치, 소셜 네트워크 또는 블로그 게시, 동영상 및 기타 미디어, 인터뷰 및 리뷰 또는 사용 가능한 기타 채널을 사용하여 출시를 홍보할 수 있습니다.
+
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/badges" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="final-checks">
+    17. 최종 확인 및 게시
+  </h2>
+
+
+</div>
+
+<p>
+  게시할 준비가 되었다고 생각되면 개발자 콘솔에 로그인하여 잠시 시간을 내서 몇 가지 최종 확인을 하십시오.
+
+</p>
+
+<p>
+  확인 사항:
+</p>
+
+<ul>
+  <li>
+    <p>
+      개발자 프로필이 정확한 정보를 갖고 있고 적합한 Google Wallet 판매자 계정에 연결되었는지 여부(제품을 판매하는 경우).
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      정확한 앱 버전을 업로드했는지 여부.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      모든 그래픽 자산, 스크린샷, 동영상, 현지화된 설명 등을 포함하여 스토어 목록의 모든 부분이 준비되었는지 여부.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      앱의 가격 책정 여부(유로 또는 무료).
+    </p>
+  </li>
+
+  <li>
+    <p>
+      대상 국가(및 통신사)를 설정하고 구매자의 현지 통화로 제품 가격을 책정했는지 여부(해당되는 경우).
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      "호환 장치"에 앱이 대상 장치에 액세스하는 것으로 표시되는지 여부.
+ 그렇지 않은 경우 개발 팀과 함께 앱의 요구사항과 필터링 규칙을 확인해야 합니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      정확한 웹사이트 링크와 올바른 지원 이메일 주소를 제공했는지 여부.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      앱이 콘텐츠 정책 가이드라인을 위반하지 않는지 여부.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      앱이 Google Play의 Android 콘텐츠 가이드라인 및 미국 수출법을 준수하는지 여부.
+
+    </p>
+  </li>
+</ul>
+
+<p>
+  이제 앱을 게시할 준비가 되었습니다!
+</p>
+
+<p>
+  업데이트를 릴리스하는 경우 <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=113476&amp;topic=2365760&amp;ctx=topic">업데이트 게시 요구사항</a>을 반드시 읽어보십시오.
+
+</p>
+
+<p>
+  준비되면 개발자 콘솔에서 <strong>게시</strong> 버튼을 클릭하십시오.
+ 몇 시간 이내에 사용자가 앱을 사용할 수 있게 되고 Google Play에 검색, 탐색 또는 홍보 캠페인 링크용 제품 페이지가 나타납니다.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/finalchecks"
+data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    18. 출시 후 사용자 지원
+  </h2>
+
+
+</div>
+
+<p>
+  앱 또는 앱 업데이트를 게시한 후에 고객 지원은 중요합니다.
+ 신속하고 공손한 지원은 사용자의 만족도를 높여 제품의 평점과 리뷰에 긍정적인 영향을 주게 됩니다.
+
+ 개발자가 사용자의 요구사항과 피드백에 신속히 응답하면 사용자는 앱을 애용하고 추천할 가능성이 높습니다.
+ 게시 후에 통합된 홍보 캠페인을 사용하는 경우에 특히 그렇습니다.
+
+</p>
+
+<p>
+  사용자와 연락을 유지하면서 지원할 수 있는 다양한 방법이 있습니다.
+ 가장 기본적인 방법으로 스토어 목록 페이지에 <em>지원 이메일 주소</em>를 제공하는 방법이 있습니다.
+ 그 밖에도 포럼, 메일 그룹 또는 Google+ 페이지 등 다양한 방식을 선택하여 지원할 수 있습니다.
+
+ Google Play 팀은 다운로드, 설치 및 결제 문제를 지원합니다. 그 밖의 문제는 개발자가 지원해야 합니다.
+
+ 개발자가 지원할 수 있는 문제로는 기능 요청, 앱 사용 관련 문의, 호환성 설정 문의 등이 있습니다.
+
+</p>
+
+<p>
+  게시 후 다음에 대한 계획을 세우십시오.
+</p>
+
+<ul>
+  <li>
+    <p>
+      앱의 스토어 목록 페이지에서 평점 및 리뷰를 확인합니다.
+ 버그 또는 기타 문제를 알릴 수 있는 반복적인 테마에 주목합니다.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      앱의 호환성 설정을 업데이트해야 할 수도 있으므로 새 Android 플랫폼 버전 출시에 유의합니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      지원 자료의 링크를 웹사이트에 제공하고 포럼과 같은 기타 지원을 설정합니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      스토어 목록 페이지에 적절한 지원 이메일 주소를 제공하고 사용자의 이메일에 답변합니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      사용자가 만족하면 앞으로도 구매할 가능성이 높으므로 Google Play가 제공하는 자동 환불 창구 이외에도 관대한 환불 정책을 제공합니다.
+
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      앱의 문제를 인정하고 해결합니다. 이는 투명성 제고에 도움이 되고 스토어 목록 페이지에 알려진 문제를 미리 나열할 수 있습니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      품질을 유지하면서 가능한 한 자주 업데이트를 게시합니다. 단, 너무 잦은 업데이트로 사용자를 성가시게 해서는 안 됩니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      업데이트를 게시할 때마다 변경 사항을 간단히 설명합니다. 개발자 콘솔에서 이 정보를 입력할 수 있습니다.
+ 이 정보를 읽은 사용자는 개발자가 앱 품질을 개선하는 데 적극적이라고 평가할 것입니다.
+
+
+    </p>
+  </li>
+</ul>
+</ul>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/ko/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/ko/distribute/tools/localization-checklist.jd
new file mode 100644
index 0000000..cf46481
--- /dev/null
+++ b/docs/html-intl/intl/ko/distribute/tools/localization-checklist.jd
@@ -0,0 +1,937 @@
+page.title=현지화 검사 목록
+page.metaDescription=Android 및 Google Play에서 제공하는 전 세계 사용자를 활용하십시오. 제품을 전 세계 시장에 제공하는 방법을 알아보려면 이 검사 목록을 읽으십시오.
+meta.tags="localizing, publishing, disttools"
+page.tags="local, l10n, translation, language"
+page.image=/distribute/images/localization-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>검사 목록</h2>
+    <ol>
+      <li><a href="#identify-languages">1. 대상 언어 및 로캘 식별</a></li>
+      <li><a href="#design">2. 현지화를 위한 디자인</a></li>
+      <li><a href="#manage-strings">3. 현지화를 위한 문자열 관리</a></li>
+      <li><a href="#translate-strings">4. UI 문자열 및 기타 리소스 번역</a></li>
+      <li><a href="#test">5. 현지화된 앱 테스트</a></li>
+      <li><a href="#prepare-launch">6. 전 세계 출시 준비</a></li>
+      <li><a href="#support-users">7. 출시 후 전 세계 사용자 지원</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px">
+  <img src="{@docRoot}distribute/images/localization-checklist.jpg">
+</div>
+
+<p>
+  Android 및 Google Play는 한국, 일본, 인도, 브라질, 러시아 등의 국가에서 급속히 성장하는 사용자 기반을 통해 전 세계 사용자에게 앱을 소개합니다.
+
+ 현지화는 앱의 배포 잠재력을 극대화하여 전 세계 사용자로부터 평가를 받을 수 있으므로 적극 권장됩니다.
+
+
+</p>
+
+<p>
+  현지화는 앱 개발 주기 전체에 걸쳐 다양한 작업을 수반하므로 사전 계획이 필수입니다.
+ 이 문서는 개발자가 현지화의 핵심 측면을 파악하여 Google Play에서 앱을 전 세계에 성공적으로 출시할 준비를 하는 데 도움을 줍니다.
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="identify-languages">
+    1. 대상 언어 및 로캘 식별
+  </h2>
+
+
+</div>
+
+<p>
+  현지화 준비에서 중요한 기본 단계는 앱 배포 대상 국가와 해당 국가의 공용어를 식별하는 것입니다.
+
+  앱 현지화는 시장의 잠재력이 크고 영어 또는 기타 국제 언어가 널리 사용되지 않는 국가에서 특히 중요합니다.
+
+
+</p>
+
+<p>
+  전 세계 사용자를 위해 국가, 로캘 및 언어 등 세 가지 주요 차원에서 앱을 관리할 수 있습니다.
+ 그 중에서 언어는 현지화의 핵심 고려 사항입니다. (날짜, 시간, 통화 및 유사한 정보의 형식 차이 때문에 로캘도 중요합니다.)
+
+ 사용자는 Android 장치에서 사용되는 언어와 로캘을 모두 제어할 수 있으며 그에 따라 앱 표시 방식에 영향을 줍니다.
+
+
+</p>
+
+<p>
+  일반적으로 먼저 전체 시장 규모 및 기회, 앱 카테고리, 경쟁 구도, 현지 가격 책정 및 재무적 요소 등에 따라 대상 국가를 결정합니다.
+
+ 그런 다음 대상 국가에 따라 앱에서 지원해야 하는 언어를 결정합니다.
+
+
+</p>
+
+<p>
+  이어서 대상 국가의 일부 또는 전체 언어로 현지화기로 결정할 수 있습니다.
+ 주요 지역 언어부터 시작하고 사용자 기반이 성장함에 따라 다른 언어를 추가하는 것이 합리적일 수 있습니다.
+
+</p>
+
+<p>
+  대상 언어가 식별되면 개발, 번역, 테스트 및 마케팅을 해당 시장에 집중할 수 있습니다.
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/identifylocales"
+data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="design">
+    2. 현지화를 위한 디자인
+  </h2>
+
+
+</div>
+
+<p>
+  현지화 대상 언어를 결정한 후에 앱에서 해당 언어를 지원하려면 무엇이 필요할지 평가하고 초기 작업 계획을 수립합니다.
+
+  각 언어에서 어휘 확장, 스크립트 요구사항, 문자 간격 및 텍스트 배치 제약조건, 왼쪽에서 오른쪽으로 읽기 및 오른쪽에서 왼쪽으로 읽기 지원, 기타 잠재적 요소를 고려합니다.
+
+
+</p>
+
+<h4>
+  <strong>유연한 단일 레이아웃 집합 디자인</strong>
+</h4>
+
+<p>
+  레이아웃을 생성할 때 텍스트를 보유한 모든 UI 요소가 자연스럽게 디자인되었는지 확인하십시오.
+ 다른 언어를 수용하려면 자국어에 필요한 공간보다 더 많은 공간(일반적으로 최대 30% 증가)을 허용하는 것이 좋습니다.
+
+</p>
+
+<p>
+  또한 요소를 가로 또는 세로로 확장하여 UI 문자열 또는 입력 텍스트의 너비와 높이의 편차를 수용할 수 있어야 합니다.
+
+  대상 언어에서 텍스트 문자열이 테두리나 화면 가장자리와 겹치면 안 됩니다.
+
+</p>
+
+<p>
+  UI를 세심하게 디자인하는 경우 일반적으로 지원하는 모든 언어에 대해 단일 레이아웃 집합을 사용할 수 있습니다.
+ 자세한 내용은 <a href="{@docRoot}training/basics/fragments/fragment-ui.html">유연한 UI 작성</a>을 참조하십시오.
+
+</p>
+
+<h4>
+  <strong>필요한 경우 대체 레이아웃 사용</strong>
+</h4>
+
+<p>
+  UI가 대상 언어 중 한 언어의 텍스트를 수용할 수 없는 경우 해당 언어에 대해서만 <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">대체 레이아웃</a>을 생성할 수 있습니다.
+
+ Android는 특정 언어, 로캘, 화면 크기 등에 대해 단순히 적절한 리소스 한정자로 태그를 지정하는 방식으로 로드할 레이아웃 및 기타 리소스 집합을 쉽게 선언할 수 있게 만듭니다.
+
+
+ 대체 레이아웃의 유연성이 존재하는 한 시간이 지남에 따라 앱을 유지 관리하기가 더욱 힘들어질 수도 있습니다.
+ 일반적으로 훨씬 유연한 단일 레이아웃을 사용하는 것이 좋습니다.
+
+</p>
+
+<h4>
+  <strong>RTL 레이아웃 및 텍스트 지원</strong>
+</h4>
+
+<p>
+  오른쪽에서 왼쪽으로 읽기(RTL) 스크립트를 사용하는 국가에 배포하는 경우 가능한 범위 내에서 RTL 레이아웃 및 텍스트 표시와 편집에 대한 지원을 구현하는 것을 고려해야 합니다.
+
+
+</p>
+
+<p>
+  Android 4.1은 앱이 왼쪽에서 오른쪽으로 읽기(LTR) 스크립트와 오른쪽에서 왼쪽으로 읽기(RTL) 스크립트에서 텍스트를 표시하고 편집할 수 있는 제한된 양방향 텍스트를 도입했습니다.
+
+ Android 4.2는 모든 사용자에게 동일한 뛰어난 앱 경험을 제공할 수 있도록 레이아웃 미러링을 포함한 <a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">완벽한 RTL 레이아웃 기본 지원</a>을 추가했습니다.
+
+
+</p>
+
+<p>
+  최소한 Android 4.2 사용자의 경우 기본 RTL 레이아웃 미러링을 간단히 추가할 수 있으며, 이는 RTL 사용자의 필요를 충족하는 데 큰 도움이 됩니다.
+
+</p>
+
+<h4>
+  <strong>시스템이 제공하는 날짜, 시간, 숫자 및 통화 형식 사용</strong>
+
+</h4>
+
+<p>
+  앱이 로캘에 따라 달라질 수 있는 날짜, 시간, 숫자, 통화 및 기타 항목을 지정하는 경우 앱 특정 형식 대신 시스템이 제공하는 형식을 사용하십시오.
+
+ 모든 로캘이 동일한 1000 단위 구분 기호, 소수 구분 기호 또는 퍼센트 기호를 사용하지 않는다는 점에 유의하십시오.
+
+</p>
+
+<p>
+  Android는 날짜에 대한 <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> 및  <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a>, 숫자 및 통화에 대한 <a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)">String.format()</a> 또는 <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a>, 전화 번호에 대한  <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a> 등과 같이 로캘에 따라 패턴의 형식을 지정하고 변환할 수 있는 다양한 유틸리티를 제공합니다.
+
+
+
+
+
+  
+</p>
+
+<p>
+  사용자의 로캘에 대한 가정을 기반으로 형식을 하드코드하면 사용자가 다른 로캘로 변경할 때 문제가 발생할 수 있습니다.
+ 시스템이 제공하는 형식과 유틸리티를 사용하는 것이 좋습니다.
+.
+</p>
+
+<h4>
+  <strong>완전한 기본 리소스 집합 포함</strong>
+</h4>
+
+<p>
+  완전한 기본 리소스 집합을 제공하여 앱이 언어 또는 로캘에 상관없이 제대로 실행할 수 있는지 확인하십시오.
+ 앱의 기본 리소스는 임의의 언어 또는 로캘 한정자로 <em>표시되지 않는</em> 리소스입니다(예: res/drawable/ 및res/values/에 저장된 리소스).
+
+ 앱이 현재 언어 또는 기본 집합에서 사용할 수 없는 리소스를 로드하려고 하면 작동 중단될 수 있습니다.
+
+
+</p>
+
+<p>
+  앱에서 사용하는 기본 언어가 무엇이든 연관된 레이아웃, drawable 및 문자열을 언어 또는 로캘 한정자 없이 기본 리소스 디렉터리에 저장하십시오.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/tools/loc/designforloc" data-sortorder="-timestamp"
+data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="manage-strings">
+    3. 현지화를 위한 문자열 관리
+  </h2>
+
+
+</div>
+
+<p>
+  사용자에게 뛰어난 경험을 제공하고 현지화를 간결하게 만들기 위해 앱의 UI 문자열을 올바로 관리하는 것이 중요합니다.
+
+</p>
+
+<h4>
+  <strong>모든 문자열을 strings.xml로 이동</strong>
+</h4>
+
+<p>
+  앱을 작성할 때 문자열을 하드코드하지 마십시오. 대신 <em>모든</em> 문자열을 기본 strings.xml 파일에서 리소스로 선언하여 업데이트 및 현지화를 쉽게 만드십시오.
+
+ strings.xml 파일의 문자열은 컴파일된 코드를 변경하지 않고 (적합한 한정자를 사용하여) 추출하여 번역해서 앱에 다시 통합할 수 있습니다.
+
+
+</p>
+
+<p>
+  텍스트를 포함한 이미지를 생성하는 경우 해당 문자열도 strings.xml에 넣고 번역 후에 이미지를 다시 생성하십시오.
+
+</p>
+
+<h4>
+  <strong>UI 문자열에 대한 Android 가이드라인 준수</strong>
+</h4>
+
+<p>
+  UI를 디자인하고 개발할 때 사용자와 대화하는 <em>방법</em>에 세심한 주의를 기울이십시오.
+ 일반적으로, 친숙하면서도 <a href="{@docRoot}design/style/writing.html">간결한 압축된 스타일</a>을 사용하고 UI 전체에서 일관된 스타일을 사용하십시오.
+
+</p>
+
+<p>
+  <a href="{@docRoot}design/style/writing.html">문장 스타일 및 단어 선택</a>에 대한 Android 디자인 권장사항을 읽고 따르십시오.
+
+ 그러면 앱이 더 세련되어 보이고 사용자가 UI를 더 빨리 이해할 수 있게 됩니다.
+
+</p>
+
+<p>
+  또한 "작업 모음", "옵션 메뉴", "시스템 모음", "알림" 등과 같은 UI 요소에 대해 가능하면 항상 Android 표준 용어를 사용하십시오.
+
+ Android 용어를 정확하고 일관성 있게 사용하면 번역이 쉬워지고 사용자에게 더 나은 최종 제품을 제공할 수 있습니다.
+
+</p>
+
+<h4>
+  <strong>선언된 문자열에 대해 충분한 컨텍스트 제공</strong>
+</h4>
+
+<p>
+  strings.xml 파일에서 문자열을 선언할 때, 해당 문자열이 사용된 컨텍스트를 기술하십시오.
+ 이 정보는 번역사가 번역 품질을 높이는 데 매우 귀중하며 개발자가 시간이 지남에 따라 더욱 효과적으로 문자열을 관리하는 데 도움이 됩니다.
+
+
+</p>
+
+<p>
+  예:
+</p>
+
+<pre class="prettyprint">
+&lt;!-- The action for submitting a form. This text is on a button that can fit 30 chars --&gt;
+&lt;string name="login_submit_button"&gt;Sign in&lt;/string&gt;
+</pre>
+<p>
+  다음을 포함한 컨텍스트 정보 제공을 고려하십시오.
+</p>
+
+<ul>
+  <li>
+    <p>
+      이 문자열의 용도는 무엇입니까? 언제/어디서 이 문자열이 사용자에게 표시됩니까?
+    </p>
+  </li>
+
+  <li>
+    <p>
+      이 문자열은 레이아웃의 어디에 있습니까? 예를 들어, 버튼은 텍스트 상자보다 번역의 유연성이 적습니다.
+
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>번역하지 않아야 하는 메시지 부분 표시</strong>
+</h4>
+
+<p>
+  종종 문자열에 다른 언어로 번역하지 않아야 하는 텍스트가 포함되어 있습니다.
+ 일반적인 예로는 코드, 값의 자리 표시자, 특수 기호, 이름 등이 있습니다.
+ 번역할 문자열을 준비할 때 번역하지 않고 그대로 두어야 하는 텍스트를 찾아 표시하여 번역사가 해당 텍스트를 변경하지 않도록 하십시오.
+
+
+</p>
+
+<p>
+  번역하지 않아야 하는 텍스트를 표시하려면 <code>&lt;xliff:g&gt;</code> 자리 표시자 태그를 사용하십시오.
+ 다음은 번역하는 과정에서 "%1$s" 텍스트가 변경되지 않도록 하는 태그입니다. (그렇지 않으면 메시지가 깨질 수 있습니다.)
+
+
+</p>
+
+<pre class="prettyprint">
+&lt;string name="countdown"&gt;
+    &lt;xliff:g id="time" example="5 days&gt;%1$s&lt;/xliff:g&gt;until holiday
+&lt;/string&gt;
+</pre>
+<p>
+  자리 표시자 태그를 선언할 때 항상 자리 표시자의 용도가 무엇인지 설명하는 id 특성을 추가하십시오.
+ 앱이 나중에 자리 표시자 값을 대체하는 경우 예로 든 특성을 제공하여 예상 용도를 명확히 하십시오.
+
+</p>
+
+<p>
+  다음은 자리 표시자 태그의 몇 가지 추가적인 예입니다.
+</p>
+
+<pre>
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+
+&lt;!-- Example placeholder for a special unicode symbol --&gt;
+
+&lt;string name="star_rating"&gt;Check out our 5
+
+    &lt;xliff:g id="star"&gt;\u2605&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a for a URL --&gt;
+
+&lt;string name="app_homeurl"&gt;
+
+    Visit us at &lt;xliff:g id="application_homepage"&gt;http://my/app/home.html&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a name --&gt;
+
+&lt;string name="prod_name"&gt;
+
+    Learn more at &lt;xliff:g id="prod_gamegroup"&gt;Game Group&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a literal --&gt;
+
+&lt;string name="promo_message"&gt;
+
+    Please use the "&lt;xliff:g id="promotion_code"&gt;ABCDEFG&lt;/xliff:g&gt;” to get a discount.
+
+&lt;/string&gt;
+
+...
+
+&lt;/resources&gt;
+</pre>
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/managestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="translate-strings">
+    4. UI 문자열 및 기타 리소스 번역
+  </h2>
+
+
+</div>
+
+<p>
+  앱의 UI 문자열과 리소스를 대상 언어로 번역하는 것은 현지화의 핵심 단계로 가장 세심한 주의와 계획이 요구됩니다.
+
+
+</p>
+
+<p>
+  앱의 가치를 높여주는 고품질 번역을 보장하려면 전문 번역사와 함께 작업하는 것이 좋습니다(<a href="#gp-trans">전문 번역 의뢰</a> 참조). 옵션으로 제공되는 기계 번역은 사용자에게 좋은 경험을 제공하지 못할 가능성이 높습니다.
+
+
+</p>
+
+<h4>
+  <strong>번역 준비</strong>
+</h4>
+
+<p>
+  번역 품질은 부분적으로 원문의 품질에 의존하므로 strings.xml 파일이 체계적으로 구성되고 정확하고 주석이 충실한지 확인하십시오.
+
+
+</p>
+
+<p>
+  다음은 번역할 문자열을 준비하는 몇 가지 방법입니다.
+</p>
+
+<ul>
+  <li>
+    <p>
+      문자열의 서식이 정확하고 일관성 있게 지정되었는지 확인합니다.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      위의 <a href="#manage-strings">현지화를 위한 문자열 관리</a>에 나오는 문자열 권장사항을 따릅니다.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      strings.xml 파일을 정리하고 사용되지 않는 문자열을 제거합니다.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      번역사에 대한 특별 지침은 물론 파일의 소유자, 원본, 버전을 식별할 수 있도록 파일에 주석을 포함합니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      기존 번역이 있는 경우 찾아서 번역사에게 보내는 zip 파일 또는 기타 패키지에 포함합니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      번역이 필요한 drawable 또는 기타 리소스를 파악하여 번역사의 패키지에 포함합니다.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      또한 앱 이름 및 설명, 릴리스 정보 등 앱의 스토어 목록 세부정보와 함께 국제 마케팅 자료의 번역을 고려합니다.
+
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      제품, 시장 또는 기본 기술에 나오는 핵심 용어의 의미와 용도를 설명하는 용어 목록을 만듭니다.
+ 해당 목록을 번역사의 패키지에 추가합니다.
+
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>번역할 문자열 보내기</strong>
+</h4>
+
+<p>
+  개발 주기의 초기에 전문 번역 회사에 문의하여 비용과 소요 시간을 알아보십시오.
+ 반복되는 문자열도 비용에 포함하십시오.
+ 온라인에서 번역 회사를 찾거나 Google Play 개발자 콘솔에서 직접 제공하는 번역 서비스를 이용할 수 있습니다(<a href="#gp-trans">전문 번역 의뢰</a> 참조).
+
+
+</p>
+
+<p>
+  번역이 완료되면 번역을 확인하십시오.
+ 모든 파일이 번역되었는지, 잠재적 인코딩 문제가 있는지, 선언 형식이 그대로인지 확인하십시오.
+
+</p>
+
+<p>
+  모두 양호한 것으로 판단되면 현지화된 디렉터리와 파일을 앱의 리소스로 신중히 이동하십시오.
+ 나중에 제대로 로드되도록 디렉터리를 해당 언어와 로캘 한정자로 태그 지정하십시오.
+
+
+</p>
+
+<p>
+  번역을 앱에 병합한 후에 <a href="#test">현지화된 앱 테스트</a>를 시작하십시오.
+</p>
+
+<h4 id="gp-trans">
+  <strong>Google Play를 통해 전문 번역 의뢰</strong>
+</h4>
+
+<p>
+  Google Play 앱 번역 서비스는 앱의 번역을 빠르게 의뢰할 수 있도록 도와줍니다. 개발자 콘솔에서 저렴한 가격에 고품질 번역을 제공할 수 있는 Google 인증 번역 회사 목록을 검색할 수 있습니다.
+
+
+ 번역하려는 문자열을 업로드하고 번역 대상 언어를 선택하고 시간과 가격을 기준으로 번역 회사를 선택할 수 있습니다.
+
+
+</p>
+
+<p>
+  번역을 의뢰하면 번역 회사로부터 이메일을 받습니다.
+  번역은 개발자와 번역 회사 간의 직접적인 비즈니스 계약입니다. 번역 프로세스와 결과물을 관리하고 지원 문제를 해결하기 위해 번역 회사와 긴밀히 협력해야 합니다.
+
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-localization-trans-0.png" class="border-img">
+</div>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/translatestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test">
+    5. 현지화된 앱 테스트
+  </h2>
+
+
+</div>
+
+<p>
+  번역된 문자열과 리소스를 받아서 앱으로 다시 이전한 후에 앱을 테스트하여 전 세계 사용자에게 배포할 준비가 되었는지 확인해야 합니다.
+
+
+</p>
+
+<p>
+  수동 테스트를 통해 레이아웃과 문자열에서 사용자 만족도와 궁극적으로 앱의 사용자 평점에 영향을 줄 수 있는 현지화 문제를 찾아낼 수 있습니다.
+
+
+</p>
+
+<h4>
+  <strong>테스트 환경 설정</strong>
+</h4>
+
+<p>
+  현지화된 앱을 테스트하려면 대상으로 삼은 시장과 폼 팩터에 따라 다양한 장치(또는 가상 장치)와 화면 크기로 구성된 환경을 설정해야 합니다.
+
+ 특정 지역에서 장치의 범위가 다를 수 있다는 점에 유의하십시오.
+ 가능하면 사용자가 사용할 가능성이 높은 실제 장치와 테스트 장치가 일치하도록 하십시오.
+
+</p>
+
+<h4>
+  <strong>일반적인 현지화 문제 찾기</strong>
+</h4>
+
+<p>
+  각 테스트 장치의 설정에서 언어 또는 로캘을 설정하십시오. 앱을 설치하고 실행한 다음 모든 UI 흐름, 대화 상자 및 사용자 상호작용을 탐색하십시오.
+
+ 입력에 텍스트를 입력하십시오. 다음을 비롯한 문제를 찾으십시오.
+</p>
+
+<ul>
+  <li>
+    <p>
+      잘린 텍스트 또는 화면이나 UI 요소 가장자리와 겹친 텍스트
+    </p>
+  </li>
+
+  <li>
+    <p>
+      잘못된 줄바꿈
+    </p>
+  </li>
+
+  <li>
+    <p>
+      잘못된 단어 분리 또는 문장 부호
+    </p>
+  </li>
+
+  <li>
+    <p>
+      잘못된 사전순 정렬
+    </p>
+  </li>
+
+  <li>
+    <p>
+      잘못된 레이아웃 방향 또는 텍스트 방향
+    </p>
+  </li>
+
+  <li>
+    <p>
+      번역되지 않은 텍스트 &mdash; 번역된 문자열 대신 기본 문자열이 표시되는 경우 해당 문자열의 번역 의뢰를 누락했거나 잘못된 언어 한정자로 리소스 디렉터리를 표시했을 가능성이 있습니다.
+
+
+
+    </p>
+  </li>
+</ul>
+
+<p>
+  번역에서 문자열이 확장되어 레이아웃에 맞지 않는 경우 기본 텍스트를 단순화하거나 기본 레이아웃을 조정할 수 있습니다.
+
+ 이러한 방법으로 문제가 해결되지 않으면 해당 언어에 대한 사용자 지정 레이아웃을 만들 수 있습니다.
+
+</p>
+
+<h4>
+  <strong>기본 리소스에 대한 테스트</strong>
+</h4>
+
+<p>
+  지원되는 모든 언어와 로캘에서 앱을 테스트한 후에 <em>지원되지 않는 언어</em>와 로캘에서 다시 테스트하십시오.
+
+  그러면 앱이 전체 기본 문자열 및 리소스 집합을 포함하고 있는지 확인할 수 있고, 따라서 모든 사용자가 기본 설정 언어에 상관없이 앱을 사용할 수 있습니다.
+
+
+</p>
+
+<h4>
+  <strong>원어민의 검토</strong>
+</h4>
+
+<p>
+  테스트 중이나 후에 현지화된 앱을 원어민에게 검토하게 하는 것이 좋습니다.
+ 이렇게 하는 한 가지 방법은 해당 지역 사용자에게 베타 테스트를 의뢰하는 것입니다. Google Play를 이 테스트를 진행할 수 있습니다.
+ <!-- </p>
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/test"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> -->
+</p>
+
+<div class="headerLine">
+  <h2 id="prepare-launch">
+    6. 전 세계 출시 준비
+  </h2>
+
+
+</div>
+
+<p>
+  앱 번역은 현지화의 핵심 부분이지만 제품을 사용자에게 매력적으로 보이게 하고 눈에 띄게 하려면 대상 국가에서 출시 준비를 하고 전 세계 사용자를 대상으로 더욱 광범위한 출시 및 마케팅 계획을 수립해야 합니다.
+
+
+
+</p>
+
+<h4>
+  <strong>Google Play 목록 현지화</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Google Play 목록 현지화
+    </h2>
+
+    <p>
+      Google Play 스토어 목록은 전 세계 사용자에게 앱을 선보이는 첫 관문입니다. 여기서 모든 사용자에게 앱의 장점을 적극 홍보해야 합니다!
+
+ 개발자 콘솔에서 다음 항목을 비롯한 목록을 현지화하십시오.
+
+    </p>
+
+    <ul>
+      <li>앱 이름 및 설명
+      </li>
+
+      <li>휴대폰과 태블릿의 앱 스크린샷
+      </li>
+
+      <li>홍보 그래픽 및 동영상
+      </li>
+    </ul>
+  </div>
+</div>
+
+<p>
+  앱이 국제 시장에서 성공하려면 Google Play 스토어 목록 현지화가 필수입니다.
+ 개발자 콘솔에서 현지화된 목록을 관리할 수 있습니다.
+
+</p>
+
+<p>
+  출시하기 전에 앱 이름, 설명, 홍보 문구, 마케팅 이름 및 프로그램, 기타 텍스트와 이미지를 결정하십시오.
+ 베타 테스트가 시작될 때 준비되어 있도록 번역할 목록 텍스트와 이미지를 조기에 의뢰하십시오.
+
+ 번역된 텍스트가 준비되면 개발자 콘솔을 통해 추가할 수 있습니다.
+
+</p>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Google Play 스토어 목록 번역
+    </h2>
+
+    <p>
+      Google Play의 앱 번역 서비스를 사용하여 스토어 목록을 번역할 수 있습니다.
+ 스토어 목록 정보가 담긴 XML 파일 준비하고 strings.xml 파일을 업로드할 때와 마찬가지로 업로드하십시오(<a href="#gp-trans">전문 번역 의뢰</a> 참조).
+
+    </p>
+  </div>
+</div>
+
+<p>
+  또한 뛰어난 현지화된 앱을 사용자에게 홍보하십시오!
+ 각 언어로 휴대폰과 7인치 및 10인치 태블릿용 UI 스크린샷을 찍으십시오.
+ 지원하는 각 언어별 스크린샷을 개발자 콘솔에 업로드할 수 있습니다.
+ 그러면 사용자가 자신의 언어로 앱 목록을 탐색할 때 매우 유용하게 활용할 수 있습니다.
+
+</p>
+
+<p>
+  현지화된 홍보 그래픽과 동영상 버전을 만드는 것도 필수입니다.
+ 예를 들어, 효율성을 극대화하기 위해 앱의 대표 그래픽에 번역해야 하는 텍스트를 포함하거나 국가마다 다른 시각적 접근방식을 적용하기를 원할 수도 있습니다.
+
+ 언어마다 서로 다른 홍보 그래픽 버전을 만들어 개발자 콘솔에 업로드할 수 있습니다.
+
+ 홍보 동영상을 제공하는 경우 개발자는 지원하는 각 언어로 현지화된 버전을 만든 다음 해당 동영상 링크를 추가할 수 있습니다.
+
+
+</p>
+
+<h4>
+  <strong>주요 국가에서 베타 릴리스 계획</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      간편한 베타 테스트
+    </h2>
+
+    <p>
+      이제 전 세계 어디에서나 Google Play에서 알파 및 베타 테스터 그룹을 설정할 수 있습니다.
+ 다음에 개발자 콘솔에 로그인할 때 이 강력한 기능을 확인하십시오.
+
+    </p>
+  </div>
+</div>
+
+<p>
+  앱을 출시하기 전에 사용자의 실제 피드백을 받는 것은 항상 중요합니다. 새로운 언어, 국가 또는 지역에서 앱을 출시하는 경우에는 더욱 중요합니다.
+
+ 이러한 경우에 주요 시장에서 사용자에게 앱의 시험판 버전을 배포하고 간편한 피드백 및 버그 보고 기능을 제공하는 것이 좋습니다.
+
+
+
+</p>
+
+<p>
+  Google Play에서 앱의 베타 프로그램을 설정할 수 있습니다. 개발자 콘솔에 로그인하여 APK를 업로드한 후에 앱의 알파 및 베타 테스트를 진행할 사용자 그룹을 설정할 수 있습니다. 소규모 알파 테스터 그룹부터 시작하여 더 큰 규모의 베타 테스터 그룹으로 이동할 수 있습니다.
+
+
+
+</p>
+
+<p>
+  테스터 그룹에 추가된 사용자는 앱의 스토어 목록에 액세스하여 앱을 설치합니다. <strong>알파 또는 베타 버전 사용자는 리뷰나 평점을 남길 수 없으므로</strong> Google Play에서 <strong>저조한 평점에 대한 위험이 없습니다.</strong> 하지만 이는 개발자가 테스터가 피드백을 제공할 수 있는 메커니즘을 설정해야 함을 의미합니다. <a href="http://www.google.com/+/business/">Google+</a> 페이지 또는 <a href="https://groups.google.com/forum/#!overview">Google 그룹</a>을 만드는 것을 고려해 보십시오.
+
+
+
+
+</p>
+
+<p>
+  개발자가 받는 피드백은 UI, 번역 및 스토어 목록을 조정하여 사용자에게 뛰어난 경험을 보장하는 데 도움이 됩니다.
+
+</p>
+
+<h4>
+  <strong>국제 마케팅 계획</strong>
+</h4>
+
+<p>
+  많은 국가에서 가장 많이 노출되게 하려면 국제 마케팅 또는 광고 캠페인을 고려하십시오.
+ 캠페인의 범위는 지원 가능한 예산에 따라 다르지만, 일반적으로 출시 시점과 그 후에 지역 또는 국가별 마케팅을 수행하는 것이 비용효율적이고 생산적입니다.
+
+
+</p>
+
+<h4>
+  <strong>현지화된 Google Play 배지 생성</strong>
+</h4>
+
+<p>
+  국제 마케팅을 준비 중인 경우 <a href="{@docRoot}distribute/tools/promote/badges.html">현지화된 Google Play 배지</a>를 포함하여 사용자에게 개발자가 Google Play에서 활동 중임을 알리십시오.
+ 배지 생성기를 사용하여 웹사이트나 마케팅 자료에서 사용할 수 있는 현지화된 배지를 신속하게 만들 수 있습니다.
+
+ 고해상도 자산도 사용할 수 있습니다.
+</p>
+
+<h4>
+  <strong>현지화된 장치 아트 생성</strong>
+</h4>
+
+<p>
+  Android 장치에서 실행되는 앱의 제품 샷을 홍보하는 경우 해당 샷이 Android 장치에서 멋있게 보이게 하고 최신 상태를 반영하십시오.
+
+  고품질 마케팅 자료를 만들려면 끌어서 놓기 방식의 <a href="{@docRoot}distribute/tools/promote/device-art.html">장치 아트 생성기</a>를 사용하여 Nexus 장치에서 스크린샷의 프레임을 빠르게 구현하십시오.
+
+
+</p>
+
+<h4>
+  <strong>최적화 팁 확인</strong>
+</h4>
+
+<p>
+  출시를 준비할 때 개발자 콘솔에 로그인하여 앱의 최적화 팁을 확인하십시오.
+ 최적화 팁은 현지화된 스토어 목록에서 누락된 부분이 있는 경우 알려주고 성공적으로 현지화된 출시를 위해 기타 유용한 알림을 제공합니다.
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/preplaunch"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    7. 출시 후 전 세계 사용자 지원
+  </h2>
+
+
+</div>
+
+<p>
+  앱을 전 세계에 출시한 후에 다양한 언어와 표준 시간대의 사용자를 지원할 준비를 해야 합니다.
+ 전 세계 사용자 지원 범위는 예산에 따라 다르지만 출시 후에 최소한 평점, 리뷰, 다운로드 통계를 주의 깊게 관찰해야 합니다.
+
+
+
+</p>
+
+<p>
+  다음은 몇 가지 제안입니다.
+</p>
+
+<ul>
+  <li>
+    <p>
+      개발자 콘솔에서 앱 통계를 사용하여 언어와 국가별로 다운로드 횟수, 설치 및 제거 횟수, 평점 비교&mdash;특정 언어나 국가에서 다운로드 횟수나 평점이 기대치에 미치지 못하면 제품을 개선하거나 마케팅 접근방식을 변경해 보십시오.
+
+
+
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      정기적으로 리뷰 확인&mdash;Google Play는 모든 사용자 리뷰를 번역하므로 개발자는 전 세계 사용자가 앱을 어떻게 평가하는지, 어떤 기능을 좋아하는지, 무슨 문제가 영향을 주는지 바로 확인할 수 있습니다.
+
+ 리뷰를 검토하여 특정 국가에서 사용자에게 영향을 줄 수 있는 기술적인 문제를 파악한 다음 앱을 수정하고 업데이트할 수 있습니다.
+
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      가급적 리뷰에 응답&mdash;가능하면 전 세계 사용자의 모국어나 공통 언어로 전 세계 사용자와 소통하는 것이 좋습니다.
+
+      그렇지 못한 경우 번역 도구를 사용할 수도 있지만 결과는 예측할 수 없습니다.
+ 특정 언어에서 앱의 인기가 높은 경우 원어민의 도움을 받는 것을 고려해 보십시오.
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      웹사이트에 모든 지원 자료에 대한 링크가 있는지 확인하십시오.
+      언어별 사용자 그룹, Google+ 커뮤니티 또는 기타 지원 포럼을 설정하는 것을 고려하십시오.
+
+    </p>
+  </li>
+</ul>
+
+<p>
+  이러한 앱 현지화 규범을 따르고 전 세계 사용자에게 홍보 및 마케팅을 진행하고 지속적으로 지원하여 앱이 많은 사용자의 관심을 끌고 사용자의 충성도를 유지할 수 있습니다.
+
+
+</p>
+
+<p>
+  Google Play에서 앱을 계획하고 작성 및 출시하는 자세한 방법은 <a href="{@docRoot}distribute/tools/launch-checklist.html">출시 검사 목록</a>을 참조하십시오.
+
+</p>
+<h3 class="rel-resources clearfloat">관련 자료</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
diff --git a/docs/html-intl/intl/ko/google/play/filters.jd b/docs/html-intl/intl/ko/google/play/filters.jd
new file mode 100644
index 0000000..c1f73c7
--- /dev/null
+++ b/docs/html-intl/intl/ko/google/play/filters.jd
@@ -0,0 +1,439 @@
+page.title=Google Play 필터
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>빨리 보기</h2>
+<ul>
+<li>Google Play는 스토어에서 애플리케이션을 다운로드할 수 있는 Android 장치를 제어하는 필터를 적용합니다.
+</li>
+<li>필터링은 앱의 호환성 요구사항을 충족하는 장치의 사용자만 앱을 사용할 수 있도록 보장합니다.
+<li>필터링은 앱의 매니페스트 파일에서 선언하는 구성 요구사항과 기타 요소에 의해 결정됩니다.
+</li>
+</ul>
+
+<h2>이 문서의 내용</h2>
+
+<ol>
+  <li><a href="#how-filters-work">Google Play에서 필터 작동 방식</a></li>
+  <li><a href="#manifest-filters">매니페스트 요소를 기반으로 필터링</a>
+  </li>
+  <li><a href="#other-filters">기타 필터</a></li>
+  <li><a href="#MultiApks">여러 필터를 사용하여 다중 APK 게시</a></li>
+</ol>
+
+<h2>참고 항목</h2>
+ <ol>
+<li><a href="{@docRoot}guide/practices/compatibility.html">Android 호환성</a></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
+</ol>
+
+</div>
+</div>
+
+<p>사용자가 Google Play에서 다운로드할 앱을 검색하거나 탐색하면 애플리케이션이 장치와 호환되는지를 기준으로 결과가 필터링됩니다. 예를 들어, Google Play는 카메라가 필요한 앱을 카메라가 없는 장치에 표시하지 않습니다.
+
+
+ 이러한 <em>필터링</em>을 통해 개발자가 앱 배포를 관리하고 사용자에게 최고의 경험을 보장할 수 있습니다.
+
+</p>
+
+<p>Google Play의 필터링은 여러 유형의 앱 메타데이터 및 구성 설정을 기반으로 합니다. 여기에는 매니페스트 선언, 필수 라이브러리, 아키텍처 종속성, Google Play 개발자 콘솔에 설정된 배포 컨트롤(예: 대상 지역 지정, 가격 책정)이 포함됩니다.
+
+
+</p>
+
+<p>Google Play 필터링은 부분적으로 매니페스트 선언 및 Android 프레임워크의 기타 요소를 기반으로 하지만, 실제 필터링 동작은 프레임워크와 별개이며 특정 API 레벨로 바인딩되지 않습니다.
+
+ 이 문서는 Google Play에서 사용하는 현재 필터링 규칙을 설명합니다.
+</p>
+
+
+<h2 id="how-filters-work">Google Play에서 필터 작동 방식</h2>
+
+<p>Google Play는 아래 설명된 필터 제한을 사용하여 Google Play 앱에서 애플리케이션을 탐색 또는 검색 중인 사용자에게 애플리케이션을 표시할지 여부를 판별합니다.
+
+</p>
+
+<p>앱을 표시할지 여부를 판별할 때 Google Play는 장치의 하드웨어 및 소프트웨어 요구사항은 물론 통신사, 위치 및 기타 특성을 확인합니다.
+
+ 그런 다음 이들을 애플리케이션의 매니페스트 파일 및 게시 세부정보에 명시된 제한 및 종속성과 비교합니다.
+
+ </p>
+
+<p>애플리케이션이 필터 규칙에 따라 장치와 호환되면 Google Play가 사용자에게 애플리케이션을 표시합니다.
+ 그렇지 않은 경우 사용자가 Google Play 내에서 앱 ID를 직접 가리키는 딥 링크를 클릭하여 앱을 구체적으로 요청하더라도 Google Play가 검색 결과 및 카테고리 탐색에서 해당 앱을 숨깁니다.
+
+
+</p>
+
+<p>앱에서 사용 가능한 모든 필터 조합을 사용할 수 있습니다. 예를 들어, 앱에서 <code>minSdkVersion</code> 요구사항을 <code>"4"</code>로 설정하고 <code>smallScreens="false"</code>를 설정하면 앱을 Google Play에 업로드할 때 유럽 국가(통신사)만 대상으로 지정할 수 있습니다.
+
+
+ 따라서 Google Play 필터는 이러한 세 가지 요구사항 중 일부가 일치하지 않는 장치에서 애플리케이션을 사용하지 못하게 합니다.
+ </p>
+
+<p>모든 필터링 제한은 애플리케이션의 버전과 연관되어 있고 버전에 따라 변경할 수 있습니다.
+ 예를 들어, 사용자가 애플리케이션을 설치했는데 개발자가 사용자가 볼 수 없는 업데이트를 게시하면 사용자는 업데이트가 제공된다는 사실을 알지 못합니다.
+
+</p>
+
+<h4>Google Play 웹사이트에서 필터링</h4>
+
+<p>사용자가 <a href="http://play.google.com/apps">Google Play 웹사이트</a>를 탐색할 때 게시된 모든 애플리케이션을 볼 수 있습니다.
+ Google Play 웹사이트는 애플리케이션 요구사항을 사용자가 등록한 각 장치와 비교하여 호환성을 확인하고, 호환되는 장치에만 애플리케이션을 설치할 수 있도록 합니다.
+
+
+</p>
+
+<h2 id="manifest-filters">앱 매니페스트를 기반으로 필터링</h2>
+
+<p>매니페스트 파일의 모든 요소가 필터링을 트리거할 수 있는 것은 아니지만 애플리케이션의 매니페스트 파일 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> 내의 요소가 대부분의 필터를 트리거합니다. 표 1에서는 필터링을 트리거하는 데 사용해야 하는 요소를 나열하고 각 요소의 필터링이 어떻게 작동하는지 설명합니다.
+
+
+
+</p>
+
+<p id="table1" class="table-caption"><strong>표 1.</strong> Google Play에서 필터링을 트리거하는 매니페스트 요소.
+</p>
+<table>
+  <tr>
+    <th>매니페스트 요소</th>
+    <th>필터 이름</th>
+    <th>작동 방식</th>
+  </tr>
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">화면 크기</td>
+    <td valign="top">
+
+<p>애플리케이션이 <code>&lt;supports-screens&gt;</code> 요소의 특성을 설정하여 지원할 수 있는 화면 크기를 나타냅니다.
+ 애플리케이션이 게시되면 Google Play는 해당 특성을 사용하여 장치의 화면 크기에 따라 애플리케이션을 사용자에게 표시할지 여부를 판별합니다.
+
+
+ </p>
+
+<p>일반적으로 Google Play는 장치의 플랫폼이 작은 레이아웃을 큰 화면에 적용할 수 있지만 큰 레이아웃을 작은 화면에 적용할 수는 없다고 가정합니다.
+
+ 따라서 애플리케이션이 "보통" 화면 크기만 지원하도록 선언하면, Google Play가 애플리케이션을 보통 화면 장치와 대형 화면 장치에서 사용할 수 있지만 소형 화면 장치에서는 사용할 수 없도록 필터링합니다.
+
+
+</p>
+
+<p>애플리케이션이 <code>&lt;supports-screens&gt;</code>에 대한 특성을 선언하지 않은 경우 Google Play는 해당 특성에 대해 기본값을 사용합니다. 기본값은 API 레벨에 따라 다릅니다.
+
+ 구체적인 사항은 다음과 같습니다. </p>
+
+<ul>
+<li><p><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> 또는 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code>을 3 이하로 설정한 애플리케이션의 경우 <code>&lt;supports-screens&gt;</code> 요소 자체가 정의되지 않고 사용할 수 있는 특성이 없습니다.
+ 이 경우 Google Play는 해당 애플리케이션이 보통 크기 화면에 맞게 개발된 것으로 가정하고 보통 크기 이상의 화면을 가진 장치에 애플리케이션을 표시합니다.
+
+ </p>
+
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> 또는 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code>을 4 이상으로 설정한 경우 모든 특성의 기본값은 <code>"true"</code>입니다.
+ 이러한 방식으로 해당 애플리케이션이 기본적으로 모든 화면 크기를 지원하는 것으로 간주됩니다.
+</li>
+</ul>
+
+    <p><strong>예 1</strong><br />
+    매니페스트가 <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>을 선언하고 <code>&lt;supports-screens&gt;</code> 요소를 포함하지 않습니다.
+
+    <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 소형 화면 장치 사용자에게는 앱을 표시하지 않지만, 보통 및 대형 화면 장치 사용자에게는 표시합니다.
+
+ </p>
+    <p><strong>예 2<br />
+    </strong>매니페스트가 <code>&lt;uses-sdk android:minSdkVersion="3"
+    android:targetSdkVersion="4"&gt;</code>를 선언하고 <code>&lt;supports-screens&gt;</code> 요소를 포함하지 않습니다.
+
+    <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 장치 사용자에게 앱을 표시합니다.
+ </p>
+    <p><strong>예 3<br />
+    </strong>매니페스트가 <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code>를 선언하고 <code>&lt;supports-screens&gt;</code> 요소를 포함하지 않습니다.
+
+    <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.
+ </p>
+    <p>애플리케이션에서 화면 크기 지원을 선언하는 자세한 방법은 <code><a
+    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code> 및 <a href="{@docRoot}guide/practices/screens_support.html">다중 화면 지원</a>을 참조하십시오.
+
+
+</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
+      <!-- ##api level 3## --></td>
+    <td valign="top">장치 구성:
+ <br />
+    키보드, 탐색, 터치스크린</td>
+    <td valign="top"><p>애플리케이션이 특정 하드웨어 기능을 요청한 경우 Google Play는 요청한 하드웨어를 가진 장치에만 앱을 표시합니다.
+</p>
+      <p><strong>예 1<br />
+      </strong>매니페스트가 <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>를 포함하고 사용자가 5방향 탐색 컨트롤이 없는 장치에서 앱을 검색 중입니다. <strong>결과</strong>: Google Play가 사용자에게 앱을 표시하지 않습니다. </p>
+      <p><strong>예 2<br />
+      </strong>매니페스트가 <code>&lt;uses-configuration&gt;</code> 요소를 포함하지 않습니다. <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.</p>
+<p>자세한 내용은 <a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>을 참조하십시오.</p></td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">장치 기능<br />
+      (<code>name</code>)</td>
+    <td valign="top"><p>애플리케이션이 장치에 특정 장치 기능을 요구할 수 있습니다.
+ 이 기능은 Android 2.0에 소개되었습니다(API
+레벨 5).</p>
+      <p><strong>예 1<br />
+      </strong>매니페스트가 <code>&lt;uses-feature
+android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>를 포함하고 사용자가 라이트 센서가 없는 장치에서 앱을 검색 중입니다. <strong>결과</strong>:
+
+ Google Play가 사용자에게 앱을 표시하지 않습니다. </p>
+      <p><strong>예 2<br />
+      </strong>매니페스트가 <code>&lt;uses-feature&gt;</code> 요소를 포함하지 않습니다.
+ <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.
+</p>
+      <p>자세한 내용은 <code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>를 참조하십시오.</p>
+      <p><em>내재된 기능을 기준으로 필터링:</em> 경우에 따라 Google Play는 <code>&lt;uses-permission&gt;</code> 요소를 통해 요청된 권한을 <code>&lt;uses-feature&gt;</code> 요소에 선언된 것과 동등한 기능 요구사항으로 해석합니다.
+
+
+ 아래 <a href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>을 참조하십시오.
+</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top">OpenGL-ES
+    버전<br />
+(<code>openGlEsVersion</code>)</td>
+    <td valign="top"><p>애플리케이션이 <code>&lt;uses-feature
+        android:openGlEsVersion=&quot;int&quot;&gt;</code> 특성을 사용하여 장치가 특정 OpenGL-ES 버전을 지원하도록 요구할 수 있습니다.
+</p>
+      <p><strong>예 1<br />
+      </strong>앱이 매니페스트에서 <code>openGlEsVersion</code>을 여러 번 지정하는 방식으로 여러 OpenGL-ES 버전을 요청합니다.
+
+  <strong>결과</strong>: Google Play는 앱이 지정된 버전 중 가장 높은 버전을 요구하는 것으로 간주합니다.</p>
+<p><strong>예 2<br />
+</strong>앱이 OpenGL-ES 버전 1.1을 요청하고 사용자가 OpenGL-ES 버전 2.0을 지원하는 장치에서 앱을 검색 중입니다.
+ <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 사용자에게 앱을 표시합니다. 장치가 OpenGL-ES 버전 <em>X</em>를 지원하는 것으로 보고하면 Google Play는 해당 장치가 <em>X</em> 이전 버전도 모두 지원하는 것으로 간주합니다.
+
+
+</p>
+<p><strong>예 3<br />
+</strong>사용자가 OpenGL-ES 버전을 보고하지 않은 장치(예: Android 1.5 이하 버전을 실행하는 장치)에서 앱을 검색 중입니다.
+ <strong>결과</strong>: Google Play는 해당 장치가 OpenGL-ES 1.0만 지원하는 것으로 간주합니다.
+ Google Play가 <code>openGlEsVersion</code>을 지정하지 않은 사용자 앱이나 1.0 이상의 OpenGL-ES 버전을 지정하지 않은 앱만 표시합니다. </p>
+      <p><strong>예 4<br />
+      </strong>매니페스트가 <code>openGlEsVersion</code>을 지정하지 않습니다. <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다. </p>
+<p>자세한 내용은 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>를 참조하십시오.</p></td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
+    <td valign="top">소프트웨어 라이브러리</td>
+    <td valign="top"><p>애플리케이션이 장치에 특정 공유 라이브러리를 요구할 수 있습니다.
+ </p>
+      <p><strong>예 1<br />
+      </strong>앱이 <code>com.google.android.maps</code> 라이브러리를 요구하고 사용자가 <code>com.google.android.maps</code> 라이브러리가 없는 장치에서 앱을 검색 중입니다. <strong>결과</strong>: Google Play가 사용자에게 앱을 표시하지 않습니다. </p>
+      <p><strong>예 2</strong><br />
+        매니페스트가 <code>&lt;uses-library&gt;</code> 요소를 포함하지 않습니다. <strong>결과</strong>: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.</p>
+<p>자세한 내용은 <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>를 참조하십시오.</p></td>
+  </tr>
+  <tr id="uses-permission-filtering">
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
+    <td valign="top">&nbsp;</td>
+    <td valign="top">엄격히 말하자면 Google Play는 <code>&lt;uses-permission&gt;</code> 요소를 기준으로 필터링하지 않습니다.
+ 하지만 Google Play가 해당 요소를 읽고 <code>&lt;uses-feature&gt;</code> 요소에서 올바로 선언되지 않았을 수도 있는 하드웨어 기능 요구사항이 애플리케이션에 있는지 판별합니다.
+
+
+ 예를 들어, 애플리케이션이 <code>CAMERA</code> 권한을 요청하지만 <code>android.hardware.camera</code>에 대해 <code>&lt;uses-feature&gt;</code> 요소를 선언하지 않은 경우 Google Play는 애플리케이션이 카메라를 요구하는 것으로 간주하여 카메라를 제공하지 않는 장치의 사용자에게 애플리케이션을 표시하지 않습니다.
+
+
+
+</p>
+    <p>일반적으로 애플리케이션이 하드웨어 관련 권한을 요청하면 Google Play는 <code>&lt;uses-feature&gt;</code> 선언에 해당하는 기능이 없더라도 애플리케이션이 기본 하드웨어 기능을 요구하는 것으로 간주합니다.
+
+
+ 그런 다음 <code>&lt;uses-feature&gt;</code> 선언에 내재된 기능을 기준으로 필터링을 설정합니다.
+
+</p>
+    <p>하드웨어 기능을 내재하는 권한 목록은 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a> 요소에 대한 문서를 참조하십시오.
+
+</p>
+</td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
+    <td valign="top">최소 프레임워크 버전(<code>minSdkVersion</code>)</td>
+    <td valign="top"><p>애플리케이션이 최소 API 레벨을 요구할 수 있습니다.  </p>
+      <p><strong>예 1</strong><br />
+        매니페스트가 <code>&lt;uses-sdk
+      android:minSdkVersion=&quot;3&quot;&gt;</code>을 포함하고 앱이 API 레벨 3에서 소개된 API를 사용합니다. 사용자가 API 레벨 2를 가진 장치에서 앱을 검색 중입니다. <strong>결과</strong>: Google Play가 사용자에게 앱을 표시하지 않습니다. </p>
+      <p><strong>예 2</strong><br />
+      매니페스트가 <code>minSdkVersion</code>을 포함하지 않고 앱이 API 레벨 3에서 소개된 API를 사용합니다. 사용자가 API 레벨 2를 가진 장치에서 앱을 검색 중입니다. <strong>결과</strong>: Google Play는 <code>minSdkVersion</code>이 "1"이고 앱이 모든 Android 버전과 호환되는 것으로 간주합니다. Google Play가 사용자에게 앱을 표시하고 사용자가 앱을 다운로드하는 것을 허용합니다. 앱이 런타임에 작동 중단됩니다. </p>
+    <p>이 두 번째 시나리오를 피하려면 항상 <code>minSdkVersion</code>을 선언하는 것이 좋습니다. 자세한 내용은 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>을 참조하십시오.</p></td>
+  </tr>
+  <tr>
+    <td valign="top">최대 프레임워크 버전(<code>maxSdkVersion</code>)</td>
+    <td valign="top"><p><em>사용이 중단되었습니다.</em> Android 2.1 이상에서는 <code>maxSdkVersion</code>이 앱의 매니페스트에 설정된 경우 <code>maxSdkVersion</code> 특성을 검사하거나 적용하지 않고 SDK가 컴파일하지 않습니다.
+
+ 장치가 이미 <code>maxSdkVersion</code>으로 컴파일된 경우 Google Play가 이를 반영하고 필터링에 사용합니다.
+
+</p>
+<p> <code>maxSdkVersion</code> 선언은 권장되지 <em>않습니다</em>. 자세한 내용은 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>을 참조하십시오.</p></td>
+  </tr>
+</table>
+
+
+
+<h3 id="advanced-filters">고급 매니페스트 필터</h3>
+
+<p>Google Play는 <a href="#table1">표 1</a>의 매니페스트 요소뿐만 아니라 표 2의 고급 매니페스트 요소를 기준으로 애플리케이션을 필터링할 수도 있습니다.
+</p>
+
+<p>고급 매니페스트 요소와 이들이 트리거하는 필터링은 예외적인 사례에만 적용됩니다.
+ 이들은 애플리케이션 배포에서 엄격한 제어가 필요한 특정 유형의 고성능 게임 및 유사 애플리케이션용으로 고안되었습니다.
+ <strong>대부분의 애플리케이션은 이러한 필터를 사용하면 안 됩니다</strong>.
+</p>
+
+<p id="table2" class="table-caption"><strong>표 2.</strong> Google Play 필터링용 고급 매니페스트 요소.
+</p>
+<table>
+  <tr><th>매니페스트 요소</th><th>요약</th></tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play가 장치 화면
+크기와 밀도가 {@code
+&lt;compatible-screens&gt;} 요소에서 {@code &lt;screen&gt;} 요소가 선언한 화면 구성과 일치하지 않는 경우에 애플리케이션을 필터링합니다.</p>
+      <p class="caution"><strong>주의:</strong> 일반적으로 <strong>이 매니페스트 요소를 사용하면 안 됩니다</strong>.
+ 이 요소를 사용하면 목록에 없는 화면 크기와 밀도의 조합을 모두 제외시켜 애플리케이션의 잠재적 사용자 기반이 현저히 줄어들 수 있습니다.
+
+ 대신 위의 <a href="#table1">표 1</a>에 나오는 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> 매니페스트 요소를 사용하여 대체 리소스로 고려하지 않은 화면 구성에 대해 화면 호환성 모드를 활성화해야 합니다.
+
+</p>
+    </td>
+  </tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play는 애플리케이션에서 지원되는 하나 이상의 GL 텍스처 압축 형식이 장치에서도 지원되는 경우를 제외하고 애플리케이션을 필터링합니다.
+ </p>
+    </td>
+  </tr>
+</table>
+
+
+
+<h2 id="other-filters">기타 필터</h2>
+
+<p>Google Play는 아래 표에 설명된 것처럼 다른 애플리케이션 특성을 사용하여 주어진 장치에서 특정 사용자에 대해 애플리케이션을 표시할지 또는 숨길지 판별합니다. </p>
+
+<p id="table3" class="table-caption"><strong>표 3.</strong> Google Play에서 필터링에 영향을 주는 애플리케이션 및 게시 특성.
+</p>
+<table> <tr>
+    <th>필터 이름</th> <th>작동 방식</th> </tr>
+
+  <tr>
+    <td valign="top">게시 상태</td> <td valign="top"><p>게시된 애플리케이션만 Google Play 내의 검색 및 탐색에 나타납니다.
+</p> <p>앱이 게시되지 않은 경우라도 사용자가 구입, 설치 또는 최근에 제거한 앱 중에 다운로드 영역에서 볼 수 있는 앱은 설치할 수 있습니다.
+
+</p> <p>애플리케이션이 일시 중단된 경우 다운로드 영역에 나타나더라도 사용자가 다시 설치허가나 업데이트할 수 없습니다.
+</p> </td></tr>
+  <tr>
+  <td valign="top">가격 책정 상태
+</td> <td valign="top"><p>모든 사용자가 유료 앱을 볼 수 있는 것은 아닙니다. 유료 앱을 표시하려면 SIM 카드가 있고 Android 1.1 이상을 실행하는 장치가 유료 앱을 사용할 수 있는 (SIM 통신사가 지정한) 국가에 있어야 합니다.
+
+</p></td>
+</tr> <tr>
+  <td valign="top">대상 국가 지정</td> <td valign="top"> <p>앱을 Google Play에 업로드할 때 <strong>가격 책정 및 배포</strong>에서 앱을 배포할 국가를 선택할 수 있습니다.
+
+ 그러면 선택한 국가에서만 앱을 사용할 수 있게 됩니다.
+</p>
+</td> </tr> <tr>
+  <td valign="top" style="white-space:nowrap;">CPU 아키텍처(ABI)</td>
+  <td valign="top"><p>특정 CPU 아키텍처(예: ARM EABI v7 또는 x86)를 대상으로 하는 네이티브 라이브러리를 포함한 앱은 해당 아키텍처를 지원하는 장치에만 표시됩니다.
+
+ NDK 및 네이티브 라이브러리 사용에 대한 자세한 내용은 <a href="{@docRoot}tools/sdk/ndk/index.html#overview">Android NDK란?</a>을 참조하십시오.
+
+</p> </tr> <tr>
+  <td valign="top">복사 방지 애플리케이션</td> <td valign="top"><p class="caution">Google Play는 개발자 콘솔에서 더 이상 복사 방지 기능을 지원하지 않으며 이를 기준으로 앱을 필터링하지 않습니다.
+
+ 앱의 보안을 유지하려면 대신 <a href="{@docRoot}google/play/licensing/index.html">애플리케이션 라이선싱</a>을 사용하십시오.
+ 자세한 내용은 <a href="{@docRoot}google/play/licensing/overview.html#CopyProtection">복사 방지 대안</a>을 참조하십시오.
+</p></td> </tr> </table>
+
+<h2 id="MultiApks">여러 필터를 사용하여 다중 APK 게시</h2>
+
+<p>일부 특정 Google Play 필터는 서로 다른 장치 구성에 서로 다른 APK를 제공하기 위해 동일한 애플리케이션에 대해 다중 APK 게시를 허용합니다.
+ 예를 들어, 고화질 그래픽 자산을 사용하는 동영상 게임을 제작 중인 경우 각각 서로 다른 텍스처 압축 형식을 지원하는 2개의 APK를 생성하고 싶은 경우가 있습니다.
+
+ 이러한 방식으로 각 장치 구성에 필요한 텍스처만 포함하여 APK 파일의 크기를 줄일 수 있습니다.
+
+ Google Play는 각 장치의 텍스처 압축 형식 지원에 따라 해당 장치를 지원하도록 선언한 APK를 제공합니다.
+</p>
+
+<p>현재 Google Play는 각 APK가 다음 구성에 따라 서로 다른 필터를 제공하는 경우에만 동일한 애플리케이션에 대해 다중 APK 게시를 허용합니다.
+</p>
+<ul>
+  <li>OpenGL 텍스처 압축 형식
+    <p><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a> 요소를 사용하여 필터링합니다.</p>
+  </li>
+  <li>화면 크기(및 선택적 화면 밀도)
+    <p><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> 또는 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a> 요소를 사용하여 필터링합니다.</p>
+  </li>
+  <li>API 레벨
+    <p><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
+&lt;uses-sdk&gt;}</a> 요소를 사용하여 필터링합니다.</p>
+  </li>
+  <li>CPU 아키텍처(ABI)
+    <p>특정 CPU 아키텍처(예: ARM EABI v7 또는 x86)를 대상으로 하는 <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>로 작성된 네이티브 라이브러리를 포함하여 필터링합니다.
+</p>
+  </li>
+</ul>
+
+<p>다른 모든 필터는 계속 평소와 동일하게 작동하지만 이 4개의 필터는 Google Play의 동일한 애플리케이션 목록 내에서 APK를 서로 구별할 수 있는 유일한 필터입니다.
+ 예를 들어, 장치에 카메라가 있는지 여부에 따라서만 APK가 달라지는 경우 동일한 애플리케이션에 대해 다중 APK를 게시할 수 <em>없습니다</em>.
+
+</p>
+
+<p class="caution"><strong>주의:</strong> 동일한 애플리케이션에 대해 다중 APK 게시는 고급 기능으로 간주되며 <strong>대부분의 애플리케이션은 광범위한 장치 구성을 지원하는 단일 APK만 게시해야 합니다</strong>.
+
+ 다중 APK를 게시하려면 필터 내에서 특정 규칙을 따라야 하며 각 구성에 대해 적절한 업데이트 경로를 보장하기 위해 각 APK의 버전 코드에 특별한 주의를 기울여야 합니다.
+
+</p>
+
+<p>Google Play에서 다중 APK를 게시하는 자세한 방법은 <a href="{@docRoot}google/play/publishing/multiple-apks.html">다중 APK 지원</a>을 참조하십시오.</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/ko/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/index.jd
new file mode 100644
index 0000000..e66e8d1
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/index.jd
@@ -0,0 +1,72 @@
+page.title=액티비티 수명 주기 관리하기
+page.tags=activity lifecycle
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<h2>종속관계 및 전제조건</h2>
+<ul>
+  <li>Android 프로젝트를 생성하는 방법(<a href="{@docRoot}training/basics/firstapp/creating-project.html">Android
+프로젝트 생성</a> 참조)</li>
+</ul>
+
+
+<h2>필독 항목</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/activities.html">액티비티</a></li>
+</ul>
+
+
+<h2>실습하기</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">데모 다운로드</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>사용자가 앱을 탐색하고, 앱에서 나가고, 앱으로 다시 돌아가면, 앱의
+{@link android.app.Activity} 인스턴스는 
+수명 주기 안에서 서로 다른 상태 간에 전환됩니다. 예를 들어
+액티비티가 처음 시작되는 경우, 시스템의 전면에 표시되어 사용자의
+포커스를 받습니다. 이 과정에서 Android 시스템은 사용자 인터페이스 및 다른 구성요소에 설정된
+액티비티에 대해 일련의 수명 주기 메서드를 호출합니다. 사용자가 다른 액티비티를 시작하거나 다른 앱으로 전환하는 
+작업을 수행하면, 백그라운드(액티비티가 더
+이상 보이지 않지만 인스턴스와 해당 상태는 그대로 유지되는 상태)로 전환되면서 시스템은 액티비티에 대해 또 다른
+수명 주기 메서드 세트를 호출합니다.</p>
+
+<p>사용자가 액티비티를 떠났다가 다시 돌아왔을 때
+액티비티가 어떤 식으로 동작할지에 대해 수명 주기 콜백 메서드 내에 선언할 수 있습니다.  예를 들어 스트리밍 비디오 플레이어를 구축하는 경우,
+사용자가 다른
+앱으로 전환할 때 비디오를 일시정지하고 네트워크 연결을 종료할 수 있습니다. 사용자가 돌아오면, 네트워크를 다시 연결하고 사용자가 일시정지한 지점에서
+비디오를 다시 시작할 수 있게 할 수 있습니다.</p>
+
+<p>이 클래스에서는 각각의 {@link
+android.app.Activity} 인스턴스가 수신하는 중요한 수명 주기 콜백 메서드를 설명합니다. 또한 이러한 콜백 메서드를 사용하여 액티비티가
+사용자가 원하는 작업을 하고, 액티비티가 필요로 하지 않을 때 시스템 리소스 소비를 방지하는 방법에 대해서도 설명합니다.</p>
+
+<h2>과정</h2>
+ 
+<dl>
+  <dt><b><a href="starting.html">액티비티 시작하기</a></b></dt>
+  <dd>액티비티 수명 주기의 기본사항, 사용자가 앱을 시작하는 방법, 그리고 기본 액티비티 생성 작업을 수행하는
+방법에 대해 설명합니다.</dd>
+  <dt><b><a href="pausing.html">액티비티 일시정지 및 재개하기</a></b></dt>
+  <dd>액티비티가 일시정지(부분적으로 가려져 있음)되었다가 재개되는 경우 어떤 동작이 발생하는지, 그리고 이러한 상태 전환 과정에서 수행해야 하는
+작업은 무엇인지 설명합니다.</dd>
+  <dt><b><a href="stopping.html">액티비티 정지 및 재시작하기</a></b></dt>
+  <dd>사용자가 액티비티를 완전히 떠났다가 돌아왔을 때 어떤 동작이 발생하는지 설명합니다.</dd>
+  <dt><b><a href="recreating.html">액티비티 재생성하기</a></b></dt>
+  <dd>액티비티가 소멸되면 어떤 동작이 발생하는지, 그리고 필요 시 액티비티
+상태를 재구축하는 방법에 대해 설명합니다.</dd>
+</dl> 
+
diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/pausing.jd
new file mode 100644
index 0000000..b0497cd
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/pausing.jd
@@ -0,0 +1,147 @@
+page.title=액티비티 일시정지 및 재개하기
+page.tags=activity lifecycle
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>이 과정에서 다루는 내용</h2>
+    <ol>
+      <li><a href="#Pause">액티비티 일지정지하기</a></li>
+      <li><a href="#Resume">액티비티 재개하기</a></li>
+    </ol>
+    
+    <h2>필독 항목</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">액티비티</a>
+      </li>
+    </ul>
+
+<h2>실습하기</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">데모 다운로드</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>일반적인 앱 사용 중에 가끔 다른 
+비주얼 구성요소로 인해 전면의 액티비티가 <em>일시정지</em>되는 경우가 있습니다.  예를 들어, 대화 상자 스타일과 같은 반투명
+액티비티가 열리면, 그 이전 액티비티는 일시정지됩니다. 액티비티가
+부분적으로 보이지만 현재 포커스 내에 있지 않는 한 일시정지된 상태로 유지됩니다.</p>
+
+<p>하지만 액티비티가 보이지 않고 완전히 가려지면, <em>정지</em> 상태가 됩니다(이에 대해서는
+다음 과정에서 설명함).</p>
+
+<p>액티비티가 일시정지 상태로 전환되면 시스템은 {@link android.app.Activity}에 대해 {@link
+android.app.Activity#onPause onPause()} 메서드를 호출합니다. 이를 통해
+비디오와 같이 일시정지되어 있는 동안에는 진행되어서는 안 되는 지속적인 작업을 정지하거나, 사용자가 앱에서 떠나더라도 영구 저장되어야 하는 정보를
+유지할 수 있습니다. 사용자가
+일시정지 상태에서 액티비티로 돌아오는 경우, 시스템은 액티비티를 재개하고 {@link android.app.Activity#onResume onResume()} 메서드를
+호출합니다.</p>
+
+<p class="note"><strong>참고:</strong> 액티비티가 {@link
+android.app.Activity#onPause()}에 대한 호출을 수신하는 경우, 이는 액티비티가
+잠시 일시정지되는 것이며, 사용자가 이 액티비티로 포커스를 다시 돌릴 수 있음을 나타냅니다. 하지만 이는 일반적으로 사용자가 액티비티를 떠남을 나타내는
+첫 번째 표시입니다.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
+<p class="img-caption"><strong>그림 1.</strong> 액티비티를
+반투명 액티비티가 가릴 경우, 시스템은 {@link android.app.Activity#onPause onPause()}를 호출하고 액티비티는 일시정지된 상태로
+대기하게 됩니다(1). 사용자가 여전히 일시정지된 상태의 액티비티로 돌아오는 경우,
+시스템은 {@link android.app.Activity#onResume onResume()}을 호출합니다(2).</p>
+
+
+<h2 id="Pause">액티비티 일지정지하기</h2>
+      
+<p>시스템이 액티비티에 대해 {@link android.app.Activity#onPause()}를 호출하면, 이는
+엄밀해 말해 액티비티가 여전히 부분적으로 보일 수 있음을 의미하지만,
+대개의 경우 사용자가 액티비티를 떠나 곧 정지 상태로 전환될 것임을 나타냅니다.  일반적으로 다음 작업을 수행할 때
+{@link android.app.Activity#onPause()} 콜백을 사용해야 합니다.</p>
+
+<ul>
+  <li>애니메이션 또는 CPU 소비를 야기할 수 있는 기타 지속적인 작업 정지</li>
+  <li>저장되지 않은 변경 내용 커밋. 단, 사용자가 나갈 때
+이러한 변경 내용이 영구적으로 저장되기를 기대하는 경우에 한합니다(예: 이메일 임시저장).</li>
+  <li>브로드캐스트 리시버와 같은 시스템 리소스, GPS와
+같은 센서에 대한 핸들 또는 액티비티가 일지정지된 동안 배터리 수명에 영향을 미칠 수 있으며 사용자가
+필요로 하지 않는 모든 리소스 해제</li>
+</ul>
+
+<p>예를 들어 애플리케이션이 {@link android.hardware.Camera}를 사용하는 경우
+{@link android.app.Activity#onPause()} 메서드는 이를 해제할 수 있는 좋은 위치입니다.</p>
+
+<pre>
+&#64;Override
+public void onPause() {
+    super.onPause();  // Always call the superclass method first
+
+    // Release the Camera because we don't need it when paused
+    // and other activities might need to use it.
+    if (mCamera != null) {
+        mCamera.release()
+        mCamera = null;
+    }
+}
+</pre>
+
+<p>일반적으로 폼에 입력된 개인 정보와 같은
+사용자의 변경 내용을 {@link android.app.Activity#onPause()}를 사용하여 영구 저장소에 저장하면 <strong>안 됩니다</strong>. 이메일
+임시보관과 같이 사용자가 자동저장을 원할 것이란 확신이 있을 경우에만 {@link android.app.Activity#onPause()}
+내에서 사용자의 변경 내용을 영구 저장소에 유지해야 합니다.
+하지만 데이터베이스에 쓰기와 같이 CPU를 많이 소모하는 작업은 {@link
+android.app.Activity#onPause()} 중에는 수행하지 않아야 합니다. 그 이유는 이로 인해 다음 액티비티로 넘어가는 시각적
+전환이 느려질 수 있기 때문입니다(그 대신, 로드가 많은 셧다운 작업은 {@link android.app.Activity#onStop onStop()}
+중에 수행해야 함).</p>
+
+<p>액티비티가 실제로 정지된 경우 사용자가 다음
+대상으로 신속하게 전환할 수 있도록 {@link android.app.Activity#onPause
+onPause()} 메서드 내에서 수행되는 작업의 양을 비교적 단순하게 유지해야 합니다.</p>
+
+<p class="note"><strong>참고:</strong> 액티비티가 일시정지되면 {@link
+android.app.Activity} 인스턴스는 메모리에 계속 유지되며, 액티비티가 재개되면 다시 호출됩니다.
+최상위 상태가 재개됨 상태인 콜백 메서드 중에
+생성된 구성요소는 다시 초기화할 필요가 없습니다.</p>
+
+
+
+<h2 id="Resume">액티비티 재개하기</h2>
+
+<p>사용자가 일시정지됨 상태에서 액티비티를 재개하면, 시스템은 {@link
+android.app.Activity#onResume()} 메서드를 호출합니다.</p>
+
+<p>액티비티가 처음 생성되는 경우를
+포함하여 액티비티가 전면에 표시될 때마다 시스템이 이 메서드를 호출한다는 것을 유의해야 합니다. 이와 같이, {@link
+android.app.Activity#onResume()}을 구현하여 {@link
+android.app.Activity#onPause()} 중에 해제하는 구성요소를 초기화하고, 액티비티가
+재개됨 상태로 전환될 때마다 필요한 다른 초기화 작업도 수행해야 합니다(예: 애니메이션 시작 및 액티비티가 사용자 포커스를 받을 때에만
+사용되는 구성 요소 초기화).</p>
+
+<p>다음 {@link android.app.Activity#onResume()} 예제는 위에 표시된
+{@link android.app.Activity#onPause()} 예제와 대응관계에 있습니다. 따라서 이 예제에서는 액티비티가 일시정지될 때
+해제되는 카메라를 초기화합니다.</p>
+
+<pre>
+&#64;Override
+public void onResume() {
+    super.onResume();  // Always call the superclass method first
+
+    // Get the Camera instance as the activity achieves full user focus
+    if (mCamera == null) {
+        initializeCamera(); // Local method to handle camera init
+    }
+}
+</pre>
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/recreating.jd
new file mode 100644
index 0000000..79fb92b
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/recreating.jd
@@ -0,0 +1,178 @@
+page.title=액티비티 재생성하기
+page.tags=activity lifecycle
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>이 과정에서 다루는 내용</h2>
+    <ol>
+      <li><a href="#SaveState">액티비티 상태 저장하기</a></li>
+      <li><a href="#RestoreState">액티비티 상태 복원하기</a></li>
+    </ol>
+    
+    <h2>필독 항목</h2>
+    <ul>
+      <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">다양한
+화면 지원</a></li>
+      <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리하기</a></li>
+      <li><a href="{@docRoot}guide/components/activities.html">액티비티</a>
+      </li>
+    </ul>
+
+  </div>
+</div>
+
+<p>정상적인 앱 동작으로 인해 액티비티가 소멸되는 몇 가지 시나리오가 있습니다.
+예를 들어 사용자가 <em>뒤로</em> 버튼을 누르거나 액티비티가 {@link android.app.Activity#finish()}를 호출하여
+자체적인 소멸 신호를 보내는 경우입니다. 또한 액티비티가
+현재 정지되어 있고 장시간 사용되지 않거나, 전면에 있는 액티비티가 더 많은
+리소스를 필요로 하여 시스템이 백그라운드 프로세스를 종료해서 메모리를 회수해야 하는 경우에도 시스템이 액티비티를 소멸시킬 수 있습니다.</p>
+
+<p>사용자가 <em>뒤로</em> 버튼을 누르거나 액티비티가
+스스로 종료되어 소멸된 경우, {@link android.app.Activity} 인스턴스에 대한 시스템의 개념은 완전히 사라지게 됩니다. 왜냐하면
+동작이 액티비티가 더 이상 필요치 않다는 것을 나타내기 때문입니다. 하지만 시스템이 정상적인 앱 동작이 아닌 시스템 제약 조건으로 인해
+액티비티를 소멸한 경우, 실제
+{@link android.app.Activity} 인스턴스는 사라지지만 시스템은 그것이 존재하고 있었음을 기억합니다. 예를 들어
+사용자가 다시 해당 액티비티를 탐색하면, 시스템은 소멸된 액티비티의 상태를 설명하는
+저장된 데이터 세트를 사용하여 액티비티의 새 인스턴스를 생성합니다. 시스템이
+이전 상태를 복원하기 위해 사용하는 저장된 데이터를 "인스턴스 상태"라고 하며, 이는 {@link android.os.Bundle} 개체에 저장된
+키-값 쌍의 컬렉션입니다.</p>
+
+<p class="caution"><strong>주의:</strong> 사용자가 화면을 회전할 때마다
+액티비티가 소멸되고 재생성됩니다. 화면 방향이 바뀌면 시스템은
+전면에 있는 액티비티를 소멸하고 재생성합니다. 그 이유는 화면 구성이 바뀌었으며, 액티비티가 레이아웃과 같은 대체 리소스를
+로딩해야 할 수 있기 때문입니다.</p>
+
+<p>기본적으로 시스템은 {@link android.os.Bundle} 인스턴스 상태를 사용하여 액티비티 레이아웃의 각 {@link android.view.View} 개체에 대한
+정보를 저장합니다(예: {@link android.widget.EditText} 개체에
+입력된 텍스트 값 등). 따라서 액티비티 인스턴스가 소멸되고
+재생성된 경우, 레이아웃의 상태는
+별도의 코드 요청 없이 이전 상태로 복원됩니다. 하지만
+액티비티에서 사용자 진행 상태를
+추적하는 멤버 변수처럼 액티비티에 복원하고자 하는 상태 정보가 더 많이 있는 경우도 있습니다.</p>
+
+<p class="note"><strong>참고:</strong> Android 시스템이 액티비티에서
+보기의 상태를 복원하기 위해서는
+<a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
+android:id}</a> 특성으로 제공되는 <strong>고유 ID가 각 보기마다 있어야 합니다</strong>.</p>
+
+<p>액티비티 상태에 대한 추가 데이터를 저장하려면
+{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 콜백 메서드를 재정의해야 합니다.
+시스템은 사용자가 액티비티를 떠날 경우 이 메서드를 호출하며,
+액티비티가 예기치 않게 소멸될 경우 저장되는
+{@link android.os.Bundle} 개체로 전달합니다. 시스템이
+나중에 액티비티 인스턴스를 재생성해야 하는 경우, 동일한 {@link
+android.os.Bundle} 개체를 {@link android.app.Activity#onRestoreInstanceState
+onRestoreInstanceState()} 및 {@link android.app.Activity#onCreate onCreate()}
+메서드 모두에 전달합니다.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
+<p class="img-caption"><strong>그림 2.</strong> 시스템은 액티비티 중지 작업을 시작할 때
+{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}(1)를 호출합니다.
+따라서 {@link android.app.Activity} 인스턴스가
+재생성되어야 하는 경우 저장하고자 하는 추가 상태 데이터를 지정할 수 있습니다.
+액티비티가 소멸되고 동일한 인스턴스가 재생성되어야 하는 경우, 시스템은 {@link android.app.Activity#onCreate onCreate()} 메서드(2)
+및 {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 메서드(3)
+모두에 (1)에서 정의된 상태
+데이터를 전달합니다.</p>
+
+
+
+<h2 id="SaveState">액티비티 상태 저장하기</h2>
+
+<p>액티비티의 정지 작업 시작 시 시스템은 {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()}를 호출합니다. 이에 따라 액티비티는 키-값
+쌍 컬렉션과 함께 상태 정보를 저장할 수 있습니다. 메서드의 기본 구현은 {@link android.widget.EditText} 위젯 내 텍스트 또는 {@link android.widget.ListView}의 스크롤
+위치와 같은 액티비티의
+보기 계층 구조에 대한 정보를 저장합니다.</p>
+
+<p>액티비티에 대한 추가 상태 정보를 저장하려면 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}를
+구현한 다음 {@link android.os.Bundle} 개체에
+키-값 쌍을 추가해야 합니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+static final String STATE_SCORE = "playerScore";
+static final String STATE_LEVEL = "playerLevel";
+...
+
+&#64;Override
+public void onSaveInstanceState(Bundle savedInstanceState) {
+    // Save the user's current game state
+    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
+    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
+    
+    // Always call the superclass so it can save the view hierarchy state
+    super.onSaveInstanceState(savedInstanceState);
+}
+</pre>
+
+<p class="caution"><strong>주의:</strong> 항상 {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}의 슈퍼클래스 구현을 호출하여 기본 구현에서
+보기 계층 구조를 저장할 수 있도록 합니다.</p>
+
+
+
+<h2 id="RestoreState">액티비티 상태 복원하기</h2>
+
+<p>액티비티가 이전에 소멸된 후 재생성되면, 시스템이 액티비티를
+전달한 {@link android.os.Bundle}로부터 저장된
+상태를 복구할 수 있습니다. {@link android.app.Activity#onCreate onCreate()} 및 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 콜백 메서드 둘 다 인스턴스 상태 정보를 포함하는
+동일한 {@link android.os.Bundle}을 수신합니다.</p>
+
+<p>{@link android.app.Activity#onCreate onCreate()} 메서드는
+시스템이 액티비티의 새 인스턴스를 생성하든, 이전 인스턴스를 재생성하든 상관없이 호출되므로, 읽기를 시도하기 전에 상태 {@link android.os.Bundle}이 null인지
+반드시 확인해야 합니다. null일 경우,
+시스템은 이전에 소멸된 액티비티의 인스턴스를
+복원하지 않고 새 인스턴스를 생성합니다.</p>
+
+<p>다음은 {@link android.app.Activity#onCreate
+onCreate()}에서 몇 가지 상태 데이터를 복원하는 방법에 대한 예제입니다.</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState); // Always call the superclass first
+   
+    // Check whether we're recreating a previously destroyed instance
+    if (savedInstanceState != null) {
+        // Restore value of members from saved state
+        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+    } else {
+        // Probably initialize members with default values for a new instance
+    }
+    ...
+}
+</pre>
+
+<p>{@link android.app.Activity#onCreate onCreate()} 중에 상태를 복원하는
+대신, 시스템이 {@link android.app.Activity#onStart()} 메서드 후에
+호출하는 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}를 구현하도록 선택할 수 있습니다. 시스템은 복원할 저장
+상태가 있을 경우에만 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}를 호출합니다. 따라서 {@link android.os.Bundle}이 null인지 확인할 필요가 없습니다.</p>
+        
+<pre>
+public void onRestoreInstanceState(Bundle savedInstanceState) {
+    // Always call the superclass so it can restore the view hierarchy
+    super.onRestoreInstanceState(savedInstanceState);
+   
+    // Restore state members from saved instance
+    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+}
+</pre>
+
+<p class="caution"><strong>주의:</strong> 항상 {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}의 슈퍼클래스 구현을 호출하여 기본 구현에서 보기 계층 구조의 상태를
+복원할 수 있도록 합니다.</p>
+
+<p>런타임에
+재시작 이벤트로 인한 액티비티 재생성과 관련한 자세한 내용은 <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리하기</a>를 참조하세요.</p>
+
diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd
new file mode 100644
index 0000000..71ecf06
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd
@@ -0,0 +1,285 @@
+page.title=액티비티 시작하기
+page.tags=activity lifecycle
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>이 과정에서 다루는 내용</h2>
+<ol>
+  <li><a href="#lifecycle-states">수명 주기 콜백 이해하기</a></li>
+  <li><a href="#launching-activity">앱 시작 관리자 액티비티 지정하기</a></li>
+  <li><a href="#Create">새로운 인스턴스 생성하기</a></li>
+  <li><a href="#Destroy">액티비티 소멸하기</a></li>
+</ol>
+    
+    <h2>필독 항목</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">액티비티</a></li>
+    </ul>
+
+<h2>실습하기</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">데모 다운로드</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>{@code main()} 메서드로 앱이 실행되는 다른 프로그래밍 패러다임과는 달리,
+Android 시스템은 {@link android.app.Activity} 인스턴스 수명 주기의 특정 단계에 부합하는 특정
+콜백 메서드를 호출하여 해당 인스턴스 내 코드를
+실행합니다. 액티비티를 시작하는 순차적인 콜백 메서드가 있으며, 액티비티를 소멸시키는
+순차적인 콜백 메서드가 있습니다.</p>
+
+<p>이 과정에서는 가장 중요한 수명 주기 메서드에 대해 간략히 설명하며, 액티비티의 새 인스턴스를 생성하는 첫 번째 수명 주기 콜백을
+처리하는 방법을 보여줍니다.</p>
+
+
+
+<h2 id="lifecycle-states">수명 주기 콜백 이해하기</h2>
+
+<p>액티비티 수명 동안, 시스템은 계단식 피라미드와 비슷하게 수명 주기 메서드의 핵심 세트를
+순차적으로 호출합니다. 즉,
+액티비티 수명 주기의 각 단계는 피라미드의 각 계단과 같습니다. 시스템이 새 액티비티 인스턴스를 생성하면,
+각각의 콜백 메서드는 액티비티 상태를 한 단계 상향 이동합니다. 피라미드의 최상층은
+액티비티가 전면에서 실행 중이며 사용자가 이러한 액티비티와 상호 작용할 수 있는 단계를 뜻합니다.</p>
+
+<p>사용자가 액티비티를 나가면, 시스템은 액티비티를 해체하기 위해 액티비티
+상태를 피라미드에서 하향 이동하는 다른 메서드를 호출합니다. 경우에 따라, 액티비티가
+피라미드에서 완전히 하향 이동되지 않고 기다립니다(예: 사용자가 다른 앱으로 전환한 경우). 이런 경우,
+액티비티는 다시 피라미드 최상층으로 상향 이동될 수 있으며(사용자가 액티비티로 돌아갈 경우), 사용자는 종료한 지점에서
+작업을 재개할 수 있습니다.</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle.png" />
+<p class="img-caption"><strong>그림 1.</strong> 액티비티
+수명 주기를 계단식 피라미드로 간략하게 표현한 그림. 이 그림에서는 최상층에 있는
+재개됨(Resumed) 상태를 향하여 액티비티를 한 단계 상향 이동하는 데 사용되는 각 콜백마다 하위 단계로
+액티비티를 하향 이동하는 콜백 메서드가 있음을 보여줍니다. 액티비티는
+일시정지됨(Paused) 및 정지됨(Stopped) 상태에서도 재개 상태로 돌아갈 수 있습니다.</p>
+
+
+<p>액티비티의 복잡한 정도에 따라, 모든
+수명 주기 메서드를 구현할 필요가 없는 경우도 있습니다. 하지만 각각의 수명 주기 메서드를 이해하고, 사용자가 예상한 대로
+앱이 동작하도록 필요한 수명 주기 메서드를 구현하는 것이 중요합니다. 액티비티 수명 주기 메서드를 올바르게 구현하면, 다음을 포함하여 여러 가지 방법으로 앱이 제대로 동작하도록
+보장할 수 있습니다.</p>
+<ul>
+  <li>사용자가 앱을 사용하는
+도중에 전화가 걸려오거나 다른 앱으로 전환할 때 충돌하지 않도록 합니다.</li>
+  <li>사용자가 앱을 활발하게 사용하지 않는 경우, 소중한 시스템 리소스를 소비하지
+않도록 합니다.</li>
+  <li>사용자가 앱에서 나갔다가 나중에 돌아왔을 때 사용자의 진행 상태를
+손실하지 않도록 합니다.</li>
+  <li>화면이 가로 방향과 세로 방향 간에 회전할 경우, 충돌하거나 사용자의
+진행 상태를 손실하지 않도록 합니다.</li>
+</ul>
+
+<!--
+<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 
+methods.</p>
+<table>
+  <tr>
+    <th scope="col">Lifecycle State</th>
+    <th scope="col">Startup Method</th>
+    <th scope="col">Teardown Method</th>
+  </tr>
+  <tr>
+    <td>Created / Destroyed</td>
+    <td>{@link android.app.Activity#onCreate onCreate()}</td>
+    <td>{@link android.app.Activity#onDestroy()}</td>
+  </tr>
+  <tr>
+    <td>Started / Stopped</td>
+    <td>{@link android.app.Activity#onStart()}</td>
+    <td>{@link android.app.Activity#onStop()}</td>
+  </tr>
+  <tr>
+    <td>Resumed / Resumed</td>
+    <td>{@link android.app.Activity#onResume()}</td>
+    <td>{@link android.app.Activity#onPause()}</td>
+  </tr>
+</table>
+-->
+
+<p>다음 과정에서 확인할 수 있듯이, 액티비티가 그림 1에 나와 있는 상태 간을
+전환하는 여러 가지 상황이 있습니다. 하지만, 이들 상태
+중 세 가지만 유일하게 정적일 수 있습니다. 즉, 액티비티는
+이 세 가지 상태에 한하여 그중 하나에서 장시간 동안 존재할 수 있습니다.</p>
+<dl>
+  <dt>재개됨(Resumed)</dt>
+    <dd>이 상태에서는 액티비티가 전면에 있으며 사용자가 액티비티와 상호 작용할 수
+있습니다(경우에 따라 "실행 중" 상태라고도 함).</dd>
+  <dt>일시정지됨(Paused)</dt>
+    <dd>이 상태에서는 액티비티가 다른 액티비티로 인해 부분적으로 가려져 있습니다. 이런 경우, 전면에 있는
+다른 액티비티는 반투명이거나 전체 화면을 차지하지 않습니다. 일시정지된
+액티비티는 사용자 입력을 받지 않으며, 어떠한 코드도 실행할 수 없습니다.
+  <dt>정지됨(Stopped)</dt>
+    <dd>이 상태에서는 액티비티가 완전히 가려져서 사용자에게 보이지 않습니다. 이 상태는 액티비티가 백그라운드에 있는 것으로
+간주됩니다. 정지되어 있는 동안 액티비티 인스턴스 및 멤버 변수와 같은 모든 상태
+정보가 유지되지만, 어떠한 코드도 실행할 수 없습니다.</dd>
+</dl>
+
+<p>이외의 상태(생성됨(Created) 및 시작됨(Started))는 일시적이며, 시스템은 다음 수명 주기 콜백 메서드를 호출하여
+다음 상태로 신속하게 전환합니다. 즉, 시스템은
+{@link android.app.Activity#onCreate onCreate()}를 호출한 후 바로 {@link
+android.app.Activity#onStart()}를 호출하고, 또 그 즉시 {@link
+android.app.Activity#onResume()}을 호출합니다.</p>
+
+<p>이것으로 기본적인 액티비티 수명 주기에 대한 설명을 마칩니다. 이제,
+구체적인 수명 주기 동작에 대해 알아보도록 하겠습니다.</p>
+
+
+
+<h2 id="launching-activity">앱 시작 관리자 액티비티 지정하기</h2> 
+
+<p>사용자가 홈 화면에서 앱 아이콘을 선택하면, 시스템이 앱에서 "시작 관리자"(또는 "메인") 액티비티로 선언한 {@link android.app.Activity}에 대한 {@link
+android.app.Activity#onCreate onCreate()} 메서드를
+호출합니다. 이 액티비티는 앱의 사용자 인터페이스에 대한
+주 진입점 역할을 합니다.</p>
+
+<p>Android 매니페스트 파일인 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a>에 메인 액티비티로 사용할 액티비티를 정의할 수 있습니다. 이 파일은
+프로젝트 디렉터리의 루트에 있습니다.</p>
+
+<p>앱의 메인 액티비티는 {@link
+android.content.Intent#ACTION_MAIN MAIN} 작업 및{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 카테고리를 포함하는 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a>와 함께
+매니페스트 파일에 선언되어야 합니다. 예를 들면 다음과 같습니다.</p> 
+
+<pre>
+&lt;activity android:name=".MainActivity" android:label="&#64;string/app_name">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.MAIN" />
+        &lt;category android:name="android.intent.category.LAUNCHER" />
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>참고:</strong> Android SDK
+Tools를 사용하여 새 Android 프로젝트를 생성하는 경우, 매니페스트에서 이 필터와 함께
+선언된 {@link android.app.Activity} 클래스가 기본 프로젝트 파일에 포함됩니다.</p>
+
+<p>{@link android.content.Intent#ACTION_MAIN MAIN} 작업 또는
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 카테고리가
+액티비티 중 하나에 대해 선언되어 있지 않을 경우, 홈 화면의 앱 목록에 앱 아이콘이 표시되지 않습니다.</p>
+
+
+
+<h2 id="Create">새로운 인스턴스 생성하기</h2>
+
+<p>대부분의 앱은 사용자가 다양한 작업을 수행할 수 있도록 여러 액티비티를 포함하고 있습니다.
+액티비티가 사용자가 앱 아이콘을 클릭할 때 생성되는 메인 액티비티든, 사용자 작업에
+대한 응답으로 앱이 시작하는 다른 액티비티든 간에,
+시스템은 {@link
+android.app.Activity#onCreate onCreate()} 메서드를 호출하여 매번 {@link android.app.Activity}의 새 인스턴스를 생성합니다.</p>
+
+<p>액티비티의 전체 수명 주기 동안 한 번만 발생하는 기본
+애플리케이션 시작 논리를 수행하도록 {@link android.app.Activity#onCreate onCreate()} 메서드를 구현해야 합니다. 예를
+들어 {@link android.app.Activity#onCreate onCreate()}의 구현은
+사용자 인터페이스를 정의해야 하며, 몇몇 클래스 범위의 변수를 인스턴스화해야 할 수 있습니다.</p>
+
+<p>예를 들어 다음 {@link android.app.Activity#onCreate onCreate()}
+메서드에 대한 예제는
+사용자 인터페이스 선언(XML 레이아웃 파일에 정의), 멤버 변수 정의,
+몇몇 UI 구성과 같은 액티비티에 대한 몇 가지 기본 설정을 수행하는 코드를 보여줍니다.</p>
+
+<pre>
+TextView mTextView; // Member variable for text view in the layout
+
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    // Set the user interface layout for this Activity
+    // The layout file is defined in the project res/layout/main_activity.xml file
+    setContentView(R.layout.main_activity);
+    
+    // Initialize member TextView so we can manipulate it later
+    mTextView = (TextView) findViewById(R.id.text_message);
+    
+    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+        // For the main activity, make sure the app icon in the action bar
+        // does not behave as a button
+        ActionBar actionBar = getActionBar();
+        actionBar.setHomeButtonEnabled(false);
+    }
+}
+</pre>
+
+<p class="caution"><strong>주의:</strong> {@link android.os.Build.VERSION#SDK_INT}를 사용하여
+이전 시스템이 새 API를 실행하지 못하도록 방지하는 방법은 Android 2.0(API 레벨
+5) 이상에서만 가능합니다. 이전 버전에서는 런타임 예외가 발생합니다.</p>
+
+<p>{@link android.app.Activity#onCreate onCreate()}가 실행을 마치면 시스템은
+{@link android.app.Activity#onStart()} 및 {@link android.app.Activity#onResume()} 메서드를
+연달아 호출합니다. 액티비티가 생성됨(Created) 또는 시작됨(Started) 상태에서 머무르는 경우는 없습니다. 엄밀히 말하면
+{@link android.app.Activity#onStart()}가 호출되면 액티비티가 사용자에게 보이지만,
+{@link android.app.Activity#onResume()}이 바로 뒤따르고, 어떠한 상황(예: 전화가 오거나,
+사용자가 다른 액티비티로 전환하거나, 기기 화면이 꺼진 경우)이 발생하기 전까지는 액티비티가
+재개됨(Resumed) 상태로 유지됩니다.</p>
+
+<p>앞으로 진행되는 과정에서는 다른 시작 메서드인 {@link
+android.app.Activity#onStart()} 및 {@link android.app.Activity#onResume()}이 일시정지됨(Paused) 또는 정지됨(Stopped) 상태에서
+액티비티를 재개하기 위해 사용된 경우 액티비티의 수명 주기 동안 어떤 식으로 유용한지에 대해 설명합니다.</p>
+
+<p class="note"><strong>참고:</strong> {@link android.app.Activity#onCreate onCreate()}
+메서드는 <code>savedInstanceState</code>라고 하는 매개변수를 포함합니다. 이 매개변수는 <a href="recreating.html">액티비티 재생성하기</a>에 대한
+마지막 과정에서 설명합니다.</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" />
+<p class="img-caption"><strong>그림 2.</strong> 액티비티의 새 인스턴스를 생성할 때
+시스템이 순차적으로 호출하는 {@link android.app.Activity#onCreate onCreate()}, {@link android.app.Activity#onStart()} 및 {@link android.app.Activity#onResume()}의
+세 가지 메인 콜백을 강조하여 보여주는 액티비티의 수명 주기 구조에
+대한 또 다른 그림. 이러한 순차적인
+콜백이 완료되면, 액티비티는 재개됨(Resumed) 상태가 됩니다. 이 상태에서는 사용자가 다른
+액티비티로 전환하기 전까지 사용자가 액티비티와 상호 작용할 수 있습니다.</p>
+
+
+
+
+
+
+
+<h2 id="Destroy">액티비티 소멸하기</h2>
+
+<p>액티비티의 첫 번째 수명 주기 콜백은 {@link android.app.Activity#onCreate
+onCreate()}이고, 마지막 콜백은 {@link android.app.Activity#onDestroy}입니다. 시스템은
+시스템 메모리에서 액티비티 인스턴스가 완전히 제거된다는 내용의 마지막
+신호로 액티비티에서 이 메서드를 호출합니다.</p>
+
+<p>대부분의 앱은 이 메서드를 구현할 필요가 없습니다. 왜냐하면 액티비티와
+함께 로컬 클래스 참조가 소멸되고, 액티비티가 {@link
+android.app.Activity#onPause} 및 {@link android.app.Activity#onStop} 중에 대부분 정리 작업을 수행하기 때문입니다. 하지만
+액티비티가 {@link
+android.app.Activity#onCreate onCreate()} 중에 생성한 백그라운드 스레드 또는 제대로 닫지 않으면 메모리 누수를
+야기할 수 있는 다른 장시간 실행되는 리소스를 포함하는 경우, {@link
+android.app.Activity#onDestroy} 중에 액티비티를 중단시켜야 합니다.</p>
+
+<pre>
+&#64;Override
+public void onDestroy() {
+    super.onDestroy();  // Always call the superclass
+    
+    // Stop method tracing that the activity started during onCreate()
+    android.os.Debug.stopMethodTracing();
+}
+</pre>
+
+<p class="note"><strong>참고:</strong> 시스템은 한 가지 경우,
+즉 {@link android.app.Activity#onCreate onCreate()} 메서드에서 {@link
+android.app.Activity#finish()}를 호출하는 경우를 제외하고는, {@link android.app.Activity#onPause} 및 {@link
+android.app.Activity#onStop}을 먼저 호출한 후에 {@link android.app.Activity#onDestroy}를
+호출합니다. 경우에 따라(예: 액티비티가 다른 액티비티를
+실행하기 위한 임시 의사 결정자 역할을 할 경우), {@link
+android.app.Activity#onCreate onCreate()} 내에서 {@link android.app.Activity#finish()}를 호출하여 액티비티를 소멸시킬 수도 있습니다. 이 경우, 시스템이
+다른 수명 주기 메서드를 호출하지 않고 즉시
+{@link android.app.Activity#onDestroy}를 호출합니다.</p>
diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/stopping.jd
new file mode 100644
index 0000000..79e713a
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/stopping.jd
@@ -0,0 +1,187 @@
+page.title=액티비티 정지 및 재시작하기
+page.tags=activity lifecycle
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>이 과정에서 다루는 내용</h2>
+    <ol>
+      <li><a href="#Stop">액티비티 정지하기</a></li>
+      <li><a href="#Start">액티비티 시작/재시작하기</a></li>
+    </ol>
+    
+    <h2>필독 항목</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">액티비티</a>
+      </li>
+    </ul>
+
+<h2>실습하기</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">데모 다운로드</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>액티비티 수명 주기에서 액티비티를 제대로 정지하고 재시작하는 것은 중요한 프로세스입니다.
+그래야만 사용자가 앱이 항상 작동 상태를 유지하고 진행 상태를 손실하지 않는다고 인식하도록 할 수 있습니다.
+다음과 같이 액티비티가 정지되었다가 재시작되는 몇 가지 중요한 시나리오가 있습니다.</p>
+
+<ul>
+  <li>사용자가 최근 앱 창을 열고 다른 액티비티로 전환하면 현재 전면에 있는 앱의
+액티비티가 정지됩니다. 사용자가 홈 화면 시작 관리자 아이콘 또는 최근 앱 창에서
+앱으로 돌아오면 액티비티가 재시작됩니다.</li>
+  <li>사용자가 앱에서 새 액티비티를 시작하는 작업을 수행합니다. 두 번째 액티비티가
+생성되면 현재 액티비티가 정지됩니다. 사용자가 <em>뒤로</em>
+버튼을 누르면 첫 번째 액티비티가 재시작됩니다.</li>
+  <li>사용자가 앱을 사용하는 도중에 전화가 걸려옵니다.</li>
+</ul>
+
+<p>{@link android.app.Activity} 클래스는 두 가지 수명 주기 메서드인 {@link
+android.app.Activity#onStop()} 및 {@link android.app.Activity#onRestart()}를 제공합니다. 이 메서드를 사용하면 액티비티의 정지 및 재시작 처리 방법을
+명확하게 지정할 수 있습니다. 부분적인 UI 차단을 식별하는
+일시정지됨 상태와 달리, 정지됨 상태는 UI가 더 이상 보이지 않으며,
+사용자의 포커스가 별도의 액티비티 또는 완전히 별도의 앱에 있음을 보장합니다.</p>
+
+<p class="note"><strong>참고:</strong> {@link android.app.Activity}
+인스턴스가 정지되면 시스템이 이 인스턴스를 시스템 메모리에 유지하기 때문에
+{@link android.app.Activity#onStop()} 및 {@link android.app.Activity#onRestart()} 또는 {@link
+android.app.Activity#onStart()} 메서드 조차 구현할 필요가 없을 수도 있습니다. 비교적 간단한 액티비티의 경우 대부분,
+액티비티가 별 문제 없이 정지되고 재시작됩니다. 따라서 {@link
+android.app.Activity#onPause()}를 사용하여 진행 중인 작업을 일시정지하고 시스템 리소스와의 연결을 끊기만 하면 됩니다.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-stopped.png" />
+<p class="img-caption"><strong>그림 1.</strong> 사용자가 액티비티를 떠나면, 시스템은
+{@link android.app.Activity#onStop onStop()}을 호출하여 액티비티를 정지시킵니다(1). 액티비티가 정지된 상태에서
+사용자가 돌아올 경우, 시스템은 {@link android.app.Activity#onRestart onRestart()}(2)
+를 호출하고, 곧바로 {@link android.app.Activity#onStart onStart()}(3) 및 {@link
+android.app.Activity#onResume()}(4)을 호출합니다. 어떤 시나리오로 인해 액티비티가
+정지되든 간에, 시스템은 항상 {@link
+android.app.Activity#onStop onStop()}을 호출하기 전에 {@link android.app.Activity#onPause onPause()}를 호출합니다.</p>
+
+
+
+<h2 id="Stop">액티비티 정지하기</h2>
+
+<p>{@link android.app.Activity#onStop()} 메서드에 대한 호출을 수신한 액티비티는 더
+이상 보이지 않게 되고, 사용자가
+사용하지 않는 동안 필요하지 않은 거의 모든 리소스를 해제해야 합니다. 액티비티가 정지되고 나면, 시스템이 시스템 메모리를
+회수해야 하는 경우 해당 인스턴스를 소멸할 수도 있습니다. 심한 경우, 시스템이 액티비티의 최종
+{@link android.app.Activity#onDestroy()} 콜백을 호출하지 않고 앱 프로세스만 단순하게 중단시킬 수도 있습니다. 따라서 {@link android.app.Activity#onStop()}을 사용하여
+메모리 누수를 야기시킬 수 있는 리소스를 해제하는 것이 중요합니다.</p>
+
+<p>{@link android.app.Activity#onStop()} 전에 {@link android.app.Activity#onPause onPause()}
+메서드가 호출되기는 하지만, 데이터베이스에 정보를 쓰는
+작업과 같이 규모가 크고 CPU를 많이 사용하는 종료 작업을 수행하는 경우
+{@link android.app.Activity#onStop onStop()}을 사용해야 합니다.</p>
+
+<p>다음은 영구적인 저장소에 노트 원고의 내용을
+저장하는 {@link android.app.Activity#onStop onStop()}을 구현하는 예제입니다.</p>
+
+<!-- TODO: Find a better example for onStop, because this kind of thing should probably use a
+separate thread but that's too complicated to show here. -->
+<pre>
+&#64;Override
+protected void onStop() {
+    super.onStop();  // Always call the superclass method first
+
+    // Save the note's current draft, because the activity is stopping
+    // and we want to be sure the current note progress isn't lost.
+    ContentValues values = new ContentValues();
+    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
+    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
+
+    getContentResolver().update(
+            mUri,    // The URI for the note to update.
+            values,  // The map of column names and new values to apply to them.
+            null,    // No SELECT criteria are used.
+            null     // No WHERE columns are used.
+            );
+}
+</pre>
+
+<p>액티비티가 정지되면, {@link android.app.Activity} 개체는 메모리에 계속 유지되며,
+액티비티가 재개되면 다시 호출됩니다. 최상위 상태가 재개됨 상태인 콜백 메서드 중에
+생성된 구성요소는 다시 초기화할 필요가 없습니다. 또한 시스템은 레이아웃에 있는 각 {@link android.view.View}의 현재 상태도
+기록합니다. 따라서 사용자가 {@link android.widget.EditText} 위젯에 텍스트를
+입력하면 해당 내용이 저장되기 때문에 이를 저장 및 복원할
+필요가 없습니다.</p>
+
+<p class="note"><strong>참고:</strong> 시스템이 정지된 상태의 액티비티를 소멸시키는 경우에도,
+{@link android.os.Bundle}(키-값 쌍 Blob) 내에 {@link
+android.widget.EditText}와 같은 {@link android.view.View} 개체의 상태를 유지하고, 사용자가
+액티비티의 같은 인스턴스로 돌아오면 이를 복원합니다. 액티비티가 소멸되고 재생성될 경우, {@link android.os.Bundle}을 사용하여
+다른 상태 데이터를 저장하는 방법에 대해서는 <a href="recreating.html">다음 과정</a>에서 자세히 설명합니다.</p>
+
+
+
+<h2 id="Start">액티비티 시작/재시작하기</h2>
+
+<p>액티비티가 정지된 상태에서 전면으로 되돌아올 때
+{@link android.app.Activity#onRestart()}에 대한 호출을 수신합니다. 시스템은 {@link
+android.app.Activity#onStart()} 메서드도 호출합니다. 이 동작은 재시작되든, 아니면 처음 생성되든지에 상관없이
+액티비티가 보이게 될 때마다 발생합니다. 하지만 {@link
+android.app.Activity#onRestart()} 메서드는 액티비티가
+정지된 상태에서 재개되는 경우에만 호출됩니다. 따라서
+액티비티가 소멸된 것이 아니라 이전에 정지된 경우에 한하여 필요할 수 있는 특수 복원 작업을 수행하는 데 이 메서드를 사용할 수 있습니다.</p>
+
+<p>액티비티의 상태
+복원 작업에 앱이 {@link android.app.Activity#onRestart()}를 사용해야 하는 경우는 드물기 때문에
+일반 앱에 적용되는 이 메서드에 대한 가이드라인은 없습니다. 하지만 {@link android.app.Activity#onStop()}
+메서드는 모든 액티비티 리소스를 기본적으로 정리해야 하기 때문에, 액티비티가 재개되면
+다시 인스턴스화해야 합니다. 하지만 액티비티가 처음
+생성되는 경우(액티비티의 기존 인스턴스가 없을 경우)에도 인스턴스화해야 합니다. 따라서
+일반적으로 {@link android.app.Activity#onStart()} 콜백 메서드를 {@link android.app.Activity#onStop()} 메서드에 대한 상대
+메서드로 사용해야 합니다. 그 이유는 시스템이 액티비티를 생성할 때와
+액티비티를 정지된 상태에서 재시작할 때 모두 {@link
+android.app.Activity#onStart()}를 호출하기 때문입니다.</p>
+
+<p>예를 들어 사용자가 장시간 앱을 떠났다가 다시 앱으로
+돌아올 수 있기 때문에, {@link android.app.Activity#onStart()} 메서드는
+필요한 시스템 기능이 활성화되었는지 확인하기 위한 좋은 위치입니다.</p>
+
+<pre>
+&#64;Override
+protected void onStart() {
+    super.onStart();  // Always call the superclass method first
+    
+    // The activity is either being restarted or started for the first time
+    // so this is where we should make sure that GPS is enabled
+    LocationManager locationManager = 
+            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+    boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+    
+    if (!gpsEnabled) {
+        // Create a dialog here that requests the user to enable GPS, and use an intent
+        // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
+        // to take the user to the Settings screen to enable GPS when they click "OK"
+    }
+}
+
+&#64;Override
+protected void onRestart() {
+    super.onRestart();  // Always call the superclass method first
+    
+    // Activity being restarted from stopped state    
+}
+</pre>
+
+
+
+
+<p>시스템이 액티비티를 소멸시킬 경우, {@link android.app.Activity}에 대해 {@link android.app.Activity#onDestroy()}
+메서드를 호출합니다. {@link
+android.app.Activity#onDestroy()}에 대한 호출을 수신하기 전에 {@link android.app.Activity#onStop()}을 사용하여 대부분의
+리소스를 해제했을 것이기 때문에 대부분의 앱의 경우 수행할 작업이 거의 없습니다. 이 메서드는 메모리 누수를 야기할 수 있는 리소스를 정리할 수 있는
+마지막 기회입니다. 이에 따라
+추가 스레드를 소멸시키고 메서드 추적과 같이 시간이 걸리는 기타 작업도
+정지되도록 할 수 있습니다.</p>
+
diff --git a/docs/html-intl/intl/ko/training/basics/data-storage/databases.jd b/docs/html-intl/intl/ko/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..e7ca166
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/data-storage/databases.jd
@@ -0,0 +1,317 @@
+page.title=SQL 데이터베이스에 데이터 저장하기
+page.tags=data storage
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>이 과정에서 다루는 내용</h2>
+<ol>
+  <li><a href="#DefineContract">스키마 및 계약 정의하기</a></li>
+  <li><a href="#DbHelper">SQL Helper를 사용하여 데이터베이스 생성하기</a></li>
+  <li><a href="#WriteDbRow">데이터베이스에 정보 삽입하기</a></li>
+  <li><a href="#ReadDbRow">데이터베이스에서 정보 읽어오기</a></li>
+  <li><a href="#DeleteDbRow">데이터베이스에서 정보 삭제하기</a></li>
+  <li><a href="#UpdateDbRow">데이터베이스 업데이트하기</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">데이터베이스 사용하기</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+  <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>데이터베이스에 데이터를 저장하는 작업은
+연락처 정보와 같이 반복적이거나 구조적인 데이터에 이상적입니다. 이 클래스에서는 사용자가 SQL 데이터베이스에 대한 기본 사항에
+익숙하다는 전제하에
+Android에서 SQLite 데이터베이스를 시작하는 데 도움이 되는 유용한 정보를 제공합니다. Android에서
+데이터베이스를 사용할 때 필요한 API는 {@link android.database.sqlite} 패키지에 있습니다.</p>
+
+
+<h2 id="DefineContract">스키마 및 계약 정의하기</h2>
+
+<p>SQL 데이터베이스의 기본 원칙 중 하나는 스키마입니다. 스키마는 데이터베이스의 구성 체계에 대한 공식적인
+선언입니다. 스키마는 개발자가 데이터베이스를 생성할 때 사용하는 SQL
+문에 반영됩니다.  <em>계약</em> 클래스라고 하는
+도우미 클래스를 생성하면 도움이 될 수 있습니다. 계약 클래스는 체계적이고
+자기 문서화 방식으로 스키마의 레이아웃을 명시적으로 지정합니다.</p>
+
+<p>계약 클래스는 URI, 테이블 및
+컬럼의 이름을 정의하는 상수를 유지하는 컨테이너입니다. 계약 클래스를 사용하면 동일한 패키지 내
+모든 클래스에 동일한 상수를 사용할 수 있습니다. 즉, 어느 한 장소에서 컬럼
+이름을 변경하면 코드 전체에 변경 사항이 반영됩니다.</p>
+
+<p>계약 클래스를 구성하는 좋은 방법은 클래스의 루트 레벨에 전체 데이터베이스에
+전역적인 정의를 추가하는 것입니다. 그런 다음 컬럼을 열거하는 각 테이블에 대해 내부
+클래스를 생성합니다.</p>
+
+<p class="note"><strong>참고:</strong> {@link
+android.provider.BaseColumns} 인터페이스를 구현함으로써, 내부 클래스는 {@code _ID}라고 하는 기본
+키 필드를 상속할 수 있습니다. 커서 어댑터와 같은 일부 Android 클래스의 경우
+내부 클래스가 이러한 기본 키 필드를 가지고 있을 것이라 예상합니다.  내부 클래스는 반드시 필요한 것은 아니지만, 데이터베이스가
+Android 프레임워크와 조화롭게 작업하는 데 도움이 될 수 있습니다.</p>
+
+<p>예를 들어, 다음 스니펫은 테이블 이름과
+단일 테이블의 컬럼 이름을 정의합니다.</p>
+
+
+<pre>
+public final class FeedReaderContract {
+    // To prevent someone from accidentally instantiating the contract class,
+    // give it an empty constructor.
+    public FeedReaderContract() {}
+
+    /* Inner class that defines the table contents */
+    public static abstract class FeedEntry implements BaseColumns {
+        public static final String TABLE_NAME = &quot;entry&quot;;
+        public static final String COLUMN_NAME_ENTRY_ID = &quot;entryid&quot;;
+        public static final String COLUMN_NAME_TITLE = &quot;title&quot;;
+        public static final String COLUMN_NAME_SUBTITLE = &quot;subtitle&quot;;
+        ...
+    }
+}
+</pre>
+
+
+
+<h2 id="DbHelper">SQL Helper를 사용하여 데이터베이스 생성하기</h2>
+
+<p>데이터베이스의 모양을 정의한 후에는 데이터베이스 및 테이블을 생성 및 유지하는
+메서드를 구현해야 합니다.  다음은 테이블을 생성하고 삭제하는 몇 가지 일반적인
+명령문입니다.</P>
+
+<pre>
+private static final String TEXT_TYPE = &quot; TEXT&quot;;
+private static final String COMMA_SEP = &quot;,&quot;;
+private static final String SQL_CREATE_ENTRIES =
+    &quot;CREATE TABLE &quot; + FeedEntry.TABLE_NAME + &quot; (&quot; +
+    FeedEntry._ID + &quot; INTEGER PRIMARY KEY,&quot; +
+    FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+    FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+    ... // Any other options for the CREATE command
+    &quot; )&quot;;
+
+private static final String SQL_DELETE_ENTRIES =
+    &quot;DROP TABLE IF EXISTS &quot; + FeedEntry.TABLE_NAME;
+</pre>
+
+<p>기기의 <a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">내부
+저장소</a>에 저장하는 파일과 같이, Android는 데이터베이스를
+애플리케이션과 관련된 개인 디스크 공간에 저장합니다. 기본적으로 이 공간은 다른 애플리케이션이
+액세스할 수 없기 때문에 저장된 데이터는 안전하게 유지됩니다.</p>
+
+<p>유용한 API 집합이 {@link
+android.database.sqlite.SQLiteOpenHelper} 클래스에서 제공됩니다. 
+데이터베이스에 대한 참조를 가져오기 위해 이 클래스를 사용하는 경우, 시스템은
+필요한 경우에 한해서만 데이터베이스 생성 및 업데이트와 같이 
+장시간 실행될 수 있는 작업을
+수행하며, <em>앱이 시작되는 동안에는 이러한 작업을 수행하지 않습니다</em>. 
+{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 또는 
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}를 호출하기만 하면 됩니다.</p>
+
+<p class="note"><strong>참고:</strong> 이러한 작업은 장시간 실행될 수도 있기 때문에 
+{@link android.os.AsyncTask} 또는 {@link android.app.IntentService}와 같이 백그라운드 스레드에서 {@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 또는 {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}를
+호출해야 합니다.</p>
+
+<p>{@link android.database.sqlite.SQLiteOpenHelper}를 사용하려면 {@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}, {@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} 및 {@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()} 콜백 메서드를
+재정의하는 하위 클래스를 생성합니다. 반드시 필요한 것은 아니지만
+{@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()}도 구현해야 하는
+경우가 있을 수 있습니다.</p>
+
+<p>다음은 위에 표시된 명령 중 일부를 사용하여 구현한 {@link
+android.database.sqlite.SQLiteOpenHelper}의 예입니다.</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+    // If you change the database schema, you must increment the database version.
+    public static final int DATABASE_VERSION = 1;
+    public static final String DATABASE_NAME = &quot;FeedReader.db&quot;;
+
+    public FeedReaderDbHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+    public void onCreate(SQLiteDatabase db) {
+        db.execSQL(SQL_CREATE_ENTRIES);
+    }
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        // This database is only a cache for online data, so its upgrade policy is
+        // to simply to discard the data and start over
+        db.execSQL(SQL_DELETE_ENTRIES);
+        onCreate(db);
+    }
+    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        onUpgrade(db, oldVersion, newVersion);
+    }
+}
+</pre>
+
+<p>데이터베이스에 액세스하려면 {@link
+android.database.sqlite.SQLiteOpenHelper}의 하위 클래스를 인스턴스화합니다.</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">데이터베이스에 정보 삽입하기</h2>
+
+<p>{@link android.content.ContentValues}
+개체를 {@link android.database.sqlite.SQLiteDatabase#insert insert()} 메서드에 전달하여 데이터를 데이터베이스에 삽입합니다.</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+         FeedEntry.TABLE_NAME,
+         FeedEntry.COLUMN_NAME_NULLABLE,
+         values);
+</pre>
+
+<p>{@link android.database.sqlite.SQLiteDatabase#insert insert()}의
+첫 번째 인수는 테이블 이름입니다. 두 번째 인수는
+컬럼 이름을 제공합니다. 프레임워크는 {@link android.content.ContentValues}가 비어있을 경우
+여기에 NULL을 삽입할 수 있습니다. 만약 이를 {@code "null"}로 설정할 경우,
+값이 없으면 프레임워크가 행을 삽입하지 않습니다.</p>
+
+
+
+
+<h2 id="ReadDbRow">데이터베이스에서 정보 읽어오기</h2>
+
+<p>데이터베이스로부터 정보를 읽어오려면 {@link android.database.sqlite.SQLiteDatabase#query query()}
+메서드를 사용하고, 선택 기준과 원하는 컬럼을 전달합니다.
+이 메서드는 {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+및 {@link android.database.sqlite.SQLiteDatabase#update update()} 요소를 결합합니다. 단, 삽입하려는 데이터보다는 가져오려는 데이터를
+정의하는 컬럼 목록은 예외입니다. 쿼리 결과는
+{@link android.database.Cursor} 개체로 반환됩니다.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+    FeedEntry._ID,
+    FeedEntry.COLUMN_NAME_TITLE,
+    FeedEntry.COLUMN_NAME_UPDATED,
+    ...
+    };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+    FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+    FeedEntry.TABLE_NAME,  // The table to query
+    projection,                               // The columns to return
+    selection,                                // The columns for the WHERE clause
+    selectionArgs,                            // The values for the WHERE clause
+    null,                                     // don't group the rows
+    null,                                     // don't filter by row groups
+    sortOrder                                 // The sort order
+    );
+</pre>
+
+<p>커서 안의 행을 보려면 {@link android.database.Cursor} 이동
+메서드 중 하나를 사용합니다. 이 메서드는 값을 읽어오기 전에 항상 먼저 호출해야 합니다. 일반적으로 결과의
+처음 항목에 "읽기 위치"를 배치하는 {@link android.database.Cursor#moveToFirst}를 먼저
+호출해야 합니다. {@link android.database.Cursor#getString
+getString()} 또는 {@link android.database.Cursor#getLong getLong()}과 같은 {@link android.database.Cursor} 가져오기 메서드
+중 하나를 호출하여 각 행에 대한 컬럼 값을 읽어올 수 있습니다. 가져오기 메서드 각각에 대해
+원하는 컬럼의 인덱스 위치를 전달해야 하며, 이는
+{@link android.database.Cursor#getColumnIndex getColumnIndex()} 또는
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()}를 호출하여 가져올 수 있습니다.
+예를 들면 다음과 같습니다.</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+    cursor.getColumnIndexOrThrow(FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">데이터베이스에서 정보 삭제하기</h2>
+
+<p>테이블에서 행을 삭제하려면 행을
+식별하는 선택 기준을 제공해야 합니다. 데이터베이스 API는 SQL 삽입을 방지하는 선택
+기준을 생성하는 메커니즘을 제공합니다. 이 메커니즘은
+선택 사양을 선택 절과 선택 인수로 나눕니다. 절은
+보려는 컬럼을 정의하고, 이를 통해 컬럼
+테스트를 결합할 수 있습니다. 인수는 절 안에 묶여 테스트되는 값입니다.
+이 결과는 일반 SQL 문과 같이 처리되지 않기 때문에 SQL 삽입의
+영향을 받지 않습니다.</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+// Specify arguments in placeholder order.
+String[] selectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, selection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">데이터베이스 업데이트하기</h2>
+
+<p>데이터베이스 값의 하위 세트를 수정해야 하는 경우, {@link
+android.database.sqlite.SQLiteDatabase#update update()} 메서드를 사용합니다.</p>
+
+<p>테이블을 업데이트하면 {@link
+android.database.sqlite.SQLiteDatabase#insert insert()}의 콘텐츠 값 구문과
+{@link android.database.sqlite.SQLiteDatabase#delete delete()}의 {@code where} 구문이 결합됩니다.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+String[] selectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+    values,
+    selection,
+    selectionArgs);
+</pre>
+
diff --git a/docs/html-intl/intl/ko/training/basics/data-storage/files.jd b/docs/html-intl/intl/ko/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..71652b5
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/data-storage/files.jd
@@ -0,0 +1,379 @@
+page.title=파일 저장하기
+page.tags=data storage
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>이 과정에서 다루는 내용</h2>
+<ol>
+  <li><a href="#InternalVsExternalStorage">내부 또는 외부 저장소 선택하기</a></li>
+  <li><a href="#GetWritePermission">외부 저장소에 대한 권한 취득하기</a></li>
+  <li><a href="#WriteInternalStorage">내부 저장소에 파일 저장하기</a></li>
+  <li><a href="#WriteExternalStorage">외부 저장소에 파일 저장하기</a></li>
+  <li><a href="#GetFreeSpace">여유 공간 쿼리하기</a></li>
+  <li><a href="#DeleteFile">파일 삭제하기</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">내부
+ 저장소 사용하기</a></li>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">외부
+ 저장소 사용하기</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Android는 다른 플랫폼의 디스크 기반 파일 시스템과
+유사한 파일 시스템을 사용합니다. 이 과정에서는 Android 파일 시스템에서 {@link java.io.File}
+API를 사용하여 파일을 읽고 쓰는 방법을
+설명합니다.</p>
+
+<p>{@link java.io.File} 개체는 대량의 데이터를 건너뛰지 않고
+처음부터 끝까지 순서대로 읽거나 쓸 때 적합합니다. 예를 들어 이미지 파일이나
+네트워크에서 교환되는 모든 항목에 적합합니다.</p>
+
+<p>이 과정에서는 앱에서 기본적인 파일 관련 작업을 수행하는 방법을 보여줍니다.
+여기서는 사용자가 Linux 파일 시스템에 대한 기본 사항과 {@link java.io}의
+표준 파일 입출력 API에 익숙하다고 가정합니다.</p>
+
+
+<h2 id="InternalVsExternalStorage">내부 또는 외부 저장소 선택하기</h2>
+
+<p>모든 Android 기기에는 "내부" 및 "외부" 저장소의 두 가지 파일 저장소 영역이 있습니다.  이 두 저장소의 이름은
+Android 초기에 만들어졌습니다. 당시 대부분의 기기가 비휘발성 내장 메모리(내부 저장소)와
+마이크로 SD 카드와 같은 이동식 저장 장치(외부 저장소)를 제공했습니다.
+일부 기기는 이동식 저장 장치 없이도 영구 저장소 공간을 "내부" 그리고 "외부" 파티션으로 나누어
+항상 두 개의 저장소 공간을 제공하며,
+API의 동작은 외부 저장소의 이동식 유무에 상관없이 일관적입니다.
+다음 목록에서는 각각의 저장소 공간에 대한 특징을 요약하여 보여줍니다.</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>내부 저장소:</b></p>
+<ul>
+<li>항상 사용 가능합니다.</li>
+<li>여기에 저장된 파일은 기본적으로 자신의 앱에서만 액세스할 수 있습니다.</li>
+<li>사용자가 앱을 삭제하면 시스템이
+내장 저장소에서 앱의 모든 파일을 제거합니다.</li>
+</ul>
+<p>내부 저장소는 사용자와 다른 앱이 자신의 파일에
+액세스하는 것을 원치 않을 때 가장 적합합니다.</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>외부 저장소:</b></p>
+<ul>
+<li>항상 사용 가능하지는 않습니다. 그 이유는 사용자가 USB 저장소와 같은 외부 저장소를 마운트하고
+경우에 따라 기기에서 외부 저장소를 제거할 수 있기 때문입니다.</li>
+<li>모든 사람이 읽을 수 있기 때문에 자신이 제어할 수 있는 범위 외부에서 다른 사람이 여기에 저장된
+파일을 읽을 수도 있습니다.</li>
+<li>사용자가 앱을 삭제하면 {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()}의 디렉터리에 저장한 앱 파일에 한해서
+시스템이 제거합니다.</li>
+</ul>
+<p>외부 저장소는
+액세스 제한이 필요치 않은 파일과 다른 앱과 공유하기
+원하는 파일 또는 사용자가 컴퓨터에서 액세스할 수 있도록 허용하는 파일에 적합합니다.</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>팁:</strong> 기본적으로
+앱은 내부 저장소에 설치되지만 매니페스트에 <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> 특성을 지정하여 외부 저장소에
+설치할 수도 있습니다. 사용자는 APK 크기가 매우 크고 내부 저장소 공간보다
+외부 저장소 공간이 더 클 때 이 옵션을 유용하게 활용할 수 있습니다. 자세한
+내용은 <a href="{@docRoot}guide/topics/data/install-location.html">앱 설치 위치</a>를 참조하세요.</p>
+
+
+<h2 id="GetWritePermission">외부 저장소에 대한 권한 취득하기</h2>
+
+<p>외부 저장소에 데이터를 쓰려면 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">매니페스트 파일</a>에서
+{@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 권한을 요청해야 합니다.</p>
+
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+
+<div class="caution"><p><strong>주의:</strong>
+현재는 모든 앱에서 특별한 권한 없이도 외부 저장소를
+읽을 수 있습니다. 하지만 이는 향후 릴리스에서 바뀔 예정입니다. 앱이
+외부 저장소에 데이터를 쓰지는 않고 읽어야만 해야 할 경우, {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE} 권한을 선언해야 합니다. 앱이 예상한 대로 계속
+작동하도록 하려면 변경 내용이 적용되기 전에 지금 이 권한을 선언해야 합니다.</p>
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+<p>하지만 앱이 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
+권한을 사용하는 경우, 외부 저장소를 읽을 수 있는 권한도 묵시적으로 포함되어 있습니다.</p>
+</div>
+
+<p>내부
+저장소에 파일을 저장할 때는 어떠한 권한도 필요하지 않습니다. 애플리케이션은 내부 저장소 디렉터리에 있는 파일을 항상 읽고
+쓸 수 있는 권한을 가집니다.</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">내부 저장소에 파일 저장하기</h2>
+
+<p>내부 저장소에 파일을 저장할 경우, 다음 두 메서드 중 하나를 호출하여 적합한 디렉터리를
+{@link java.io.File}로 얻을 수 있습니다.</p>
+
+<dl>
+  <dt>{@link android.content.Context#getFilesDir}</dt>
+  <dd>앱에 대한 내부 디렉터리를 나타내는 {@link java.io.File}을 반환합니다.</dd>
+  <dt>{@link android.content.Context#getCacheDir}</dt>
+  <dd>앱의 임시
+캐시 파일에 대한 내부 디렉터리를 나타내는 {@link java.io.File}을 반환합니다. 더 이상
+필요하지 않은 파일은 모두 삭제하고 언제든지
+사용할 수 있는 메모리 크기에 합리적인 크기 제한(예. 1MB)을 구현해야 합니다. 저장 공간이 부족해지기 시작하면 경고 없이 시스템이 캐시 파일을
+삭제할 수도 있습니다.</dd>
+</dl>
+
+<p>이러한 디렉터리 중 하나에서 새 파일을 생성하려면 {@link
+java.io.File#File(File,String) File()} 생성자를 사용하고 내부 저장소 디렉터리를 지정하는 상기 메서드 중
+하나를 통해 제공되는 {@link java.io.File}을 전달하면 됩니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>또한, {@link
+android.content.Context#openFileOutput openFileOutput()}을 호출하여 내부 디렉터리의 파일에 데이터를 쓰는
+{@link java.io.FileOutputStream}을 가져올 수도 있습니다. 다음 예는
+몇몇 텍스트를 파일에 쓰는 방법을 보여줍니다.</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+  outputStream.write(string.getBytes());
+  outputStream.close();
+} catch (Exception e) {
+  e.printStackTrace();
+}
+</pre>
+
+<p>또는, 파일을 캐싱해야 할 경우 {@link
+java.io.File#createTempFile createTempFile()}을 대신 사용합니다. 예를 들어 다음 메서드는 {@link java.net.URL}에서
+파일 이름을 추출한 후 해당 이름을 사용하여
+앱의 내부 캐시 디렉터리에 파일을 생성합니다.</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+    File file;
+    try {
+        String fileName = Uri.parse(url).getLastPathSegment();
+        file = File.createTempFile(fileName, null, context.getCacheDir());
+    catch (IOException e) {
+        // Error while creating file
+    }
+    return file;
+}
+</pre>
+
+<p class="note"><strong>참고:</strong>
+앱의 내부 저장소 디렉터리는 Android 파일 시스템의 특별한 위치에 있는 앱의 패키지 이름으로
+지정됩니다.
+엄밀히 말하면, 파일 모드를
+읽기 가능으로 설정할 경우 다른 앱이 내부 파일을 읽을 수 있습니다. 하지만 이는 다른 앱도 여러분 자신의 앱 패키지
+이름 및 파일 이름을 알아야 가능합니다. 다른 앱은 여러분 자신의 내부 디렉터리를 탐색할 수 없으며 명시적으로
+읽기 가능 및 쓰기 가능으로 파일을 설정하지 않으면 파일을 읽거나 쓸 수 없습니다. 따라서
+{@link android.content.Context#MODE_PRIVATE}을 내부 저장소 내 파일에 사용하는 한,
+다른 앱이 이러한 파일에 액세스할 수 없습니다.</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">외부 저장소에 파일 저장하기</h2>
+
+<p>사용자가
+외부 저장소를 PC에 마운트했거나 외부 저장소를 제공하는 SD 카드를 제거한 경우 등에는 외부 저장소를 사용할 수 없기 때문에 액세스하기 전
+항상 볼륨이 사용 가능한지 확인해야 합니다. {@link android.os.Environment#getExternalStorageState}를 호출하여 외부
+저장소 상태를 쿼리할 수 있습니다. 반환된
+상태가 {@link android.os.Environment#MEDIA_MOUNTED}와 동일하다면 파일을 읽거나 파일에
+쓸 수 있습니다. 예를 들어 다음 메서드는 저장소의
+가용성을 확인하는 데 유용합니다.</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state)) {
+        return true;
+    }
+    return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state) ||
+        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+        return true;
+    }
+    return false;
+}
+</pre>
+
+<p>외부 저장소는 사용자 및 다른 앱에 의해 수정될 수 있으나, 여기에 저장할 수 있는 파일로는 두 가지
+범주가 있습니다.</p>
+
+<dl>
+  <dt>공용 파일</dt>
+  <dd>다른 앱 및 사용자가 자유롭게 사용할 수 있는
+파일입니다. 사용자가 앱을 제거해도 사용자는
+이러한 파일을 여전히 사용할 수 있습니다.
+  <p>예를 들어 앱으로 캡처된 사진 또는 기타 다운로드된 파일이 이에 해당합니다.</p>
+  </dd>
+  <dt>개인 파일</dt>
+  <dd>앱에 속한 파일이며, 사용자가
+앱을 제거하면 같이 삭제됩니다. 이러한 파일은
+엄밀히 말해 외부 저장소에 저장된 파일이기 때문에 사용자 및 다른 앱의 액세스가 가능하긴 하지만, 앱 외부에서
+사용자에게 값을 실제로 제공하지는 않습니다. 사용자가 앱을 제거하면 앱의 외부 개인 디렉터리 내 모든 파일을 시스템에서
+삭제합니다. 
+  <p>예를 들어 앱에서 다운로드한 추가 리소스 또는 임시 미디어 파일이 이에 해당합니다.</p>
+  </dd>
+</dl>
+
+<p>외부 저장소에 공용 파일을 저장하려는 경우
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} 메서드를 사용하여 외부 저장소에 적절한 디렉터리를 나타내는
+{@link java.io.File}을 가져옵니다. 이 메서드는 {@link android.os.Environment#DIRECTORY_MUSIC} 또는 {@link
+android.os.Environment#DIRECTORY_PICTURES}와 같은 다른 공개
+파일과 논리적으로 구성될 수 있도록 저장하고자 하는 파일의 유형을
+지정하는 인수를 받습니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+    // Get the directory for the user's public pictures directory. 
+    File file = new File(Environment.getExternalStoragePublicDirectory(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+
+<p>개인 파일을 앱에 저장하고자 하는 경우, {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}을 호출하고 원하는 디렉터리 유형을
+나타내는 이름을 전달하여
+적절한 디렉터리를 얻을 수 있습니다. 이런 식으로 생성된 각 디렉터리는 부모
+디렉터리에 추가됩니다. 이 디렉터리는
+사용자가 앱을 제거할 때 시스템이 삭제하는 앱의 모든 외부 저장소 파일을 캡슐화합니다.</p>
+
+<p>예를 들어, 다음은 개인 사진 앨범을 위한 디렉터리 생성 시 사용 가능한 메서드입니다.</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+    // Get the directory for the app's private pictures directory. 
+    File file = new File(context.getExternalFilesDir(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+<p>미리 정의된 하위 디렉터리 이름 중 파일에 알맞은 이름이 없을 경우 대신 {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}을 호출하고 {@code null}을 전달할 수 있습니다. 그러면
+앱의 외부 저장소 내 개인 디렉터리의 루트 디렉터리가 반환됩니다.</p>
+
+<p>사용자가 앱을 제거할 때 {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}이
+삭제된 디렉터리 내에 디렉터리를 생성한다는 것을 기억하세요.
+앱이 카메라이고 사용자가 사진을 계속 간직하고자 하는 경우처럼, 사용자가
+앱을 제거한 후에도 본인이 저장하는 파일을 사용 가능하게 유지해야 하는 경우 {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}를
+대신 사용해야 합니다.</p>
+
+
+<p>공유 파일에 {@link
+android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}를 사용하든,
+개인 파일에 {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()}을 사용하든지에 관계없이 {@link android.os.Environment#DIRECTORY_PICTURES}와
+같이 API 상수로 제공되는
+디렉터리 이름을 사용해야 합니다. 이러한 디렉터리 이름은
+시스템이 파일을 적절하게 처리할 수 있게 해줍니다. 예를 들어 {@link
+android.os.Environment#DIRECTORY_RINGTONES}에 저장된 파일은 시스템 미디어 스캐너에 의해 음악
+대신 벨소리로 분류됩니다.</p>
+
+
+
+
+<h2 id="GetFreeSpace">여유 공간 쿼리하기</h2>
+
+<p>저장하는 데이터의 크기를 미리 알고 있을 경우, {@link java.io.File#getFreeSpace} 또는 {@link
+java.io.File#getTotalSpace}를 호출하여 {@link
+java.io.IOException}을 초래하지 않고 사용 공간이 충분한지
+확인할 수 있습니다. 이러한 메서드는 각각 저장소 볼륨에서 현재 사용 가능한 공간 및
+전체 공간을 알려줍니다. 이 정보는 일정 임계치를 초과하는 수준으로
+저장소 볼륨이 차는 것을 방지하는 데도 유용합니다.</p>
+
+<p>하지만 시스템은 {@link java.io.File#getFreeSpace}로
+지정된 만큼의 바이트를 쓸 수 있다고 보장하지 않습니다.  저장하고자 하는 데이터의 크기보다 반환된 숫자가
+몇 MB 더 클 경우 또는 파일 시스템이 90%
+미만으로 찼을 경우 안심하고 작업을 진행할 수 있습니다.
+그렇지 않다면 저장소에 데이터를 쓰지 않는 것이 좋습니다.</p>
+
+<p class="note"><strong>참고:</strong> 파일을 저장하기 전에
+사용 가능한 공간을 꼭 확인할 필요는 없습니다. 대신, 파일을 곧바로 쓴 후 {@link java.io.IOException}이 발생하는 경우 이를
+캐치하면 됩니다. 필요한 공간을 정확히 모르는 경우
+이러한 방법을 사용할 수 있습니다. 예를 들어 파일을 저장하기 전에 PNG 이미지를
+JPEG로 변환하여 파일 인코딩을
+변경하는 경우, 파일의 크기를 사전에 알 수 없습니다.</p>
+
+
+
+
+<h2 id="DeleteFile">파일 삭제하기</h2>
+
+<p>더 이상 필요하지 않은 파일은 항상 삭제해야 합니다. 파일을 삭제하는 가장 간단한 방법은 열린
+파일 참조가 {@link java.io.File#delete}를 직접 호출하도록 하는 것입니다.</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>파일이 내부 저장소에 저장되어 있는 경우, {@link android.content.Context}에 위치를 요청하고 {@link android.content.Context#deleteFile deleteFile()}을 호출하여 파일을 
+삭제할 수도 있습니다.</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>참고:</strong> 사용자가 앱을 제거하면 Android 시스템이
+다음 항목을 삭제합니다.</p> 
+<ul>
+<li>내부 저장소에 저장한 모든 파일</li>
+<li>{@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}을 사용해 외부 저장소에 저장한 모든 파일</li>
+</ul>
+<p>하지만
+{@link android.content.Context#getCacheDir()}로 생성된 모든 캐시 파일과 더 이상 필요치 않은
+다른 파일은 정기적으로 직접 삭제해야 합니다.</p>
+</div>
+
diff --git a/docs/html-intl/intl/ko/training/basics/data-storage/index.jd b/docs/html-intl/intl/ko/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..d6c118d
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/data-storage/index.jd
@@ -0,0 +1,57 @@
+page.title=데이터 저장하기
+page.tags=data storage,files,sql,database,preferences
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>종속관계 및 전제조건</h2>
+<ul>
+  <li>Android 1.6(API 레벨 4) 또는 그 이상</li>
+  <li>맵 키-값 컬렉션에 정통한 지식</li>
+  <li>Java file I/O API에 정통한 지식</li>
+  <li>SQL 데이터베이스에 정통한 지식</li>
+</ul>
+
+<h2>필독 항목</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html">저장소 옵션</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>대부분의 Android 앱은 데이터를 저장해야 합니다. 하다못해 {@link android.app.Activity#onPause onPause()} 동안에도 사용자의 진행 상태가 손실되지 않도록
+앱 상태에 대한 정보만이라도 저장합니다. 또한, 대부분의
+단순하지 않은 앱은 사용자 설정을 저장해야 하며, 어떤 앱은 파일 및 데이터베이스에서 대량의
+정보를 관리해야 합니다. 이 클래스에서는 다음 사항을 포함해 Android의
+주요 데이터 저장소 옵션에 대해 소개합니다.</p>
+
+<ul>
+    <li>공유
+기본 설정 파일에 간단한 데이터 유형의 키-값 쌍 저장하기</li>
+    <li>Android 파일 시스템에 임의의 파일 저장하기</li>
+    <li>SQLite로 관리되는 데이터베이스 사용하기</li>
+</ul>
+
+
+<h2>과정</h2>
+
+<dl>
+  <dt><b><a href="shared-preferences.html">키-값 세트 저장하기</a></b></dt>
+    <dd>키-값 쌍
+내에 소량의 정보를 저장하기 위해 공유 기본 설정 파일을 사용하는 방법을 설명합니다.</dd>
+
+  <dt><b><a href="files.html">파일 저장하기</a></b></dt>
+    <dd>일반적으로 순서대로 읽혀지는
+긴 데이터 시퀀스를 저장하는 것과 같이 기본적인 파일 저장에 대해 설명합니다.</dd>
+
+ <dt><b><a href="databases.html">SQL 데이터베이스에 데이터 저장하기</a></b></dt>
+   <dd>SQLite 데이터베이스를 사용하여 구조화된 데이터를 읽고 쓰는 방법에 대해 설명합니다.</dd>
+
+</dl>
diff --git a/docs/html-intl/intl/ko/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/ko/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..f47d7e7
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,120 @@
+page.title=키-값 세트 저장하기
+page.tags=data storage
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>이 과정에서 다루는 내용</h2>
+<ol>
+  <li><a href="#GetSharedPreferences">SharedPreferences에 대한 핸들 가져오기</a></li>
+  <li><a href="#WriteSharedPreference">SharedPreferences에 쓰기</a></li>
+  <li><a href="#ReadSharedPreference">SharedPreferences에서 읽어오기</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">SharedPreferences 사용하기</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>저장하고자 하는 키-값 컬렉션이 비교적 작은 경우,
+{@link android.content.SharedPreferences} API를 사용합니다.
+{@link android.content.SharedPreferences} 개체는
+키-값 쌍을 포함하는 파일을 가리키며, 키-값 쌍을 읽고 쓸 수 있는 간단한 메서드를 제공합니다. 각
+{@link android.content.SharedPreferences} 파일은 프레임워크로
+관리되며, 전용 또는 공유일 수 있습니다.</p>
+
+<p>이 클래스에서는 {@link android.content.SharedPreferences} API를 사용하여 단순한 값을 저장하고
+가져오는 방법을 보여줍니다.</p>
+
+<p class="note"><strong>참고:</strong> {@link android.content.SharedPreferences} API는
+키-값 쌍을 읽고 쓰는 용도로만 사용됩니다. 또한, (앱 설정을 저장하는 데 대한 구현으로 {@link android.content.SharedPreferences}를
+사용하기는 하지만) 앱 설정을 위한
+사용자 인터페이스 구축을 지원하는
+{@link android.preference.Preference} API와 혼동해서는 안 됩니다. {@link
+android.preference.Preference} API 사용에 대한 자세한 내용은 <a href="{@docRoot}guide/topics/ui/settings.html">설정</a> 가이드를 참조하세요.</p>
+
+<h2 id="GetSharedPreferences">SharedPreferences에 대한 핸들 가져오기</h2>
+
+<p>다음 두 메서드 중
+하나를 호출하여 새로운 공유 기본 설정 파일을 생성하거나 기존 파일에 액세스할 수 있습니다.</p>
+<ul>
+  <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} &mdash; 여러 공유 기본 설정 파일이 필요한 경우 이 메서드를 사용합니다. 이러한 파일은 첫 번째 매개변수로 지정하는
+이름으로 식별됩니다. 앱 내부의 모든
+{@link android.content.Context}에서 이 메서드를 호출할 수 있습니다.</li>
+  <li>{@link android.app.Activity#getPreferences(int) getPreferences()} &mdash; 액티비티에
+하나의 공유 기본 설정 파일만 사용해야 하는 경우
+{@link android.app.Activity}에서 이 메서드를 사용합니다. 이 메서드는 액티비티에 속한 기본 공유
+기본 설정 파일을 가져오기 때문에 이름을 제공할 필요가 없습니다.</li>
+</ul>
+
+<p>예를 들어 다음 코드는 {@link android.app.Fragment} 내부에서 실행됩니다.
+이 코드는 리소스 문자열 {@code R.string.preference_file_key}에 의해
+식별되는 공유 기본 설정 파일에 액세스하며, 본인의 앱만 파일에 액세스할 수 있도록 전용 모드에서
+파일을 엽니다.</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>공유 기본 설정 파일의 이름을 지정할 때는 {@code "com.example.myapp.PREFERENCE_FILE_KEY"}와 같이 앱에
+대한 고유 식별 이름을 사용해야 합니다.</p>
+
+<p>또는, 액티비티에 공유 기본 설정 파일만 필요할 경우
+{@link android.app.Activity#getPreferences(int) getPreferences()} 메서드를 사용할 수 있습니다.</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>주의:</strong> {@link android.content.Context#MODE_WORLD_READABLE} 또는 {@link
+android.content.Context#MODE_WORLD_WRITEABLE}을
+사용하여 공유 기본 설정 파일을 생성하는 경우, 파일 식별자를 인식하는 기타 모든 앱이
+데이터에 액세스할 수 있습니다.</p>
+
+
+<h2 id="WriteSharedPreference">SharedPreferences에 쓰기</h2>
+
+<p>공유 기본 설정 파일에 데이터를 쓰려면 {@link android.content.SharedPreferences}에서 {@link
+android.content.SharedPreferences#edit}를 호출하여 {@link
+android.content.SharedPreferences.Editor}를 생성해야 합니다.</p>
+
+<p>{@link
+android.content.SharedPreferences.Editor#putInt putInt()} 및 {@link
+android.content.SharedPreferences.Editor#putString putString()}과 같은 메서드를 사용하여 쓰고자 하는 키와 값을 전달합니다. 그런 다음 {@link
+android.content.SharedPreferences.Editor#commit}을 호출하여 변경 내용을 저장합니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">SharedPreferences에서 읽어오기</h2>
+
+<p>공유 기본 설정 파일에서 값을 가져오려면 원하는 값에
+대한 키를 제공하고 원하는 경우 키가
+없을 경우 반환할 기본값을 제공하여 {@link
+android.content.SharedPreferences#getInt getInt()} 및 {@link
+android.content.SharedPreferences#getString getString()}과 같은 메서드를 호출해야 합니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
+</pre>
+
diff --git a/docs/html-intl/intl/ko/training/basics/intents/filters.jd b/docs/html-intl/intl/ko/training/basics/intents/filters.jd
new file mode 100644
index 0000000..265534c
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/intents/filters.jd
@@ -0,0 +1,236 @@
+page.title=다른 앱이 자신의 액티비티를 시작하도록 허용하기
+page.tags=intents
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>이 과정에서 다루는 내용</h2>
+<ol>
+  <li><a href="#AddIntentFilter">인텐트 필터 추가하기</a></li>
+  <li><a href="#HandleIntent">액티비티에서 인텐트 처리하기</a></li>
+  <li><a href="#ReturnResult">결과 반환하기</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">간단한 데이터 공유하기</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">파일 공유하기</a>
+</ul>
+  </div>
+</div>
+
+<p>앞의 두 과정은 이야기의 한 면인 자신의 앱에서
+다른 앱의 액티비티를 시작하는 것에 초점을 뒀습니다. 그러나 자신의 앱이 다른 앱에 유용할 수 있는 작업을 수행할 수 있는 경우
+다른 앱의 작업 요청에 응답할 수 있도록 준비되어 있어야 합니다. 예를 들어, 사용자가
+친구와 메시지 또는 사진을 공유할 수 있는 소셜 앱을 만드는 경우 사용자가 다른 앱에서
+"공유" 작업을 시작하고 이 작업을 수행하기 위해 여러분 자신의 앱을 시작할 수 있도록
+{@link android.content.Intent#ACTION_SEND} 인텐트를 지원하는 것이 좋습니다.</p>
+
+<p>다른 앱이 자신의 액티비티를 시작할 수 있도록 하기 위해서는 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
+요소에 상응하는 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a> 요소를 매니페스트 파일에 추가해야 합니다.</p>
+
+<p>앱이 기기에 설치되면 시스템이 인텐트
+필터를 식별한 후 설치된 모든 앱에서 지원되는 인텐트의 내부 카탈로그에 해당 정보를 추가합니다.
+앱이 암묵적인 인텐트를 사용하여 {@link android.app.Activity#startActivity
+startActivity()} 또는 {@link android.app.Activity#startActivityForResult startActivityForResult()}를
+호출하면 시스템이 인텐트에 응답 가능한 액티비티(또는 여러 액티비티)를
+찾습니다.</p>
+
+
+
+<h2 id="AddIntentFilter">인텐트 필터 추가하기</h2>
+
+<p>액티비티가 처리 가능한 인텐트를 올바르게 정의하려면 액티비티가
+받아들이는 데이터와 작업 유형 측면에서
+추가하는 인텐트 필터가 최대한 구체적이어야 합니다.</p>
+
+<p>액티비티의 인텐트 필터가 {@link android.content.Intent} 개체의 다음 기준을 충족할
+경우, 시스템이 주어진 {@link android.content.Intent}를 해당 액티비티에 보낼 수 있습니다.</p>
+
+<dl>
+  <dt>작업</dt>
+    <dd>수행할 작업의 이름을 지정하는 문자열입니다. 일반적으로, 플랫폼에서 정의하는 값 중
+하나입니다(예: {@link android.content.Intent#ACTION_SEND} 또는 {@link android.content.Intent#ACTION_VIEW}).
+    <p><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code &lt;action&gt;}</a> 요소를 사용하여 인텐트 필터에 지정합니다.
+이 요소에 지정하는 값은 API 상수 대신
+작업의 전체 문자열 이름이어야 합니다(다음 예제 참조).</p></dd>
+
+  <dt>데이터</dt>
+    <dd>인텐트와 관련된 데이터에 대한 설명입니다.
+    <p><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code &lt;data&gt;}</a> 요소를 사용하여 인텐트 필터에 지정합니다. 이 요소에서
+하나 이상의 특성을 사용하여 MIME 유형, URI 접두사, URI 스키마, 또는
+이들의 조합 그리고 수락된 데이터 유형을 나타내는 다른 요소들을 지정할 수
+있습니다.</p>
+    <p class="note"><strong>참고:</strong> 액티비티가 URI가 아닌
+다른 종류의 "엑스트라" 데이터를 처리할 때와 같이, 데이터
+{@link android.net.Uri}에 대한 세부사항을 선언할 필요가 없는 경우, {@code text/plain} 또는 {@code image/jpeg}와 같이 액티비티가 처리하는 데이터
+유형을 선언하는 데 {@code android:mimeType} 특성만 지정하면 됩니다.</p>
+</dd>
+  <dt>카테고리</dt>
+    <dd>인텐트를 처리하는 액티비티의 특징을 지정할 수 있는 추가적인 방법을 제공합니다. 일반적으로, 사용자 제스처 또는 이러한 제스처가 시작된 위치와
+관련되어 있습니다. 시스템이 지원하는 카테고리는
+여러 가지가 있지만 대부분은 거의 사용되지 않습니다. 하지만 모든 암묵적인 인텐트는 기본적으로
+{@link android.content.Intent#CATEGORY_DEFAULT}로 정의됩니다.
+    <p><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code &lt;category&gt;}</a> 요소를 사용하여 인텐트 필터에
+지정합니다.</p></dd>
+</dl>
+
+<p>인텐트 필터에서 액티비티가 허용하는 기준을 선언할 수 있습니다.
+이는 이러한 기준 각각을 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a> 요소 내에 해당 XML 요소를 중첩하여 선언하면
+가능합니다.</p>
+
+<p>예를 들어, 다음은 데이터 유형이 텍스트 또는 이미지인 경우 {@link
+android.content.Intent#ACTION_SEND} 인텐트를 처리하는 인텐트 필터가 지정된 액티비티입니다.</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="text/plain"/>
+        &lt;data android:mimeType="image/*"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p>수신되는 인텐트는 각각 하나의 작업 및 하나의 데이터 유형만 지정합니다. 하지만
+<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> 각각에 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a> 및 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+&lt;data&gt;}</a>에 대한 여러
+인스턴스를 선언해도 문제가 되지는 않습니다.</p>
+
+<p>작업 및 데이터의 두 쌍이 상호 배타적으로
+동작할 경우, 어떤 데이터 유형과 페어링되었을 때 어떤 작업이 허용 가능한지를 지정하는
+인텐트 필터를 각각 따로 생성해야 합니다.</p>
+
+<p>예를 들어 액티비티가 {@link
+android.content.Intent#ACTION_SEND} 및 {@link
+android.content.Intent#ACTION_SENDTO} 인텐트 모두에서 텍스트와 이미지 모두를 처리한다고 가정합니다. 이런 경우, 두 작업 각각에 별도의
+인텐트 필터를 정의해야 합니다. 그 이유는 {@link
+android.content.Intent#ACTION_SENDTO} 인텐트는 데이터 {@link android.net.Uri}를 사용해서 {@code send} 또는 {@code sendto} URI 스키마를 사용하는
+수신자 주소를 지정해야 하기 때문입니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SENDTO"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:scheme="sms" />
+        &lt;data android:scheme="smsto" />
+    &lt;/intent-filter>
+    &lt;!-- filter for sending text or images; accepts SEND action and text or image data -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="image/*"/>
+        &lt;data android:mimeType="text/plain"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>참고:</strong> 암묵적인 인텐트를 수신하기 위해서는
+{@link android.content.Intent#CATEGORY_DEFAULT} 카테고리를 인텐트 필터에 포함해야 합니다. {@link
+android.app.Activity#startActivity startActivity()} 및 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 메서드는 {@link android.content.Intent#CATEGORY_DEFAULT} 카테고리를
+선언한 것으로 모든 인텐트를 간주합니다. 인텐트 필터에서 이 카테고리를
+선언하지 않으면 어떠한 암묵적인 인텐트도 액티비티로 확인되지 않습니다.</p>
+
+<p>소셜 공유 동작을 수행하는 {@link android.content.Intent#ACTION_SEND}
+인텐트의 송수신에 대한 자세한 내용은 <a href="{@docRoot}training/sharing/receive.html">다른 앱에서 간단한 데이터 수신하기</a> 과정을 참조하세요.</p>
+
+
+<h2 id="HandleIntent">액티비티에서 인텐트 처리하기</h2>
+
+<p>액티비티를 시작하는 데 사용된 {@link
+android.content.Intent}를 읽어 액티비티에서 취할 작업을 결정할 수 있습니다.</p>
+
+<p>액티비티가 시작되면, {@link android.app.Activity#getIntent()}를 호출하여
+액티비티를 시작한 {@link android.content.Intent}를 검색합니다. 이 작업은 액티비티의
+수명 주기 동안 언제든지 가능하지만, 일반적으로
+{@link android.app.Activity#onCreate onCreate()} 또는 {@link android.app.Activity#onStart()}와 같은 초기 콜백 과정에서 수행합니다.</p>
+
+<p>예를 들면 다음과 같습니다.</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    setContentView(R.layout.main);
+
+    // Get the intent that started this activity
+    Intent intent = getIntent();
+    Uri data = intent.getData();
+
+    // Figure out what to do based on the intent type
+    if (intent.getType().indexOf("image/") != -1) {
+        // Handle intents with image data ...
+    } else if (intent.getType().equals("text/plain")) {
+        // Handle intents with text ...
+    }
+}
+</pre>
+
+
+<h2 id="ReturnResult">결과 반환하기</h2>
+
+<p>액티비티를 호출한 액티비티로 결과를 반환하고자 하는 경우, 간단하게 {@link
+android.app.Activity#setResult(int,Intent) setResult()}를 호출하여 결과 코드 및 결과 {@link
+android.content.Intent}를 지정하면 됩니다. 작업이 끝나고 사용자가 원래
+액티비티로 되돌아갈 경우, {@link android.app.Activity#finish()}를 호출하여 액티비티를 종료(및 소멸)합니다. 예를 들면
+다음과 같습니다.</p>
+
+<pre>
+// Create intent to deliver some kind of result data
+Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
+setResult(Activity.RESULT_OK, result);
+finish();
+</pre>
+
+<p>결과 코드는 항상 결과와 함께 지정해야 합니다. 일반적으로 {@link
+android.app.Activity#RESULT_OK} 또는 {@link android.app.Activity#RESULT_CANCELED}입니다. 그런 다음 필요한 경우 {@link android.content.Intent}를 사용하여 추가 데이터를
+제공할 수 있습니다.</p>
+
+<p class="note"><strong>참고:</strong> 결과는 기본적으로 {@link
+android.app.Activity#RESULT_CANCELED}로 설정됩니다. 따라서 작업을 완료하기 전과
+개발자가 결과를 설정하기 전에 사용자가 <em>뒤로</em> 버튼을 누를 경우, 원래의 액티비티는
+"취소" 결과를 받게 됩니다.</p>
+
+<p>단순히 여러 가지 결과 옵션 중 하나를 나타내는 정수만 반환하면 되는 경우,
+결과 코드를 0보다 큰 임의의 값으로 설정하면 됩니다. 결과 코드를 사용하여 정수만 제공하고
+{@link android.content.Intent}를 포함할 필요는 없는 경우, {@link
+android.app.Activity#setResult(int) setResult()}를 호출하고 결과 코드만 전달하면 됩니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+setResult(RESULT_COLOR_RED);
+finish();
+</pre>
+
+<p>이런 경우, 가능한 결과는 몇 개에 불과할 것이므로 결과 코드는 로컬로
+정의된 정수입니다(0보다 큼). 이는 자신의 앱에서 액티비티에 결과를 반환할 때
+유용합니다. 왜냐하면 결과를 수신한 액티비티가 공용 상수를 참조하여 결과 코드의
+값을 확인할 수 있기 때문입니다.</p>
+
+<p class="note"><strong>참고:</strong> {@link android.app.Activity#startActivity startActivity()}
+또는 {@link
+android.app.Activity#startActivityForResult startActivityForResult()}로 액티비티가
+시작되었는지 확인할 필요는 없습니다. 액티비티를 시작한
+인텐트가 결과를 원할 경우, {@link android.app.Activity#setResult(int,Intent) setResult()}를
+호출하기만 하면 됩니다. 원래의 액티비티가 {@link
+android.app.Activity#startActivityForResult startActivityForResult()}를 호출한 경우, 시스템은 개발자가 {@link android.app.Activity#setResult(int,Intent) setResult()}에 제공하는
+결과를 액티비티에 제공합니다. 그렇지 않을 경우
+결과는 무시됩니다.</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ko/training/basics/intents/index.jd b/docs/html-intl/intl/ko/training/basics/intents/index.jd
new file mode 100644
index 0000000..d4aa0cb
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/intents/index.jd
@@ -0,0 +1,62 @@
+page.title=다른 앱과 상호 작용하기
+page.tags=intents,activity
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>종속관계 및 전제조건</h2>
+<ul>
+  <li>액티비티 수명 주기에 대한 기본 지식(<a href="{@docRoot}training/basics/activity-lifecycle/index.html">액티비티
+수명 주기 관리하기</a> 참조)</li>
+</ul>
+
+
+<h2>필독 항목</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">간단한 데이터 공유하기</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">파일 공유하기</a>
+  <li><a href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">
+인텐트와 애플리케이션 통합하기(블로그 게시물)</a></li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트
+필터</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Android 앱은 보통 여러 <a href="{@docRoot}guide/components/activities.html">액티비티</a>를 가지고 있습니다. 각 액티비티는
+사용자가 지도 보기 및 사진 촬영과 같은 특정 작업을 수행할 수 있게 해주는 사용자 인터페이스를 표시합니다.
+사용자가 하나의 액티비티에서 다른 액티비티로 전환되도록 하려면 {@link
+android.content.Intent}를 사용하여 앱의 "인텐트"가 어떠한 작업을 하도록 정의해야 합니다. {@link
+android.app.Activity#startActivity startActivity()}와 같은 메서드로 시스템에
+{@link android.content.Intent}를 전달하면, 시스템은 {@link
+android.content.Intent}를 사용하여 적절한 앱 구성요소를 식별하고 시작합니다. 인텐트를 사용하면
+자신의 앱에서 별도의 앱에 포함된 액티비티를 시작하도록 할 수 있습니다.</p>
+
+<p>{@link android.content.Intent}는 특정
+구성요소(특정 {@link android.app.Activity} 인스턴스)를 시작하기 위한 <em>명시적인 인텐트</em>이거나, "사진 캡처"와 같은 의도된 작업을 처리할 수 있는
+임의의 구성요소를 시작하기 위한 <em>암묵적인 인텐트</em>일 수 있습니다.</p>
+
+<p>이 클래스에서는 {@link android.content.Intent}를 사용하여 다른 앱과 몇 가지 기본적인
+상호 작용을 수행하는 방법을 보여줍니다. 이러한 상호 작용에는 다른 앱 시작, 해당 앱에서 결과 수신하기,
+다른 앱의 인텐트에 응답할 수 있도록 앱 구성하기 등이 있습니다.</p>
+
+<h2>과정</h2>
+
+<dl>
+  <dt><b><a href="sending.html">다른 앱으로 사용자 보내기</a></b></dt>
+  <dd>작업을 수행할 수 있는 다른 앱을 시작하기 위한
+암묵적인 인텐트를 생성하는 방법을 보여줍니다.</dd>
+  <dt><b><a href="result.html">액티비티로부터 결과 가져오기</a></b></dt>
+  <dd>다른 액티비티를 시작하고 해당 액티비티로부터 결과를 수신하는 방법을 보여줍니다.</dd>
+  <dt><b><a href="filters.html">다른 앱이 자신의 액티비티를 시작하도록 허용하기</a></b></dt>
+  <dd>앱이 수락하는 암묵적인 인텐트를 선언하는
+인텐트 필터를 정의하여 자신의 앱의 액티비티를 다른 앱이 사용할 수 있도록 공개하는 방법을 보여줍니다.</dd>
+</dl>
+
diff --git a/docs/html-intl/intl/ko/training/basics/intents/result.jd b/docs/html-intl/intl/ko/training/basics/intents/result.jd
new file mode 100644
index 0000000..7b25eaf8
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/intents/result.jd
@@ -0,0 +1,178 @@
+page.title=액티비티로부터 결과 가져오기
+page.tags=intents
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>이 과정에서 다루는 내용</h2>
+<ol>
+  <li><a href="#StartActivity">액티비티 시작하기</a></li>
+  <li><a href="#ReceiveResult">결과 수신하기</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">간단한 데이터 공유하기</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">파일 공유하기</a>
+</ul>
+
+  </div>
+</div>
+
+<p>다른 액티비티를 시작하는 것이 단방향일 필요는 없습니다. 다른 액티비티를 시작하고 그 액티비티로부터 결과를
+수신할 수도 있습니다. 결과를 수신하려면 {@link android.app.Activity#startActivityForResult
+startActivityForResult()}를 호출합니다({@link android.app.Activity#startActivity
+startActivity()} 대신).</p>
+
+<p>예를 들어 자신의 앱에서 카메라 앱을 시작하고, 그 결과로 캡처된 사진을 수신할 수 있습니다. 또는,
+피플 앱을 시작하여 사용자가 연락처를 선택할 수 있도록 할
+수 있으며, 그 결과로 연락처 상세정보를 수신할 수 있습니다.</p>
+
+<p>물론, 응답하는 액티비티는 결과를 반환하도록 설계되어 있어야 합니다. 그럴 경우, 이 액티비티는
+또 다른 {@link android.content.Intent} 개체의 형태로 결과를 전송합니다. 그러면 액티비티가 {@link android.app.Activity#onActivityResult onActivityResult()} 콜백으로
+이 결과를 수신합니다.</p>
+
+<p class="note"><strong>참고:</strong> {@link android.app.Activity#startActivityForResult startActivityForResult()}를
+호출할 때 명시적 또는 암묵적인 인텐트를 사용할 수 있습니다. 자신이 정의한 액티비티 중
+하나를 시작하여 결과를 수신하는 경우 예상하는 결과를 수신하도록 보장하려면 명시적인 인텐트를
+사용해야 합니다.</p>
+
+
+<h2 id="StartActivity">액티비티 시작하기</h2>
+
+<p>결과를 수신하기 위해 액티비티를 시작할 때 사용하는 {@link android.content.Intent} 개체와
+관련하여 특별한 사항은 없습니다. 하지만, {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 메서드에 추가적인 정수 인수를 전달해야 합니다.</p>
+
+<p>정수 인수는 요청을 식별하는 "요청 코드"입니다. 결과 {@link android.content.Intent}를
+수신하는 경우, 앱이 결과를 올바르게 식별하여 이를 처리할 방법을 결정할 수
+있도록 콜백이 이와 똑같은 요청 코드를 제공합니다.</p>
+
+<p>다음은 사용자가 연락처를 선택할 수 있게 하는 액티비티를 시작하는 방법에 대한 예제입니다.</p>
+
+<pre>
+static final int PICK_CONTACT_REQUEST = 1;  // The request code
+...
+private void pickContact() {
+    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
+    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
+    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
+}
+</pre>
+
+
+<h2 id="ReceiveResult">결과 수신하기</h2>
+
+<p>사용자가 후속 액티비티 작업을 마치고 돌아오면, 시스템은 개발자 자신이 정의한 원래 액티비티의
+{@link android.app.Activity#onActivityResult onActivityResult()} 메서드를 호출합니다. 이 메서드는 다음 세 가지
+인수를 포함합니다.</p>
+
+<ul>
+  <li>{@link
+android.app.Activity#startActivityForResult startActivityForResult()}에 전달한 요청 코드</li>
+  <li>두 번째 액티비티가 지정한 결과 코드. 이 코드는 작업이 성공한 경우 {@link
+android.app.Activity#RESULT_OK}이고, 사용자가 작업을 취소했거나 작업이 어떠한
+이유로 실패한 경우 {@link
+android.app.Activity#RESULT_CANCELED}입니다.</li>
+  <li>결과 데이터를 전달하는 {@link android.content.Intent}</li>
+</ul>
+
+<p>다음은 "연락처 선택하기" 인텐트에 대한 결과를 처리하는 방법을 보여주는 예제입니다.</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // The user picked a contact.
+            // The Intent's data Uri identifies which contact was selected.
+
+            // Do something with the contact here (bigger example below)
+        }
+    }
+}
+</pre>
+
+<p>이 예제에서는 Android 연락처 또는 피플 앱에서
+반환되는 결과 {@link android.content.Intent}가 사용자가 선택한 연락처를 식별하는 {@link android.net.Uri} 콘텐츠를
+제공합니다.</p>
+
+<p>결과를 성공적으로 처리하기 위해서는
+결과 {@link android.content.Intent}의 형식이 무엇인지 이해하고 있어야 합니다. 결과를 반환하는 액티비티가 자신이 정의한 액티비티 중
+하나일 경우, 그 결과를 이해하기가 쉽습니다. Android 플랫폼에 포함된 앱은 특정한 결과 데이터를 기대할 수
+있는 고유한 API를 제공합니다. 예를 들어, 피플 앱(일부 이전 버전의 경우
+연락처 앱)은 선택된 연락처를 식별하는 콘텐츠 URI와 함께 항상 결과를 반환합니다. 또한
+카메라 앱은 {@code "data"} 엑스트라에 {@link android.graphics.Bitmap}을 반환합니다(<a href="{@docRoot}training/camera/index.html">사진 캡처하기</a>
+클래스 참조).</p>
+
+
+<h4>보너스: 연락처 데이터 읽기</h4>
+
+<p>피플 앱에서 결과를 가져오는 방법을 보여주는 상기 코드는, 결과에서
+데이터를 실제로 읽는 방법에 대해 구체적으로 설명하지는 않습니다. 그 이유는 이를 설명하려면
+<a href="{@docRoot}guide/topics/providers/content-providers.html">콘텐츠 제공자</a>에 대한 심도 있는 논의가
+필요하기 때문입니다. 하지만 이러한 내용이 궁금할 경우, 결과 데이터를 쿼리하여 선택된
+연락처에서 전화번호를 가져오는 방법을 보여주는 다음 코드를 참조하세요.</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request it is that we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // Get the URI that points to the selected contact
+            Uri contactUri = data.getData();
+            // We only need the NUMBER column, because there will be only one row in the result
+            String[] projection = {Phone.NUMBER};
+
+            // Perform the query on the contact to get the NUMBER column
+            // We don't need a selection or sort order (there's only one result for the given URI)
+            // CAUTION: The query() method should be called from a separate thread to avoid blocking
+            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
+            // Consider using {@link android.content.CursorLoader} to perform the query.
+            Cursor cursor = getContentResolver()
+                    .query(contactUri, projection, null, null, null);
+            cursor.moveToFirst();
+
+            // Retrieve the phone number from the NUMBER column
+            int column = cursor.getColumnIndex(Phone.NUMBER);
+            String number = cursor.getString(column);
+
+            // Do something with the phone number...
+        }
+    }
+}
+</pre>
+
+<p class="note"><strong>참고:</strong> Android 2.3(API 레벨 9) 이전에서는 위에 표시된 코드와
+같이 {@link android.provider.ContactsContract.Contacts Contacts Provider}에 대해 쿼리를
+수행하려면 앱에서 {@link
+android.Manifest.permission#READ_CONTACTS} 권한을 선언해야 합니다(<a href="{@docRoot}guide/topics/security/security.html">보안 및 권한</a> 참조). 하지만
+Android 2.3부터는 연락처 제공자가 결과를 반환할 때 자신의 앱에서
+그 결과를 읽어올 수 있도록 연락처/피플 앱이 임시 권한을 부여합니다. 임시 권한은 해당 연락처 요청에만
+적용되기 때문에, 인텐트의 {@link android.net.Uri}에
+지정된 연락처 외에는 쿼리할 수 없습니다. 다만, {@link
+android.Manifest.permission#READ_CONTACTS} 권한을 명시적으로 선언한 경우는 예외입니다.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ko/training/basics/intents/sending.jd b/docs/html-intl/intl/ko/training/basics/intents/sending.jd
new file mode 100644
index 0000000..b3e84eb
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/intents/sending.jd
@@ -0,0 +1,256 @@
+page.title=다른 앱으로 사용자 보내기
+page.tags=intents
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>이 과정에서 다루는 내용</h2>
+<ol>
+  <li><a href="#Build">암묵적인 인텐트 구축하기</a></li>
+  <li><a href="#Verify">인텐트를 수신할 앱이 있는지 확인하기</a></li>
+  <li><a href="#StartActivity">인텐트를 사용하여 액티비티 시작하기</a></li>
+  <li><a href="#AppChooser">앱 선택기 표시하기</a></li>
+</ol>
+
+<h2>필독 항목</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">간단한 데이터 공유하기</a></li>
+</ul>
+
+  </div>
+</div>
+
+<p>Android의 가장 중요한 특징 중 하나는 수행하고자 하는 "작업"을
+기반으로 사용자를 다른 앱으로 보낼 수 있는 앱의 기능입니다. 예를 들어
+지도에 나타내고자 하는 사업체의 주소가 앱에 있는 경우, 지도를 보여주는 액티비티를 앱 내에
+구축할 필요가 없습니다. 대신 {@link android.content.Intent}를
+사용하여 주소 보기 요청을 생성할 수 있습니다. 그러면 Android 시스템이 지도에
+주소를 표시할 수 있는 앱을 시작합니다.</p>
+
+<p>첫 번째 클래스인 <a href="{@docRoot}training/basics/firstapp/index.html">첫
+앱 구축</a>에서 설명했듯이, 인텐트를 사용하여 자체 앱 내에서 액티비티 간을 탐색해야 합니다. 일반적으로
+시작하고자 하는
+구성요소의 정확한 클래스 이름을 정의하는 <em>명시적인 인텐트</em>를 사용하여 이러한 작업을 수행합니다. 하지만 "지도 보기"와
+같은 작업을 별도의 앱에서 수행하도록 하기를 원할 경우, <em>암묵적인 인텐트</em>를 사용해야 합니다.</p>
+
+<p>이 과정에서는 특정 작업에 대한 암묵적인 인텐트를 생성하는 방법과 이를 사용하여
+다른 앱에서 작업을 수행하는 액티비티를 시작하는 방법에 대해 설명합니다.</p>
+
+
+
+<h2 id="Build">암묵적인 인텐트 구축하기</h2>
+
+<p>암묵적인 인텐트는 시작할 구성요소의 클래스 이름을 선언하지 않고, 그 대신 수행할
+작업을 선언합니다. 작업은 <em>보기</em>,
+<em>편집하기</em>, <em>보내기</em> 또는 <em>가져오기</em>와 같이 수행하고자 하는 동작을 지정합니다. 또한 인텐트는 보기 원하는 주소, 또는 전송하기 원하는 이메일 메시지와 같이 작업과
+연결된 데이터를 함께 포함하는 경우가 많습니다.
+생성하고자 하는 인텐트에 따라 데이터는 {@link android.net.Uri}이거나
+다른 여러 가지 데이터 유형 중 하나일 수 있으며, 인텐트가 데이터를 전혀 필요로 하지 않을 수도 있습니다.</p>
+
+<p>데이터가 {@link android.net.Uri}인 경우, 간단한 {@link
+android.content.Intent#Intent(String,Uri) Intent()} 생성자를 사용하여 액션 및
+데이터를 정의할 수 있습니다.</p>
+
+<p>다음은 {@link
+android.net.Uri} 데이터를 사용하여 전화번호를 지정하여 전화 걸기를 시작하는 인텐트를 생성하는 방법입니다.</p>
+
+<pre>
+Uri number = Uri.parse("tel:5551234");
+Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
+</pre>
+
+<p>앱이 {@link android.app.Activity#startActivity
+startActivity()}를 호출하여 이 인텐트를 호출하면, 전화 앱이 주어진 전화번호로 전화를 겁니다.</p>
+
+<p>다음은 몇 가지 다른 인텐트와 해당 작업 및 {@link android.net.Uri} 데이터
+쌍입니다.</p>
+
+<ul>
+  <li>지도 보기:
+<pre>
+// Map point based on address
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+// Or map point based on latitude/longitude
+// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+</pre>
+  </li>
+  <li>웹 페이지 보기:
+<pre>
+Uri webpage = Uri.parse("http://www.android.com");
+Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
+</pre>
+  </li>
+</ul>
+
+<p>다른 종류의 암묵적인 인텐트는 문자열과 같이
+여러 데이터 유형을 제공하는 "엑스트라" 데이터를 필요로 합니다. 다양한 {@link
+android.content.Intent#putExtra(String,String) putExtra()} 메서드를 사용하여 하나 이상의 엑스트라 데이터를 추가할 수 있습니다.</p>
+
+<p>기본적으로 시스템은 포함된
+{@link android.net.Uri} 데이터를 바탕으로 인텐트가 필요로 하는 적절한 MIME 유형을 결정합니다. {@link android.net.Uri}를 인텐트에
+포함하지 않을 경우, 일반적으로 {@link android.content.Intent#setType setType()}을 사용하여 인텐트와 관련된 데이터의
+유형을 지정해야 합니다. MME 유형을 설정하면 인텐트를 수신할
+액티비티의 종류도 지정됩니다.</p>
+
+<p>다음은 원하는 작업을 지정하기 위해 엑스트라 데이터를 추가하는 인텐트의 몇 가지 예제입니다.</p>
+
+<ul>
+  <li>첨부 파일과 함께 이메일 보내기:
+<pre>
+Intent emailIntent = new Intent(Intent.ACTION_SEND);
+// The intent does not have a URI, so declare the "text/plain" MIME type
+emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
+emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
+emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
+emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
+emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
+// You can also attach multiple items by passing an ArrayList of Uris
+</pre>
+  </li>
+  <li>캘린더 이벤트 생성하기:
+<pre>
+Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
+Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
+Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
+calendarIntent.putExtra(Events.TITLE, "Ninja class");
+calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
+</pre>
+<p class="note"><strong>참고:</strong> 캘린더 이벤트에 대한 이 인텐트는 API
+레벨 14 이상에서만 지원됩니다.</p>
+  </li>
+</ul>
+
+<p class="note"><strong>참고:</strong> {@link
+android.content.Intent}는 되도록 구체적으로 정의해야 합니다. 예를 들어 {@link android.content.Intent#ACTION_VIEW} 인텐트를
+사용하여 이미지를 표시하고자 할 경우,
+{@code image/*}의 MIME 유형을 지정해야 합니다. 그러면 지도 앱과 같이 다른 유형의 데이터를 "볼" 수 있는 앱이 인텐트에 의해
+트리거되는 것이 방지됩니다.</p>
+
+
+
+<h2 id="Verify">인텐트를 수신할 앱이 있는지 확인하기</h2>
+
+<p>Android 플랫폼은 전화, 이메일 또는 캘린더 앱과 같은
+내장 앱 중 하나로 특정 인텐트가 처리되도록 보장하지만, 인텐트를 호출하기 전에 항상
+확인 단계를 포함하는 것이 좋습니다.</p>
+
+<p class="caution"><strong>주의:</strong> 인텐트를 호출한 후 해당 인텐트를 처리할 수 있는 앱이
+기기에 없을 경우, 앱은 작동을 중단합니다.</p>
+
+<p>인텐트에 응답할 수 있는 액티비티가 있는지 확인하려면 {@link
+android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()}를 호출하여 {@link android.content.Intent}를 처리할 수 있는 액티비티
+목록을 가져와야 합니다. 반환된 {@link
+java.util.List}가 비어있지 않을 경우, 안심하고 인텐트를 사용할 수 있습니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
+        PackageManager.MATCH_DEFAULT_ONLY);
+boolean isIntentSafe = activities.size() > 0;
+</pre>
+
+<p><code>isIntentSafe</code>가 <code>true</code>일 경우, 하나 이상의 앱이
+인텐트에 응답합니다. <code>false</code>일 경우, 인텐트를 처리할 수 있는 앱이 없는 것입니다.</p>
+
+<p class="note"><strong>참고:</strong> 사용자가 인텐트를
+사용하려고 하기 전에 이 인텐트를 사용하는 기능을 해제해야 할 경우, 액티비티가 처음
+시작될 때 이 확인 작업을 수행해야 합니다. 인텐트를 처리할 수 있는 앱을 알고 있을 경우,
+사용자가 앱을 다운로드할 수 있도록 링크를 제공할 수도 있습니다(<a href="{@docRoot}distribute/tools/promote/linking.html">Google
+Play에서 자신의 제품에 대한 링크를 제공</a>하는 방법 참조).</p>
+
+
+<h2 id="StartActivity">인텐트를 사용하여 액티비티 시작하기</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intents-choice.png" alt="" />
+  <p class="img-caption"><strong>그림 1.</strong> 인텐트를 처리할 수 있는 앱이 둘 이상 있을 경우 표시되는 선택 대화 상자의 예.
+</p>
+</div>
+
+<p>{@link android.content.Intent}를 생성하고 엑스트라 정보를 설정한 후에는 {@link
+android.app.Activity#startActivity startActivity()}를 호출하여 시스템에 보내야 합니다. 시스템이 인텐트를 처리할 수 있는 액티비티를 둘 이상
+식별하는 경우, 그림 1과 같이 사용자가 사용할 앱을
+선택할 수 있는 대화 상자를 표시합니다. 인텐트를
+처리할 수 있는 액티비티가 하나밖에 없을 경우, 시스템이 해당 액티비티를 바로 시작합니다.</p>
+
+<pre>
+startActivity(intent);
+</pre>
+
+<p>다음은 지도 보기 인텐트를 생성하고, 인텐트를 처리할 수 있는
+앱의 존재 여부를 확인하고, 앱을 시작하는 방법을 보여주는 완벽한 예제입니다.</p>
+
+<pre>
+// Build the intent
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+
+// Verify it resolves
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List&lt;ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
+boolean isIntentSafe = activities.size() > 0;
+
+// Start an activity if it's safe
+if (isIntentSafe) {
+    startActivity(mapIntent);
+}
+</pre>
+
+
+
+<h2 id="AppChooser">앱 선택기 표시하기</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="" />
+  <p class="img-caption"><strong>그림 2.</strong> 선택기 대화 상자.</p>
+</div>
+
+<p>{@link android.content.Intent}를 {@link
+android.app.Activity#startActivity startActivity()}에 전달하여 액티비티를 시작하는데 인텐트에
+응답하는 앱이 둘 이상 있는 경우, 사용자는 어떤 앱을 기본으로 사용할지 선택할 수 있습니다(이는 대화 상자
+하단의 확인란을 선택하여 수행할 수 있음. 그림 1 참조). 이는 사용자가 일반적으로
+항상 동일한 앱을 사용하기 원하는 작업을 수행하는 경우에 유용합니다. 예를 들어 웹 페이지를 열 때(사용자는
+대개 하나의 웹 브라우저를 사용함) 또는 사진을 찍을 때(사용자는 대개 하나의 카메라를 선호함) 등이 있습니다.</p>
+
+<p>하지만 "공유" 작업과 같이 항목을 공유할 앱을
+여러 개 보유하고 있는 경우처럼, 수행할 작업을 처리할 수 있는 앱이 여러 개 있고 사용자가 매번 다른 앱을
+원할 수도 있습니다. 이런 경우, 그림 2와 같이
+선택기 대화 상자를 명시적으로 표시합니다. 선택기 대화 상자는
+사용자가 작업에 사용할 앱을 매번 선택하도록 합니다(사용자는 작업에 사용할
+기본 앱을 선택할 수 없음).</p>
+
+<p>선택기를 표시하려면 {@link
+android.content.Intent#createChooser createChooser()}를 사용하여 {@link android.content.Intent}를 생성한 후 {@link
+android.app.Activity#startActivity startActivity()}에 전달합니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+...
+
+// Always use string resources for UI text.
+// This says something like "Share this photo with"
+String title = getResources().getString(R.string.chooser_title);
+// Create intent to show chooser
+Intent chooser = Intent.createChooser(intent, title);
+
+// Verify the intent will resolve to at least one activity
+if (intent.resolveActivity(getPackageManager()) != null) {
+    startActivity(chooser);
+}
+</pre>
+
+<p>이 예제는 {@link
+android.content.Intent#createChooser createChooser()} 메서드에 전달된 인텐트에 응답하는 앱 목록이 포함된 대화 상자를 표시하고 제공된 텍스트를
+대화 상자 제목으로 사용합니다.</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/design/get-started/principles.jd b/docs/html-intl/intl/pt-br/design/get-started/principles.jd
new file mode 100644
index 0000000..46af758
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Princípios de projeto para Android
+@jd:body
+
+<p>Estes princípios de projeto foram desenvolvidos pela e para a Equipe de Experiência do Usuário do Android
+para manter os interesses dos usuários em mente.
+Para desenvolvedores e projetistas do Android, eles continuam a
+definir as diretrizes de projeto mais detalhadas para diferentes
+tipos de dispositivo.</p>
+
+<p>
+Considere estes princípios ao aplicar 
+suas próprias criatividade e mentalidade de projeto. Desvie-se de forma objetiva.
+</p>
+
+<h2 id="enchant-me">Encante-me</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="delight-me">Agrade-me de formas surpreendentes</h4>
+<p>Uma bela superfície, uma animação cuidadosamente posicionada ou um efeito sonoro no momento certo 
+ contribui para a boa experiência. Efeitos sutis contribuem para uma sensação de facilidade e de que algo
+poderoso está à mão.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="real-objects-more-fun">Objetos reais são mais divertidos que botões e menus</h4>
+<p>Deixe que as pessoas manipulem e toquem diretamente em objetos no seu aplicativo. Isso reduz o esforço cognitivo
+necessário para realizar uma tarefa e torna o aplicativo mais emocionalmente satisfatório.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-it-mine">Deixe-me torná-lo meu</h4>
+<p>As pessoas adoram adicionar toques pessoais, pois isso as ajuda a se sentirem à vontade e em controle. Forneça
+padrões sensatos e belos, mas também considere personalizações divertidas e opcionais que não
+prejudiquem as tarefas principais.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="get-to-know-me">Conheça-me</h4>
+<p>Conheça as preferências das pessoas no decorrer do tempo. Em vez de pedir que façam as mesmas escolhas repetidamente,
+coloque escolhas anteriores em alcance fácil.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2 id="simplify-my-life">Simplifique minha vida</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="keep-it-brief">Seja breve</h4>
+<p>Use frases curtas com palavras simples. As pessoas provavelmente ignorarão frases longas.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="pictures-faster-than-words">Imagens são mais rápidas que palavras</h4>
+<p>Considere usar imagens para explicar ideias. Elas chamam a atenção das pessoas e podem ser muito mais eficientes
+que palavras.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="decide-for-me">Decida por mim, mas deixe que eu tenha a palavra final</h4>
+<p>Faça a melhor suposição e tome uma ação, em vez de primeiro perguntar. Escolhas e decisões demais deixam as pessoas
+incomodadas. Caso suponha errado, permita "desfazer".</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="only-show-when-i-need-it">Mostre só o que preciso, quando eu precisar</h4>
+<p>As pessoas se sentem oprimidas quando veem coisas demais de uma vez. Detalhe tarefas e informações em partes
+pequenas e digeríveis. Oculte opções que não sejam essenciais no momento e ensine as pessoas à medida que avançam.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="always-know-where-i-am">Eu sempre devo saber onde estou</h4>
+<p>Dê às pessoas a confiança de saberem o que fazer. Faça com que os locais no seu aplicativo pareçam distintos
+e use transições para mostrar relacionamentos entre telas. Forneça feedback sobre tarefas em andamento.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="never-lose-my-stuff">Nunca perca as minhas coisas</h4>
+<p>Salve o que as pessoas criaram e deixe que elas acessem de qualquer lugar. Lembre-se de configurações,
+toques pessoais e criações entre celulares, tablets e computadores. Isso torna a atualização a
+coisa mais fácil do mundo.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="looks-same-should-act-same">Se parece igual, deve agir da mesma forma</h4>
+<p>Ajude as pessoas a discernir diferenças funcionais tornando-as visualmente distintas, em vez de sutis.
+Evite que modos locais que agem de forma diferente sobre a mesma entrada se pareçam.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="interrupt-only-if-important">Só me interrompa se for importante</h4>
+<p>Como um bom assistente pessoal, proteja as pessoas de informações não importantes. As pessoas querem ficar
+concentradas e, a não ser que seja crítica e dependente de tempo, uma interrupção pode ser irritante e frustrante.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2 id="make-me-amazing">Faça com que eu seja incrível</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="give-me-tricks">Dê-me truques que funcionem em qualquer lugar</h4>
+<p>As pessoas se sentem ótimas quando descobrem coisas sozinhas. Torne seu aplicativo mais inteligível ao
+aproveitar padrões visuais e memórias de outros aplicativos do Android. Por exemplo, o gesto de deslizar
+pode ser um bom atalho de navegação.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="its-not-my-fault">Não é culpa minha</h4>
+<p>Seja gentil sobre como solicita correções a pessoas. Elas querem se sentir inteligentes ao usar o seu
+aplicativo. Se alguma coisa der errada, dê instruções de recuperação claras, mas evite os detalhes técnicos.
+Se for possível corrigir em segundo plano, melhor ainda.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="sprinkle-encouragement">Espalhe motivação</h4>
+<p>Divida tarefas complexas em passos menores que possam ser realizados facilmente. Dê feedback sobre ações,
+mesmo que seja um brilho sutil.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="do-heavy-lifting-for-me">Faça o trabalho pesado por mim</h4>
+<p>Faça com que novatos se sintam peritos possibilitando que façam coisas que nunca acharam possíveis. Por
+exemplo, atalhos que combinem vários efeitos de fotos podem fazer com que fotografias amadoras pareçam incríveis
+com apenas alguns passos.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-important-things-fast">Torne coisas importantes rápidas</h4>
+<p>Nem todas as ações são iguais. Decida o que é mais importante em seu aplicativo e torne fácil de encontrar e
+rápido de usar, como o botão do obturador em uma câmera ou o botão de pausa em um reprodutor de música.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/pt-br/design/material/index.jd b/docs/html-intl/intl/pt-br/design/material/index.jd
new file mode 100644
index 0000000..60289a3
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=Material Design
+page.tags=Material,design
+page.type=design
+page.image=design/material/images/MaterialLight.png
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+  <div>
+    <h3>Documentos do desenvolvedor</h3>
+    <p>Criação de aplicativos com o Material Design</p>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+    <h3>Vídeo</h3>
+    <p>Introdução ao Material Design</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+    <h3>Vídeo</h3>
+    <p>Papel e tinta: Os materiais que importam</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+    <h3>Vídeo</h3>
+    <p>Material Design no aplicativo Google I/O</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">O Material Design é um guia abrangente para design visual, de movimento e de 
+interação para diversas plataformas e dispositivos. O Android agora é compatível com
+aplicativos do Material Design. Para usar o Material Design nos aplicativos Android, siga as orientações definidas 
+nas <a href="http://www.google.com/design/spec">especificações do Material Design</a> e use os novos 
+componentes e funcionalidades disponíveis no Android 5.0 (API de nível 21) e em posteriores.</p>
+
+<p>O Android fornece os seguintes elementos para criar aplicativos do Material Design:</p>
+
+<ul>
+  <li>Um novo tema</li>
+  <li>Novos widgets para vistas complexas</li>
+  <li>Novas APIs para sombras e animações personalizadas</li>
+</ul>
+
+<p>Para obter mais informações sobre a implementação do Material Design no Android, consulte
+<a href="{@docRoot}training/material/index.html">Criação de aplicativos com o Material Design</a>.</p>
+
+
+<h3>Tema do Material</h3>
+
+<p>O tema do Material fornece um novo estilo para o seu aplicativo, widgets de sistema que permitem 
+definir a paleta de cores e as animações padrão para feedback de toque e transições de atividades.</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">Tema escuro do Material</p>
+  </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">Tema claro do Material</p>
+  </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/theme.html">Como usar o tema 
+do Material</a>.</p>
+
+
+<h3>Listas e cartões</h3>
+
+<p>O Android fornece dois novos widgets para exibir cartões e listas com estilos e animações do 
+Material Design:</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+  <p>O novo widget <code>RecyclerView</code> é uma versão mais completa de <code>ListView</code>
+ com suporte para diferentes tipos de layout e melhorias no desempenho.</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+  <p>O novo widget <code>CardView</code> permite exibir informações importantes dentro de 
+  cartões que têm aparência consistente.</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/lists-cards.html">Como criar 
+listas e cartões</a>.</p>
+
+
+<h3>Sombras de vistas</h3>
+
+<p>Além das propriedades X e Y, vistas no Android agora têm uma propriedade 
+Z. Essa nova propriedade representa a elevação de uma vista, que determina:</p>
+
+<ul>
+<li>O tamanho da sombra: vistas com valores maiores de Z lançam sombras maiores.</li>
+<li>A ordem de desenho: vistas com valores maiores de Z aparecem sobre outras vistas.</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+  <div class="framed-nexus5-port-span-5">
+  <video class="play-on-hover" autoplay>
+    <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+  </video>
+  </div>
+  <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+    <em>Para reproduzir o filme, clique na tela do dispositivo</em>
+  </div>
+</div>
+
+<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/shadows-clipping.html">Como 
+definir sombras e recortar visualizações</a>.</p>
+
+
+<h3>Animações</h3>
+
+<p>As novas APIs de animação permitem criar animações personalizadas para feedback de toque em controles de IU,
+mudanças no estado da vista e transições de atividades.</p>
+
+<p>Essas APIs permitem:</p>
+
+<ul>
+<li style="margin-bottom:15px">
+Responder a eventos de toque nas vistas com animações de <strong>feedback de toque</strong>.
+</li>
+<li style="margin-bottom:15px">
+Ocultar e exibir vistas com animações de <strong>revelação circular</strong>.
+</li>
+<li style="margin-bottom:15px">
+Alternar entre atividades com animações de <strong>transição de atividades</strong>.
+</li>
+<li style="margin-bottom:15px">
+Criar animações mais naturais com <strong>movimento curvado</strong>.
+</li>
+<li style="margin-bottom:15px">
+Animar mudanças em uma ou mais propriedades da vista com animações de <strong>mudança de estado da vista</strong>.
+</li>
+<li style="margin-bottom:15px">
+Exibir animações em <strong>desenháveis da lista de estado</strong> entre mudanças de estado da vista.
+</li>
+</ul>
+
+<p>Animações de feedback de toque são integradas em várias vistas padrões, como botões. As novas APIs
+permitem personalizar essas animações e adicioná-las às vistas personalizadas.</p>
+
+<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/animations.html">Como definir 
+animações personalizadas</a>.</p>
+
+
+<h3>Desenháveis</h3>
+
+<p>Essas novas capacidades dos desenháveis ajudam na implementação de aplicativos do Material Design:</p>
+
+<ul>
+<li><strong>Desenháveis de vetor</strong> são dimensionáveis sem perder definição e são perfeitos
+para ícones de uma cor dentro do aplicativo.</li>
+<li><strong>Tingimento desenhável</strong> permite definir mapas de bits como uma máscara alfa e tingi-los com
+uma cor em tempo de execução.</li>
+<li><strong>Extração de cor</strong> permite extrair automaticamente cores proeminentes de uma
+imagem de mapa de bits.</li>
+</ul>
+
+<p>Para obter mais informações, consulte <a href="{@docRoot}training/material/drawables.html">Como trabalhar 
+com desenháveis</a>.</p>
diff --git a/docs/html-intl/intl/pt-br/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/pt-br/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..934dbdd
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=Confirmação e reconhecimento
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>Em algumas situações, quando um usuário invoca uma ação em seu aplicativo, é uma boa ideia <em>confirmar</em> ou <em>reconhecer</em> essa ação com texto.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+    <p><strong>Confirmar</strong> é pedir ao usuário que verifique se realmente quer prosseguir com a ação que acabou de invocar. Em alguns casos, a confirmação é apresentada com uma advertência ou informações críticas relacionadas à ação que ele precisa considerar.</p>
+  </div>
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+    <p><strong>Reconhecer</strong> é exibir texto para avisar ao usuário que a ação que acabou de ser invocada foi concluída. Isso remove a incerteza sobre operações implícitas que o sistema adota. Em alguns casos, o reconhecimento é apresentado com uma opção para desfazer a ação.</p>
+  </div>
+</div>
+
+<p>Comunicar-se com os usuários dessas formas pode ajudar a reduzir a incerteza sobre o que aconteceu ou o que acontecerá. Confirmar ou reconhecer também pode evitar que os usuários cometam erros dos quais possam se arrepender.</p>
+
+<h2>Quando confirmar ou reconhecer ações do usuário</h2>
+<p>Nem todas as ações precisam de uma confirmação ou um reconhecimento. Use este fluxograma para orientar as decisões de projeto.</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>Confirmação</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Exemplo: livros do Google Play</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+    <p>Nesse exemplo, o usuário solicitou a exclusão de um livro da biblioteca do Google Play. Um <a href="{@docRoot}design/building-blocks/dialogs.html#alerts">alerta</a> aparece para confirmar essa ação porque é importante entender que o livro não estará mais disponível em nenhum dispositivo.</p>
+    <p>Ao montar uma caixa de diálogo de confirmação, use um título significativo que ecoe a ação solicitada.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>Exemplo: Android Beam</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+    <p>As confirmações não necessariamente precisam ser apresentadas em um alerta com dois botões. Depois de iniciar o Android Beam, o usuário é solicitado a tocar no conteúdo a ser compartilhado (nesse exemplo, uma foto). Se ele decidir não prosseguir, simplesmente afastará o celular.</p>
+  </div>
+</div>
+
+<h2>Reconhecimento</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Exemplo: abandonar rascunho salvo do Gmail</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+    <p>Nesse exemplo, se o usuário navegar para trás ou para cima na tela de composição do Gmail, alguma coisa possivelmente inesperada acontecerá: o rascunho atual será salvo automaticamente. Um reconhecimento na forma de aviso torna isso aparente. Ele desaparece depois de alguns segundos.</p>
+    <p>Desfazer não é adequado aqui, pois o ato de salvar foi iniciado pelo aplicativo, não pelo usuário, Além de ser rápido e fácil retomar a composição da mensagem navegando para a lista de rascunhos.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+    <h4>Exemplo: conversa do Gmail excluída</h4>
+    <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+    <p>Depois que o usuário exclui uma conversa da lista no Gmail, um reconhecimento aparece com a opção de desfazer. O reconhecimento permanece até que o usuário tome uma ação não relacionada, como rolar a lista.</p>
+  </div>
+</div>
+
+<h2>Sem confirmação nem reconhecimento</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Exemplo: +1</h4>
+    <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+    <p><strong>A confirmação é desnecessária.</strong> Se o usuário usar +1 por acidente, não é um problema. Poderá simplesmente tocar no botão novamente para desfazer a ação.</p>
+    <p><strong>O reconhecimento é desnecessário.</strong> O usuário verá o botão +1 oscilar e ficar vermelho. Esse é um sinal muito claro.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>Exemplo: Remover um aplicativo da tela inicial</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+    <p><strong>A confirmação é desnecessária.</strong> Essa é uma ação deliberada: o usuário precisa arrastar e soltar um item em um alvo relativamente grande e isolado. Portanto, acidentes são altamente improváveis. Mas, se o usuário se arrepender da decisão, levará apenas alguns segundos para trazê-lo de volta.</p>
+    <p><strong>O reconhecimento é desnecessário.</strong> O usuário saberá que o aplicativo saiu da tela inicial porque fez com que ele desaparecesse arrastando-o para longe.</p>
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/pt-br/design/patterns/navigation.jd b/docs/html-intl/intl/pt-br/design/patterns/navigation.jd
new file mode 100644
index 0000000..920ccec
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=Navegação com Voltar e Para cima
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+  <div>
+    <h3>Documentos do desenvolvedor</h3>
+    <p>Implementação de navegação efetiva</p>
+  </div>
+</a>
+
+<p itemprop="description">A navegação consistente é um componente essencial da experiência geral do usuário. Poucas coisas deixam os
+usuários mais frustrados do que uma navegação básica que se comporta de forma inconsistente ou inesperada. O Android 3.0
+introduziu mudanças significativas no comportamento global da navegação. Seguir cuidadosamente as
+diretrizes de Voltar e Para Cima tornará a navegação em seu aplicativo previsível e confiável para os usuários.</p>
+<p>O Android 2.3 e anteriores se baseavam no botão <em>Voltar</em> do sistema para dar suporte à navegação dentro de um
+aplicativo. Com a introdução de barras de ação no Android 3.0, um segundo mecanismo de navegação apareceu:
+o botão <em>Para Cima</em>, consistindo no ícone do aplicativo e em um cursor para a esquerda.</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">Para Cima vs. Voltar</h2>
+
+<p>O botão Para Cima é usado para navegar dentro de um aplicativo com base nos relacionamentos hierárquicos
+entre telas. Por exemplo, se a tela A exibe uma lista de itens e, selecionar um item leva à
+tela B (que apresenta aquele item em mais detalhes), então a tela B deve oferecer um botão Para Cima que
+volte à tela A.</p>
+<p>Se determinada tela é a superior na hierarquia de um aplicativo (ou seja, a página inicial do aplicativo), ela não deve apresentar um botão
+Para Cima.</p>
+
+<p>O botão Voltar do sistema é usado para navegar, em ordem cronológica inversa, pelo histórico
+de telas em que o usuário esteve recentemente. Ele é geralmente baseado em relacionamentos temporais
+entre telas, em vez de na hierarquia do aplicativo.</p>
+
+<p>Quando a tela visualizada anteriormente também for a superior hierárquica imediata da tela atual, pressionar
+o botão Voltar tem o mesmo resultado que pressionar um botão Para Cima &mdash; essa é uma ocorrência
+comum. No entanto, diferentemente do botão Para Cima, que garante que o usuário permaneça dentro do aplicativo, o botão
+Voltar pode retornar o usuário à tela inicial ou até mesmo a um aplicativo diferente.</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>O botão Voltar também suporta alguns comportamentos não vinculados diretamente à navegação entre telas:
+</p>
+<ul>
+<li>Descarta janelas flutuantes (caixas de diálogo, pop-ups)</li>
+<li>Descarta barras de ação contextuais e remove o destaque dos itens selecionados</li>
+<li>Oculta o teclado da tela (IME)</li>
+</ul>
+<h2 id="within-app">Navegação dentro do seu aplicativo</h2>
+
+<h4>Navegação para telas com vários pontos de entrada</h4>
+<p>Algumas vezes, uma tela não tem uma posição estrita dentro da hierarquia do aplicativo e pode ser atingida
+de vários pontos de entrada &mdash; como uma tela de configurações que pode ser atingida de qualquer outra tela
+do aplicativo. Nesse caso, o botão Para Cima deve escolher voltar para a tela anterior, comportando-se
+de forma idêntica a Voltar.</p>
+<h4>Mudança de vista dentro de uma tela</h4>
+<p>Mudar opções de vista de uma tela não muda o comportamento de Para Cima nem de Voltar: a tela ainda
+estará no mesmo lugar dentro da hierarquia do aplicativo e nenhum histórico de navegação será criado.</p>
+<p>Exemplos de tais mudanças de vista são:</p>
+<ul>
+<li>Alternar vistas usando guias e/ou deslizando para a esquerda e para a direita</li>
+<li>Alternar vistas usando um menu suspenso (também chamados de abas recolhidas)</li>
+<li>Filtrar uma lista</li>
+<li>Classificar uma lista</li>
+<li>Mudar características de exibição (como mudar o zoom)</li>
+</ul>
+<h4>Navegação entre telas de mesmo nível</h4>
+<p>Quando o aplicativo suporta navegação de uma lista de itens para uma vista de detalhes de um desses itens, 
+frequentemente é desejável dar suporte à navegação de direção daquele item para outro anterior ou
+posterior a ele na lista. Por exemplo, no Gmail, é fácil deslizar para a esquerda ou para a direita em uma
+conversa para visualizar uma mais nova ou mais antiga na mesma Caixa de entrada. Assim como ao mudar a vista dentro de uma tela, tal
+navegação não muda o comportamento de Para Cima ou Voltar.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>No entanto, uma exceção notável a isso ocorre ao navegar entre vistas de detalhes relacionadas não
+vinculadas pela lista de referência &mdash; por exemplo, ao navegar na Play Store entre aplicativos
+do mesmo desenvolvedor ou álbuns do mesmo artista. Nesses casos, seguir cada link cria
+um histórico, fazendo com que o botão Voltar passe por cada tela visualizada anteriormente. Para Cima deve continuar a
+ignorar essas relacionadas e navegar para a tela do contêiner visualizada mais recentemente.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>Você tem a capacidade de deixar o comportamento de Para Cima ainda mais inteligente com base em seu conhecimento da 
+vista de detalhe. Estendendo o exemplo da Play Store acima, imagine que o usuário navegou do último
+Livro visualizado para os detalhes da adaptação do Filme. Nesse caso, Para Cima pode retornar a um contêiner 
+(filmes) pelo qual o usuário não navegou anteriormente.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">Navegação para o seu aplicativo pelos widgets de página inicial e notificações</h2>
+
+<p>Você pode usar widget de página inicial ou notificações para ajudar seus usuários a navegar diretamente para telas
+profundas na hierarquia do seu aplicativo. Por exemplo, o widget Caixa de Entrada do Gmail e a notificação de nova mensagem podem
+ignorar a tela Caixa de Entrada, levando o usuário diretamente a uma vista de conversa.</p>
+
+<p>Para esses dois casos, trate o botão Para Cima da seguinte forma:</p>
+
+<ul>
+<li><em>Se a tela de destino é normalmente acessada de uma determinada tela dentro do
+aplicativo</em>, Para Cima deve navegar para essa tela.</li>
+<li><em>Caso contrário</em>, Para Cima deve navegar para a tela superior ("Página inicial") do aplicativo.</li>
+</ul>
+
+<p>No caso do botão Voltar, você deve tornar a navegação mais previsível inserindo o caminho de navegação para cima
+completo na pilha de retorno da tarefa, até a tela superior do aplicativo. Isso permite que usuários
+que se esqueceram de como entraram no aplicativo naveguem para a tela superior do aplicativo
+antes de saírem.</p>
+
+<p>Como exemplo, o widget da Página inicial do Gmail tem um botão para mergulhar diretamente para a tela
+de composição. Para Cima ou Voltar na tela de composição deve levar o usuário à Caixa de Entrada e, de lá, o
+botão Voltar continua até a Página inicial.</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>Notificações indiretas</h4>
+
+<p>Quando o aplicativo precisa apresentar simultaneamente informações sobre vários eventos, ele pode usar 
+uma única notificação que direcione o usuário a uma tela intersticial. Essa tela resume esses
+eventos e fornece caminhos para que o usuário mergulhe profundamente no aplicativo. Notificações desse estilo são
+chamadas de <em>notificações indiretas</em>.</p>
+
+<p>Diferentemente de em notificações padrão (diretas), pressionar Voltar em uma tela intersticial da
+notificação indireta retorna o usuário ao ponto em que a notificação foi acionada &mdash; nenhuma
+tela adicional é inserida na pilha de retorno. Quando o usuário prossegue para o aplicativo a partir da
+tela intersticial, Para Cima e Voltar se comportam como em notificações padrão, como descrito acima:
+navegando dentro do aplicativo em vez de voltar à tela intersticial.</p>
+
+<p>Por exemplo, suponha que um usuário no Gmail receba uma notificação indireta do Agenda. Tocar nessa
+notificação abrirá a tela intersticial, que exibirá lembretes para vários 
+eventos. Tocar em Voltar na tela intersticial retornará o usuário ao Gmail. Tocar em um determinado evento
+levará o usuário da tela intersticial ao aplicativo completo do Agenda para exibir detalhes do
+evento. Dos detalhes do evento, Para Cima e Voltar navegam para a vista de nível superior do Agenda.</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>Notificações pop-up</h4>
+
+<p><em>Notificações pop-up</em> ignoram a gaveta de notificações, aparecendo diretamente na
+frente do usuário. Elas são usadas raramente e <strong>devem ser reservadas para ocasiões em que uma resposta
+rápida e a interrupção do contexto do usuário sejam necessárias</strong>. Por exemplo,
+o Talk usa esse estilo para alertar o usuário sobre um convite de um amigo para participar de uma conversa com vídeo, já que este
+convite expirará automaticamente depois de alguns segundos.</p>
+
+<p>Em termos do comportamento da navegação, notificações pop-up seguem de perto o comportamento da tela intersticial
+de uma notificação indireta. Voltar descarta a notificação pop-up. Se o usuário navegar
+da janela pop-up para o aplicativo que realizou a notificação, Para Cima e Voltar seguem as regras de notificações padrão,
+navegando dentro do aplicativo.</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">Navegação entre aplicativos</h2>
+
+<p>Um dos pontos fortes fundamentais do sistema Android é a capacidade dos aplicativos de ativar
+uns aos outros, dando ao usuário a capacidade de navegar diretamente de um aplicativo para outro. Por exemplo, um
+aplicativo que precisa capturar uma foto pode ativar o aplicativo Câmera, que devolverá a foto
+ao aplicativo que o chamou. Esse é um imenso benefício para o desenvolvedor, que pode aproveitar
+facilmente código de outros aplicativos, e para o usuário, que tem uma experiência consistente para ações
+comumente realizadas.</p>
+
+<p>Para entender a navegação entre aplicativos, é importante entender o comportamento da estrutura de trabalho do Android
+discutida abaixo.</p>
+
+<h4>Atividades, tarefas e intenções</h4>
+
+<p>No Android, uma <strong>atividade</strong> é um componente do aplicativo que define uma tela de
+informações e todas as ações associadas que o usuário pode executar. Seu aplicativo é uma coleção de
+atividades, consistindo em atividades que você cria e aquelas que reutiliza de outros aplicativos.</p>
+
+<p>Uma <strong>tarefa</strong> é a sequência de atividades que um usuário segue para atingir um objetivo. Uma
+única tarefa pode usar atividades apenas de um aplicativo ou pode retirar atividades de uma série 
+de outros aplicativos.</p>
+
+<p>Uma <strong>intenção</strong> é um mecanismo para que um aplicativo sinalize que gostaria da assistência de outro
+aplicativo para realizar uma ação. As atividades de um aplicativo podem indicar a que intenções
+ele responde. Para intenções comuns, como "Compartilhar", o usuário pode ter vários aplicativos
+instalados que atendam a essa solicitação.</p>
+
+<h4>Exemplo: navegação entre aplicativos para suporte a compartilhamento</h4>
+
+<p>Para entender como atividades, tarefas e intenções funcionam juntas, entenda como um aplicativo permite que usuários
+compartilhem conteúdo usando outro aplicativo. Por exemplo, executar o aplicativo Play Store na tela inicial inicia
+uma nova Tarefa A (veja a figura baixo). Depois de navegar pela Play Store e tocar em um livro em promoção
+para ver os detalhes, o usuário permanecerá na mesma tarefa, estendendo-a ao adicionar atividades. Acionar
+a ação Compartilhar exibe ao usuário uma caixa de diálogo listando cada uma das atividades (de diferentes aplicativos)
+que foram registradas para tratar a intenção Compartilhar.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>Quando o usuário seleciona o compartilhamento via Gmail, a atividade de composição do Gmail é adicionada como uma continuação da 
+Tarefa A &mdash; nenhuma tarefa nova é criada. Se o Gmail tivesse a própria tarefa em execução em segundo plano, ela não
+seria afetada.</p>
+
+<p>Da atividade de composição, enviar a mensagem ou tocar no botão Voltar retornará o usuário à
+atividade de detalhes do livro. Toques subsequentes em Voltar continuarão a navegar para trás pela Play
+Store até chegar à Página inicial.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>No entanto, tocando em Para Cima na atividade de composição, o usuário indica que deseja permanecer no
+Gmail. A atividade da lista de conversas do Gmail é exibida e uma nova Tarefa B é criada para ela. Novas tarefas
+são sempre vinculadas à Página inicial, portanto, tocar em Voltar na lista de conversas retorna a ela.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>A Tarefa A persiste no segundo plano e o usuário pode voltar a ela mais tarde (por exemplo, via tela
+Recentes). Se o Gmail já tivesse a própria tarefa em execução em segundo plano, ela seria substituída
+pela Tarefa B &mdash; o contexto anterior é abandonado em favor do novo objetivo do usuário.</p>
+
+<p>Quando o aplicativo é registrado para tratar intenções com uma atividade em um ponto profundo da hierarquia do aplicativo,
+consulte <a href="#into-your-app">Navegação para o seu aplicativo pelos widgets de página 
+inicial e notificações</a> para ver orientações sobre como especificar a navegação Para Cima.</p>
diff --git a/docs/html-intl/intl/pt-br/design/patterns/notifications.jd b/docs/html-intl/intl/pt-br/design/patterns/notifications.jd
new file mode 100644
index 0000000..efea610
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/design/patterns/notifications.jd
@@ -0,0 +1,872 @@
+page.title=Notificações
+page.tags="notifications","design","L"
+@jd:body
+
+ <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
+  <div>
+    <h3>Documentos do desenvolvedor</h3>
+    <p>Notificação ao usuário</p>
+  </div>
+</a>
+
+<a class="notice-designers" href="notifications_k.html">
+  <div>
+    <h3>Notificações no Android 4.4 e em anteriores</h3>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
+<div>
+    <h3>Vídeo</h3>
+    <p>DevBytes: Notificações na pré-visualização do desenvolvedor do Android L</p>
+</div>
+</a>
+
+<style>
+  .col-5, .col-6, .col-7 {
+    margin-left:0px;
+  }
+</style>
+
+<p>O sistema de notificações permite que os usuários se mantenham informados sobre eventos relevantes e
+imediatos
+no aplicativo, como novas mensagens de bate-papo de um amigo ou um evento de calendário.
+Pense nas notificações como um canal de notícias que alerta o usuário sobre eventos
+importantes à
+medida que acontecem ou sobre um registro que grava eventos enquanto o usuário não está prestando
+atenção &mdash; e que é sincronizado conforme apropriado em todos os dispositivos Android dele.</p>
+
+<h4 id="New"><strong>Novo no Android 5.0</strong></h4>
+
+<p>No Android 5.0, as notificações recebem atualizações importantes: em termos estruturais, visuais e
+funcionais:</p>
+
+<ul>
+  <li>As notificações passaram por mudanças visuais consistentes com o novo 
+tema do Material Design.</li>
+  <li> As notificações agora estão disponíveis na tela de bloqueio do dispositivo, enquanto que
+o conteúdo sensível ainda pode
+ficar oculto atrás dela.</li>
+  <li>Notificações de alta prioridade recebidas enquanto o dispositivo está em uso agora usam um novo formato, chamado de 
+notificações heads-up.</li>
+  <li>Notificações sincronizadas na nuvem: descartar uma notificação em um dos
+dispositivos Android a descarta
+também nos outros.</li>
+</ul>
+
+<p class="note"><strong>Observação:</strong> o projeto de notificação nesta versão do
+Android é uma mudança
+significativa em relação às versões anteriores. Para obter informações sobre o projeto de notificação em versões
+anteriores, consulte <a href="./notifications_k.html">Notificações no Android 4.4 ou em anteriores</a>.</p>
+
+<h2 id="Anatomy">Anatomia de uma notificação</h2>
+
+<p>Esta seção aborda as partes básicas de uma notificação e como elas 
+podem aparecer em diferentes tipos de dispositivos.</p>
+
+<h3 id="BaseLayout">Layout básico</h3>
+
+<p>No mínimo, todas as notificações consistem em um layout básico, incluindo:</p>
+
+<ul>
+  <li> O <strong>ícone</strong> da notificação. O ícone simboliza o
+aplicativo de origem. Ele também
+  pode indicar o tipo de notificação, caso o aplicativo gere mais de um
+tipo.</li>
+  <li> Um <strong>título</strong> da notificação e
+<strong>texto</strong> adicional.</li>
+  <li> Uma <strong>marcação de data e hora</strong>.</li>
+</ul>
+
+<p>Notificações criadas com {@link android.app.Notification.Builder Notification.Builder}
+para versões anteriores da plataforma têm a mesma aparência e o mesmo funcionamento no Android
+5.0, com apenas mudanças menores de estilo que o sistema
+entrega a você. Para obter mais informações sobre notificações em versões
+anteriores do Android, consulte 
+<a href="./notifications_k.html">Notificações no Android 4.4 ou em anteriores</a>.</p></p>
+
+
+    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
+
+
+<div style="clear:both;margin-top:20px">
+      <p class="img-caption">
+      Layout básico de uma notificação em dispositivo portátil (à esquerda) e a mesma notificação em Wear (à direita), 
+com uma foto do usuário e um ícone de notificação
+    </p>
+  </div>
+
+<h3 id="ExpandedLayouts">Layouts expandidos</h3>
+
+
+<p>Você pode escolher o nível de detalhe que as notificações de seu aplicativo
+devem fornecer. Elas podem mostrar as primeiras
+linhas de uma mensagem ou exibir uma visualização de imagem maior. As informações
+adicionais fornecem ao usuário mais
+contexto e &mdash; em alguns casos &mdash; podem permitir que o usuário leia uma mensagem
+em sua totalidade. O usuário pode
+pinçar para aproximar ou afastar a vista ou realizar deslizamento de um dedo para alternar entre os layouts
+compacto e expandido.
+ Para notificações de um evento, o Android fornece três modelos de layout
+expandido (texto, caixa de entrada e
+ imagem) para usar em seu aplicativo. As imagens a seguir mostram como 
+se parecem notificações de um evento em 
+ dispositivos portáteis (à esquerda) e usados junto ao corpo (à direita).</p>
+
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
+    alt="" width="311px" height;="450px" />
+
+<h3 id="actions" style="clear:both; margin-top:40px">Ações</h3>
+
+<p>O Android tem suporte para ações opcionais que são exibidas na parte inferior
+da notificação.
+Com ações, os usuários podem tratar as tarefas mais comuns para
+determinada notificação de dentro da sombra da notificação sem precisar abrir o
+aplicativo de origem.
+Isso acelera a interação e, em conjunto com deslizar-para-descartar, ajuda os usuários a
+se concentrarem em notificações que sejam importantes.</p>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
+
+
+
+<p style="clear:both">Tenha cuidado com o número de ações que inclui em uma
+notificação. Quanto mais
+ações incluir, maior será a complexidade cognitiva criada. Limite-se
+ao menor número possível
+de ações, incluindo apenas as ações efetivamente mais importantes e
+significativas.</p>
+
+<p>Boas candidatas a ações em notificações são ações que:</p>
+
+<ul>
+  <li> Sejam essenciais, frequentes e típicas para o tipo de conteúdo
+exibido
+  <li> Permitam que o usuário realize tarefas rapidamente
+</ul>
+
+<p>Evite ações que sejam:</p>
+
+<ul>
+  <li> Ambíguas
+  <li> Idênticas à ação padrão da notificação (como "Ler" ou
+"Abrir")
+</ul>
+
+
+
+<p>Você pode especificar no máximo três ações, cada uma consistindo em um ícone
+e um nome de ação.
+ Adicionar ações a um layout básico simples torna a notificação expansível,
+mesmo se a
+notificação não tiver um layout expandido. Como as ações são exibidas apenas para notificações 
+expandidas
+ e que ficam de outra forma ocultas, certifique-se de que qualquer ação que um
+usuário possa invocar de dentro de uma
+ notificação esteja disponível também dentro do aplicativo
+associado.</p>
+
+<h2 style="clear:left">Notificação heads-up</h2>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
+  <p class="img-caption">
+    Exemplo de uma notificação heads-up (chamada telefônica recebida, alta prioridade)
+que aparece sobre um
+aplicativo imersivo
+  </p>
+</div>
+
+<p>Quando uma notificação de alta prioridade chega (veja à direita), ela é apresentada
+aos usuários por
+um período curto com um layout expandido mostrando possíveis ações.</p>
+<p> Depois desse período, a notificação recua para a sombra
+de notificação. Se a <a href="#correctly_set_and_manage_notification_priority">prioridade</a> de uma notificação for
+marcada como Alta, Máxima ou tela cheia, ela receberá uma notificação heads-up.</p>
+
+<p><b>Bons exemplos de notificações heads-up</b></p>
+
+<ul>
+  <li> Chamada telefônica recebida durante o uso do dispositivo</li>
+  <li> Alarme durante o uso do dispositivo</li>
+  <li> Nova mensagem SMS</li>
+  <li> Bateria fraca</li>
+</ul>
+
+<h2 style="clear:both" id="guidelines">Diretrizes</h2>
+
+
+<h3 id="MakeItPersonal">Torne-a pessoal</h3>
+
+<p>Para notificações de itens enviados por outra pessoa (como uma mensagem ou
+atualização de status), inclua a imagem da pessoa usando 
+{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}. Anexe também informações sobre
+a pessoa nos metadados da notificação (consulte {@link android.app.Notification#EXTRA_PEOPLE}).</p>
+
+<p>O ícone principal de sua notificação ainda é mostrado, portanto, o usuário pode associá-lo
+ao ícone
+visível na barra de status.</p>
+
+
+<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
+<p style="margin-top:10px" class="img-caption">
+  Notificação que mostra a pessoa que a ativou e o conteúdo enviado.
+</p>
+
+
+<h3 id="navigate_to_the_right_place">Navegação para o lugar certo</h3>
+
+<p>Quando o usuário toca no corpo de uma notificação (fora dos botões
+de ação), abra o aplicativo
+no lugar em que o usuário possa visualizar e agir sobre os dados referenciados na
+notificação. Na maioria dos casos, será a exibição detalhada de um único item de dado, como uma mensagem,
+mas também poderá ser uma
+vista resumida se a notificação estiver empilhada. Se o aplicativo
+levar o usuário a qualquer lugar abaixo do nível superior do aplicativo, insira a navegação na pilha de retorno do aplicativo para que
+o usuário possa pressionar o botão Voltar do sistema para voltar ao nível superior. Para obter mais informações, consulte
+<em>Navegação para o seu aplicativo pelos widgets de página inicial e notificações</em> no padrão de projeto de <a href="{@docRoot}design/patterns/navigation.html#into-your-app">Navegação</a>.
+</p>
+
+<h3 id="correctly_set_and_manage_notification_priority">Definição e gerenciamento 
+corretos da prioridade das 
+notificações</h3>
+
+<p>O Android tem suporte para um sinalizador de prioridade para notificações. Esse sinalizador permite
+influenciar o local em que a notificação é exibida em relação a outras notificações e
+ajuda a garantir
+que os usuários sempre vejam primeiro as notificações mais importantes. Você pode escolher entre
+os seguintes
+níveis de prioridade ao publicar uma notificação:</p>
+<table>
+ <tr>
+    <td class="tab0">
+<p><strong>Prioridade</strong></p>
+</td>
+    <td class="tab0">
+<p><strong>Uso</strong></p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MAX</code></p>
+</td>
+    <td class="tab1">
+<p>Use para notificações críticas e urgentes que alertam o usuário sobre uma condição
+que depende
+do tempo ou que precisa ser resolvida antes que o usuário possa continuar
+com uma determinada tarefa.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>HIGH</code></p>
+</td>
+    <td class="tab1">
+<p>Use principalmente para comunicações importantes, como uma mensagem ou
+eventos de bate-papo com conteúdo particularmente interessante para o usuário.
+Notificações de alta prioridade acionam a exibição de uma notificação heads-up.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>DEFAULT</code></p>
+</td>
+    <td class="tab1">
+<p>Use para todas as notificações que não recaiam em nenhuma das outras prioridades descritas aqui.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>LOW</code></p>
+</td>
+    <td class="tab1">
+<p>Use para notificações sobre as quais deseja que o usuário seja informado, mas
+que sejam menos urgentes. Notificações de baixa prioridade tendem a ser exibidas na parte inferior da lista,
+o que as torna uma boa
+opção para coisas como atualizações públicas ou sociais não direcionadas: o usuário pediu para
+ser notificado sobre
+elas, mas essas notificações nunca devem ter precedência sobre comunicações
+urgentes ou diretas.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MIN</code></p>
+</td>
+    <td class="tab1">
+<p>Use para informações contextuais ou de histórico, como informações sobre clima ou
+informações contextuais de localização.
+Notificações de prioridade mínima não aparecem na barra de status. O usuário
+as descobre expandindo a sombra da notificação.</p>
+</td>
+ </tr>
+</table>
+
+
+<h4 id="how_to_choose_an_appropriate_priority"><strong>Como escolher uma prioridade 
+adequada
+</strong></h4>
+
+<p><code>DEFAULT</code>, <code>HIGH</code> e <code>MAX</code> são níveis de prioridade de interrupção e arriscam 
+interromper a atividade
+do usuário. Para evitar irritar os usuários de seu aplicativo, reserve níveis de prioridade de interrupção para
+notificações que:</p>
+
+<ul>
+  <li> Envolvam outra pessoa</li>
+  <li> Dependam do tempo</li>
+  <li> Possam mudar imediatamente o comportamento do usuário no mundo real</li>
+</ul>
+
+<p>Notificações definidas como <code>LOW</code> e <code>MIN</code> ainda podem
+ser valiosas para o usuário: muitas, se não a maioria, das notificações não precisam demandar a atenção
+imediata do usuário, ou vibrar o pulso do usuário, mas ainda contêm informações que o usuário
+achará valiosas ao decidir procurar
+notificações. Os critérios para notificações de prioridade <code>LOW</code> e <code>MIN</code>
+incluem:</p>
+
+<ul>
+  <li> Não envolver outras pessoas</li>
+  <li> Não depender de tempo</li>
+  <li> Ter conteúdo no qual o usuário pode estar interessado, mas que pode decidir
+verificar no momento em que desejar</li>
+</ul>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
+
+
+<h3 style="clear:both" id="set_a_notification_category">Definição de uma categoria
+de notificação</h3>
+
+<p>Se a sua notificação recair em uma das categorias predefinidas (veja
+abaixo), atribua-a
+adequadamente.  Aspectos da IU do sistema, como a sombra da notificação (ou qualquer
+outra escuta
+de notificação), podem usar essas informações para tomar decisões de classificação e filtragem.</p>
+<table>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
+</td>
+    <td>
+<p>Chamada recebida (voz ou vídeo) ou solicitação similar de 
+comunicação síncrona</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
+</td>
+    <td>
+<p>Mensagem direta recebida (SMS, mensagem instantânea etc.)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
+</td>
+    <td>
+<p>Mensagens assíncronas em lote (e-mail)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
+</td>
+    <td>
+<p>Evento de calendário</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
+</td>
+    <td>
+<p>Promoção ou publicidade</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
+</td>
+    <td>
+<p>Alarme ou cronômetro</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
+</td>
+    <td>
+<p>Andamento de uma operação de execução longa em segundo plano</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
+</td>
+    <td>
+<p>Atualização de rede social ou de compartilhamento</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
+</td>
+    <td>
+<p>Erro em operação de segundo plano ou no status de autenticação</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
+</td>
+    <td>
+<p>Controle de transporte de mídia para reprodução</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
+</td>
+    <td>
+<p>Atualização do sistema ou do status do dispositivo.  Reservado para uso do sistema.</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
+</td>
+    <td>
+<p>Indicação de serviço de segundo plano em execução</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
+</td>
+    <td>
+<p>Uma recomendação específica e oportuna para uma única coisa.  Por exemplo, um aplicativo
+de notícias pode querer
+recomendar uma notícia que acredita que o usuário desejará ler em seguida.</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
+</td>
+    <td>
+<p>Informações contínuas sobre o dispositivo ou o status contextual</p>
+</td>
+ </tr>
+</table>
+
+<h3 id="summarize_your_notifications">Resuma as notificações</h3>
+
+<p>Se uma notificação de um certo tipo já estiver pendente quando o aplicativo tentar enviar uma nova
+notificação do mesmo tipo, combine-as em uma única notificação de resumo para o aplicativo. Não
+crie um novo objeto.</p>
+
+<p>Uma notificação de resumo cria uma descrição resumida e permite que o
+usuário entenda quantas notificações
+de um determinado tipo estão pendentes.</p>
+
+<div class="col-6">
+
+<p><strong>O que não fazer</strong></p>
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
+</div>
+
+<div>
+<p><strong>O que fazer</strong></p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
+</div>
+
+<p style="clear:left; padding-top:30px; padding-bottom:20px">Você pode fornecer
+mais detalhes sobre as notificações individuais que compõem um
+resumo usando o layout resumido expandido. Essa abordagem permite que os usuários 
+entendam melhor quais
+notificações estão pendentes e decidam se estão interessados o suficiente para lê-las
+em detalhes dentro
+do aplicativo associado.</p>
+<div class="col-6">
+  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
+  <p class="img-caption">
+  Notificação expandida e contraída que é um resumo (usando <code>InboxStyle</code>)
+  </p>
+</div>
+
+<h3 style="clear:both" id="make_notifications_optional">Torne as notificações
+opcionais</h3>
+
+<p>Os usuários devem sempre controlar as notificações. Permita que o usuário
+desative as notificações
+de seu aplicativo ou altere as propriedades de alerta, como som de alerta e 
+se a vibração será usada,
+adicionando um item de configuração da notificação nas configurações do aplicativo.</p>
+
+<h3 id="use_distinct_icons">Use ícones distintos</h3>
+<p>Ao olhar para a área de notificação, o usuário deverá ser capaz de discernir
+que tipos de 
+notificações estão atualmente pendentes.</p>
+
+<div class="figure">
+  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
+</div>
+
+  <div><p><strong>O que fazer</strong></p>
+    <p>Verifique os ícones de notificação que os aplicativos do Android já fornecem e crie
+ícones de notificação para o seu
+aplicativo que tenham aparência suficientemente distinta.</p>
+
+    <p><strong>O que fazer</strong></p>
+    <p>Use o <a href="/design/style/iconography.html#notification">estilo de ícone de notificação</a> apropriado
+ para ícones pequenos e o 
+    <a href="/design/style/iconography.html#action-bar">estilo de ícone de barra
+de ação</a> da luminosidade do Material para os ícones
+    de ação.</p>
+<p ><strong>O que fazer</strong></p>
+<p >Mantenha os ícones visualmente simples, evitando detalhes excessivos que sejam
+difíceis de discernir.</p>
+
+  <div><p><strong>O que não fazer</strong></p>
+    <p>Coloque um alfa adicional (esmaecimento ou redução de intensidade) nos ícones pequenos
+e nos ícones de
+    ação; eles podem ter bordas suavizadas, mas, como o Android usa esses
+ícones como máscaras (ou seja, somente
+    o canal alfa é usado), a imagem normalmente deve ser desenhada com
+opacidade total.</p>
+
+</div>
+<p style="clear:both"><strong>O que não fazer</strong></p>
+
+<p>Use cores para distinguir o seu aplicativo dos outros. Ícones de notificação devem 
+somente ser uma imagem com fundo branco sobre transparente.</p>
+
+
+<h3 id="pulse_the_notification_led_appropriately">Pisque o LED de notificação
+adequadamente</h3>
+
+<p>Muitos dispositivos Android contêm um LED de notificação, que é usado para manter o
+usuário informado sobre
+eventos enquanto a tela está desligada. Notificações com um nível de prioridade de <code>MAX</code>,
+<code>HIGH</code> ou <code>DEFAULT</code> devem
+fazer com que o LED brilhe, enquanto que os de prioridade mais baixa (<code>LOW</code> e
+<code>MIN</code>) não devem.</p>
+
+<p>O controle do usuário sobre as notificações deve se estender ao LED. Ao usar
+DEFAULT_LIGHTS, o
+LED brilhará na cor branca. Suas notificações não devem usar uma cor
+diferente, a não ser que o
+usuário as tenha explicitamente personalizado.</p>
+
+<h2 id="building_notifications_that_users_care_about">Criação de notificações
+que agradam aos usuários</h2>
+
+<p>Para criar um aplicativo que os usuários amem, é importante projetar as
+notificações cuidadosamente.
+As notificações personificam a voz do seu aplicativo e contribuem para
+a personalidade dele. Notificações indesejadas ou
+irrelevantes podem irritar o usuário ou fazer com que ele reprove a
+quantidade de atenção que o
+aplicativo exige. Portanto, use notificações de forma cuidadosa.</p>
+
+<h3 id="when_to_display_a_notification">Quando exibir uma notificação</h3>
+
+<p>Para criar um aplicativo que as pessoas gostem de usar, é importante
+reconhecer que a atenção e o foco
+do usuário são recursos que devem ser protegidos. Apesar de o sistema de 
+notificação do Android ter
+sido projetado para minimizar o impacto das notificações na atenção do usuário,
+ainda é
+importante ter ciência do fato de que as notificações interrompem o
+fluxo de tarefas do usuário.
+Ao planejar as notificações, pergunte-se se elas são importantes o suficiente para
+justificar uma interrupção. Se não tiver certeza, permita que o usuário decida se quer
+uma notificação usando as configurações de notificação do seu aplicativo ou ajuste
+o sinalizador de prioridade das notificações para <code>LOW</code> ou <code>MIN</code> para
+evitar distrair o usuário enquanto ele faz
+alguma outra coisa.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
+  <p style="margin-top:10px" class="img-caption">
+   Exemplos de notificação que depende de tempo
+  </p>
+
+<p>Apesar de aplicativos bem comportados geralmente se manifestarem apenas quando ocorre interação com eles, alguns 
+casos justificam que o aplicativo interrompa o usuário com uma notificação não solicitada.</p>
+
+<p>Use notificações principalmente para <strong>eventos que dependam de tempo</strong>, especialmente
+ se esses eventos síncronos <strong>envolverem outras pessoas</strong>. Por
+exemplo, um bate-papo recebido
+é uma forma síncrona em tempo real de comunicação: outro usuário
+espera ativamente a resposta. Eventos de calendário são outro exemplo bom de quando usar uma
+notificação e atrair a 
+atenção do usuário, pois o evento é iminente e eventos de calendário frequentemente
+envolvem outras pessoas.</p>
+
+<h3 style="clear:both" id="when_not_to_display_a_notification">Quando não exibir 
+uma notificação</h3>
+
+<div class="figure" style="margin-top:60px">
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
+</div>
+
+<p>Em muitos outros casos, notificações não são adequadas:</p>
+
+<ul>
+  <li> Evite notificar o usuário sobre informações que não são especificamente
+direcionadas a ele ou
+que não dependam realmente de tempo. Por exemplo, as atualizações
+assíncronas e não direcionadas
+que fluem por uma rede social geralmente não justificam uma interrupção
+em tempo real. Para os usuários que se importam
+com elas, deixe que decidam recebê-las.</li>
+  <li> Não crie uma notificação se as informações novas relevantes estiverem 
+atualmente na tela. Em vez disso, 
+use a IU do próprio aplicativo para notificar o usuário das novas informações
+diretamente no contexto.
+  Por exemplo, um aplicativo de bate-papo não deve criar notificações de sistema enquanto o
+usuário estiver conversando ativamente com outro usuário.</li>
+  <li> Não interrompa o usuário para realizar operações técnicas de baixo nível, como salvar
+ou sincronizar informações, nem atualize um aplicativo se o aplicativo ou o sistema puder resolver
+o problema sem envolver o usuário.</li>
+  <li> Não interrompa o usuário para informar um erro se o aplicativo 
+puder se recuperar dele por conta própria, sem que o usuário 
+tome qualquer ação.</li>
+  <li> Não crie notificações que não tenham conteúdo real de notificação e
+que meramente anunciem o seu
+aplicativo. Uma notificação deve fornecer informações úteis, oportunas e novas e 
+não deve ser usada
+meramente para executar um aplicativo.</li>
+  <li> Não crie notificações supérfluas apenas para colocar sua marca na frente
+dos usuários.
+  Tais notificações frustram e provavelmente alienam seu público-alvo. A
+melhor forma de fornecer
+  pequenas quantidades de informações atualizadas e manter o usuário envolvido
+com o seu
+  aplicativo é desenvolver um widget que ele possa colocar na
+tela inicial.</li>
+</ul>
+
+<h2 style="clear:left" id="interacting_with_notifications">Interação com 
+notificações</h2>
+
+<p>Notificações são indicadas por ícones na barra de status e podem ser acessadas
+abrindo a
+gaveta de notificações.</p>
+
+<p>Tocar em uma notificação abre o aplicativo associado com o conteúdo
+detalhado que corresponde à notificação.
+Deslizar à esquerda ou à direita em uma notificação a remove da gaveta.</p>
+
+<h3 id="ongoing_notifications">Notificações contínuas</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
+      <p class="img-caption">
+    Notificação contínua devido à reprodução de música
+  </p>
+</div>
+<p>Notificações contínuas mantêm os usuários informados sobre um processo em andamento em
+segundo plano. 
+Por exemplo, reprodutores de música anunciam a faixa em reprodução no
+sistema de notificação e
+continuam a fazer isso até que o usuário interrompa a reprodução. Notificações contínuas também podem
+mostrar ao usuário
+feedback sobre tarefas mais longas, como o download de um arquivo ou a codificação de um vídeo. Um usuário não pode remover
+manualmente uma notificação contínua da gaveta de notificações.</p>
+
+<h3 id="ongoing_notifications">Reprodução de mídia</h3>
+<p>No Android 5.0, a tela de bloqueio não mostra controles de transporte por causa da classe 
+{@link android.media.RemoteControlClient} obsoleta. Mas ela <em>mostra</em> notificações, portanto, a notificação de reprodução
+de cada aplicativo agora é a forma
+principal para que os usuários controlem a reprodução em um estado bloqueado. Esse comportamento dá aos aplicativos mais
+controle sobre quais
+botões exibir e de que forma, ao mesmo tempo em que fornece uma experiência consistente
+para o usuário, com a tela bloqueada ou não.</p>
+
+<h3 style="clear:both"
+id="dialogs_and_toasts_are_for_feedback_not_notification">Diálogos
+e avisos</h3>
+
+<p>O seu aplicativo não deve criar uma caixa de diálogo ou um aviso se não estiver
+atualmente na tela. Uma caixa de diálogo ou um aviso
+ deve ser exibido somente como uma resposta imediata ao usuário tomando uma ação
+dentro do seu aplicativo.
+Para obter orientação adicional sobre o uso de caixas de diálogo e avisos, consulte
+<a href="/design/patterns/confirming-acknowledging.html">Confirmação e reconhecimento</a>.</p>
+
+<h3>Avaliação e classificação</h3>
+
+<p>Notificações são notícias e, portanto, são essencialmente exibidas
+em ordem cronológica inversa, com
+consideração especial para a 
+<a href="#correctly_set_and_manage_notification_priority">prioridade</a> da notificação declarada no aplicativo.</p>
+
+<p>Notificações são uma parte importante da tela de bloqueio e são exibidas proeminentemente
+sempre
+que a tela do dispositivo é exibida. O espaço na tela de bloqueio é restrito, portanto, 
+é mais importante
+do que nunca identificar as notificações mais urgentes ou relevantes. Por esse
+motivo, o Android tem um
+algoritmo de classificação mais sofisticado para notificações, levando em conta:</p>
+
+<ul>
+  <li> A marcação de data e hora e a prioridade declarada no aplicativo.</li>
+  <li> Se a notificação incomodou recentemente o usuário com som ou
+vibração (ou seja,
+  se o celular acabou de fazer um ruído e o usuário deseja saber "O que acabou de
+acontecer?", a tela de bloqueio
+  deve responder com um olhar rápido).</li>
+  <li> Qualquer pessoa anexada à notificação usando {@link android.app.Notification#EXTRA_PEOPLE}
+  e, em particular, se é contato especial (com estrelas).</li>
+</ul>
+
+<p>Para aproveitar ao máximo essa classificação, concentre-se na experiência
+do usuário que deseja
+criar, e não em um determinado local na lista.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
+
+  <p class="img-caption" style="margin-top:10px">Notificações do Gmail têm
+prioridade padrão e normalmente
+  são classificadas abaixo de mensagens de um aplicativo de mensagem instantânea, como o Hangouts, mas
+recebem
+  uma promoção temporária quando novas mensagens chegam.
+  </p>
+
+
+<h3>Na tela de bloqueio</h3>
+
+<p>Como as notificações são visíveis na tela de bloqueio, a privacidade do usuário é uma consideração 
+especialmente
+ importante. Notificações frequentemente contêm informações sensíveis e 
+não devem necessariamente estar visíveis
+para qualquer pessoa que ligar a tela do dispositivo.</p>
+
+<ul>
+  <li> Para dispositivos que têm uma tela de bloqueio segura (PIN, padrão ou senha), a interface tem 
+partes públicas e privadas. A interface pública pode ser exibida em uma tela de bloqueio segura e,
+portanto, vista por qualquer pessoa. A interface privada é o mundo atrás da tela de bloqueio e
+só é revelada depois que o usuário faz login no dispositivo.</li>
+</ul>
+
+<h3>Controle do usuário sobre as informações exibidas na tela de bloqueio segura</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
+      <p class="img-caption">
+    Notificações na tela de bloqueio com conteúdo revelado depois que o usuário desbloqueia o dispositivo.
+  </p>
+</div>
+
+<p>Ao definir uma tela de bloqueio segura, o usuário poderá escolher ocultar
+detalhes sensíveis da tela de bloqueio segura. Nesse caso, a IU do sistema
+considerará o <em>nível de visibilidade</em> da notificação para descobrir o que pode
+ser exibido com segurança.</p>
+<p> Para controlar o nível de visibilidade, chame
+<code><a
+href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>
+e especifique um destes valores:</p>
+
+<ul>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>.
+Exibe o conteúdo inteiro da notificação.
+  Esse é o padrão do sistema se a visibilidade não for especificada.</li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
+Na tela de bloqueio, exibe informações básicas sobre essa notificação, incluindo o
+ícone e o nome do aplicativo que a publicou. O restante dos detalhes da notificação não é exibido.
+Alguns pontos a ter em mente são:
+  <ul>
+    <li> Se você quer fornecer uma versão pública diferente da sua notificação
+para que o sistema a exiba em uma tela de bloqueio segura, forneça um objeto
+Notificação substituto no campo <code><a
+href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>.
+
+    <li> Essa configuração dá ao aplicativo uma oportunidade de criar uma versão alternativa do
+conteúdo que ainda é útil, mas não revela informações pessoais. Considere o exemplo de um
+aplicativo de SMS cujas notificações incluem o texto da mensagem SMS, o nome do remetente e o ícone do contato.
+Essa notificação deve ser <code>VISIBILITY_PRIVATE</code>, mas <code>publicVersion</code> ainda pode
+conter informações úteis, como "3 novas mensagens", sem outros detalhes
+de identificação.
+  </ul>
+  </li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>. Mostra apenas as informações mínimas, excluindo até mesmo
+o ícone da notificação.</li>
+</ul>
+<h2 style="clear:both" id="notifications_on_android_wear">Notificações no
+Android Wear</h2>
+
+<p>Notificações e suas <em>ações</em> são enviadas a dispositivos Wear por padrão.
+Os desenvolvedores podem controlar que notificações são enviadas do
+celular ao relógio
+e vice-versa. Os desenvolvedores também podem controlar quais ações são transmitidas. Se o
+seu aplicativo inclui
+ações que não podem ser executadas com um toque, oculte essas ações 
+na sua notificação do Wear
+ou considere colocá-las em um aplicativo do Wear, permitindo que o usuário
+termine a ação
+no relógio.</p>
+
+<h4>Transmissão de notificações e ações</h4>
+
+<p>Um dispositivo conectado, como um celular, pode transmitir notificações para um dispositivo Wear para que as
+notificações sejam exibidas nele. De forma similar, ele pode transmitir ações para que o usuário possa agir
+sobre as notificações diretamente do dispositivo Wear.</p>
+
+<p><strong>Transmitir</strong></p>
+
+<ul>
+  <li> Novas mensagens instantâneas</li>
+  <li> Ações de um toque, como +1, Curtir, Coração</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
+
+<p><strong>Não transmitir</strong></p>
+
+<ul>
+  <li> Notificações de podcasts recém-chegados</li>
+  <li> Ações que mapeiem para recursos que não são possíveis no relógio</li>
+</ul>
+
+
+
+<p><h4>Ações exclusivas a definir para Wear</h4></p>
+
+<p>Há algumas ações que só podem ser realizadas em Wear. Elas incluem:</p>
+
+<ul>
+  <li> Listas rápidas de respostas prontas, como "Volto logo"</li>
+  <li> Abrir no celular</li>
+  <li> Uma ação "Comentar" ou "Responder" que abre a tela de entrada de voz</li>
+  <li> Ações que executam aplicativos específicos de Wear</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
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/pt-br/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/index.jd
new file mode 100644
index 0000000..5912058
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/index.jd
@@ -0,0 +1,72 @@
+page.title=Como gerenciar o ciclo de vida da atividade
+page.tags=ciclo de vida da atividade
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<h2>Dependências e pré-requisitos</h2>
+<ul>
+  <li>Como criar um projeto do Android (consulte <a href="{@docRoot}training/basics/firstapp/creating-project.html">Como criar um projeto
+do Android</a>)</li>
+</ul>
+
+
+<h2>Leia também</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/activities.html">Atividades</a></li>
+</ul>
+
+
+<h2>Tente</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Baixar a demonstração</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>Conforme o usuário navega, sai e retorna para o seu aplicativo, as
+instâncias {@link android.app.Activity} no aplicativo transitam entre diferentes estados no
+ciclo de vida. Por exemplo, quando a
+atividade começa pela primeira vez, ela fica em primeiro plano no sistema e tem o foco do
+usuário. Durante o processo, o sistema Android chama uma série de métodos do ciclo de vida na
+atividade, onde você define a interface do usuário e outros componentes. Se o usuário executa uma
+ação que inicia outra atividade ou alterna para outro aplicativo, o sistema chama outro conjunto de
+métodos do ciclo de vida em sua atividade conforme ela fica em segundo plano (onde a atividade já não
+está visível, mas a instância e seu estado permanecem intactos).</p>
+
+<p>Dentro dos métodos de retorno de chamada do ciclo de vida, você pode declarar como a atividade deve se comportar quando o
+usuário sai e retorna da atividade.  Por exemplo, se estiver construindo um reprodutor de vídeos de transmissão em sequência, 
+você pode pausar o vídeo e encerrar a conexão da rede quando o usuário alternar para outro
+aplicativo. Quando o usuário retornar, será possível reconectar a rede e permitir que ele reinicie o vídeo
+de onde parou.</p>
+
+<p>Essa lição explica a importância dos métodos de retorno de chamada do ciclo de vida que cada instância {@link
+android.app.Activity} recebe e como utilizá-los para que a atividade faça o que o
+usuário espera e não consuma recursos do sistema quando não estiver em uso.</p>
+
+<h2>Lições</h2>
+ 
+<dl>
+  <dt><b><a href="starting.html">Iniciando uma atividade</a></b></dt>
+  <dd>Aprenda os fundamentos sobre ciclo de vida da atividade, como o usuário pode iniciar seu aplicativo e como
+executar atividades básicas de criação.</dd>
+  <dt><b><a href="pausing.html">Pausando e reiniciando uma atividade</a></b></dt>
+  <dd>Aprenda sobre o que acontece quando sua atividade é pausada (parcialmente obscurecida) e retomada e o que
+fazer durante essas mudanças de estados.</dd>
+  <dt><b><a href="stopping.html">Interrompendo e reiniciando uma atividade</a></b></dt>
+  <dd>Aprenda sobre o que acontece quando o usuário sai da atividade completamente e retorna.</dd>
+  <dt><b><a href="recreating.html">Recriando uma atividade</a></b></dt>
+  <dd>Aprenda sobre o que acontece quando sua atividade é destruída e como reconstruir o estado
+da atividade quando necessário.</dd>
+</dl> 
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/pausing.jd
new file mode 100644
index 0000000..55f772e
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/pausing.jd
@@ -0,0 +1,147 @@
+page.title=Pausando e reiniciando uma atividade
+page.tags=ciclo de vida da atividade
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Esta lição ensina a</h2>
+    <ol>
+      <li><a href="#Pause">Pausar sua atividade</a></li>
+      <li><a href="#Resume">Reiniciar sua atividade</a></li>
+    </ol>
+    
+    <h2>Leia também</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Atividades</a>
+      </li>
+    </ul>
+
+<h2>Tente</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Baixar a demonstração</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>Durante o uso normal do aplicativo, a atividade em primeiro plano as vezes é obstruída por outros 
+componentes visuais que causam a <em>pausa</em>.  Por exemplo, quando uma atividade
+ semitransparente é aberta (como uma no estilo de um diálogo), a atividade anterior pausa. Enquanto a 
+atividade estiver parcialmente visível, mas não for o foco da atividade, ela permanecerá pausada.</p>
+
+<p>No entanto, se a atividade estiver completamente obstruída e não visível, ela <em>para</em> (o que será 
+discutido na próxima lição).</p>
+
+<p>Conforme a atividade entra no estado pausado, o sistema chama o método {@link
+android.app.Activity#onPause onPause()} em seu {@link android.app.Activity}, que permite
+interromper ações em andamento que não devem continuar enquanto pausadas (como um vídeo) nem persistir
+quaisquer informações que devam ser permanentemente salvas caso o usuário continue a sair do aplicativo. Se
+o usuário retornar à atividade do estado de pausa, o sistema a reiniciará e chamará o método
+{@link android.app.Activity#onResume onResume()}.</p>
+
+<p class="note"><strong>Observação:</strong> quando a atividade receber o chamado para {@link
+android.app.Activity#onPause()}, pode ser um indicativo de que a atividade será pausada por um
+momento e o usuário poderá retornar o foco para a atividade. No entanto, geralmente é um indicativo
+de que o usuário está saindo da atividade.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
+<p class="img-caption"><strong>Figura 1.</strong> Quando uma atividade semitransparente obscurece
+sua atividade, o sistema chama {@link android.app.Activity#onPause onPause()} e a atividade
+aguarda no estado Pausa (1). Se o usuário retornar à atividade enquanto ainda estiver pausada, o
+ sistema chama {@link android.app.Activity#onResume onResume()} (2).</p>
+
+
+<h2 id="Pause">Pausar sua atividade</h2>
+      
+<p>Quando o sistema chama {@link android.app.Activity#onPause()} para sua atividade, teoricamente
+significa que a atividade ainda está parcialmente visível, mas geralmente é um indício
+de que o usuário está saindo da atividade e logo entrará em estado Interrompido.  Use
+o retorno de chamada {@link android.app.Activity#onPause()} para:</p>
+
+<ul>
+  <li>Interromper animações ou outras ações em andamento que consomem a CPU.</li>
+  <li>Consolidar alterações não salvas apenas se o usuário esperar que essas alterações sejam permanentemente salvas ao
+saírem (como um rascunho de email).</li>
+  <li>Liberar recursos do sistema, como receptores, cabos para sensores (como
+GPS), ou outros recursos que podem afetar a vida da bateria enquanto a atividade estiver pausada e o usuário
+não precisar deles.</li>
+</ul>
+
+<p>Por exemplo, se seu aplicativo utiliza o {@link android.hardware.Camera}, o método
+{@link android.app.Activity#onPause()} é um bom local para liberá-los.</p>
+
+<pre>
+&#64;Override
+public void onPause() {
+    super.onPause();  // Always call the superclass method first
+
+    // Release the Camera because we don't need it when paused
+    // and other activities might need to use it.
+    if (mCamera != null) {
+        mCamera.release()
+        mCamera = null;
+    }
+}
+</pre>
+
+<p>Geralmente, recomenda-se <strong>não</strong> utilizar {@link android.app.Activity#onPause()} para armazenar
+alterações do usuário (como informações pessoais digitadas em um formulário) para armazenamento permanente. O único momento
+que se deve persistir na mudança do usuário para armazenamento permanente dentro do {@link android.app.Activity#onPause()}
+é quando tem certeza de que o usuário espera que as alterações sejam salvas automaticamente (como ao esboçar um email).
+No entanto, evite executar trabalhos de uso intensivo da CPU durante {@link
+android.app.Activity#onPause()}, como gravar em um banco de dados, porque isso pode retardar a transição
+visível para a próxima atividade (execute operações de encerramento pesadas durante
+{@link android.app.Activity#onStop onStop()}).</p>
+
+<p>Simplifique a quantidade de operações feitas no método {@link android.app.Activity#onPause
+onPause()} para permitir uma transição mais rápida para o próximo
+destino do usuário se a atividade for realmente interrompida.</p>
+
+<p class="note"><strong>Observação:</strong> quando a atividade está pausada, a instância {@link
+android.app.Activity} é mantida na memória e chamada novamente quando a atividade é retomada.
+Não é necessário reiniciar componentes que foram criados durante qualquer método de retorno de chamada que
+leve ao estado Reiniciado.</p>
+
+
+
+<h2 id="Resume">Reiniciar sua atividade</h2>
+
+<p>Quando o usuário reinicia a atividade do estado Pausado, o sistema chama o método {@link
+android.app.Activity#onResume()}.</p>
+
+<p>Certifique-se de que o sistema chama esse método sempre que a atividade entrar no primeiro plano,
+mesmo quando estiver sendo criada. Dessa forma, implemente o {@link
+android.app.Activity#onResume()} para inicializar os componentes liberados durante {@link
+android.app.Activity#onPause()} e execute quaisquer outras inicializações que devem ocorrer sempre que a
+atividade entrar em estado Reiniciado (como ao iniciar animações e componentes de inicialização usados apenas
+enquanto a atividade tiver o foco do usuário).</p>
+
+<p>O seguinte exemplo de {@link android.app.Activity#onResume()} é uma contrapartida ao
+exemplo {@link android.app.Activity#onPause()} acima. Portanto, ele inicializa a câmera que é
+ liberada quando a atividade entra em pausa.</p>
+
+<pre>
+&#64;Override
+public void onResume() {
+    super.onResume();  // Always call the superclass method first
+
+    // Get the Camera instance as the activity achieves full user focus
+    if (mCamera == null) {
+        initializeCamera(); // Local method to handle camera init
+    }
+}
+</pre>
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd
new file mode 100644
index 0000000..7cb122f
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/recreating.jd
@@ -0,0 +1,178 @@
+page.title=Recriando uma atividade
+page.tags=ciclo de vida da atividade
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Esta lição ensina a</h2>
+    <ol>
+      <li><a href="#SaveState">Salvar o estado da atividade</a></li>
+      <li><a href="#RestoreState">Restaurar o estado da atividade</a></li>
+    </ol>
+    
+    <h2>Leia também</h2>
+    <ul>
+      <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">Compatibilidade
+ com diferentes telas</a></li>
+      <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">Tratar alterações no tempo de execução</a></li>
+      <li><a href="{@docRoot}guide/components/activities.html">Atividades</a>
+      </li>
+    </ul>
+
+  </div>
+</div>
+
+<p>Estas são algumas possibilidade onde a atividade é destruída devido ao comportamento normal do aplicativo, como
+quando o usuário pressiona o botão <em>Voltar</em> ou sua atividade sinaliza sua própria destruição
+chamando {@link android.app.Activity#finish()}. O sistema também pode destruir a atividade se
+for interrompida e não tiver sido utilizada por um longo período de tempo ou a atividade do primeiro plano exigir mais
+recursos, então, o sistema deverá fechar processos de segundo plano para recuperar memória.</p>
+
+<p>Quando a atividade é destruída porque o usuário pressiona <em>Voltar</em> ou a atividade se
+encerra, o conceito do sistema de que a instância {@link android.app.Activity} se perde
+porque o comportamento indica que a atividade já não é necessária. No entanto, se o sistema destruir
+a atividade devido a limitações do sistema (em vez do comportamento normal do aplicativo), embora a instância real
+{@link android.app.Activity} tenha se perdido, o sistema lembra que ela existiu de forma que se
+o usuário navegar de volta, o sistema criará uma nova instância da atividade usando um conjunto
+de dados salvos que descrevem o estado da atividade quando foi destruída. Os dados salvos
+utilizados pelo sistema para restaurar o estado anterior é chamado de “estado da instância” e é uma coleção
+de pares de valores-chave armazenados no objeto {@link android.os.Bundle}.</p>
+
+<p class="caution"><strong>Cuidado:</strong> a atividade é destruída e recriada cada vez
+que o usuário girar a tela. Quando a tela altera a orientação, o sistema destrói e recria
+a atividade de primeiro plano porque a configuração da tela mudou e a atividade talvez precise
+carregar recursos alternativos (como o layout).</p>
+
+<p>Por padrão, o sistema usa o estado da instância {@link android.os.Bundle} para salvar informações
+sobre cada objeto {@link android.view.View} em seu layout de atividade (como o valor do texto informado
+em um objeto {@link android.widget.EditText}). Assim, se a instância da atividade for destruída e
+recriada, o estado do layout é restaurado em seu estado anterior sem
+que haja necessidade de códigos. No entanto, sua
+atividade pode conter mais informações de estado do que se deseja restaurar, como varáveis de membro que
+rastreiam o progresso do usuário na atividade.</p>
+
+<p class="note"><strong>Observação:</strong> para que o sistema Android restaure o estado das
+visualizações em sua atividade, <strong>cada visualização precisa ter uma ID exclusiva</strong>, fornecido pelo atributo 
+<a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
+android:id}</a>.</p>
+
+<p>Para salvar dados adicionais sobre o estado da atividade, substitua
+o método de retorno de chamada {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}.
+O sistema chama este método quando o usuário sai da atividade
+e transmite o objeto{@link android.os.Bundle}, que será salvo
+caso a atividade seja destruída inesperadamente. Se
+o sistema precisar recriar a instância da atividade posteriormente, transmitirá o mesmo objeto {@link
+android.os.Bundle} para ambos os métodos {@link android.app.Activity#onRestoreInstanceState
+onRestoreInstanceState()} e {@link android.app.Activity#onCreate onCreate()}
+.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
+<p class="img-caption"><strong>Figura 2.</strong> Conforme o sistema começa a interromper a atividade, ele
+chama {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}(1) para que você possa especificar
+outros dados de estado que gostaria de salvar caso a instância {@link android.app.Activity} precise ser
+recriada.
+Se a atividade for destruída e a mesma instância precisar ser recriada, o sistema transmite os dados do
+estado definidos em (1) para ambos os métodos {@link android.app.Activity#onCreate onCreate()}
+(2) e {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}
+(3).</p>
+
+
+
+<h2 id="SaveState">Salvar o estado da atividade</h2>
+
+<p>Conforme a atividade é interrompida, o sistema chama {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()} para que a atividade possa salvar informações de estado com uma coleção de pares de
+valor-chave. A implementação padrão deste método salva informações sobre o estado da hierarquia de exibições
+da atividade, como o texto em um widget {@link android.widget.EditText} ou a posição de rolagem
+de um {@link android.widget.ListView}.</p>
+
+<p>Para salvar informações de estado adicionais para a atividade,
+implemente {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} e adicione
+pares de valor-chave ao objeto {@link android.os.Bundle}. Por exemplo:</p>
+
+<pre>
+static final String STATE_SCORE = "playerScore";
+static final String STATE_LEVEL = "playerLevel";
+...
+
+&#64;Override
+public void onSaveInstanceState(Bundle savedInstanceState) {
+    // Save the user's current game state
+    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
+    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
+    
+    // Always call the superclass so it can save the view hierarchy state
+    super.onSaveInstanceState(savedInstanceState);
+}
+</pre>
+
+<p class="caution"><strong>Cuidado:</strong> sempre chame a implementação de superclasse de {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} para que a implementação padrão
+possa salvar o estado da hierarquia de exibições.</p>
+
+
+
+<h2 id="RestoreState">Restaurar o estado da atividade</h2>
+
+<p>Quando a atividade é recriada depois de ter sido destruída, é possível recuperar o estado
+salvo do {@link android.os.Bundle} que o sistema
+transmitiu a atividade. Ambos os métodos de retorno de chamada {@link android.app.Activity#onCreate onCreate()} e {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} recebem
+o mesmo {@link android.os.Bundle} que contém informações do estado da instância.</p>
+
+<p>Como o método {@link android.app.Activity#onCreate onCreate()} é chamado se o
+sistema estiver criando uma nova instância da atividade ou recriando uma anterior, verifique
+se o {@link android.os.Bundle} do estado é null antes de tentar realizar a leitura. Se for null,
+o sistema estará criando uma nova instância da atividade em vez de restaurar uma anterior
+que tenha sido destruída.</p>
+
+<p>Por exemplo, esta é uma forma de restaurar alguns dados de estado no {@link android.app.Activity#onCreate
+onCreate()}:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState); // Always call the superclass first
+   
+    // Check whether we're recreating a previously destroyed instance
+    if (savedInstanceState != null) {
+        // Restore value of members from saved state
+        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+    } else {
+        // Probably initialize members with default values for a new instance
+    }
+    ...
+}
+</pre>
+
+<p>Em vez de restaurar o estado durante {@link android.app.Activity#onCreate onCreate()}, você
+pode implementar {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}, que o sistema chama
+depois do método {@link android.app.Activity#onStart()}. O sistema chama {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} se houver um estado
+salvo para ser restaurado. Portanto, não é necessário verificar se {@link android.os.Bundle} é null:</p>
+        
+<pre>
+public void onRestoreInstanceState(Bundle savedInstanceState) {
+    // Always call the superclass so it can restore the view hierarchy
+    super.onRestoreInstanceState(savedInstanceState);
+   
+    // Restore state members from saved instance
+    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+}
+</pre>
+
+<p class="caution"><strong>Cuidado:</strong> sempre chame a implementação de superclasse de {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} para que a implementação padrão
+possa restaurar o estado da hierarquia de exibições.</p>
+
+<p>Para saber mais sobre recriação de atividades devido a
+um evento de reinicialização no tempo de execução (como quando a tela gira), consulte <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Tratar alterações no tempo de execução</a>.</p>
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd
new file mode 100644
index 0000000..1f8f080
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd
@@ -0,0 +1,285 @@
+page.title=Iniciando uma atividade
+page.tags=ciclo de vida de atividade
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Esta lição ensina a</h2>
+<ol>
+  <li><a href="#lifecycle-states">Entender o ciclo de vida do retorno de chamada</a></li>
+  <li><a href="#launching-activity">Especificar a atividade da tela de início do aplicativo</a></li>
+  <li><a href="#Create">Criar uma nova instância</a></li>
+  <li><a href="#Destroy">Destruir a atividade</a></li>
+</ol>
+    
+    <h2>Leia também</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Atividades</a></li>
+    </ul>
+
+<h2>Tente</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Baixar a demonstração</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>Diferente de outros paradigmas de programação em que os aplicativos são lançados com um método {@code main()}, o
+sistema Android inicia o código em uma instância {@link android.app.Activity} chamando métodos específicos
+de retorno de chamada que correspondem a determinados estágios do seu
+ciclo de vida. Há uma sequência de métodos de retorno de chamada que iniciam uma atividade e uma sequência de métodos
+de retorno de chamada que interrompem uma atividade.</p>
+
+<p>Essa lição proporciona uma visão geral dos métodos do ciclo de vida mais importantes e mostra como
+lidar com o primeiro retorno de chamada do ciclo de vida que cria uma nova instância de sua atividade.</p>
+
+
+
+<h2 id="lifecycle-states">Entender o ciclo de vida do retorno de chamada</h2>
+
+<p>Durante a vida de uma atividade, o sistema chama um núcleo principal de métodos do ciclo de vida em
+uma sequência parecida com uma pirâmide em degraus. Isto é, cada estágio do
+ciclo de vida da atividade corresponde a um degrau da pirâmide. Conforme o sistema cria uma nova instância de atividade,
+cada método de retorno de chamada leva o estado da atividade um degrau acima. O topo da pirâmide é o
+ponto em que a atividade funciona em primeiro plano e o usuário pode interagir com ela.</p>
+
+<p>Conforme o usuário começa a sair da atividade, o sistema chama outros métodos que a movem
+de volta em direção à base da pirâmide para desfazer a atividade. Em alguns casos, a atividade é movida
+parcialmente em direção à base da pirâmide e aguarda (como quando o usuário muda para outro aplicativo), no
+ponto em que a atividade é movida novamente em direção ao topo (se o usuário retornar à atividade) e
+reinicia de onde o usuário parou.</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle.png" />
+<p class="img-caption"><strong>Figura 1.</strong> Ilustração simplificada do ciclo de vida
+da atividade, expressa como pirâmide em degraus. Isso mostra que, para cada retorno de chamada usado para levar
+uma atividade ao estado de Reiniciado, em direção ao topo, há um método de retorno de chamada
+que leva a atividade um degrau abaixo. A atividade também pode retornar ao estado de retomada do
+estado de Pausado e Interrompido.</p>
+
+
+<p>Dependendo da complexidade de sua atividade, não há necessidade de implementar todos os
+métodos do ciclo de vida. No entanto, é importante compreender cada um e implementar apenas aqueles que
+garantem que seu aplicativo tenha o desempenho esperado pelo usuário. A implementação adequada dos métodos do ciclo de vida da atividade
+garante que seu aplicativo tenha um bom desempenho em vários sentidos, incluindo que:</p>
+<ul>
+  <li>Não apresente falhas se o usuário receber uma chamada telefônica ou mudar para outro aplicativo
+enquanto estiver usando o seu aplicativo.</li>
+  <li>Não consuma recursos importantes do sistema quando o usuário não estiver utilizando
+ativamente o aplicativo.</li>
+  <li>Não perca o progresso do usuário se ele sair do aplicativo e retornar
+mais tarde.</li>
+  <li>Não apresente falhas nem perca o progresso do usuário quando a orientação da tela mudar entre
+paisagem e retrato.</li>
+</ul>
+
+<!--
+<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 
+methods.</p>
+<table>
+  <tr>
+    <th scope="col">Lifecycle State</th>
+    <th scope="col">Startup Method</th>
+    <th scope="col">Teardown Method</th>
+  </tr>
+  <tr>
+    <td>Created / Destroyed</td>
+    <td>{@link android.app.Activity#onCreate onCreate()}</td>
+    <td>{@link android.app.Activity#onDestroy()}</td>
+  </tr>
+  <tr>
+    <td>Started / Stopped</td>
+    <td>{@link android.app.Activity#onStart()}</td>
+    <td>{@link android.app.Activity#onStop()}</td>
+  </tr>
+  <tr>
+    <td>Resumed / Resumed</td>
+    <td>{@link android.app.Activity#onResume()}</td>
+    <td>{@link android.app.Activity#onPause()}</td>
+  </tr>
+</table>
+-->
+
+<p>Como você aprenderá nas lições seguintes, há várias situações de transições de
+atividades entre estados diferentes, como ilustrado na figura 1. No entanto, apenas três
+desses estados podem ser estáticos. Isto é, a atividade pode existir em um de apenas três estados por
+um período de tempo maior:</p>
+<dl>
+  <dt>Reiniciado</dt>
+    <dd>Neste estado, a atividade está no primeiro plano e o usuário consegue interagir.
+(Também chamado de estado de funcionamento.)</dd>
+  <dt>Pausado</dt>
+    <dd>Neste estado, a atividade está parcialmente obscurecida por outra atividade. A
+outra atividade que está em primeiro plano é semitransparente ou não cobre totalmente a tela. A
+atividade pausada não recebe entrada do usuário e não executa nenhum código.
+  <dt>Interrompido</dt>
+    <dd>Neste estado, a atividade está completamente oculta e não é visível para o usuário. Considera-se
+que está em segundo plano. Enquanto interrompido, a instância da atividade e todas as
+informações de estado, como variáveis de membro, são retidas, mas não é possível executar nenhum código.</dd>
+</dl>
+
+<p>Os outros estados (Criado e Iniciado) são temporários e o sistema rapidamente se move rapidamente de um
+estado a outro chamando o próximo método de retorno de chamada do ciclo de vida. Isto é, depois que o sistema chama
+{@link android.app.Activity#onCreate onCreate()}, ele rapidamente chama {@link
+android.app.Activity#onStart()}, que é seguido por {@link
+android.app.Activity#onResume()}.</p>
+
+<p>Isso é tudo que precisamos dizer sobre o ciclo de vida básico de atividades. Agora você aprenderá sobre alguns dos
+comportamentos específicos do ciclo de vida.</p>
+
+
+
+<h2 id="launching-activity">Especificar a atividade da tela de início do aplicativo</h2> 
+
+<p>Quando o usuário seleciona seu aplicativo na tela inicial, o sistema chama o método {@link
+android.app.Activity#onCreate onCreate()} para {@link android.app.Activity} no aplicativo
+que foi declarado como atividade da “inicializador” (ou “principal”). Essa é a atividade que serve como
+ponto de entrada principal da interface do usuário do aplicativo.</p>
+
+<p>É possível definir qual atividade será usada como principal no arquivo manifesto do Android, <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a>, que está
+na raiz do diretório do seu projeto.</p>
+
+<p>A principal atividade do aplicativo deve ser declarada no manifesto com um <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> que inclui a ação {@link
+android.content.Intent#ACTION_MAIN MAIN} e categoria
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Por exemplo:</p> 
+
+<pre>
+&lt;activity android:name=".MainActivity" android:label="&#64;string/app_name">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.MAIN" />
+        &lt;category android:name="android.intent.category.LAUNCHER" />
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>Observação:</strong> ao criar um novo projeto do Android com ferramentas
+SDK Android, os arquivos padrões do projeto incluem uma classe {@link android.app.Activity} que é declarada no
+manifesto com esse filtro.</p>
+
+<p>Se a ação {@link android.content.Intent#ACTION_MAIN MAIN} nem a categoria
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} forem declaradas para uma de suas
+atividades, o ícone do aplicativo não aparecerá na lista de aplicativos da tela inicial.</p>
+
+
+
+<h2 id="Create">Criar uma nova instância</h2>
+
+<p>A maioria dos aplicativos tem várias atividades que permitem ao usuário realizar diferentes ações.
+Tanto para a atividade principal criada quando o usuário clica no ícone do aplicativo quanto uma
+atividade diferente que o aplicativo inicia em resposta à ação do usuário, o sistema cria
+cada nova instância do {@link android.app.Activity} chamando o método {@link
+android.app.Activity#onCreate onCreate()}.</p>
+
+<p>Implemente o método {@link android.app.Activity#onCreate onCreate()} para realizar a lógica básica
+de inicialização do aplicativo que deve acontecer apenas uma vez na vida completa da atividade. Por
+exemplo, sua implementação do {@link android.app.Activity#onCreate onCreate()} deve definir a
+interface do usuário e possivelmente instanciar algumas variáveis de escopo de classe.</p>
+
+<p>Por exemplo, o seguinte modelo do método {@link android.app.Activity#onCreate onCreate()}
+ mostra alguns códigos que realizam configurações fundamentais para a atividade, como
+declarar a interface do usuário (definida em arquivo de layout XML), definir variáveis de membro
+e configurar parte da interface do usuário.</p>
+
+<pre>
+TextView mTextView; // Member variable for text view in the layout
+
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    // Set the user interface layout for this Activity
+    // The layout file is defined in the project res/layout/main_activity.xml file
+    setContentView(R.layout.main_activity);
+    
+    // Initialize member TextView so we can manipulate it later
+    mTextView = (TextView) findViewById(R.id.text_message);
+    
+    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+        // For the main activity, make sure the app icon in the action bar
+        // does not behave as a button
+        ActionBar actionBar = getActionBar();
+        actionBar.setHomeButtonEnabled(false);
+    }
+}
+</pre>
+
+<p class="caution"><strong>Cuidado:</strong> utilizar {@link android.os.Build.VERSION#SDK_INT} para
+evitar que sistemas antigos executem novas APIs funciona apenas no Android 2.0 (API Nível
+5) e versões posteriores. Versões mais antigas encontram uma exceção no tempo de execução.</p>
+
+<p>Depois que o {@link android.app.Activity#onCreate onCreate()} termina de executar, o sistema
+chama os métodos {@link android.app.Activity#onStart()} e {@link android.app.Activity#onResume()}
+ em rápida sucessão. A atividade nunca reside nos estados Criado ou Iniciado. Tecnicamente, a
+atividade se torna visível para o usuário quando {@link android.app.Activity#onStart()} é chamado, mas
+{@link android.app.Activity#onResume()} é executado e a atividade permanece no estado Reiniciado
+até que algo diferente ocorra, como o recebimento de uma chamada telefônica, o usuário
+navegar para outra atividade ou a tela do dispositivo desligar.</p>
+
+<p>Nas próximas lições, você verá como outros métodos de inicialização, {@link
+android.app.Activity#onStart()} e {@link android.app.Activity#onResume()}, podem ajudar
+no ciclo de vida da atividade quando utilizado para reiniciar a atividade dos estados Pausado e Interrompido.</p>
+
+<p class="note"><strong>Observação:</strong> o método {@link android.app.Activity#onCreate onCreate()}
+inclui um parâmetro chamado <code>savedInstanceState</code>, que será discutido mais adiante
+na lição <a href="recreating.html">Recriando uma atividade</a>.</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" />
+<p class="img-caption"><strong>Figura 2.</strong> Outra ilustração da estrutura do ciclo de vida da
+atividade com ênfase nos três retornos de chamada principais que o sistema chama na sequência quando
+cria uma nova instância da atividade: {@link android.app.Activity#onCreate onCreate()}, {@link
+android.app.Activity#onStart()} e{@link android.app.Activity#onResume()}. Depois que esta sequência de
+retornos de chamada for concluída, a atividade chega ao estado Reiniciado em que os usuários podem interagir com a
+atividade até que mude para outra atividade.</p>
+
+
+
+
+
+
+
+<h2 id="Destroy">Destruir a atividade</h2>
+
+<p>Embora o retorno de chamada do primeiro ciclo de vida da atividade seja {@link android.app.Activity#onCreate
+onCreate()}, o último retorno de chamada será {@link android.app.Activity#onDestroy}. O sistema chama
+este método na atividade como o último
+sinal de que a instância da atividade está sendo completamente removida da memória do sistema.</p>
+
+<p>A maioria dos aplicativos não exige a implementação desse método porque referências de classe locais são destruídas
+com a atividade, que realiza a maior parte da limpeza durante {@link
+android.app.Activity#onPause} e {@link android.app.Activity#onStop}. No entanto, se a
+atividade incluir threads de segundo plano criados durante {@link
+android.app.Activity#onCreate onCreate()} ou outro recurso de longa execução que pode
+vazar memória se não forem fechados adequadamente, você deve finalizá-los durante {@link
+android.app.Activity#onDestroy}.</p>
+
+<pre>
+&#64;Override
+public void onDestroy() {
+    super.onDestroy();  // Always call the superclass
+    
+    // Stop method tracing that the activity started during onCreate()
+    android.os.Debug.stopMethodTracing();
+}
+</pre>
+
+<p class="note"><strong>Observação:</strong> o sistema chama {@link android.app.Activity#onDestroy}
+depois de ter chamado {@link android.app.Activity#onPause} e {@link
+android.app.Activity#onStop} em qualquer situação, exceto uma: quando você chama {@link
+android.app.Activity#finish()} pelo método {@link android.app.Activity#onCreate onCreate()}
+. Em alguns casos, como quando a atividade assume a posição temporária de tomadora de decisões para
+lançar outra atividade, chame {@link android.app.Activity#finish()} pelo {@link
+android.app.Activity#onCreate onCreate()} para destruir a atividade. Nesse caso, o sistema
+chama imediatamente {@link android.app.Activity#onDestroy} sem chamar qualquer outro
+ método do ciclo de vida.</p>
diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/stopping.jd
new file mode 100644
index 0000000..2eba3772
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/stopping.jd
@@ -0,0 +1,187 @@
+page.title=Interrompendo e reiniciando uma atividade
+page.tags=ciclo de vida da atividade
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Esta lição ensina a</h2>
+    <ol>
+      <li><a href="#Stop">Interromper sua atividade</a></li>
+      <li><a href="#Start">Iniciar/reiniciar sua atividade</a></li>
+    </ol>
+    
+    <h2>Leia também</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Atividades</a>
+      </li>
+    </ul>
+
+<h2>Tente</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Baixar a demonstração</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>Interromper e reiniciar adequadamente sua atividade é um processo importante no ciclo de vida da atividade
+que garante que o usuário perceba que o aplicativo está sempre ativo e não perca o progresso.
+Há alguns cenários fundamentais em que sua atividade é interrompida e reiniciada:</p>
+
+<ul>
+  <li>O usuário abre a janela Aplicativos Utilizados Recentemente e alterna de um aplicativo a outro. A
+atividade em seu aplicativo atualmente em primeiro plano é interrompida. Se o usuário retornar ao
+aplicativo pelo ícone de inicialização da tela inicial ou da janela Aplicativos Utilizados Recentemente, a atividade é reiniciada.</li>
+  <li>O usuário executar uma ação em seu aplicativo que inicia uma nova atividade. A atividade atual
+é interrompida quando a segunda é criada. Se o usuário pressionar o botão <em>Voltar</em>
+, a primeira atividade será reiniciada.</li>
+  <li>Se o usuário receber uma chamada telefônica enquanto estiver usando o seu aplicativo.</li>
+</ul>
+
+<p>A classe {@link android.app.Activity} fornece dois métodos do ciclo de vida, {@link
+android.app.Activity#onStop()} e {@link android.app.Activity#onRestart()}, que permite que você
+decida exatamente como a atividade responderá à interrupção e reinicialização. Diferentemente do estado pausado,
+que identifica obstruções parciais da interface de usuário, o estado interrompido garante que a interface não fique
+visível e que o foco do usuário permaneça em outra atividade (ou mesmo outro aplicativo).</p>
+
+<p class="note"><strong>Observação:</strong> como o sistema retém a instância {@link android.app.Activity}
+na memória quando interrompida, talvez não seja necessário implementar os métodos
+{@link android.app.Activity#onStop()} e {@link android.app.Activity#onRestart()} (ou mesmo {@link
+android.app.Activity#onStart()}. Para a maioria das atividades que são relativamente simples, a
+atividade será interrompida e reiniciada normalmente e talvez seja necessário apenas usar {@link
+android.app.Activity#onPause()} para pausar ações em andamento e desconectar dos recursos do sistema.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-stopped.png" />
+<p class="img-caption"><strong>Figura 1.</strong> Quando o usuário sai da atividade, o sistema
+chama {@link android.app.Activity#onStop onStop()} para interrompê-la (1). Se o usuário retornar
+enquanto a atividade estiver interrompida, o sistema chama {@link android.app.Activity#onRestart onRestart()}
+(2), rapidamente seguido por {@link android.app.Activity#onStart onStart()} (3) e {@link
+android.app.Activity#onResume()} (4). Observe que independentemente do que tenha causado a interrupção
+da atividade, o sistema sempre chama {@link android.app.Activity#onPause onPause()} antes de chamar {@link
+android.app.Activity#onStop onStop()}.</p>
+
+
+
+<h2 id="Stop">Interromper sua atividade</h2>
+
+<p>Quando sua atividade recebe uma chamada para o método {@link android.app.Activity#onStop()}, não
+está mais visível e deve liberar quase todos os recursos que não foram necessários enquanto o usuário não
+estiver utilizando. Quando a atividade for interrompida, o sistema pode destruir a instância se for necessário para
+recuperar memória do sistema. Em casos extremos, o sistema pode simplesmente desligar o processo do aplicativo sem
+chamar o retorno de chamada{@link android.app.Activity#onDestroy()} final da atividade, portanto, é importante
+usar {@link android.app.Activity#onStop()} para liberar recursos que podem vazar memória.</p>
+
+<p>Embora o método {@link android.app.Activity#onPause onPause()} seja chamado antes de
+{@link android.app.Activity#onStop()}, use {@link android.app.Activity#onStop onStop()}
+para executar operações de desligamento maiores, que exigem mais da CPU, como escrever informação no
+banco de dados.</p>
+
+<p>Por exemplo, esta é uma implementação de {@link android.app.Activity#onStop onStop()} que
+salva os conteúdos de uma nota de rascunho no armazenamento persistente:</p>
+
+<!-- TODO: Find a better example for onStop, because this kind of thing should probably use a
+separate thread but that's too complicated to show here. -->
+<pre>
+&#64;Override
+protected void onStop() {
+    super.onStop();  // Always call the superclass method first
+
+    // Save the note's current draft, because the activity is stopping
+    // and we want to be sure the current note progress isn't lost.
+    ContentValues values = new ContentValues();
+    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
+    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
+
+    getContentResolver().update(
+            mUri,    // The URI for the note to update.
+            values,  // The map of column names and new values to apply to them.
+            null,    // No SELECT criteria are used.
+            null     // No WHERE columns are used.
+            );
+}
+</pre>
+
+<p>Quando sua atividade é interrompida, o objeto {@link android.app.Activity} é mantido na memória
+e é chamado novamente quando a atividade é reiniciada. Não é necessário reiniciar componentes que foram
+criados durante qualquer método de retorno de chamada que leve ao estado Reiniciado. O sistema também
+tem controle do estado atual de cada {@link android.view.View} no layout. Portanto, se o usuário
+inserir um texto em um widget do {@link android.widget.EditText}, o conteúdo será retido e você não
+precisará salvar e restaurar.</p>
+
+<p class="note"><strong>Observação:</strong> mesmo que o sistema destrua sua atividade enquanto estiver interrompida,
+ele ainda mantém o estado do objeto {@link android.view.View} (como texto em {@link
+android.widget.EditText}) em um {@link android.os.Bundle} (um blob de pares de valores-chave) e os restaura
+se o usuário navegar de volta para a mesma instância da atividade (a <a href="recreating.html">próxima lição</a> falará mais sobre uso do {@link android.os.Bundle} para salvar
+outros dados do estado caso sua atividade seja destruída e recriada).</p>
+
+
+
+<h2 id="Start">Iniciar/reiniciar sua atividade</h2>
+
+<p>Quando sua atividade voltar ao primeiro plano do estado interrompido, ela recebe uma chamada para
+{@link android.app.Activity#onRestart()}. O sistema também chama o método {@link
+android.app.Activity#onStart()}, que acontece sempre que a atividade se tornar visível
+(ao ser reiniciada ou criada pela primeira vez). No entanto, o método {@link
+android.app.Activity#onRestart()} é chamado apenas quando a atividade é reiniciada do
+estado interrompido. Portanto, é possível usá-la para executar trabalhos de restauração especiais necessários apenas se
+a atividade tiver sido interrompida, mas não destruída.</p>
+
+<p>Dificilmente um aplicativo precisará usar {@link android.app.Activity#onRestart()} para restaurar
+o estado da atividade. Portanto, não há diretrizes para este método que se apliquem à
+população geral de aplicativos. Contudo, como espera-se que o método {@link android.app.Activity#onStop()}
+limpe todos os recursos da atividade, será necessário instanciá-los
+quando a atividade for reiniciada. Ainda assim, será necessário instanciá-los quando a atividade for criada
+pela primeira vez (quando não houver instâncias existentes da atividade). Por esse motivo, recomenda-se
+utilizar o método de retorno de chamada {@link android.app.Activity#onStart()} como contrapartida
+ao método {@link android.app.Activity#onStop()}, porque o sistema chama {@link
+android.app.Activity#onStart()} quando cria sua atividade e quando reinicia a
+atividade do estado interrompido.</p>
+
+<p>Por exemplo, como o usuário pode ter ficado longe do aplicativo por um longo período
+, o método {@link android.app.Activity#onStart()} é uma boa forma de confirmar se
+os recursos do sistema exigidos estão habilitados:</p>
+
+<pre>
+&#64;Override
+protected void onStart() {
+    super.onStart();  // Always call the superclass method first
+    
+    // The activity is either being restarted or started for the first time
+    // so this is where we should make sure that GPS is enabled
+    LocationManager locationManager = 
+            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+    boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+    
+    if (!gpsEnabled) {
+        // Create a dialog here that requests the user to enable GPS, and use an intent
+        // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
+        // to take the user to the Settings screen to enable GPS when they click "OK"
+    }
+}
+
+&#64;Override
+protected void onRestart() {
+    super.onRestart();  // Always call the superclass method first
+    
+    // Activity being restarted from stopped state    
+}
+</pre>
+
+
+
+
+<p>Quando o sistema destrói a atividade, ele chama o método {@link android.app.Activity#onDestroy()}
+para seu {@link android.app.Activity}. Como talvez a maior parte de
+seus recursos tenha sido liberada com {@link android.app.Activity#onStop()}, no momento em que você receber a chamada para {@link
+android.app.Activity#onDestroy()}, não haverá muito a ser feito pelos aplicativos. Esse método é sua
+última chance de limpar os recursos que levariam a vazamento de memória. Portanto, certifique-se de que
+outros threads sejam destruídos e outras ações de longa execução como o rastreamento de métodos também estejam
+interrompidas.</p>
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/data-storage/databases.jd b/docs/html-intl/intl/pt-br/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..37d0d43
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/data-storage/databases.jd
@@ -0,0 +1,317 @@
+page.title=Salvando dados em bancos de dados do SQL
+page.tags=armazenamento de dados
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Esta lição ensina a</h2>
+<ol>
+  <li><a href="#DefineContract">Definir um esquema e contrato</a></li>
+  <li><a href="#DbHelper">Criar um banco de dados usando de um SQL Helper</a></li>
+  <li><a href="#WriteDbRow">Colocar informações no banco de dados</a></li>
+  <li><a href="#ReadDbRow">Ler informações de um banco de dados</a></li>
+  <li><a href="#DeleteDbRow">Excluir informações de um banco de dados</a></li>
+  <li><a href="#UpdateDbRow">Atualizar um banco de dados</a></li>
+</ol>
+
+<h2>Leia também</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">Usando bancos de dados</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+  <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>Salvar dados em um banco de dados é ideal para dados que se repetem ou estruturados,
+como informações de contato. Esta lição assume que você esteja
+familiarizado com bancos de dados do SQL em gera, e o ajuda a começar a trabalhar com bancos de dados
+do SQLite no Android. As APIs necessárias para usar um banco de dados
+no Android estão disponíveis no pacote {@link android.database.sqlite}.</p>
+
+
+<h2 id="DefineContract">Definir um esquema e contrato</h2>
+
+<p>Um dos princípios mais importantes de bancos de dados do SQL é o esquema: uma declaração
+formal de como o banco de dados é organizado. O esquema é refletido nas declarações SQL
+usadas na criação do banco de dados.  É aconselhável
+criar uma classe de acompanhamento, conhecida como classe de <em>contrato</em>, que especifica claramente
+o layout do esquema de forma sistemática e autodocumentada.</p>
+
+<p>Uma classe de contrato é o contêiner das constantes que definem nomes para URIs,
+tabelas e colunas. A classe de contrato permite usar as mesmas constantes
+em outras classes no mesmo pacote. Permite que você altere o nome da
+coluna em um local e que a mudança se propague pelos seus códigos.</p>
+
+<p>Uma boa forma de organizar uma classe de contrato é colocar definições que sejam
+globais para todo o banco de dados no nível raiz da classe. Crie uma classe
+interna para cada tabela que enumera suas colunas.</p>
+
+<p class="note"><strong>Observação:</strong> implementando a interface {@link
+android.provider.BaseColumns}, sua classe interior pode herdar um campo-chave
+primário chamado {@code _ID} que algumas classes do Android, como adaptadores de cursor, esperam
+ que você tenha.  Não é uma obrigatório, mas pode ajudar para um trabalho mais harmonioso com o banco de dados
+no framework do Android.</p>
+
+<p>Por exemplo, este trecho define o nome da tabela e das colunas para uma
+única tabela:</p>
+
+
+<pre>
+public final class FeedReaderContract {
+    // To prevent someone from accidentally instantiating the contract class,
+    // give it an empty constructor.
+    public FeedReaderContract() {}
+
+    /* Inner class that defines the table contents */
+    public static abstract class FeedEntry implements BaseColumns {
+        public static final String TABLE_NAME = &quot;entry&quot;;
+        public static final String COLUMN_NAME_ENTRY_ID = &quot;entryid&quot;;
+        public static final String COLUMN_NAME_TITLE = &quot;title&quot;;
+        public static final String COLUMN_NAME_SUBTITLE = &quot;subtitle&quot;;
+        ...
+    }
+}
+</pre>
+
+
+
+<h2 id="DbHelper">Criar um banco de dados usando de um SQL Helper</h2>
+
+<p>Uma vez definidos o visual dos bancos de dados, implemente métodos
+que criam e cuidam do banco de dados e das tabelas.  Aqui estão algumas declarações
+comuns para criar e exclui a tabela:</P>
+
+<pre>
+private static final String TEXT_TYPE = &quot; TEXT&quot;;
+private static final String COMMA_SEP = &quot;,&quot;;
+private static final String SQL_CREATE_ENTRIES =
+    &quot;CREATE TABLE &quot; + FeedEntry.TABLE_NAME + &quot; (&quot; +
+    FeedEntry._ID + &quot; INTEGER PRIMARY KEY,&quot; +
+    FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+    FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+    ... // Any other options for the CREATE command
+    &quot; )&quot;;
+
+private static final String SQL_DELETE_ENTRIES =
+    &quot;DROP TABLE IF EXISTS &quot; + FeedEntry.TABLE_NAME;
+</pre>
+
+<p>Da mesma forma você salva arquivos no <a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">armazenamento
+interno</a> do dispositivo, o Android armazena seu banco de dados no espaço privado do disco associado
+ao aplicativo. Seus dados estão protegidos porque, por padrão, essa área não
+pode ser acessada por outros aplicativos.</p>
+
+<p>Um conjunto de APIs está disponível na classe {@link
+android.database.sqlite.SQLiteOpenHelper}. 
+Ao usar esta classe para obter referências para seu banco de dados, o sistema
+realiza operações
+de possível longa execução para criar e atualizar o banco de dados apenas quando
+necessário e <em>não durante a inicialização do aplicativo</em>. Basta chamar 
+{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} ou 
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}.</p>
+
+<p class="note"><strong>Observação:</strong> devido à possibilidade de serem de longa execução,
+certifique-se que chamar {@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} ou {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} em um thread de segundo plano,
+como {@link android.os.AsyncTask} ou {@link android.app.IntentService}.</p>
+
+<p>Para usar {@link android.database.sqlite.SQLiteOpenHelper}, crie uma subclasse que
+substitua os métodos de retorno de chamada {@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}, {@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} e {@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()}. Também é possível
+implementar {@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()},
+mas não é obrigatório.</p>
+
+<p>Por exemplo, esta é uma implementação de {@link
+android.database.sqlite.SQLiteOpenHelper} que utiliza alguns dos comandos exibidos abaixo:</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+    // If you change the database schema, you must increment the database version.
+    public static final int DATABASE_VERSION = 1;
+    public static final String DATABASE_NAME = &quot;FeedReader.db&quot;;
+
+    public FeedReaderDbHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+    public void onCreate(SQLiteDatabase db) {
+        db.execSQL(SQL_CREATE_ENTRIES);
+    }
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        // This database is only a cache for online data, so its upgrade policy is
+        // to simply to discard the data and start over
+        db.execSQL(SQL_DELETE_ENTRIES);
+        onCreate(db);
+    }
+    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        onUpgrade(db, oldVersion, newVersion);
+    }
+}
+</pre>
+
+<p>Para acessar seu banco de dados, instancie sua subclasse de {@link
+android.database.sqlite.SQLiteOpenHelper}:</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">Colocar informações no banco de dados</h2>
+
+<p>Coloque dados no banco de dados transmitindo um objeto {@link android.content.ContentValues}
+ para o método {@link android.database.sqlite.SQLiteDatabase#insert insert()}.</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+         FeedEntry.TABLE_NAME,
+         FeedEntry.COLUMN_NAME_NULLABLE,
+         values);
+</pre>
+
+<p>Este primeiro argumento para {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+é apenas o nome da tabela. O segundo argumento fornece
+o nome de uma coluna em que o framework pode inserir NULL caso o
+{@link android.content.ContentValues} esteja vazio (se você definir como {@code "null"},
+o framework não inserirá uma linha quando não houver valores).</p>
+
+
+
+
+<h2 id="ReadDbRow">Ler informações de um banco de dados</h2>
+
+<p>Para ler de um banco de dados, utilize o método {@link android.database.sqlite.SQLiteDatabase#query query()}
+, transmitindo seus critérios de seleção e colunas desejadas.
+O método combina elementos de {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+ e {@link android.database.sqlite.SQLiteDatabase#update update()}, exceto que a lista da coluna
+define os dados que serão analisados e não os dados a serem inseridos. Os resultados da consulta
+são retornados em um objeto {@link android.database.Cursor}.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+    FeedEntry._ID,
+    FeedEntry.COLUMN_NAME_TITLE,
+    FeedEntry.COLUMN_NAME_UPDATED,
+    ...
+    };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+    FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+    FeedEntry.TABLE_NAME,  // The table to query
+    projection,                               // The columns to return
+    selection,                                // The columns for the WHERE clause
+    selectionArgs,                            // The values for the WHERE clause
+    null,                                     // don't group the rows
+    null,                                     // don't filter by row groups
+    sortOrder                                 // The sort order
+    );
+</pre>
+
+<p>Para ver uma linha no cursor, utilize um dos métodos de movimento {@link android.database.Cursor},
+que sempre deverão ser chamados antes de começar a ler valores. Geralmente, deve-se iniciar
+chamando {@link android.database.Cursor#moveToFirst}, que coloca a “posição leitura” na
+primeira entrada nos resultados. Para cada linha, você pode ler um valor de coluna chamando um dos métodos GET
+{@link android.database.Cursor}, como {@link android.database.Cursor#getString
+getString()} ou {@link android.database.Cursor#getLong getLong()}. Para cada um dos métodos GET,
+você deve transmitir a posição de índice da coluna desejada, que pode ser obtida chamando
+{@link android.database.Cursor#getColumnIndex getColumnIndex()} ou
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()}.
+Por exemplo:</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+    cursor.getColumnIndexOrThrow(FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">Excluir informações de um banco de dados</h2>
+
+<p>Para excluir linhas de uma tabela, forneça os critérios de seleção que as
+identifique. A API do banco de dados oferece um mecanismo para criar
+critérios de seleção que protegem contra injeção do SQL. O mecanismo divide a
+especificação da seleção em uma cláusula e argumentos de seleção. A
+cláusula define a coluna a se olhar e também permite combinar testes de
+coluna. Os argumentos são valores para testes comparativos que são dependentes dentro de uma cláusula.
+Como o resultado não é tratado da mesma forma que uma declaração SQL comum, ele fica
+imune à injeção de SQL.</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+// Specify arguments in placeholder order.
+String[] selectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, selection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">Atualizar um banco de dados</h2>
+
+<p>Quando precisar alterar um subconjunto dos valores de seu banco de dados, utilize o método {@link
+android.database.sqlite.SQLiteDatabase#update update()}.</p>
+
+<p>A atualização da tabela combina a sintaxe de valores do conteúdo de {@link
+android.database.sqlite.SQLiteDatabase#insert insert()} com a sintaxe {@code where} de
+{@link android.database.sqlite.SQLiteDatabase#delete delete()}.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+String[] selectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+    values,
+    selection,
+    selectionArgs);
+</pre>
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/data-storage/files.jd b/docs/html-intl/intl/pt-br/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..d071d39
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/data-storage/files.jd
@@ -0,0 +1,379 @@
+page.title=Salvando arquivos
+page.tags=armazenamento de dados
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Esta lição ensina a</h2>
+<ol>
+  <li><a href="#InternalVsExternalStorage">Escolher entre armazenamento interno e externo</a></li>
+  <li><a href="#GetWritePermission">Obter permissões para armazenamento externo</a></li>
+  <li><a href="#WriteInternalStorage">Salvar arquivos em armazenamento interno</a></li>
+  <li><a href="#WriteExternalStorage">Salvar arquivos em armazenamento externo</a></li>
+  <li><a href="#GetFreeSpace">Consultar espaço livre</a></li>
+  <li><a href="#DeleteFile">Excluir um arquivo</a></li>
+</ol>
+
+<h2>Leia também</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">Utilizando armazenamento
+interno</a></li>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">Utilizando armazenamento
+externo</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>O Android usa um sistema de arquivos
+parecido com sistemas de arquivos em disco de outras plataformas. Esta lição explica
+como trabalhar com o sistema de arquivos Android para ler e gravar arquivos com APIs {@link java.io.File}
+.</p>
+
+<p>Um objeto {@link java.io.File} é adequado para ler ou gravar grandes quantidades de dados em
+ordens crescente sem pular nenhum item. Por exemplo, é bom para arquivos de imagens ou
+qualquer troca executada por uma rede.</p>
+
+<p>Esta lição demonstra como executar tarefas básicas relacionadas a arquivos em seu aplicativo.
+Assume-se que você já esteja familiarizado com os fundamentos do sistema de arquivos Linux e com
+APIs de entrada/saída de arquivos padrão no {@link java.io}.</p>
+
+
+<h2 id="InternalVsExternalStorage">Escolher entre armazenamento interno e externo</h2>
+
+<p>Todos os dispositivos Android têm duas áreas de armazenamento de arquivos: armazenamento “interno” e “externo”.  Estes nomes
+têm origem no início do Android, quando a maior parte de seus dispositivos oferecia memória embutida não volátil
+(armazenamento interno), além de uma mídia de armazenamento removível, como micro cartões SD (armazenamento externo).
+Alguns dispositivos dividem o espaço de armazenamento permanente em partições “interna” e “externa”. Assim, mesmo
+sem uma mídia de armazenamento removível, sempre há dois espaços de armazenamento e
+o comportamento da API permanece inalterado independentemente da remoção do armazenamento externo.
+A lista a seguir resume as principais informações sobre cada tipo de espaço de armazenamento.</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>Armazenamento interno:</b></p>
+<ul>
+<li>Está sempre disponível.</li>
+<li>Por padrão, os arquivos salvos aqui podem apenas ser acessados pelo seu aplicativo.</li>
+<li>Quando o usuário desinstala o aplicativo, o sistema exclui todos os arquivos do aplicativo salvos no
+armazenamento interno.</li>
+</ul>
+<p>O armazenamento interno funciona melhor quando você deseja garantir que o usuário nem outros aplicativos
+tenham acesso aos seus arquivos.</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>Armazenamento externo:</b></p>
+<ul>
+<li>Não está sempre disponível porque o usuário pode montar o armazenamento externo, como um armazenamento USB,
+ e em alguns casos, removê-lo do dispositivo.</li>
+<li>É de leitura universal, ou seja,
+arquivos salvos aqui podem ser lidos em outros dispositivos.</li>
+<li>Quando o usuário desinstala o aplicativo, o sistema exclui todos os arquivos do aplicativo salvos aqui
+apenas se estiverem salvos no diretório de {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()}.</li>
+</ul>
+<p>O armazenamento externo é o melhor
+local para arquivos que não exigem acesso restrito e para os arquivos que você deseja compartilhar
+com outros aplicativos ou permitir que o usuário acesse através com um computador.</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>Dica:</strong> embora os aplicativos sejam instalados no armazenamento interno por
+padrão, é possível especificar o atributo <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> em seu manifesto para que o aplicativo
+seja instalado no armazenamento externo. Os usuários se beneficiam dessa opção quando o tamanho do APK é muito grande e
+ele dispõe de maior espaço em armazenamento externo do que interno. Para obter mais
+informações, consulte <a href="{@docRoot}guide/topics/data/install-location.html">Local de instalação do aplicativo</a>.</p>
+
+
+<h2 id="GetWritePermission">Obter permissões para armazenamento externo</h2>
+
+<p>Para gravar no armazenamento externo, você deve solicitar a
+permissão {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} em seu <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">arquivo de manifesto</a>:</p>
+
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+
+<div class="caution"><p><strong>Cuidado:</strong>
+atualmente, os aplicativos podem ler o armazenamento externo
+sem precisar de permissão especial. No entanto, isso será alterado em lançamentos futuros. Se seu aplicativo precisar
+ler o armazenamento externo (mas não gravar nele), será necessário declarar a permissão {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE}. Para garantir que o aplicativo continue
+a funcionar adequadamente, declare essa permissão agora antes que as mudanças entrem em vigor.</p>
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+<p>No entanto, se seu aplicativo usa a permissão {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
+, já existe uma permissão implícita para leitura do armazenamento externo.</p>
+</div>
+
+<p>Não é necessária permissão para salvar arquivos no armazenamento
+interno. Seu aplicativo sempre terá permissão para ler e
+gravar arquivos em seu diretório de armazenamento interno.</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">Salvar arquivos em armazenamento interno</h2>
+
+<p>Ao salvar um arquivo no armazenamento interno, você pode obter o diretório adequado como um
+{@link java.io.File} chamando um destes dois métodos:</p>
+
+<dl>
+  <dt>{@link android.content.Context#getFilesDir}</dt>
+  <dd>Retorna um {@link java.io.File} que representa um diretório interno para seu aplicativo.</dd>
+  <dt>{@link android.content.Context#getCacheDir}</dt>
+  <dd>Retorna um {@link java.io.File} que representa um diretório interno para os arquivos de cache temporários
+de seu aplicativo. Certifique-se de excluir cada arquivo assim que não
+for mais necessário e estabeleça um limite de tamanho razoável para a quantidade de memória usada em um determinado
+período de tempo, como 1MB. Se o sistema começar a ficar com pouco espaço de armazenamento, ele poderá excluir arquivos de cache
+sem avisar.</dd>
+</dl>
+
+<p>Para criar um novo arquivo em um desses diretórios, use o construtor {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE}, transmitindo o {@link java.io.File} fornecido por um
+dos métodos acima que especifica o diretório de armazenamento interno. Por exemplo:</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>Uma outra alternativa é chamar {@link
+android.content.Context#openFileOutput openFileOutput()} para obter um {@link java.io.FileOutputStream}
+que grave em um arquivo salvo no seu diretório interno. O exemplo a seguir
+mostra como gravar texto em um arquivo:</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+  outputStream.write(string.getBytes());
+  outputStream.close();
+} catch (Exception e) {
+  e.printStackTrace();
+}
+</pre>
+
+<p>Em alternativa, caso precise colocar arquivos em cache, use {@link
+java.io.File#createTempFile createTempFile()}. Por exemplo, o método a seguir extrai o
+nome do arquivo de {@link java.net.URL} e cria um arquivo com o mesmo nome
+no diretório de cache interno de seu aplicativo.</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+    File file;
+    try {
+        String fileName = Uri.parse(url).getLastPathSegment();
+        file = File.createTempFile(fileName, null, context.getCacheDir());
+    catch (IOException e) {
+        // Error while creating file
+    }
+    return file;
+}
+</pre>
+
+<p class="note"><strong>Observação:</strong>
+o diretório de armazenamento interno do seu aplicativo é especificado
+pelo nome do pacote do aplicativo em um local específico do sistema de arquivos Android.
+Teoricamente, outros aplicativos poderão ler seus arquivos internos se você definir
+o arquivo para modo leitura. No entanto, o outro aplicativo também precisaria saber o nome do pacote
+do seu aplicativo e os nomes dos arquivos. Outros aplicativos não podem navegar nos diretórios internos e não têm
+permissão para ler ou gravar a menos que os arquivos sejam explicitamente definidos para permitir tais ações. Portanto,
+desde que você utilize {@link android.content.Context#MODE_PRIVATE} para seus arquivos no armazenamento interno,
+eles não ficarão acessíveis a outros aplicativos.</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">Salvar arquivos em armazenamento externo</h2>
+
+<p>Como o armazenamento externo pode ficar indisponível, como se o usuário ativar o
+armazenamento no PC ou remover o cartão SD que fornece armazenamento externo,
+você deve sempre verificar se o volume está disponível antes de acessá-lo. Consulte o estado de armazenamento
+externo chamando {@link android.os.Environment#getExternalStorageState}. Se o estado
+retornado for igual a {@link android.os.Environment#MEDIA_MOUNTED}, os arquivos poderão ser lidos
+e gravados. Os métodos a seguir ajudam a determinar a disponibilidade
+de armazenamento:</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state)) {
+        return true;
+    }
+    return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state) ||
+        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+        return true;
+    }
+    return false;
+}
+</pre>
+
+<p>Embora o usuário e outros aplicativos possam modificar o armazenamento externo, há duas
+categorias de arquivos que deverão ser salvas aqui:</p>
+
+<dl>
+  <dt>Arquivos públicos</dt>
+  <dd>Arquivos que
+precisam estar livremente disponíveis ao usuário e outros aplicativos. Ao desinstalar o aplicativo,
+o usuário deve continuar a ter acesso a esses arquivos.
+  <p>Por exemplo, fotos capturadas pelo aplicativo ou outros arquivos baixados.</p>
+  </dd>
+  <dt>Arquivos privados</dt>
+  <dd>Arquivos que pertencem ao aplicativo e que devem ser excluídos na desinstalação
+. Embora esses arquivos estejam teoricamente à disposição do usuário e de outros aplicativo por estarem
+no armazenamento externo, na verdade são arquivos que não têm valor para o usuário
+fora do aplicativo. Ao desinstalar o aplicativo, o sistema exclui
+todos os arquivos no diretório privado externo do aplicativo. 
+  <p>Por exemplo, recursos adicionais baixados através do aplicativo ou arquivos de mídia temporários.</p>
+  </dd>
+</dl>
+
+<p>Para salvar arquivos públicos no armazenamento externo, use o método 
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} para obter um {@link java.io.File} que representa
+o diretório correto no armazenamento externo. O método exige um argumento que especifica
+o tipo de arquivo que se deseja salvar para que possa ser logicamente organizado com outros arquivos públicos
+, como {@link android.os.Environment#DIRECTORY_MUSIC} ou {@link
+android.os.Environment#DIRECTORY_PICTURES}. Por exemplo:</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+    // Get the directory for the user's public pictures directory. 
+    File file = new File(Environment.getExternalStoragePublicDirectory(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+
+<p>Se você deseja salvar arquivos privados do aplicativo, obtenha o
+diretório correto chamando {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} e informe um nome indicando
+o tipo de diretório desejado. Cada diretório criado dessa forma é adicionado ao diretório principal
+que contém todos os arquivos do armazenamento externo do aplicativo que o sistema exclui quando o
+usuário faz a desinstalação.</p>
+
+<p>Por exemplo, este é um método que pode ser usado para criar um diretório para um álbum de fotos individual:</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+    // Get the directory for the app's private pictures directory. 
+    File file = new File(context.getExternalFilesDir(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+<p>Se nenhum dos nomes de subdiretórios predefinidos se adequa aos arquivos, chame {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} e transmita {@code null}. Isso
+retorna o diretório raiz para o diretório privado do aplicativo no armazenamento externo.</p>
+
+<p>Lembre-se de que {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+cria um diretório dentro de um diretório que é excluído quando o usuário desinstala o aplicativo.
+Se os arquivos salvos precisarem estar disponíveis após a desinstalação do
+aplicativo, como
+quando seu aplicativo é uma câmera e o usuário deseja manter as fotos, use {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}.</p>
+
+
+<p>Independentemente do uso de {@link
+android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} para arquivos compartilhados ou
+{@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} para arquivos privados do aplicativo, é importante usar
+os nomes de diretório fornecidos pelas constantes de API, como
+{@link android.os.Environment#DIRECTORY_PICTURES}. Esses nomes de diretório garantem
+que os arquivos sejam tratados de forma adequada pelo sistema. Por exemplo, arquivos salvos em {@link
+android.os.Environment#DIRECTORY_RINGTONES} são categorizados pelo scanner de mídia dos sistema como toques
+e não como música.</p>
+
+
+
+
+<h2 id="GetFreeSpace">Consultar espaço livre</h2>
+
+<p>Se você já souber antecipadamente a quantidade de dados a ser salvo, descubra se
+há espaço disponível suficiente sem fazer com que um {@link
+java.io.IOException} chame {@link java.io.File#getFreeSpace} ou {@link
+java.io.File#getTotalSpace}. Esses métodos informam o espaço disponível atual e o
+espaço total no volume de armazenamento. Essa informação ajuda a evitar o preenchimento
+do volume de armazenamento além de um determinado limite.</p>
+
+<p>No entanto, o sistema não garante que será possível gravar a quantidade de bytes indicada
+por {@link java.io.File#getFreeSpace}.  Se o número retornado tiver
+alguns MB além do tamanho dos dados que deseja salvar ou se o sistema de arquivos
+estiver abaixo de 90% cheio, é possível continuar com segurança.
+Caso contrário, não grave no armazenamento.</p>
+
+<p class="note"><strong>Observação:</strong> não é obrigatório verificar a quantidade de espaço disponível
+antes de salvar o arquivo. É possível tentar gravar o arquivo diretamente e depois
+obter um {@link java.io.IOException}, se houver. Essa ação é recomendada
+caso você não saiba exatamente quanto espaço será necessário. Por exemplo, se
+você alterar a codificação do arquivo antes de salvá-lo convertendo uma imagem PNG em
+JPEG, não é possível saber o tamanho do arquivo antecipadamente.</p>
+
+
+
+
+<h2 id="DeleteFile">Excluir um arquivo</h2>
+
+<p>Sempre exclua arquivos que não sejam mais necessários. A forma mais simples de apagar um
+arquivo é fazer com que o arquivo de referência aberto chame {@link java.io.File#delete} por conta própria.</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>Se o arquivo estiver salvo em armazenamento interno, é possível solicitar ao {@link android.content.Context} para localizar e
+excluir o arquivo chamando {@link android.content.Context#deleteFile deleteFile()}:</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>Observação:</strong> quando o usuário desinstala o aplicativo, o sistema Android também
+exclui:</p> 
+<ul>
+<li>Todos os arquivos salvos no armazenamento interno</li>
+<li>Todos os arquivos salvos no armazenamento externo usando {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
+</ul>
+<p>No entanto, recomenda-se exclui manualmente todos os arquivos em cache criados com
+{@link android.content.Context#getCacheDir()} regularmente e
+outros arquivos que não sejam mais necessários.</p>
+</div>
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/data-storage/index.jd b/docs/html-intl/intl/pt-br/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..2b88ce1c
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/data-storage/index.jd
@@ -0,0 +1,57 @@
+page.title=Salvando dados
+page.tags=armazenamento de dados,arquivos,sql,basededados,preferências
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dependências e pré-requisitos</h2>
+<ul>
+  <li>Android 1.6 (API Nível 4) ou superior</li>
+  <li>Familiaridade com coleções de valores-chave do Map</li>
+  <li>Familiaridade com API de E/S de arquivos Java</li>
+  <li>Familiaridade com bancos de dados do SQL</li>
+</ul>
+
+<h2>Leia também</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html">Opções de armazenamento</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>A maioria dos aplicativos Android precisa salvar dados, mesmo que seja apenas para salvar informações sobre o estado do aplicativo
+durante {@link android.app.Activity#onPause onPause()} para que o progresso do usuário não seja perdido. A maior parte
+dos aplicativos não triviais também precisa salvar configurações do usuário e alguns aplicativos precisam gerenciar grandes
+quantidades de informação em arquivos e bancos de dados. Esta aula apresenta as
+principais opções de armazenamento de dados no Android, incluindo:</p>
+
+<ul>
+    <li>Como salvar pares de valores-chave de tipos de dados simples em um arquivo de preferências
+compartilhadas</li>
+    <li>Como salvar arquivos arbitrários no sistema de arquivos do Android</li>
+    <li>Como usar bancos de dados gerenciadas pelo SQLite</li>
+</ul>
+
+
+<h2>Lições</h2>
+
+<dl>
+  <dt><b><a href="shared-preferences.html">Salvando conjuntos de valores-chave</a></b></dt>
+    <dd>Aprenda a como usar um arquivo de preferências compartilhadas para armazenar pequenas quantidades de informação em pares de
+valores-chave.</dd>
+
+  <dt><b><a href="files.html">Salvando arquivos</a></b></dt>
+    <dd>Aprenda a como salvar um arquivo básico, como para armazenar longas sequências de dados que
+        são geralmente lidas em ordem.</dd>
+
+ <dt><b><a href="databases.html">Salvando dados em bancos de dados do SQL</a></b></dt>
+   <dd>Aprenda a usar o banco de dados do SQLite para ler e gravar dados estruturados.</dd>
+
+</dl>
diff --git a/docs/html-intl/intl/pt-br/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/pt-br/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..0c84487
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,120 @@
+page.title=Salvando conjuntos de valor-chave
+page.tags=armazenamento de dados
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Esta lição ensina a</h2>
+<ol>
+  <li><a href="#GetSharedPreferences">Obter um identificador para preferências compartilhadas</a></li>
+  <li><a href="#WriteSharedPreference">Gravar em preferências compartilhadas</a></li>
+  <li><a href="#ReadSharedPreference">Ler de preferências compartilhadas</a></li>
+</ol>
+
+<h2>Leia também</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">Usando preferências compartilhadas</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>Caso você tenha uma coleção relativamente pequena de valores-chave para salvar,
+use as APIs {@link android.content.SharedPreferences}.
+Um objeto {@link android.content.SharedPreferences} indica um arquivo que contém
+pares de valores-chave e fornece métodos simples para ler e gravar. Cada arquivo
+{@link android.content.SharedPreferences} é
+gerenciado pelo framework e pode ser privado ou compartilhado.</p>
+
+<p>Essa lição mostra como usar as APIs {@link android.content.SharedPreferences} para armazenar e
+recuperar valores simples.</p>
+
+<p class="note"><strong>Observação:</strong> as APIs {@link android.content.SharedPreferences} são
+usadas apenas para leitura e gravação de pares de valores-chave e não devem ser confundidas com as APIs
+{@link android.preference.Preference}, que ajudam a criar uma interface do usuário
+para as configurações do seu aplicativo (embora usem {@link android.content.SharedPreferences} como
+implementação para salvar as configurações de aplicativo). Para obter mais informação sobre uso de APIs {@link
+android.preference.Preference}, consulte a guia <a href="{@docRoot}guide/topics/ui/settings.html">Configurações</a>.</p>
+
+<h2 id="GetSharedPreferences">Obter um identificador para preferências compartilhadas</h2>
+
+<p>É possível criar um novo arquivo de preferência compartilhada ou acessar um existente
+chamando um destes dois métodos:</p>
+<ul>
+  <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} &mdash; Use este método se precisar identificar vários arquivos de preferência compartilhada
+por nome, que devem ser especificados com o primeiro parâmetro. É possível chamá-lo por qualquer
+{@link android.content.Context} em seu aplicativo.</li>
+  <li>{@link android.app.Activity#getPreferences(int) getPreferences()} &mdash; Use este método por um
+{@link android.app.Activity} se precisar
+usar apenas um arquivo de preferência compartilhada para a atividade. Como ele retorna um arquivo de preferência compartilhada
+padrão que pertence à atividade, não é necessário fornecer um nome.</li>
+</ul>
+
+<p>Por exemplo, o código a seguir é executado dentro de um {@link android.app.Fragment}.
+Ele acessa o arquivo de preferências compartilhadas que é
+identificado pela cadeia de caracteres de recursos {@code R.string.preference_file_key} e o abre usando
+o modo privado para que o arquivo possa ser acessado apenas pelo seu aplicativo.</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>Ao nomear seus arquivos de preferência compartilhada, você deve usar um nome que seja identificável exclusivamente
+para o aplicativo, como {@code "com.example.myapp.PREFERENCE_FILE_KEY"}</p>
+
+<p>Em alternativa, caso precise apenas de um arquivo de preferência compartilhada para sua atividade, use o método
+{@link android.app.Activity#getPreferences(int) getPreferences()}:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>Cuidado:</strong> se você criar um arquivo de preferência compartilhada
+com {@link android.content.Context#MODE_WORLD_READABLE} ou {@link
+android.content.Context#MODE_WORLD_WRITEABLE}, qualquer outro aplicativo que conhecer o identificador de arquivo
+poderá acessar seus dados.</p>
+
+
+<h2 id="WriteSharedPreference">Gravar em preferências compartilhadas</h2>
+
+<p>Para gravar em um arquivo de preferência compartilhada, crie um {@link
+android.content.SharedPreferences.Editor} chamando {@link
+android.content.SharedPreferences#edit} em seu {@link android.content.SharedPreferences}.</p>
+
+<p>Transmita as chaves e os valores que deseja gravar com métodos como {@link
+android.content.SharedPreferences.Editor#putInt putInt()} e {@link
+android.content.SharedPreferences.Editor#putString putString()}. Chame {@link
+android.content.SharedPreferences.Editor#commit} para salvar as alterações. Por exemplo:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">Ler de preferências compartilhadas</h2>
+
+<p>Para recuperar valores de um arquivo de preferência compartilhada, chame métodos como {@link
+android.content.SharedPreferences#getInt getInt()} e {@link
+android.content.SharedPreferences#getString getString()}, fornecendo a chave para o valor
+desejado e opcionalmente um valor padrão para retornar caso a chave não esteja
+presente. Por exemplo:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
+</pre>
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd b/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd
new file mode 100644
index 0000000..73f0b84
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd
@@ -0,0 +1,236 @@
+page.title=Permitindo que outros aplicativos iniciem sua atividade
+page.tags=intenções
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>Esta lição ensina a</h2>
+<ol>
+  <li><a href="#AddIntentFilter">Adicionar um filtro de intenções</a></li>
+  <li><a href="#HandleIntent">Responder à intenção em sua atividade</a></li>
+  <li><a href="#ReturnResult">Retornar um resultado</a></li>
+</ol>
+
+<h2>Leia também</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Compartilhando dados simples</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">Compartilhando arquivos</a>
+</ul>
+  </div>
+</div>
+
+<p>As duas lições anteriores enfatizaram um aspecto: iniciar a atividade de outro aplicativo pelo
+seu aplicativo. Mas se seu aplicativo puder executar uma ação que pode ser útil para outro aplicativo,
+ele precisa estar preparado para responder às solicitações de ação de outros aplicativos. Por exemplo, se
+construir um aplicativo social que compartilhe mensagens ou fotos com os amigos do usuário, é interessante
+que ele possa responder à intenção {@link android.content.Intent#ACTION_SEND} para que os usuários consigam iniciar uma
+ação de “compartilhar” por outro aplicativo e iniciar seu aplicativo para executar a ação.</p>
+
+<p>Para permitir que outros aplicativos iniciem sua atividade, adicione um elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a>
+em seu arquivo de manifesto para o elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> correspondente.</p>
+
+<p>Quando seu aplicativo é instalado em um dispositivo, o sistema identifica seu filtro de
+intenções e adiciona a informação a um catálogo interno de intenções suportado por todos os aplicativos instalados.
+Quando um aplicativo chama {@link android.app.Activity#startActivity
+startActivity()} ou {@link android.app.Activity#startActivityForResult startActivityForResult()},
+com uma intenção implícita, o sistema encontra qual atividade (ou atividades) pode responder à
+intenção.</p>
+
+
+
+<h2 id="AddIntentFilter">Adicionar um filtro de intenções</h2>
+
+<p>Para definir adequadamente a quais intenções sua atividade responderá, cada filtro de intenções adicionado
+deverá ser o mais específico possível em termos de tipo de ação e dados aceitos pela
+atividade.</p>
+
+<p>O sistema pode enviar uma determinada {@link android.content.Intent} para uma atividade se ela tiver
+um filtro de intenções que atenda aos seguintes critérios do objeto {@link android.content.Intent}:</p>
+
+<dl>
+  <dt>Ação</dt>
+    <dd>Uma cadeia de caracteres que dá nome a ação a ser executada. Geralmente, um dos valores definidos para a plataforma
+como {@link android.content.Intent#ACTION_SEND} ou {@link android.content.Intent#ACTION_VIEW}.
+    <p>Especifique-o em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code &lt;action&gt;}</a>.
+O valor especificado neste elemento deve ser o nome completo da cadeia de caracteres para a ação e não a
+API constante (veja exemplos abaixo).</p></dd>
+
+  <dt>Dados</dt>
+    <dd>A descrição dos dados associados à intenção.
+    <p>Especifique-a em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code &lt;data&gt;}</a>. Através de um
+ou mais atributos neste elemento, você pode especificar apenas o tipo MIME, apenas um prefixo de URI,
+apenas um esquema de URI ou uma combinação destes e outros elementos que indicam o tipo de dados
+aceito.</p>
+    <p class="note"><strong>Observação:</strong> se não precisar especificar os dados
+{@link android.net.Uri} (como quando sua atividade responde a outros tipos de dados “extra”, em vez
+do URI), especifique apenas o atributo {@code android:mimeType} para declarar o tipo de
+dado que sua atividade trata, como {@code text/plain} ou {@code image/jpeg}.</p>
+</dd>
+  <dt>Categoria</dt>
+    <dd>Oferece uma outra forma de caracterizar a atividade que trata a intenção, geralmente relacionada
+ao gesto do usuário ou localização onde foi iniciada. Há diferentes categorias
+compatíveis com o sistema, mas a maioria raramente é utilizada. No entanto, todas as intenções implícitas são definidas com
+{@link android.content.Intent#CATEGORY_DEFAULT} por padrão.
+    <p>Especifique-a em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code &lt;category&gt;}</a>
+.</p></dd>
+</dl>
+
+<p>Em seu filtro de intenções, declare quais critérios serão aceitos por sua atividade
+informando cada um deles com elementos XML correspondentes aninhados no elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a>
+.</p>
+
+<p>Este é um exemplo de atividade com filtro de intenções que responde à intenção {@link
+android.content.Intent#ACTION_SEND} quando o tipo de dado é texto ou imagem:</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="text/plain"/>
+        &lt;data android:mimeType="image/*"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p>Cada intenção em entrada especifica apenas uma ação e um tipo de dado, mas pode-se declarar
+múltiplas instâncias dos elementos <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a> e <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+&lt;data&gt;}</a> em cada
+<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a>.</p>
+
+<p>Se dois pares de ação e dados fores mutuamente exclusivos em
+seus comportamentos, crie filtros de intenções separados para especificar quais ações são aceitáveis
+quando pareadas com qual tipo de dado.</p>
+
+<p>Imagine que sua atividade responda à ambos, texto e imagem, para intenções {@link
+android.content.Intent#ACTION_SEND} e {@link
+android.content.Intent#ACTION_SENDTO}. Nesse caso, defina dois
+filtros de intenções separados para as duas ações porque uma intenção {@link
+android.content.Intent#ACTION_SENDTO} deve usar os dados {@link android.net.Uri} para especificar
+o endereço do destinatário utilizando o esquema do URI {@code send} ou {@code sendto}. Por exemplo:</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SENDTO"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:scheme="sms" />
+        &lt;data android:scheme="smsto" />
+    &lt;/intent-filter>
+    &lt;!-- filter for sending text or images; accepts SEND action and text or image data -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="image/*"/>
+        &lt;data android:mimeType="text/plain"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>Observação:</strong> para receber intenções implícitas, inclua a categoria
+{@link android.content.Intent#CATEGORY_DEFAULT} no filtro de intenções. Os métodos {@link
+android.app.Activity#startActivity startActivity()} e {@link
+android.app.Activity#startActivityForResult startActivityForResult()} tratam todas as intenções como se elas tivessem
+declarado a categoria {@link android.content.Intent#CATEGORY_DEFAULT}. Se você não a declarar
+em seu filtro de intenções, nenhuma intenção implícita resolverá sua atividade.</p>
+
+<p>Para obter mais informações sobre o envio e recebimento de intenções {@link android.content.Intent#ACTION_SEND}
+que realizam comportamentos de compartilhamento social, veja a lição <a href="{@docRoot}training/sharing/receive.html">Recebendo dados simples de outros aplicativos</a>.</p>
+
+
+<h2 id="HandleIntent">Responder à intenção em sua atividade</h2>
+
+<p>Para decidir qual ação tomar em sua atividade, leia a {@link
+android.content.Intent} utilizada para iniciá-la.</p>
+
+<p>Quando sua atividade iniciar, chame {@link android.app.Activity#getIntent()} para retomar a
+{@link android.content.Intent} que iniciou a atividade. Pode-se fazer isso a qualquer momento durante
+o ciclo de vida da atividade, mas recomenda-se fazê-lo no início do retorno de chamada como 
+{@link android.app.Activity#onCreate onCreate()} ou {@link android.app.Activity#onStart()}.</p>
+
+<p>Por exemplo:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    setContentView(R.layout.main);
+
+    // Get the intent that started this activity
+    Intent intent = getIntent();
+    Uri data = intent.getData();
+
+    // Figure out what to do based on the intent type
+    if (intent.getType().indexOf("image/") != -1) {
+        // Handle intents with image data ...
+    } else if (intent.getType().equals("text/plain")) {
+        // Handle intents with text ...
+    }
+}
+</pre>
+
+
+<h2 id="ReturnResult">Retornar um resultado</h2>
+
+<p>Se você deseja retornar um resultado para a atividade que invocou a sua, simplesmente chame {@link
+android.app.Activity#setResult(int,Intent) setResult()} para especificar o código do resultado e o resultado {@link
+android.content.Intent}. Quando sua operação estiver concluída e o usuário retornar à atividade
+original, chame {@link android.app.Activity#finish()} para fechar (e destruir) a atividade. Por
+exemplo:</p>
+
+<pre>
+// Create intent to deliver some kind of result data
+Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
+setResult(Activity.RESULT_OK, result);
+finish();
+</pre>
+
+<p>Sempre especifique um código de resultado com o resultado. Geralmente é {@link
+android.app.Activity#RESULT_OK} ou {@link android.app.Activity#RESULT_CANCELED}. Pode-se fornecer
+dados adicionais com uma {@link android.content.Intent}, caso seja necessário.</p>
+
+<p class="note"><strong>Observação:</strong> o resultado é definido como {@link
+android.app.Activity#RESULT_CANCELED} por padrão. Portanto, se o usuário pressionar o botão <em>Voltar</em>
+antes de concluir a ação e definir o resultado, a atividade original recebe
+o resultado “cancelado”.</p>
+
+<p>Se você apenas precisar retornar um número inteiro que indique uma das várias opções de resultado, defina
+o código de resultados para qualquer valor maior que 0. Se você usar o código do resultado para fornecer um número inteiro e não
+houver necessidade de incluir {@link android.content.Intent}, chame {@link
+android.app.Activity#setResult(int) setResult()} e transmita apenas um código de resultado. Por exemplo:</p>
+
+<pre>
+setResult(RESULT_COLOR_RED);
+finish();
+</pre>
+
+<p>Nesse caso, talvez existam apenas alguns poucos resultados possíveis. Portanto, o código do resultado é um número inteiro definido
+localmente (maior que 0). Isso funciona bem ao retornar um resultado de uma atividade
+em seu próprio aplicativo porque a atividade que recebe o resultado pode fazer uma referência à constante pública
+para determinar o valor do código de resultado.</p>
+
+<p class="note"><strong>Observação:</strong> não há necessidade de verificar se sua atividade foi iniciada
+com {@link
+android.app.Activity#startActivity startActivity()} ou {@link
+android.app.Activity#startActivityForResult startActivityForResult()}. Simplesmente chame {@link
+android.app.Activity#setResult(int,Intent) setResult()} se a intenção que iniciou sua atividade
+estiver esperando um resultado. Se a atividade inicial tivesse chamado {@link
+android.app.Activity#startActivityForResult startActivityForResult()}, o sistema o forneceria
+o resultado para {@link android.app.Activity#setResult(int,Intent) setResult()}. Caso contrário,
+o resultado é ignorado.</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/intents/index.jd b/docs/html-intl/intl/pt-br/training/basics/intents/index.jd
new file mode 100644
index 0000000..94108b8
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/intents/index.jd
@@ -0,0 +1,62 @@
+page.title=Interagindo com outros aplicativos
+page.tags=intenções,atividade
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dependências e pré-requisitos</h2>
+<ul>
+  <li>Conhecimento básico sobre o ciclo de vida da atividade (consulte <a href="{@docRoot}training/basics/activity-lifecycle/index.html">Como gerenciar o ciclo de vida
+da atividade</a>)</li>
+</ul>
+
+
+<h2>Leia também</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Compartilhando dados simples</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">Compartilhando arquivos</a>
+  <li><a href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">
+Integrando aplicativos e intenções (publicações do blog)</a></li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intenções e filtros de
+intenções</a>.</li>
+</ul>
+
+</div>
+</div>
+
+<p>Geralmente, um aplicativo Android tem várias <a href="{@docRoot}guide/components/activities.html">atividades</a>. Cada atividade exibe uma
+interface do usuário que permite ao usuário executar tarefas específicas (como visualizar um mapa ou tirar uma foto).
+Para levar o usuário de uma atividade para outra, o aplicativo deve usar um {@link
+android.content.Intent} para definir a “intenção” do aplicativo de fazer algo. Ao transmitir um
+{@link android.content.Intent} para o sistema com um método como {@link
+android.app.Activity#startActivity startActivity()}, o sistema usa {@link
+android.content.Intent} para identificar e iniciar o componente adequado do aplicativo. Usar intenções
+permite até mesmo que o aplicativo inicie uma atividade que esteja contida em outro aplicativo.</p>
+
+<p>Um {@link android.content.Intent} pode ser <em>explícito</em> para iniciar um componente específico
+(uma instância {@link android.app.Activity} específica) ou <em>implícito</em> para iniciar qualquer
+componente que possa responder à ação pretendida (como “capturar uma foto”).</p>
+
+<p>Esta aula mostra como utilizar um {@link android.content.Intent} para executar algumas interações
+básicas com outros aplicativos, como iniciar outro aplicativo, receber seus resultados, e
+disponibilizar seu aplicativo para responder às intenções de outros aplicativos.</p>
+
+<h2>Lições</h2>
+
+<dl>
+  <dt><b><a href="sending.html">Enviando o usuário para outro aplicativo</a></b></dt>
+  <dd>Mostra como criar intenções implícitas para iniciar outros aplicativos que podem executar uma
+ação.</dd>
+  <dt><b><a href="result.html">Obtendo resultados de uma atividade</a></b></dt>
+  <dd>Como iniciar outra atividade e receber seu resultado.</dd>
+  <dt><b><a href="filters.html">Permitindo que outros aplicativos iniciem sua atividade</a></b></dt>
+  <dd>Como fazer com que atividades em seu aplicativo se abram para serem usadas por outros aplicativos através de definição
+de filtros de intenções que declaram as intenções implícitas aceitas pelo aplicativo.</dd>
+</dl>
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/intents/result.jd b/docs/html-intl/intl/pt-br/training/basics/intents/result.jd
new file mode 100644
index 0000000..ecb5a47
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/intents/result.jd
@@ -0,0 +1,178 @@
+page.title=Obtendo resultados de uma atividade
+page.tags=intenções
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>Esta lição ensina a</h2>
+<ol>
+  <li><a href="#StartActivity">Iniciar a atividade</a></li>
+  <li><a href="#ReceiveResult">Receber o resultado</a></li>
+</ol>
+
+<h2>Leia também</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Compartilhando dados simples</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">Compartilhando arquivos</a>
+</ul>
+
+  </div>
+</div>
+
+<p>Iniciar outra atividade não precisa ser a única forma. Pode-se também iniciar outra atividade e
+receber um resultado de volta. Para receber um resultado, chame {@link android.app.Activity#startActivityForResult
+startActivityForResult()} (em vez de {@link android.app.Activity#startActivity
+startActivity()}).</p>
+
+<p>Por exemplo, o aplicativo pode iniciar um aplicativo de câmera e receber a foto capturada como resultado. Ou, 
+ao iniciar o aplicativo Pessoas para que o usuário selecione um
+contato, você receberá os detalhes do contato como resultado.</p>
+
+<p>Evidentemente a atividade que responde deve ser projetada para retornar um resultado. Quando isso acontecer, ela
+enviará o resultado para outro objeto {@link android.content.Intent}. A atividade recebe o resultado no
+retorno de chamada {@link android.app.Activity#onActivityResult onActivityResult()}.</p>
+
+<p class="note"><strong>Observação:</strong> pode-se usar intenções explícitas ou implícitas ao chamar
+{@link android.app.Activity#startActivityForResult startActivityForResult()}. Ao iniciar uma de
+suas próprias atividades que recebem um resultado, use uma intenção explícita para garantir que o
+resultado esperado será recebido.</p>
+
+
+<h2 id="StartActivity">Iniciar a atividade</h2>
+
+<p>Não há nada especial no objeto {@link android.content.Intent} utilizado para iniciar
+uma atividade para um resultado, mas é preciso transmitir um argumento de número inteiro adicional ao método {@link
+android.app.Activity#startActivityForResult startActivityForResult()}.</p>
+
+<p>O argumento de número inteiro é um “código de pedido” que identifica o pedido. Quando você recebe o
+resultado {@link android.content.Intent}, o retorno de chamada fornece o mesmo código de pedido para que o
+aplicativo possa identificar adequadamente o resultado e determinar como responder a ele.</p>
+
+<p>Essa é uma forma de iniciar uma atividade que permite ao usuário escolher um contato:</p>
+
+<pre>
+static final int PICK_CONTACT_REQUEST = 1;  // The request code
+...
+private void pickContact() {
+    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
+    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
+    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
+}
+</pre>
+
+
+<h2 id="ReceiveResult">Receber o resultado</h2>
+
+<p>Quando o usuário termina a atividade subsequente e retorna, o sistema chama o método
+{@link android.app.Activity#onActivityResult onActivityResult()} da atividade. Esse método inclui três
+argumentos:</p>
+
+<ul>
+  <li>O código de pedido passado para {@link
+android.app.Activity#startActivityForResult startActivityForResult()}.</li>
+  <li>Um código de resultado especificado pela segunda atividade. Se a operação for bem sucedida, será {@link
+android.app.Activity#RESULT_OK} ou {@link
+android.app.Activity#RESULT_CANCELED} se o usuário tiver desistido ou a operação tiver falhado por algum
+motivo.</li>
+  <li>Um {@link android.content.Intent} que transporta os dados do resultado.</li>
+</ul>
+
+<p>Esta é uma forma de responder ao resultado para a intenção “escolher um contato”:</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // The user picked a contact.
+            // The Intent's data Uri identifies which contact was selected.
+
+            // Do something with the contact here (bigger example below)
+        }
+    }
+}
+</pre>
+
+<p>Nesse exemplo, o resultado {@link android.content.Intent} retornado pelos
+aplicativos Contatos ou Pessoas do Android fornece um conteúdo {@link android.net.Uri} que identifica o
+contato escolhido pelo usuário.</p>
+
+<p>Para que o resultado seja tratado de forma adequada, é preciso saber o formato do resultado 
+{@link android.content.Intent}. Isso é fácil quando umas das suas atividades
+retorna o resultado. Os aplicativos incluídos na plataforma Android oferecem suas próprias APIs que
+podem ser usadas para dados de resultado específicos. Por exemplo, o aplicativo Pessoas (Contatos em algumas versões mais
+antigas) sempre retorna um resultado com URI de conteúdo que identifica o contato escolhido e o aplicativo
+Câmera retorna um {@link android.graphics.Bitmap} no {@code "data"} extra (consulte a lição
+<a href="{@docRoot}training/camera/index.html">Capturando fotografias</a>).</p>
+
+
+<h4>Bônus: Ler os dados do contato</h4>
+
+<p>O código acima que mostra como obter um resultado pelo aplicativo Pessoas não
+traz muitos detalhes sobre como exatamente ler os dados do resultado porque exige uma discussão mais avançada
+sobre <a href="{@docRoot}guide/topics/providers/content-providers.html">provedores
+de conteúdo</a>. No entanto, se você desejar saber mais, aqui estão alguns códigos que mostram como consultar os
+dados de resultado para obter o número de telefone do contato selecionado:</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request it is that we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // Get the URI that points to the selected contact
+            Uri contactUri = data.getData();
+            // We only need the NUMBER column, because there will be only one row in the result
+            String[] projection = {Phone.NUMBER};
+
+            // Perform the query on the contact to get the NUMBER column
+            // We don't need a selection or sort order (there's only one result for the given URI)
+            // CAUTION: The query() method should be called from a separate thread to avoid blocking
+            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
+            // Consider using {@link android.content.CursorLoader} to perform the query.
+            Cursor cursor = getContentResolver()
+                    .query(contactUri, projection, null, null, null);
+            cursor.moveToFirst();
+
+            // Retrieve the phone number from the NUMBER column
+            int column = cursor.getColumnIndex(Phone.NUMBER);
+            String number = cursor.getString(column);
+
+            // Do something with the phone number...
+        }
+    }
+}
+</pre>
+
+<p class="note"><strong>Observação:</strong> antes do Android 2.3 (API nível 9), executar uma consulta
+no {@link android.provider.ContactsContract.Contacts Contacts Provider} (como mostrado
+acima) exige que o aplicativo declare a permissão {@link
+android.Manifest.permission#READ_CONTACTS} (consulte <a href="{@docRoot}guide/topics/security/security.html">Segurança e permissões</a>). Contudo, 
+iniciar com Android 2.3, o aplicativo Contatos/Pessoas dá ao aplicativo permissão
+temporária para ler no Provedor de Contatos quando retornar um resultado. A permissão temporária
+aplica-se apenas a pedidos de contato específicos, portanto, não é possível consultar um contato diferente daquele
+especificado pelo {@link android.net.Uri} da intenção, a menos que você declare a permissão {@link
+android.Manifest.permission#READ_CONTACTS}.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/pt-br/training/basics/intents/sending.jd b/docs/html-intl/intl/pt-br/training/basics/intents/sending.jd
new file mode 100644
index 0000000..526374d
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/intents/sending.jd
@@ -0,0 +1,256 @@
+page.title=Enviando o usuário para outro aplicativo
+page.tags=intenções
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>Esta lição ensina a</h2>
+<ol>
+  <li><a href="#Build">Criar uma intenção implícita</a></li>
+  <li><a href="#Verify">Confirmar se há um aplicativo para receber a intenção</a></li>
+  <li><a href="#StartActivity">Iniciar uma atividade com uma intenção</a></li>
+  <li><a href="#AppChooser">Mostrar um selecionador de aplicativo</a></li>
+</ol>
+
+<h2>Leia também</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Compartilhando dados simples</a></li>
+</ul>
+
+  </div>
+</div>
+
+<p>Uma das características mais importantes do Android é a habilidade do aplicativo enviar o usuário para outro aplicativo
+com base em uma “ação” que gostaria de executar. Por exemplo, se
+o aplicativo tiver o endereço de um negócio que você gostaria de mostrar em um mapa, não é necessário criar
+uma atividade no aplicativo que mostre um mapa. Em vez disso, é possível criar uma solicitação para exibir o endereço
+usando {@link android.content.Intent}. O sistema Android inicia um aplicativo que possa mostrar
+o endereço em um mapa.</p>
+
+<p>Como explicado na primeira lição, <a href="{@docRoot}training/basics/firstapp/index.html">Criando
+seu primeiro aplicativo</a>, use intenções para navegar entre atividades no aplicativo. Geralmente
+isso é feito com <em>intenções explícitas</em>, que define o nome exato da classe do
+componente que deseja iniciar. No entanto, quando desejar que outro aplicativo execute uma ação, como
+“visualizar um mapa”, use uma <em>intenção implícita</em>.</p>
+
+<p>Esta lição mostra como criar uma intenção implícita para uma ação específica e como utilizá-la
+para iniciar uma atividade que executa a ação em outro aplicativo.</p>
+
+
+
+<h2 id="Build">Criar uma intenção implícita</h2>
+
+<p>Intenções implícitas não declaram o nome da classe do componente a iniciar, mas declaram uma
+ação a executar. A ação especifica o que deve ser feito, como <em>visualizar</em>,
+<em>editar</em>, <em>enviar</em> ou <em>obter</em> algo. Geralmente, as intenções incluem dados associados
+à ação, como o endereço que deseja visualizar ou a mensagem de email a ser enviada.
+Dependendo da intenção que deseja criar, os dados podem ser {@link android.net.Uri},
+um dos outros tipos de dados ou a intenção pode não precisar de dado algum.</p>
+
+<p>Se seu dados forem um {@link android.net.Uri}, há um simples construtor {@link
+android.content.Intent#Intent(String,Uri) Intent()} que pode ser usado para definir a ação e
+os dados.</p>
+
+<p>Este é um exemplo de como criar uma intenção para iniciar uma chamada telefônica usando os dados {@link
+android.net.Uri} para especificar o número de telefone:</p>
+
+<pre>
+Uri number = Uri.parse("tel:5551234");
+Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
+</pre>
+
+<p>Quando o aplicativo invoca a intenção chamando {@link android.app.Activity#startActivity
+startActivity()}, o aplicativo Telefone inicia uma chamada para o número especificado.</p>
+
+<p>Estas são algumas outras intenções e suas ações e pares de dados {@link android.net.Uri}
+:</p>
+
+<ul>
+  <li>Visualizar um mapa:
+<pre>
+// Map point based on address
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+// Or map point based on latitude/longitude
+// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+</pre>
+  </li>
+  <li>Visualizar uma página da Web:
+<pre>
+Uri webpage = Uri.parse("http://www.android.com");
+Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
+</pre>
+  </li>
+</ul>
+
+<p>Outros tipos de intenções implícitas exigem dados “extras” que fornecem diferentes tipos de dados,
+como uma cadeia de caracteres. É possível adicionar um ou mais dados extras utilizando vários métodos {@link
+android.content.Intent#putExtra(String,String) putExtra()}.</p>
+
+<p>Por padrão, o sistema determina o tipo MIME adequado que uma intenção exige com base nos dados
+{@link android.net.Uri} incluídos. Se você não incluir um {@link android.net.Uri} na
+intenção, sempre utilize {@link android.content.Intent#setType setType()} para especificar o tipo
+de dado associado à intenção. Definir o tipo de MIME especifica melhor que tipos de
+atividades receberão a intenção.</p>
+
+<p>Estas são mais algumas intenções que adicionam dados extra para especificar a intenção desejada:</p>
+
+<ul>
+  <li>Enviar um email com um anexo:
+<pre>
+Intent emailIntent = new Intent(Intent.ACTION_SEND);
+// The intent does not have a URI, so declare the "text/plain" MIME type
+emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
+emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
+emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
+emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
+emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
+// You can also attach multiple items by passing an ArrayList of Uris
+</pre>
+  </li>
+  <li>Criar um evento de calendário:
+<pre>
+Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
+Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
+Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
+calendarIntent.putExtra(Events.TITLE, "Ninja class");
+calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
+</pre>
+<p class="note"><strong>Observação:</strong> esta intenção para evento de calendário é suportada apenas com nível de API
+14 e superior.</p>
+  </li>
+</ul>
+
+<p class="note"><strong>Observação:</strong> é importante definir seu {@link
+android.content.Intent} para ser o mais específico possível. Por exemplo, se você deseja exibir uma imagem
+usando a intenção {@link android.content.Intent#ACTION_VIEW}, especifique o tipo de MIME do
+{@code image/*}. Isto evita que aplicativos que podem “exibir” outros tipos de dados (como um aplicativo de mapas) seja
+acionado pela intenção.</p>
+
+
+
+<h2 id="Verify">Confirmar se há um aplicativo para receber a intenção</h2>
+
+<p>Embora a plataforma do Android garanta que determinadas intenções sejam resolvidas com um dos
+ aplicativos embutidos (como aplicativo de Telefone, Email ou Agenda), sempre inclua uma
+etapa de confirmação antes de chamar uma intenção.</p>
+
+<p class="caution"><strong>Cuidado:</strong> se você invocar uma intenção e não houver aplicativo
+disponível no dispositivo para tratar a intenção, o aplicativo falhará.</p>
+
+<p>Para confirmar se há atividade disponível para responder à intenção, chame {@link
+android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} para obter uma lista
+de atividades que podem tratar a {@link android.content.Intent}. Se o {@link
+java.util.List} retornado não estiver vazio, a intenção poderá ser usada com segurança. Por exemplo:</p>
+
+<pre>
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
+        PackageManager.MATCH_DEFAULT_ONLY);
+boolean isIntentSafe = activities.size() > 0;
+</pre>
+
+<p>Se <code>isIntentSafe</code> for <code>true</code>, pelo menos um aplicativo responderá à
+intenção. Se for <code>false</code>, não há aplicativos disponíveis para responder à intenção.</p>
+
+<p class="note"><strong>Observação:</strong> faça essa verificação quando a atividade
+iniciar, caso seja necessário desabilitar a funcionalidade que usa a intenção antes do usuário tentar utilizá-
+la. Caso conheça um aplicativo específico que possa lidar com a intenção, forneça um link para que o
+usuário baixe o aplicativo (veja como <a href="{@docRoot}distribute/tools/promote/linking.html">vincular para seus produtos no Google
+Play</a>).</p>
+
+
+<h2 id="StartActivity">Iniciar uma atividade com uma intenção</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intents-choice.png" alt="" />
+  <p class="img-caption"><strong>Figura 1.</strong> Exemplo de diálogo de seleção que aparece
+quando mais de um aplicativo pode tratar uma intenção.</p>
+</div>
+
+<p>Quando tiver criado sua {@link android.content.Intent} e definido as informações extras, chame {@link
+android.app.Activity#startActivity startActivity()} para enviá-la ao sistema. Se o sistema
+identificar mais de uma atividade que pode tratar a intenção, um diálogo exibirá para que o usuário
+selecione qual aplicativo usar, como mostrado na figura 1. Se houver apenas uma atividade para tratar a
+intenção, o sistema a iniciará imediatamente.</p>
+
+<pre>
+startActivity(intent);
+</pre>
+
+<p>Este é um exemplo completo que mostra como criar uma intenção para exibir um mapa, confirmar se há
+um aplicativo para tratar a intenção e iniciar:</p>
+
+<pre>
+// Build the intent
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+
+// Verify it resolves
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List&lt;ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
+boolean isIntentSafe = activities.size() > 0;
+
+// Start an activity if it's safe
+if (isIntentSafe) {
+    startActivity(mapIntent);
+}
+</pre>
+
+
+
+<h2 id="AppChooser">Mostrar um selecionador de aplicativo</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="" />
+  <p class="img-caption"><strong>Figura 2.</strong> Um diálogo seletor.</p>
+</div>
+
+<p>Observe que ao iniciar uma atividade passando seu {@link android.content.Intent} para {@link
+android.app.Activity#startActivity startActivity()} e quando há mais de um aplicativo que responde à
+intenção, o usuário pode selecionar qual aplicativo usar por padrão (marcando uma caixa de seleção na parte inferior
+do diálogo, veja a figura 1). Isto é bom quando se executa uma ação para qual o usuário
+deseja usar o mesmo aplicativo todas as vezes, como quando abre uma página da Web (o usuário
+geralmente usa apenas um navegador) ou para tirar fotos (o usuário prefere uma câmera).</p>
+
+<p>Contudo, se a ação a ser executada puder ser tratada por vários aplicativos e o usuário
+preferir um aplicativo diferente a cada vez, como a ação “compartilhar” onde os usuários podem ter vários
+aplicativos para compartilhar um item, você deve exibir explicitamente um diálogo seletor
+conforme mostrado na figura 2. O diálogo seletor
+força o usuário a selecionar qual aplicativo usar para a ação todas as vezes (o usuário não pode selecionar
+um aplicativo padrão para a ação).</p>
+
+<p>Para exibir o seletor, crie uma {@link android.content.Intent} usando {@link
+android.content.Intent#createChooser createChooser()} e transmita para {@link
+android.app.Activity#startActivity startActivity()}. Por exemplo:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+...
+
+// Always use string resources for UI text.
+// This says something like "Share this photo with"
+String title = getResources().getString(R.string.chooser_title);
+// Create intent to show chooser
+Intent chooser = Intent.createChooser(intent, title);
+
+// Verify the intent will resolve to at least one activity
+if (intent.resolveActivity(getPackageManager()) != null) {
+    startActivity(chooser);
+}
+</pre>
+
+<p>Isso exibe um diálogo com uma lista de aplicativos que respondem à intenção transmitida ao método {@link
+android.content.Intent#createChooser createChooser()} e utiliza o texto fornecido como
+título do diálogo.</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/design/get-started/principles.jd b/docs/html-intl/intl/ru/design/get-started/principles.jd
new file mode 100644
index 0000000..7f4977c
--- /dev/null
+++ b/docs/html-intl/intl/ru/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Принципы проектирования Android
+@jd:body
+
+<p>Эти принципы проектирования были разработаны группой Android
+по взаимодействию приложений с пользователями с целью соблюдения интересов пользователей.
+Для создателей приложений под Android они лежат в
+основе более подробных рекомендаций по проектированию для конкретных
+типов устройств.</p>
+
+<p>
+Учитывайте эти принципы, используя собственный
+творческий потенциал и мышление разработчика. Впрочем, при наличии веских оснований допустимо некоторое отклонение от них.
+</p>
+
+<h2 id="enchant-me">Постарайтесь понравиться пользователю</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="delight-me">Вызовите у пользователя восхищение неожиданными решениями</h4>
+<p>Красивые экраны, тщательно продуманная анимация или своевременные звуковые сигналы создают у пользователя
+хорошее настроение. Утонченные эффекты вызывают у пользователя ощущение,
+что его возможности не ограничены.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="real-objects-more-fun">Реальные объекты доставляют больше удовольствия, чем кнопки и меню</h4>
+<p>Позвольте пользователю касаться объектов приложения и манипулировать ими. Это сокращает когнитивные усилия,
+необходимые для выполнения задачи, повышая эмоциональное удовлетворение.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-it-mine">Позвольте пользователю сделать интерфейс индивидуальным</h4>
+<p>Люди любят вносить в интерфейс что-то личное, чтобы чувствовать себя более комфортно и считать, что всё под контролем. Предоставьте
+продуманные и эстетичные настройки по умолчанию и предусмотрите дополнительные настройки, забавные, но не препятствующие
+выполнению основных задач.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="get-to-know-me">Изучите пользователя</h4>
+<p>Постепенно выясняйте предпочтения пользователя Вместо того, чтобы снова и снова заставлять его выбирать одно и то же,
+ сделайте непосредственно доступными ранее выбранные варианты.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2 id="simplify-my-life">Упростите жизнь пользователю</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="keep-it-brief">Будьте лаконичны</h4>
+<p>Используйте короткие фразы с простыми словами. Люди, скорее всего, пропустят длинные предложения.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="pictures-faster-than-words">Картинки воспринимаются быстрее чем слова</h4>
+<p>Используйте картинки в своих объяснениях. Они завладевают вниманием и действуют гораздо эффективнее
+слов.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="decide-for-me">Принимайте решения за пользователя, но оставляйте последнее слово за ним</h4>
+<p>Не задавайте пользователю лишних вопросов и действуйте наиболее разумным образом. Слишком широкий выбор вызывает чувство
+растерянности. Если существует вероятность, что ваш выбор не устроит пользователя, предоставьте ему возможность отмены.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="only-show-when-i-need-it">Показывайте только самое необходимое и в нужный момент времени</h4>
+<p>Люди не в состоянии справиться сразу с большим количеством информации. Разбивайте задачи и информацию на небольшие легко
+воспринимаемые части. Скройте несущественные на данный момент опции и обучайте пользователя по ходу дела.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="always-know-where-i-am">Пользователь всегда должен знать, в каком месте приложения он находится</h4>
+<p>Придайте пользователю уверенность, что он не заблудился. Сделайте так, чтобы экраны в вашем приложении отличались друг от друга, и
+используйте переходы, чтобы показать связь между экранами. Обеспечивайте обратную связь от выполняемых задач.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="never-lose-my-stuff">Ни в коем случае не теряйте данные пользователей</h4>
+<p>Сохраняйте данные, на создание которых пользователь потратил свое время, и обеспечьте ему доступ к этой информации из любого места. Запоминайте настройки
+ и предпочтения на телефонах, планшетах и компьютерах. Это позволит значительно упростить
+обновление приложения.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="looks-same-should-act-same">Внешне похожие элементы должны вести себя одинаково</h4>
+<p>Помогите людям распознать функциональные различия, сделав их визуально отличимыми.
+Избегайте ситуаций, в которых разные места приложения выглядят похоже, но работают по-разному при одних тех же исходных данных.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="interrupt-only-if-important">Прерывайте пользователя только в действительно важных ситуациях</h4>
+<p>Подобно хорошему секретарю, приложение должно оградить пользователя от несущественных мелочей. Люди не любят отвлекаться,
+и беспокоить их следует только в исключительно серьезных или не терпящих отлагательства ситуациях.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2 id="make-me-amazing">Постарайтесь приятно удивить пользователя</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="give-me-tricks">Предоставьте пользователю привычные приемы</h4>
+<p>У людей повышается самооценка, когда они могут разобраться в чем-либо самостоятельно. Сделайте ваше приложение простым в освоении
+за счет использования визуальных моделей и мышечной памяти из других приложений Android. Например, жест скольжения
+является хорошим навигационным приемом.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="its-not-my-fault">Пользователь ни в чем не виноват</h4>
+<p>Будьте корректны, подсказывая пользователю, как выйти из сложного положения. Никто не хочет чувствовать себя бестолковым, имея дело с вашим
+приложением. При возникновении проблем дайте четкие указания по восстановлению, но избавьте пользователя от технических деталей.
+В идеальном варианте приложение способно самостоятельно исправить ситуацию.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="sprinkle-encouragement">Не скупитесь на поддержку пользователя</h4>
+<p>Разбейте сложные задачи на более мелкие, легко выполнимые этапы. Обеспечьте обратную связь, 
+даже при незначительных операциях.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="do-heavy-lifting-for-me">Выполняйте за пользователя черную работу</h4>
+<p>Дайте новичкам возможность почувствовать себя экспертами, реализовав операции о которых они и не подозревали. Например,
+ярлыки, объединяющие несколько фотоэффектов, позволят превратить любительские фотографии в шедевры всего за
+несколько шагов.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-important-things-fast">Важные действия должны происходить быстро</h4>
+<p>Не все действия равноценны. Решите, какие функции вашего приложения являются самыми важными, и обеспечьте возможность 
+быстро найти и использовать их. Например, это может быть кнопка спуска затвора в фотокамере или кнопка паузы в музыкальном плеере.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/ru/design/material/index.jd b/docs/html-intl/intl/ru/design/material/index.jd
new file mode 100644
index 0000000..2cfd91e88
--- /dev/null
+++ b/docs/html-intl/intl/ru/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=Material Design
+page.tags=Material Design
+page.type=design
+page.image=design/material/images/MaterialLight.png
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+  <div>
+    <h3>Документация для разработчиков</h3>
+    <p>Создание приложений с помощью Material Design</p>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+    <h3>Видеоролик</h3>
+    <p>Введение в Material Design</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+    <h3>Видеоролик</h3>
+    <p>Бумага и чернила: материалы, имеющие первостепенное значение</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+    <h3>Видеоролик</h3>
+    <p>Material Design в приложениях для конференции Google I/O</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">Material Design представляет собой комплексную концепцию создания визуальных, движущихся и
+ интерактивных элементов для различных платформ и устройств. Теперь Android включает в себя поддержку
+приложений с элементами Material Design. Чтобы использовать элементы Material Design в своих приложениях под Android, руководствуйтесь инструкциями
+в <a href="http://www.google.com/design/spec">спецификации Material Design</a>, а также воспользуйтесь
+новыми компонентами и функциями, доступными в Android 5.0 (уровень API 21) и выше.</p>
+
+<p>Android предоставляет следующие элементы для построения приложений в соответствии с концепцией Material Design:</p>
+
+<ul>
+  <li>новую тему;</li>
+  <li>новые виджеты для сложных представлений;</li>
+  <li>новые API-интерфейсы для нестандартных теней и анимаций.</li>
+</ul>
+
+<p>Дополнительные сведения о реализации Material Design в Android см. в разделе
+<a href="{@docRoot}training/material/index.html">Создание приложений с помощью Material Design</a>.</p>
+
+
+<h3>Тема Material Design</h3>
+
+<p>Тема Material Design предоставляет новый стиль для ваших приложений, системные виджеты, для которых можно настраивать
+цветовую палитру, и анимации, выполняемые по умолчанию в качестве реакции на касание и при переходах между действиями.</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">Тема Material Design в темных тонах</p>
+  </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">Тема Material Design в светлых тонах</p>
+  </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Дополнительные сведения см. в разделе <a href="{@docRoot}training/material/theme.html">Использование темы
+Material Design</a>.</p>
+
+
+<h3>Списки и подсказки</h3>
+
+<p>Android предоставляет два новых виджета для отображения подсказок и списков с использованием стилей
+и анимаций Material Design:</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+  <p>Виджет <code>RecyclerView</code> Представляет собой более гибкую версию <code>ListView</code>,
+которая поддерживает различные типы макетов и способствует повышению производительности.</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+  <p>Виджет <code>CardView</code> позволяет отображать важные элементы информации внутри
+  подсказок, имеющие согласованный внешний вид и поведение.</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Дополнительные сведения см. в разделе <a href="{@docRoot}training/material/lists-cards.html">Создание списков
+и подсказок</a>.</p>
+
+
+<h3>Тени представлений</h3>
+
+<p>Теперь, помимо свойств X и Y, представления в Android имеют свойство
+Z. Это новое свойство показывает, насколько представление "приподнято", иными словами, определяет</p>
+
+<ul>
+<li>размер тени: чем больше Z, тем больше тени, отбрасываемые представлением;</li>
+<li>порядок рисования: представления с более высокими значениями Z отображаются поверх других.</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+  <div class="framed-nexus5-port-span-5">
+  <video class="play-on-hover" autoplay>
+    <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+  </video>
+  </div>
+  <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+    <em>Для воспроизведения фильма нажмите на экран устройства</em>
+  </div>
+</div>
+
+<p>Дополнительные сведения см. в разделе <a href="{@docRoot}training/material/shadows-clipping.html">Определение
+теней и обрезка представлений</a>.</p>
+
+
+<h3>Анимация</h3>
+
+<p>Новые API-интерфейсы анимации позволяют создавать нестандартную анимацию для реакции на касание в элементах пользовательского интерфейса,
+изменения состояниия представления и переходов между действиями.</p>
+
+<p>Эти API-интерфейсы позволяют</p>
+
+<ul>
+<li style="margin-bottom:15px">
+реагировать на касание в представлениях, используя анимацию для <strong>реакции на касание</strong>;
+</li>
+<li style="margin-bottom:15px">
+скрывать и отображать представление с помощью анимации для <strong>кругового появления</strong>;
+</li>
+<li style="margin-bottom:15px">
+переключаться меду действиями с помощью настраиваемой анимации для <strong>переходов между действиями</strong>;
+</li>
+<li style="margin-bottom:15px">
+создавать более естественное движение с помощью анимации для <strong>перемещения по кривой</strong>;
+</li>
+<li style="margin-bottom:15px">
+анимировать изменение одного или нескольких свойств представления с помощью анимации для <strong>изменения состояния представления</strong>;
+</li>
+<li style="margin-bottom:15px">
+отображать анимацию в <strong>графических элементах списков состояний</strong> в помежутке между изменением состояний представления.
+</li>
+</ul>
+
+<p>Анимация для реакции на касание встроена а некоторые стандартные представления, например, кнопки. Новые API-интерфейсы
+позволяют разработчику настраивать эти анимации и добавлять их в свои нестандартные представления.</p>
+
+<p>Дополнительные сведения, см. в разделе <a href="{@docRoot}training/material/animations.html">Определение настраиваемой 
+анимации</a>.</p>
+
+
+<h3>Графические объекты</h3>
+
+<p>Следующие возможности по работе с графическими объектами облегчают реализацию приложений с элементами Material Design:</p>
+
+<ul>
+<li><strong>векторные объекты</strong> можно масштабировать без ущерба для четкости, и они отлично подходят
+в качестве одноцветных значков приложения;</li>
+<li><strong>тонирование графических объектов</strong> позволяет определять растровые изображения как альфа-маску и тонировать их
+нужным цветом во время выполнения;</li>
+<li><strong>извлечение цвета</strong> позволяет автоматически извлекать главные цвета из
+растровых изображений.</li>
+</ul>
+
+<p>Дополнительные сведения см. в разделе <a href="{@docRoot}training/material/drawables.html">Работа с 
+элементами дизайна</a>.</p>
diff --git a/docs/html-intl/intl/ru/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/ru/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..99a0d17
--- /dev/null
+++ b/docs/html-intl/intl/ru/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=Подтверждение и уведомление
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>В некоторых ситуациях, когда пользователь выполняет действие в вашем приложении, полезно в текстовом виде <em>запросить подтверждение</em> этого действия или <em>отобразить уведомление</em> о его выполнении.</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+    <p><strong>Подтверждение</strong> — это просьба к пользователю подтвердить, что он действительно хочет, чтобы запущенное действие было выполнено. Иногда подтверждение отображается вместе с предупреждением или важной информацией относительно действия, которую пользователь должен принять во внимание.</p>
+  </div>
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+    <p><strong>Уведомление</strong> отображает текст, позволяющий пользователю узнать о завершении действия. Это устраняет неопределенность в отношении неявных операций, которые выполняет система. В некоторых случаях уведомления отображаются вместе с возможностью отменить действие.</p>
+  </div>
+</div>
+
+<p>Взаимодействие с пользователями такими способами позволяет снять неопределенность относительно событий, которые произошли или произойдут. Кроме того, подтверждение или уведомление позволяют удержать пользователя от ошибок, о которых он, возможно, будет сожалеть.</p>
+
+<h2>Ситуации, в которых следует запрашивать подтверждение и/или отображать уведомление</h2>
+<p>Не все действия требуют подтверждения или уведомления. При принятии решений во время разработки приложений руководствуйтесь следующей блок-схемой.</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>Подтверждение</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Пример: Google Play Books</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+    <p>В этом примере пользователь пытается удалить книгу из своей библиотеки Play Google. Для подтверждения этого действия отображается <a href="{@docRoot}design/building-blocks/dialogs.html#alerts">оповещение</a>, поскольку пользователь должен понимать, что книга больше не будет доступна ни с одного устройства.</p>
+    <p>При разработке диалогового окна подтверждения следует создать осмысленный заголовок, отражающий запрошенное действие.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>Пример: Android Beam</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+    <p>Подтверждения не обязательно должны быть представлены в виде оповещения с двумя кнопками. После старта Android Beam пользователю предлагается прикоснуться к содержимому (в данном примере, к фотографии) для обмена данными. Если пользователь решит не продолжать, он просто ничего не предпримет.</p>
+  </div>
+</div>
+
+<h2>Уведомление</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Пример: Сохранение оставленного черновика Gmail</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+    <p>В этом примере, если пользователь переходит назад или вверх от экрана составления писем Gmail (возможно, вследствие неожиданного события), текущий черновик автоматически сохраняется. Всплывающее уведомление обращает внимание пользователя на этот факт. Через несколько секунд оно исчезает.</p>
+    <p>Отмена здесь неуместна, поскольку сохранение было инициировано приложением, а не пользователем. Кроме того, пользователь сможет без труда вернуться к написанию сообщения, перейдя к списку черновиков.</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+    <h4>Пример: Удаление переписки Gmail</h4>
+    <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+    <p>После того, как пользователь удалит переписку из Gmail, появляется уведомление с возможностью отмены действия. Оно остается, пока пользователь не предпримет постороннее действие, например, прокрутит список писем.</p>
+  </div>
+</div>
+
+<h2>Отсутствие подтверждения или уведомления</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>Пример: +1</h4>
+    <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+    <p><strong>Подтверждение не требуется</strong>. Если пользователь нажал +1 случайно, это не имеет большого значения. Он может просто нажать кнопку еще раз, чтобы отменить действие.</p>
+    <p><strong>Уведомление не требуется</strong>. Пользователь увидит, что кнопка +1 поменяла состояние и стала красной. Это достаточно ясный сигнал.</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>Пример: Удаление приложения с главного экрана</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+    <p><strong>Подтверждение не требуется</strong>. Это преднамеренное действие: пользователь должен перетащить элемент на относительно крупную отдельно расположенную цель. Поэтому случайности здесь практически невероятны. К тому же, если пользователь пожалеет о своем решении, ему потребуется всего несколько секунд, чтобы вернуть приложение.</p>
+    <p><strong>Уведомление не требуется</strong>. Пользователь будет знать, что приложение удалено с главного экрана, потому что сам заставил его исчезнуть в результате перетаскивания.</p>
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/ru/design/patterns/navigation.jd b/docs/html-intl/intl/ru/design/patterns/navigation.jd
new file mode 100644
index 0000000..a65a8f6
--- /dev/null
+++ b/docs/html-intl/intl/ru/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=Навигация с помощью кнопок "Назад" и "Вверх"
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+  <div>
+    <h3>Документация для разработчиков</h3>
+    <p>Обеспечение эффективной навигации</p>
+  </div>
+</a>
+
+<p itemprop="description">Внутренне непротиворечивая навигация является важнейшей составляющей пользовательского интерфейса. Мало что так раздражает
+пользователей, как несогласованное или непредсказуемое поведение элементов навигации. В Android 3.0
+глобальное поведение навигации претерпело значительные изменения. Тщательное следование
+инструкциям по применению кнопок "Назад" и "Вверх" сделает навигацию в вашем приложении предсказуемой и надежной с точки зрения пользователей.</p>
+<p>В Android 2.3 и в более ранних версиях для навигации внутри приложения использовалась системная кнопка <em>Назад</em>.
+ С появлением панели действий в Android 3.0 стал доступен второй механизм 
+навигации, — кнопка <em>Вверх</em>, содержащая значок приложения и левую угловую скобку.</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">Кнопки "Вверх" и "Назад"</h2>
+
+<p>Кнопка "Вверх" используется для навигации внутри приложения по иерархической структуре его
+экранов. Например, если на экране A отображается некоторый список, и при выборе какого-либо элемента открывается
+экран B (с подробной информацией об этом элементе), то на экране B должна присутствовать кнопка "Вверх"
+ для возврата к экрану A.</p>
+<p>Если экран является самым верхним в приложении (то есть главным), он не должен содержать кнопку
+"Вверх".</p>
+
+<p>Системная кнопка "Назад" используется для навигации в обратном хронологическом порядке среди
+экранов, недавно открытых пользователем. Такая навигация основана на порядке появления
+экранов, а не на иерархии приложения.</p>
+
+<p>Если предыдущий экран одновременно является иерархическим родителем текущего, 
+кнопка "Назад" имеет то же действие, что и кнопка "Вверх"&mdash;, и это случается довольно
+часто. Однако, в отличие от кнопки "Вверх", гарантирующей, что пользователь остается в приложении, кнопка "Назад"
+может перевести его на главный экран или даже в другое приложение.</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>Кроме того, кнопка "Назад" проявляет поведение, не связанное напрямую с навигацией между экранами. Она
+</p>
+<ul>
+<li>закрывает перемещаемые окна (диалоговые, всплывающие);</li>
+<li>закрывает контекстные панели действий и снимает выделение с выделенных элементов;</li>
+<li>скрывает экранную клавиатуру (IME).</li>
+</ul>
+<h2 id="within-app">Навигация внутри приложения</h2>
+
+<h4>Переход на экраны с несколькими точками входа</h4>
+<p>Некоторые экраны не имеют строгой позиции в иерархии приложения, и на них можно перейти
+из нескольких точек. Например, на экран настроек можно попасть из любого другого экрана
+приложения. В таком случае кнопка "Вверх" должна осуществлять возврат на вызвавший экран, т. е. вести себя
+идентично кнопке "Назад".</p>
+<h4>Изменение представления содержимого на экране</h4>
+<p>Изменение параметров представления содержимого на экране не сказывается на поведении кнопок "Вверх" и "Назад", — экран остается
+на прежнем месте в иерархии приложения, а история навигации не меняется.</p>
+<p>Примерами изменения представления являются</p>
+<ul>
+<li>переключение представлений с помощью вкладок или жестов прокрутки вправо/влево;</li>
+<li>переключение представлений с помощью раскрывающихся (или свернутых) вкладок;</li>
+<li>фильтрация списка;</li>
+<li>сортировка списка;</li>
+<li>изменение характеристик отображения (например, масштаба).</li>
+</ul>
+<h4>Навигация между экранами одного уровня</h4>
+<p>Когда приложение поддерживает навигацию от списка к подробному представлению одного из его элементов, нередко
+имеет смысл поддержать навигацию от этого элемента к другому, идущему в списке до или
+после него. Например, в Gmail можно провести пальцем влево или вправо по переписке,
+чтобы просмотреть предыдущие или последующие входящие сообщения. Как и в случае изменения представления на экране, такая
+навигация не меняет поведение кнопок "Вверх" и "Назад".</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>Однако существует важное исключение из этого правила во время просмотра подробных представлений элементов, не связанных
+вместе ссылающимся списком, например&mdash;, приложений
+одного разработчика или альбомов одного исполнителя в Play Store. В этих случаях переход по каждой ссылке создает
+историю навигации, что заставляет кнопку "Назад" перебирать все ранее просмотренные экраны. Кнопка "Вверх" должна по-прежнему
+игнорировать эти связанные по смыслу экраны и осуществлять переход на последний просмотренный контейнерный экран.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>Разработчик может сделать поведение кнопки "Вверх" еще более интеллектуальным, исходя из своих знаний о структуре подробного
+представления. Вернемся к примеру с просмотром Play Store. Представьте, что пользователь перешел от информации о
+книге к информации о ее экранизации. Тогда кнопка "Вверх" могла бы переводить пользователя в контейнер
+(Фильмы), в котором он еще не был.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">Навигация внутрь приложения с помощью уведомлений и виджетов главного экрана</h2>
+
+<p>У разработчика также есть возможность использовать уведомления или виджеты главного экрана, чтобы помочь пользователю переходить к экранам,
+расположенным глубоко в иерархической структуре приложения. Например, виджет Inbox приложения Gmail и уведомление о новом сообщении могут
+ перевести пользователя непосредственно к переписке, в обход экрана с входящими сообщениями.</p>
+
+<p>В обоих этих случаях реализуйте следующее поведение кнопки "Вверх":</p>
+
+<ul>
+<li><em>Если целевой экран, как правило, достигается из одного конкретного экрана 
+приложения</em>, кнопка "Вверх" должна осуществлять переход на этот экран.</li>
+<li><em>В противном случае</em> кнопка "Вверх" должна осуществлять переход на самый верхний (главный) экран приложения.</li>
+</ul>
+
+<p>Что касается кнопки "Назад", необходимо обеспечить более предсказуемую навигацию, вставив в 
+в стек переходов назад полный путь навигации вверх к самому верхнему экрану приложения. Это позволит пользователям,
+забывшим, как они вошли в приложение, перейти к его главному экрану перед выходом из
+приложения.</p>
+
+<p>Например, виджет главного экрана Gmail имеет кнопку, переводящую пользователя прямо на экран
+создания сообщений. Кнопки "Вверх" или "Назад" переведут пользователя с этого экрана на экран входящих писем, а оттуда
+кнопка "Назад" переведет его на главную страницу.</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>Косвенные уведомления</h4>
+
+<p>Когда приложению нужно вывести информацию сразу о нескольких событиях, оно может выдать
+одно уведомление, направляющее пользователя на промежуточный экран. Этот экран содержит сводку
+событий и предоставляет пользователю возможность перейти вглубь приложения. Такие уведомления
+называются <em>косвенными</em>.</p>
+
+<p>Кнопка "Назад" действует не так, как в случае со стандартными (прямыми) уведомлениями. Нажав ее на промежуточном экране косвенного уведомления,
+пользователь вернется в точку, где было сгенерировано уведомление, &mdash;поскольку
+в стеке переходов назад не появились никакие дополнительные экраны. Если пользователь перейдет в приложение с
+промежуточного экрана, поведение кнопок "Вверх" и "Назад" будет таким же, как и при стандартных уведомлениях:
+навигация внутри приложения, а не возврат к промежуточному экрану.</p>
+
+<p>Например, предположим, что пользователь получил косвенное уведомление от приложения Calendar при открытом приложении Gmail. Если он коснется
+этого уведомления, откроется промежуточный экран с напоминаниями о нескольких
+событиях. Касание кнопки "Назад" на промежуточном экране возвратит пользователя в Gmail. Если пользователь коснется конкретного
+события, он перейдет с промежуточного экрана в приложение Calendar к подробной информации о
+событии. Оттуда кнопки "Вверх" и "Назад" переведут его на верхний уровень приложения Calendar.</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>Всплывающие уведомления</h4>
+
+<p><em>Всплывающие уведомления</em> появляются непосредственно перед пользователем,
+в обход панели уведомлений. Они используются редко и <strong>должны быть зарезервированы для ситуаций, в которых требуется немедленная
+реакция пользователя, и прерывание его действий оправдано</strong>. Например, 
+приложение Talk с помощью таких уведомлений извещает пользователя о поступившем от друга приглашении присоединиться к видеочату, поскольку срок действия этого
+приглашения истекает через несколько секунд.</p>
+
+<p>В отношении навигации всплывающие уведомления ведут себя во многом аналогично промежуточному экрану
+косвенного уведомления. Кнопка "Назад" удаляет всплывающее уведомление. Если пользователь переходит
+от всплывающего уведомления к уведомляющему приложению, кнопки "Вверх" и "Назад" действуют, как при стандартных уведомлениях,
+выполняя навигацию внутри приложения.</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">Навигация между приложениями</h2>
+
+<p>Одним из фундаментальных достоинств системы Android является способность приложений активировать друг
+друга, что дает пользователю возможность переходить непосредственно из одного приложения в другое. Например, 
+приложение, которому нужно сделать снимок, может активировать приложение Camera, которое передаст фотографию
+вызвавшему приложению. Это огромное преимущество, как для разработчика, имеющего возможность без проблем воспользоваться
+кодом других приложений, так и для пользователя, получающего согласованный интерфейс для часто выполняемых
+действий.</p>
+
+<p>Чтобы разобраться в навигации между приложениями, необходимо разобраться в поведении платформы Android,
+которое обсуждается ниже.</p>
+
+<h4>Действия, задачи и намерения</h4>
+
+<p><strong>Действие</strong> в Android — это компонент приложения, определяющий экран с
+информацией и все действия, которые при этом может выполнить пользователь. Приложение представляет собой набор
+действий, состоящий как из действий, созданных разработчиком, так и из тех, которые выполняются с помощью других приложений.</p>
+
+<p><strong>Задача</strong> — последовательность действий, выполняемых пользователем для достижения цели. Отдельная
+задача может использовать действия, заимствованные у одного или у нескольких
+различных приложений.</p>
+
+<p><strong>Намерение</strong> — механизм, позволяющий приложению сигнализировать, что ему требуется помощь
+другого приложения в выполнении некоторого действия. Действия, выполняемые приложением, могут указывать, на какие намерения
+они готовы отвечать. Для осуществления достаточно распространенных намерений, например, "Поделиться", у пользователя может быть установлено несколько приложений,
+ способных выполнить соответствующий запрос.</p>
+
+<h4>Пример: навигация между приложениями для поддержки совместного использования ресурсов</h4>
+
+<p>Чтобы понять, как действия, задачи и намерения взаимодействуют друг с другом, разберемся, как одно приложение позволяет пользователям
+поделиться содержимым с помощью другого приложения. Например, запуск приложения Play Store из главного экрана создает
+новую задачу, Task A (см. рисунок ниже). Когда пользователь выполнит навигацию по Play Store и коснется интересующей его книги,
+чтобы просмотреть информацию о ней, он останется в том же приложении, расширив его возможности с помощью добавленных действий. Запуск 
+действия "Поделиться" выводит перед пользователем диалоговое окно со списком действий (из разных приложений),
+зарегистрированных для выполнения намерения "Поделиться".</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>Если пользователь предпочтет поделиться информацией через Gmail, действие "Написать" приложения Gmail добавляется как продолжение задачи
+Task A&mdash;, и никакая новая задача не создается. Если в фоновом режиме работает собственная задача Gmail, на нее это никак
+не повлияет.</p>
+
+<p>Если во время действия "Составление сообщения" пользователь отправит сообщение или коснется кнопки "Назад", он вернется к
+ действию "Просмотр информации о книге". Продолжая нажимать на "Назад", пользователь будет совершать переходы назад в Play
+Store, пока, наконец, не вернется на главный экран.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>Однако, коснувшись кнопки "Вверх" во время действия "Составление сообщения", пользователь выскажет пожелание остаться в приложении 
+Gmail. Откроется экран действия "Переписка" приложения Gmail, и для него будет создано новая задача Task B. Новые задачи
+всегда имеют корень на главном экране, поэтому касание кнопки "Назад" на экране переписки возвращает пользователя именно туда.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>Задача Task A остается в фоновом режиме, и пользователь может вернуться к ней впоследствии (например, с помощью 
+экрана с последними приложениями). Если в фоновом режиме уже работает собственная задача Gmail, она будет замещена
+задачей Task B. Произойдет отказ от предыдущего контекста ради новой цели пользователя.</p>
+
+<p>Если для обработки намерений ваше приложение зарегистрирует действие, расположенное в глубине своей иерархии,
+следуйте инструкциям по реализации навигации с помощью кнопки "Вверх", изложенным в разделе <a href="#into-your-app">Навигация внутрь приложения с помощью виджетов и 
+уведомлений главного экрана</a>.</p>
diff --git a/docs/html-intl/intl/ru/design/patterns/notifications.jd b/docs/html-intl/intl/ru/design/patterns/notifications.jd
new file mode 100644
index 0000000..db46ad5
--- /dev/null
+++ b/docs/html-intl/intl/ru/design/patterns/notifications.jd
@@ -0,0 +1,872 @@
+page.title=Уведомления
+page.tags="notifications","design","L"
+@jd:body
+
+  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
+  <div>
+    <h3>Документация для разработчиков</h3>
+    <p>Уведомление пользователя</p>
+  </div>
+</a>
+
+<a class="notice-designers" href="notifications_k.html">
+  <div>
+    <h3>Уведомления в Android версии 4.4 и ниже</h3>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
+<div>
+    <h3>Видеоролик</h3>
+    <p>DevBytes: Уведомления в Android L Developer Preview</p>
+</div>
+</a>
+
+<style>
+  .col-5, .col-6, .col-7 {
+    margin-left:0px;
+  }
+</style>
+
+<p>Уведомления позволяют извещать пользователя о релевантных и
+периодически возникающих
+событиях в приложении, таких как новые сообщения в чате или события в календаре.
+Систему уведомлений можно рассматривать как канал новостей, извещающий пользователя о важных
+событиях по мере
+их возникновения, или как журнал, ведущий хронику событий, пока пользователь не обращает на них
+внимания, и синхронизируемый должным образом на всех устройствах Android этого пользователя.</p>
+
+<h4 id="New"><strong>Новые возможности Android 5.0</strong></h4>
+
+<p>В Android 5.0 уведомления были существенно обновлены структурно,
+визуально, и функционально:</p>
+
+<ul>
+  <li>был изменен внешний вид уведомлений в соответствии с новой
+темой Material Design;</li>
+  <li> теперь уведомления доступны на экране блокировки, в то время как
+конфиденциальная информация по-прежнему
+ может быть скрыта;</li>
+  <li>уведомления с высоким приоритетом, полученные при включенном устройстве, теперь имеют новый формат и называются
+ уведомлениями Heads-up;</li>
+  <li>уведомления синхронизируются с облаком: если удалить уведомление на одном из устройств
+Android, оно будет удалено
+ и на остальных устройствах.</li>
+</ul>
+
+<p class="note"><strong>Примечание.</strong> Разработка уведомлений в этой версии
+Android значительно
+отличается от их разработки в предыдущих версиях. Информацию о разработке уведомлений в предыдущих
+версиях можно найти в разделе <a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</a>.</p>
+
+<h2 id="Anatomy">Структура уведомления</h2>
+
+<p>В этом разделе описываются основные компоненты уведомления и их
+отображение на устройствах различных типов.</p>
+
+<h3 id="BaseLayout">Базовая компоновка</h3>
+
+<p>Все уведомления имеют, как минимум, базовую компоновку, которую составляют следующие элементы.</p>
+
+<ul>
+  <li> <strong>Значок</strong> уведомления. Значок символизирует
+инициирующее приложение. Он также может
+  указывать на тип уведомления, если приложение генерирует уведомления нескольких
+типов.</li>
+  <li> <strong>Заголовок</strong> уведомления и дополнительный
+<strong>текст</strong>.</li>
+  <li> <strong>Временная метка</strong>.</li>
+</ul>
+
+<p>Уведомления, созданные с помощью {@link android.app.Notification.Builder Notification.Builder}
+для предыдущих версий платформы, выглядят и функционируют в Android
+5.0 так же, как и прежде, за исключением незначительных стилистических отличий, вносимых
+системой. Дополнительную информацию о внешнем виде и функциональности уведомлений в предыдущих версиях
+Android можно найти в разделе
+<a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</a>.</p></p>
+
+
+    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
+
+
+<div style="clear:both;margin-top:20px">
+      <p class="img-caption">
+      Уведомление в базовой компоновке на мобильном устройстве (слева) и то же уведомление на носимом устройстве (справа)
+      с фотографией пользователя и значком уведомления
+    </p>
+  </div>
+
+<h3 id="ExpandedLayouts">Расширенная компоновка</h3>
+
+
+<p>Разработчик может выбрать степень подробности уведомлений, генерируемых его
+приложением. Уведомление может содержать первые
+несколько строк сообщения или миниатюру изображения. В качестве дополнительной
+информации можно предоставлять пользователю 
+контекст и, &mdash;в некоторых случаях, &mdash;давать ему возможность прочитать сообщение
+целиком. Чтобы переключаться
+ между компактной и расширенной компоновкой, пользователь может применить жест сжатия/масштабирования или
+провести пальцем по экрану.
+ Для уведомлений о единичных событиях Android предоставляет
+ разработчику приложения три шаблона расширенной компоновки 
+(текст, входящая почта и изображения). Ниже приведены скриншоты уведомлений о единичных
+событиях на мобильных устройствах (слева) 
+ и на носимых устройствах (справа).</p>
+
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
+    alt="" width="311px" height;="450px" />
+
+<h3 id="actions" style="clear:both; margin-top:40px">Действия</h3>
+
+<p>Android поддерживает дополнительные действия, отображаемые в нижней части
+уведомления.
+Благодаря этому пользователи могут выполнять операции, типичные для данного
+уведомления, непосредственно из него, не открывая
+само приложение.
+Это ускоряет взаимодействие и, вместе с операцией "провести пальцем, чтобы удалить", позволяет пользователю сосредоточиться на
+важных для него уведомлениях.</p>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
+
+
+
+<p style="clear:both">При определении количества действий в уведомлении следует проявлять
+благоразумие. Чем больше
+действий предоставлено пользователю, тем выше когнитивная сложность приложения. Ограничьтесь
+минимальным количеством
+действий, предоставив пользователю наиболее важные и
+значимые.</p>
+
+<p>В уведомлениях отдавайте предпочтение действиям</p>
+
+<ul>
+  <li> важным, выполняемым наиболее часто и типичным для отображаемого
+содержимого;
+  <li> позволяющим пользователю быстрее решить задачу.
+</ul>
+
+<p>Избегайте действий</p>
+
+<ul>
+  <li> неоднозначных;
+  <li> совпадающих с действиями, выполняемыми для данного уведомления по умолчанию (например, "Прочитать" или 
+"Открыть").
+</ul>
+
+
+
+<p>Следует предоставлять не более трех действий, указав для каждого
+значок и название.
+ Добавление действий в базовую компоновку делает уведомление расширяемым,
+даже если
+ оно не имеет расширенной компоновки. Поскольку действия отображаются только у
+расширенных
+ уведомлений, необходимо, чтобы любое действие,
+которое пользователь может выполнить из
+ уведомления, было доступно и в соответствующем
+приложении.</p>
+
+<h2 style="clear:left">Уведомления heads-up</h2>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
+  <p class="img-caption">
+    Пример уведомления heads-up (входящий телефонный звонок, высокий приоритет),
+появляющегося поверх
+    приложения с эффектом присутствия
+  </p>
+</div>
+
+<p>Когда поступает уведомление с высоким приоритетом (см. изображение справа), оно в течение короткого времени
+отображается
+в расширенной компоновке, позволяя выполнить допустимые действия.</p>
+<p> Затем уведомление принимает обычный
+вид. Если для уведомления установлен высокий, максимальный или полноэкранный <a href="#correctly_set_and_manage_notification_priority">приоритет</a> 
+, оно становится уведомлением heads-up.</p>
+
+<p><b>Хорошими примерами событий для уведомлений heads-up являются</b></p>
+
+<ul>
+  <li> входящий телефонный звонок, во время использования устройства;</li>
+  <li> сигнал будильника во время использования устройства;</li>
+  <li> новое SMS-сообщение;</li>
+  <li> низкий уровень заряда аккумулятора.</li>
+</ul>
+
+<h2 style="clear:both" id="guidelines">Основные рекомендации</h2>
+
+
+<h3 id="MakeItPersonal">Персонализируете уведомление</h3>
+
+<p>Уведомление о событии, инициированном другим пользователем (например, сообщение или
+обновление статуса), должно содержать изображение пользователя, добавленное с помощью
+{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}. Кроме того, в метаданные уведомления необходимо включить информацию о
+пользователе (см. {@link android.app.Notification#EXTRA_PEOPLE}).</p>
+
+<p>Главный значок уведомления будет по-прежнему отображаться, чтобы пользователь мог связать
+его со значком
+на строке состояния.</p>
+
+
+<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
+<p style="margin-top:10px" class="img-caption">
+  Уведомление, идентифицирующее пользователя-инициатора, и отображающее отправленное содержимое.
+</p>
+
+
+<h3 id="navigate_to_the_right_place">Выполняйте переход в нужное место</h3>
+
+<p>Когда пользователь касается тела уведомления (за пределами кнопок
+с действиями), должен осуществляться переход в то место приложения,
+где пользователь сможет просмотреть информацию, о которой извещает уведомление, и действовать в соответствии
+с нею. В большинстве случаев там будет находиться подробное представление одного элемента данных, например, сообщения,
+но возможно и
+сокращенное представление, если накопилось несколько уведомлений. Если приложение переводит
+пользователя на какой-либо уровень, отличный от верхнего, реализуйте навигацию в стеке переходов назад в приложении, чтобы
+пользователь мог нажать системную кнопку "Назад" и вернуться на верхний уровень. Дополнительную информацию можно найти в разделе
+<em>Навигация внутрь приложения с помощью виджетов и уведомлений главного экрана</em> в шаблоне проектирования 
+<a href="{@docRoot}design/patterns/navigation.html#into-your-app">Навигация</a>.</p>
+
+<h3 id="correctly_set_and_manage_notification_priority">Правильно выполняйте расстановку приоритетов уведомлений и 
+управление ими
+</h3>
+
+<p>Android поддерживает флаг приоритета для уведомлений. Это флаг позволяет
+влиять на позицию уведомления среди других уведомлений и 
+гарантировать,
+что пользователь в первую очередь увидит самые важные уведомления. При отправке уведомления можно выбрать один
+из
+следующих уровней приоритета:</p>
+<table>
+ <tr>
+    <td class="tab0">
+<p><strong>Приоритет</strong></p>
+</td>
+    <td class="tab0">
+<p><strong>Использование</strong></p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MAX</code></p>
+</td>
+    <td class="tab1">
+<p>Применяйте для наиболее важных и неотложных уведомлений, извещающих пользователя
+о ситуации,
+критичной по времени или такой, на которую необходимо отреагировать, чтобы продолжить
+выполнение задачи.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>HIGH</code></p>
+</td>
+    <td class="tab1">
+<p>Применяйте, в основном, для передачи важной информации, например, о сообщениях или событиях
+в чате с содержимым, представляющим особый интерес для пользователя.
+Уведомления с высоким приоритетом отображаются как уведомления heads-up.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>DEFAULT</code></p>
+</td>
+    <td class="tab1">
+<p>Применяйте для всех уведомлений, не входящих ни в одну из описанных здесь категорий.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>LOW</code></p>
+</td>
+    <td class="tab1">
+<p>Применяйте для уведомлений, которые должны быть переданы пользователю, но
+не являются неотложными. Низкоприоритетные уведомления обычно появляются в конце списка,
+что позволяет использовать их
+для передачи информации, представляющей всеобщий интерес и не имеющей конкретной направленности. Например, если пользователь подписался
+на новости,
+ эта информация не должна иметь преимущество перед неотложными или адресными
+сообщениями.</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MIN</code></p>
+</td>
+    <td class="tab1">
+<p>Применяйте для уведомлений, с контекстной или фоновой информацией, такой как прогноз погоды, или с информацией,
+связанной с местоположением пользователя.
+Уведомления с минимальным приоритетом не отображаются в строке состояния. Пользователь
+обнаруживает их при раскрытии панели уведомления.</p>
+</td>
+ </tr>
+</table>
+
+
+<h4 id="how_to_choose_an_appropriate_priority"><strong>Как выбрать
+подходящий
+приоритет</strong></h4>
+
+<p>При выдаче уведомлений с приоритетами <code>DEFAULT</code>, <code>HIGH</code> и <code>MAX</code> существует риск, что деятельность 
+пользователя будет прервана
+в самом разгаре. Чтобы не раздражать пользователей вашего приложения, применяйте приоритеты этих уровней для
+уведомлений,</p>
+
+<ul>
+  <li> имеющих отношение к другим пользователям;</li>
+  <li> быстро теряющих актуальность;</li>
+  <li> способных немедленно повлиять на поведение пользователя в реальном мире.</li>
+</ul>
+
+<p>Уведомления с приоритетом <code>LOW</code> и <code>MIN</code> могут представлять определенную ценность
+для пользователя. Значительное количество, если не большинство, уведомлений не требует немедленной
+реакции пользователя,  но, тем не менее, содержит информацию, которую пользователь сочтет
+ценной, когда решит
+просмотреть поступившие уведомления. Приоритеты уровней <code>LOW</code> и <code>MIN</code>
+ следует присваивать уведомлениям,</p>
+
+<ul>
+  <li> не имеющим прямого отношения к другим пользователям;</li>
+  <li> долго не теряющим актуальность;</li>
+  <li> содержащим информацию, способную заинтересовать пользователя, если он решит
+просмотреть их в свободное время.</li>
+</ul>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
+
+
+<h3 style="clear:both" id="set_a_notification_category">Определите категорию
+уведомления</h3>
+
+<p>Если уведомление попадает в одну из заранее определенных категорий (см.
+ниже), укажите его
+категорию.  Процессы системного пользовательского интерфейса, например, панель уведомления (или любой
+другой процесс-слушатель
+уведомлений) могут воспользоваться этой информацией при классификации и фильтрации уведомлений.</p>
+<table>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
+</td>
+    <td>
+<p>Входящий звонок (голосовой или по видеосвязи) или алогичный запрос синхронной 
+связи</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
+</td>
+    <td>
+<p>Входящее личное сообщение (SMS-сообщение, мгновенное сообщение и т. д.)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
+</td>
+    <td>
+<p>Асинхронное массовое сообщение (по электронной почте)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
+</td>
+    <td>
+<p>Событие в календаре</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
+</td>
+    <td>
+<p>Промоакция или реклама</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
+</td>
+    <td>
+<p>Сигнал будильника или таймера</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
+</td>
+    <td>
+<p>Информация о ходе выполнения длительной фоновой операции</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
+</td>
+    <td>
+<p>Новости, поступившие из социальной сети или касающиеся совместного использования ресурсов</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
+</td>
+    <td>
+<p>Ошибка в фоновой операции или статусе аутентификации</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
+</td>
+    <td>
+<p>Управление передачей медиаданных для воспроизведения</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
+</td>
+    <td>
+<p>Обновление статуса системы или устройства.  Зарезервировано для использования системой.</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
+</td>
+    <td>
+<p>Индикация работающей фоновой службы</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
+</td>
+    <td>
+<p>Конкретная и привязанная ко времени рекомендация относительно одного объекта.  Например, приложение
+новостей может
+порекомендовать пользователю, какую новость читать следующей.</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
+</td>
+    <td>
+<p>Текущая информация о статусе устройства или контекста</p>
+</td>
+ </tr>
+</table>
+
+<h3 id="summarize_your_notifications">Суммируйте уведомления</h3>
+
+<p>Если при наличии ожидающего уведомления определенного типа приложение пытается отправить новое
+уведомление того же типа, объедините их в одно сводное уведомление от этого приложения. Не
+создавайте новый объект.</p>
+
+<p>Сводное уведомление формирует сводное описание и дает пользователю возможность
+понять, сколько
+имеется ожидающих уведомлений того или иного типа.</p>
+
+<div class="col-6">
+
+<p><strong>Неправильно</strong></p>
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
+</div>
+
+<div>
+<p><strong>Правильно</strong></p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
+</div>
+
+<p style="clear:left; padding-top:30px; padding-bottom:20px">Разработчик может сообщить
+подробности об отдельных уведомлениях, образующих
+ сводное, используя расширенную компоновку для резюме. Такой подход позволит пользователям
+лучше разобраться, какие
+уведомления ожидают прочтения, и достаточно ли они интересны, чтобы ознакомиться с ними
+более подробно в
+ соответствующем приложении.</p>
+<div class="col-6">
+  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
+  <p class="img-caption">
+  Расширенное и сжатое сводное уведомление (с использованием <code>InboxStyle</code>)
+  </p>
+</div>
+
+<h3 style="clear:both" id="make_notifications_optional">Сделайте уведомления
+необязательными</h3>
+
+<p>В распоряжении пользователей всегда должен быть метод управления уведомлениями. Предоставьте пользователю возможность
+отключать уведомления, поступающие от вашего приложения,
+или изменять способы оповещения, такие как звуковой сигнал и
+вибрация.
+ С этой целью следует предусмотреть пункт настройки уведомлений в настройках приложения.</p>
+
+<h3 id="use_distinct_icons">Используйте отчетливые значки</h3>
+<p>Беглого взгляда на область уведомлений должно быть достаточно, чтобы распознать
+типы
+ожидающих уведомлений.</p>
+
+<div class="figure">
+  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
+</div>
+
+  <div><p><strong>Правильно</strong></p>
+    <p>Рассмотрите уже существующие значки уведомлений от приложений Android и создайте
+собственные,
+    достаточно уникальные.</p>
+
+    <p><strong>Правильно</strong></p>
+    <p>Придерживайтесь подходящего <a href="/design/style/iconography.html#notification">стиля значков уведомления</a>
+ для мелких значков, и
+    <a href="/design/style/iconography.html#action-bar">стиля строки
+действий</a> Material Light для значков
+ действий.</p>
+<p ><strong>Правильно</strong></p>
+<p >Стремитесь к визуальной простоте значков, избегайте излишних трудноразличимых
+деталей.</p>
+
+  <div><p><strong>Неправильно</strong></p>
+    <p>Применяйте к мелким значкам и значкам действий дополнительные альфа-эффекты
+(постепенное появление/исчезание).
+    К их краям может быть применено сглаживание, но, поскольку в Android эти значки
+служат масками (то есть,
+ используется только    альфа-канал), изображение, как правило, должно отображаться полностью
+непрозрачным.</p>
+
+</div>
+<p style="clear:both"><strong>Неправильно</strong></p>
+
+<p>Чтобы ваше приложение отличалось от других, используйте цвет. Значки уведомлений должны
+представлять собой изображение белого цвета на прозрачном фоне.</p>
+
+
+<h3 id="pulse_the_notification_led_appropriately">Правильно используйте индикатор 
+уведомлений</h3>
+
+<p>На многих устройствах Android имеется светодиодный индикатор уведомлений,
+информирующий пользователя о
+событиях, когда экран выключен. Уведомления с приоритетом <code>MAX</code>,
+<code>HIGH</code> или <code>DEFAULT</code> должны
+вызывать свечение индикатора, а уведомления с низким приоритетом (<code>LOW</code> и
+<code>MIN</code>) не должны.</p>
+
+<p>Возможности пользователя управлять уведомлениями должны распространяться на светодиодный индикатор. Когда разработчик использует
+DEFAULT_LIGHTS, 
+индикатор светится белым цветом. Ваши уведомления не должны вызывать свечение другим
+цветом, если
+пользователь не указал этого явным образом.</p>
+
+<h2 id="building_notifications_that_users_care_about">Создание уведомлений,
+ важных для пользователя</h2>
+
+<p>Чтобы пользователям понравилось ваше приложение, необходимо тщательно
+продумать его уведомления.
+Уведомления — это голос приложения. Они определяют его
+индивидуальность. Ненужные или
+несущественные уведомления раздражают пользователя и заставляют его возмущаться тем, как много
+внимания требует от него
+приложение. Поэтому необходимо применять уведомления взвешенно.</p>
+
+<h3 id="when_to_display_a_notification">Ситуации, в которых следует показывать уведомления</h3>
+
+<p>Чтобы создать приложение, от работы с которым пользователи получат удовольствие, необходимо
+осознать, что внимание пользователя
+ является ресурсом, требующим бережного обращения. Система уведомлений
+Android была разработана
+так, чтобы как можно меньше отвлекать пользователя.
+Однако
+вы должны отдавать себе отчет в том, что уведомления прерывают
+деятельность пользователя.
+Планируя уведомления, спрашивайте себя, достаточно ли они важны, чтобы
+послужить основанием для такого прерывания. В случае сомнений предоставьте пользователю возможность запросить
+в настройках приложения получение уведомления или измените
+приоритет уведомления на <code>LOW</code> или <code>MIN</code>, чтобы
+не отвлекать пользователя от
+текущих занятий.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
+  <p style="margin-top:10px" class="img-caption">
+   Примеры уведомлений, быстро теряющих актуальность
+  </p>
+
+<p>Хотя правильно работающие приложения ведут себя неназойливо, бывают ситуации,
+заслуживающие того, чтобы приложение по своей инициативе прервало деятельность пользователя уведомлением.</p>
+
+<p>Отправляйте уведомления только в случае <strong>событий, требующих неотложной реакции</strong>, особенно
+ если эти синхронные события <strong>имеют прямое отношение к другим пользователям</strong>. Например,
+чат
+ представляет собой форму синхронного общения в реальном времени, — другой пользователь
+с нетерпением ожидает вашего ответа. События в календаре являются еще одним хорошим примером ситуации, в которой следует выдать
+уведомление и завладеть
+  вниманием пользователя, потому что в приближающееся календарное событие часто
+вовлечены другие люди.</p>
+
+<h3 style="clear:both" id="when_not_to_display_a_notification">Ситуации,
+в которых не следует показывать уведомления</h3>
+
+<div class="figure" style="margin-top:60px">
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
+</div>
+
+<p>В большинстве остальных случаев уведомления неуместны.</p>
+
+<ul>
+  <li> Не следует извещать пользователя о событиях, не имеющих отношения
+к нему конкретно, или
+  не теряющих актуальность со временем. Например, асинхронные
+и безадресные новости,
+  циркулирующие в социальных сетях, как правило, не требуют немедленного
+привлечения внимания. Пользователям,
+  действительно интересующимся таким новостями, предоставьте возможность запросить соответствующие уведомления.</li>
+  <li> Не генерируйте уведомление, если релевантная свежая информация уже находится
+на экране. Вместо этого
+  воспользуйтесь интерфейсом самого приложения, чтобы донести до пользователя новую информацию
+непосредственно в контексте.
+  Например, приложение-чат не должно генерировать системные уведомления,
+пока пользователь активно общается с собеседником.</li>
+  <li> Не отвлекайте пользователя ради низкоуровневых технических действий, такие как сохранение
+или синхронизация информации или обновление приложения, если приложение или система способны выполнить задачу
+без вмешательства пользователя.</li>
+  <li> Не отвлекайте пользователя, чтобы проинформировать его об ошибке, если
+приложение может восстановиться после нее самостоятельно, не требуя от пользователя
+никаких действий.</li>
+  <li> Не создавайте уведомления, не имеющие осмысленного содержимого и 
+всего лишь рекламирующие ваше
+приложение. Уведомление должно нести полезную, актуальную и новую информацию. Не следует
+использовать его
+  исключительно для презентации приложения.</li>
+  <li> Не создавайте избыточные уведомления только для того, чтобы продемонстрировать свой бренд
+пользователям.
+  Такие уведомления раздражают и отталкивают аудиторию. Лучший
+способ сообщать
+  новую информацию небольшими порциями и поддерживать связь пользователей
+с вашим
+ приложением заключается в том, чтобы разработать виджет, который они смогут поместить на
+ главный экран.</li>
+</ul>
+
+<h2 style="clear:left" id="interacting_with_notifications">Взаимодействие с
+уведомлениями</h2>
+
+<p>Уведомления обозначаются значками в строке состояния. Чтобы получить к ним доступ,
+следует открыть
+панель уведомлений.</p>
+
+<p>Если коснуться уведомления, откроется соответствующее приложение с подробным содержимым,
+связанным с эти уведомлением.
+Если провести пальцем по уведомлению влево или вправо, оно будет удалено из панели.</p>
+
+<h3 id="ongoing_notifications">Постоянные уведомления</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
+      <p class="img-caption">
+    Постоянные уведомления при воспроизведении музыки
+  </p>
+</div>
+<p>Постоянные уведомления информируют пользователя о текущих фоновых
+процессах.
+Например, плееры сообщают через систему уведомлений информацию о дорожке,
+воспроизводимой в данный момент, и
+это продолжается, пока пользователь не остановит воспроизведение. Кроме того, постоянные уведомления могут
+информировать пользователя
+о ходе выполнения длительных задач, таких как загрузка файла или кодирование видеоданных. Пользователь не может вручную
+удалить постоянное уведомление из панели уведомлений.</p>
+
+<h3 id="ongoing_notifications">Воспроизведение медиаданных</h3>
+<p>В Android 5.0 на экране блокировки не отображаются элементы управления воспроизведением от устаревшего
+класса {@link android.media.RemoteControlClient}. Однако на нем <em>отображаются</em> уведомления, так что теперь каждое
+уведомление приложения о воспроизведении является для пользователей основным
+способом управления воспроизведением в заблокированном состоянии. В результате у приложения появляется больше возможностей
+управлять тем, какие
+кнопки отображать, и каким образом. При этом с точки зрения пользователя система ведет себя непротиворечиво,
+независимо от того, заблокирован ли экран.</p>
+
+<h3 style="clear:both"
+id="dialogs_and_toasts_are_for_feedback_not_notification">Диалоговые окна
+и всплывающие уведомления</h3>
+
+<p>Приложение, не отображаемое на экране, не должно генерировать диалоговое окно или всплывающее
+уведомление. Диалоговое окно или всплывающее уведомление
+ должно появляться исключительно в качестве немедленной реакции на действия пользователя
+в приложении.
+Более подробные рекомендации по использованию диалоговых окон и всплывающих уведомлений см. в разделе
+<a href="/design/patterns/confirming-acknowledging.html">Подтверждение и уведомление</a>.</p>
+
+<h3>Упорядочение уведомлений по степени важности</h3>
+
+<p>По своей сути уведомления — это новости, и поэтому они принципиально отображаются в
+обратном хронологическом порядке.
+При этом обязательно принимается во внимание
+<a href="#correctly_set_and_manage_notification_priority">приоритет</a>, установленный приложением.</p>
+
+<p>Уведомления являются важной составляющей экрана блокировки и отображаются на видном месте
+каждый
+раз, когда включается дисплей устройства. На экране блокировки мало свободного места, поэтому
+исключительно важно
+выявлять неотложные или наиболее релевантные уведомления. По этой
+причине Android применяет
+сложный алгоритм сортировки уведомлений, в котором учитываются</p>
+
+<ul>
+  <li> временная метка и приоритет, установленный приложением;</li>
+  <li> тот факт, что уведомление только что оповестило пользователя звуковым сигналом
+или вибрацией (иными словами,
+ если телефон издает звуки, и пользователь хочет узнать, в чем
+дело, то на экране блокировки
+  должен находиться ответ, понятный с первого взгляда);</li>
+  <li> пользователи, связанные с уведомлением при помощи {@link android.app.Notification#EXTRA_PEOPLE},
+ и, в частности, присутствие их в списке помеченных контактов.</li>
+</ul>
+
+<p>Чтобы воспользоваться преимуществами этой сортировки наилучшим образом, думайте в первую очередь о создании
+удобных условий для
+пользователя, и не нацеливайтесь на конкретное место в рейтинге.</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
+
+  <p class="img-caption" style="margin-top:10px">Уведомления от Gmail имеют
+приоритет DEFAULT, поэтому они
+  обычно оказываются ниже уведомлений от приложений мгновенного обмена сообщениями, таких как Hangouts, но
+поднимаются в списке
+ на некоторое время, когда поступают новые сообщения.
+  </p>
+
+
+<h3>Уведомления на экране блокировки</h3>
+
+<p>Поскольку уведомления видны на экране блокировки, защита конфиденциальной информации пользователей приобретает
+особо
+важное значение. Уведомления нередко содержат частную информацию, и они
+не должны быть доступны
+каждому, кто взял в руки устройство и включил дисплей.</p>
+
+<ul>
+  <li> У устройств, экран блокировки которых защищен (при помощи PIN-кода, графического ключа или пароля), интерфейс имеет
+ общедоступную и закрытую части. Элементы общедоступного интерфейса отображаются на защищенном экране блокировки и
+ следовательно, видны всем. Закрытый интерфейс находится "позади" экрана блокировки и
+  доступен только пользователю, выполнившему вход в устройство.</li>
+</ul>
+
+<h3>Возможности пользователя контролировать информацию, отображаемую на экране блокировки</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
+      <p class="img-caption">
+    Уведомления на экране блокировки с содержимым, отображаемым после того, как пользователь разблокирует устройство.
+  </p>
+</div>
+
+<p>При настройке защиты экрана блокировки пользователь может предпочесть,
+ чтобы конфиденциальные данные не отображались на защищенном экране блокировки. В этом случае системный пользовательский интерфейс
+учитывает <em>уровень видимости</em> уведомления, чтобы выяснить, какую информацию
+можно отображать без риска.</p>
+<p> Чтобы установить уровень видимости, вызовите 
+<code><a
+href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>
+и укажите одно из следующих значений:</p>
+
+<ul>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>.
+Содержимое уведомления отображается полностью.
+  Это значение принимается системой по умолчанию, если уровень видимости не указан.</li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
+На экране блокировки отображается основная информация о наличии уведомления, включая его
+значок и название приложения, отправившего его. Прочие данные уведомления скрыты.
+Здесь уместно дать разработчику пару рекомендаций.
+  <ul>
+    <li> Если вы хотите реализовать отдельную общедоступную версию уведомления,
+которую система будет отображать на экране блокировки, создайте замещающий
+объект Notification в поле<code><a
+href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>.
+
+    <li> Этот параметр предоставляет приложению возможность создавать "цензурированную" версию
+содержимого, достаточно информативную, но скрывающую личную информацию. Рассмотрим в качестве примера приложение для отправки
+SMS-сообщений. Его уведомления содержат текст SMS-сообщения и имя и контактный значок отправителя.
+Такое уведомление должно иметь атрибут <code>VISIBILITY_PRIVATE</code>, но его версия <code>publicVersion</code> может
+содержать полезную информацию, например, "3 новых сообщения", без уточняющих
+подробностей.
+  </ul>
+  </li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>. Отображается минимум информации,
+даже без значка уведомления.</li>
+</ul>
+<h2 style="clear:both" id="notifications_on_android_wear">Уведомления на
+Android Wear</h2>
+
+<p>По умолчанию уведомления и их <em>действия</em> передаются на носимые устройства.
+Разработчики могут управлять тем, какие уведомления следует передавать с
+телефона на часы,
+и наоборот. У разработчиков также есть возможность управлять передачей действий. Если
+приложение включает в себя
+действия, которые невозможно выполнить одним касанием, нужно либо скрывать их
+в уведомлениях, отображаемых на носимом
+устройстве, либо обеспечить их привязку к приложению под управлением Android Wear, позволив пользователю
+совершать действие
+на часах.</p>
+
+<h4>Передача уведомлений и действий на другое устройство</h4>
+
+<p>Подключенное устройство, например, телефон, может передавать уведомления на носимое устройство,
+чтобы они отображались и на нем. Аналогичным образом можно передавать действия, чтобы пользователь мог реагировать
+на уведомления непосредственно на носимом устройстве.</p>
+
+<p><strong>Передавайте</strong></p>
+
+<ul>
+  <li> новые мгновенные сообщения;</li>
+  <li> действия, выполняемые одним касанием, например, "+1", "Лайк", "Сердечко".</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
+
+<p><strong>Не передавайте</strong></p>
+
+<ul>
+  <li> уведомления о новых подкастах;</li>
+  <li> действия, соответствующие функциям, недоступным на часах.</li>
+</ul>
+
+
+
+<p><h4>Уникальные действия, определяемые для носимых устройств</h4></p>
+
+<p>Некоторые действия можно выполнить только на носимых устройствах, например:</p>
+
+<ul>
+  <li> выбор из списка шаблонных ответов, например, "Скоро вернусь"</li>
+  <li> действие "Открыть на телефоне";</li>
+  <li> действия "Прокомментировать" или "Ответить", открывающие окно речевого ввода;</li>
+  <li> действия, запускающие приложения, специфичные для Android Wear.</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/about.jd b/docs/html-intl/intl/ru/distribute/googleplay/about.jd
new file mode 100644
index 0000000..d5eaafe
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/about.jd
@@ -0,0 +1,367 @@
+page.title=Возможности Google Play
+meta.tags="visibility, growth, distributing"
+page.tags="play, apps, distributing, publishing"
+page.metaDescription=Миллиарды загрузок каждый месяц – и их число растет с каждым днем. Предложите свои приложения пользователям в масштабах Google.
+page.image=/distribute/images/about-play.jpg
+
+@jd:body
+
+    <div id="qv-wrapper">           
+  <div id="qv">
+  <h2>О Google Play</h2>
+    <ol style="list-style-type:none;">
+      <li><a href="#reach">Общемировой масштаб, быстрый рост</a></li>
+      <li><a href="#ratings-reviews">Рейтинги и отзывы пользователей</a></li>
+      <li><a href="#category-browsing">Просмотр по категориям</a></li>
+      <li><a href="#search">Поиск</a></li>
+      <li><a href="#top-charts-and-lists">Топ-списки приложений</a></li>
+      <li><a href="#featured-staff-picks">Списки "Рекомендуемые", "Выбор Google", коллекции и отличительные значки</a></li>
+      <li><a href="#product-detail-pages">Страницы приложений в каталоге магазина</a></li>
+      <li><a href="#related-resources">Связанные ресурсы</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  Google Play является крупнейшим онлайн-магазином, распространяющим приложения для Android. Приложения,
+ опубликованные в Google Play, предлагаются огромной базе
+ активных пользователей Android в более чем 190 странах и регионах
+ мира.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-about-0.jpg" alt="Google Play on an Android Tablet" style="width:480px;position:relative" />
+</div>
+
+<p>
+  Google Play является центральной частью интерфейса Android. Новые пользователи
+ персонализируют свои устройства, устанавливая приложения, игры и другой контент из Google Play.
+  Существующие пользователи регулярно возвращаются, чтобы ознакомиться с современными тенденциями и новинками. Загрузка
+ новых приложений происходит очень быстро и удобно &mdash; Google Play сразу передает приложения
+ на устройства пользователей по беспроводной связи.
+</p>
+
+<p>
+  Google Play также является популярным ресурсом для веб-пользователей. Любой человек с помощью браузера
+ может просматривать содержимое Google Play через Интернет. Пользователи Android могут даже покупать и устанавливать
+ желаемые приложения – Google Play выполняет автоматическую push-установку приложений на устройства
+ без необходимости подключения по кабелю.
+</p>
+
+<p>
+  Доступность и удобство сайта Google Play открывает новые
+ возможности привлечения трафика к вашим продуктам из различных источников, таких как онлайн-реклама,
+ веб-поиск и перекрестные ссылки. Благодаря магазину Google Play пользователи получают доступ к
+ полезным приложениям и захватывающим играм. Он предоставляет ключевые каналы распространения,
+ позволяющие приложению быть замеченным и достичь популярности на рынке.
+</p>
+
+<div class="headerLine">
+  <h2 id="ratings-reviews">
+    Рейтинги и отзывы пользователей
+  </h2>
+
+
+</div>
+
+<p>
+  Потенциальные пользователи рассматривают рейтинги и отзывы как
+ основные критерии качества приложения. Пользователи Android выражают свою оценку загруженным
+ приложениям, присваивая им рейтинг от одной до пяти звезд и публикуя отзывы.
+</p>
+
+<p>
+  <strong>Рейтинг приложения является одним из наиболее важных
+ факторов, определяющих его расположение</strong> в списках Google Play и результатах поиска. Он
+ также является одним из ключевых показателей, которые учитываются сотрудниками редакции при
+ выборе приложений и игр для рекламных акций магазина.
+</p>
+
+<div class="img" style="padding: 1em auto;width:96%;">
+  <img src="{@docRoot}images/gp-rating-web.png" style="border:1px solid #ddd;">
+</div>
+
+<div class="headerLine">
+  <h2 id="category-browsing">
+    Просмотр по категориям
+  </h2>
+
+
+</div>
+
+<p>
+  При публикации приложения в Google Play указывается категория, в которой
+ его смогут найти пользователи. Всего доступно более 30 категорий. Внутри каждой
+ категории приложения располагаются на основе комбинации показателей рейтинга, отзывов,
+ загрузок, страны и других факторов.
+</p>
+
+<div class="headerLine">
+  <h2 id="search">
+    Поиск
+  </h2>
+
+
+</div>
+
+<p>
+  Функция поиска в Google Play позволяет пользователям быстро найти приложение или игру. Поиск
+ использует эффективные эвристические методы для предположения слов в процессе их ввода пользователем и предлагает прямые ссылки
+ на возможные приложения. В списке результатов поиска
+ на верхних позициях отображаются наиболее подходящие и популярные приложения.
+</p>
+
+<div class="headerLine">
+  <h2 id="top-charts-and-lists">
+    Топ-списки приложений
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-top.jpg">
+</div>
+
+<p>
+  Топ-списки популярных приложений помогают вам быть в курсе
+ того, что наиболее популярно и востребовано среди пользователей Android, находясь непосредственно на страницах приложений и игр. Эти списки обновляются
+ несколько раз в день на основании последних данных о загрузках. По мере
+ роста рейтинга и количества загрузок приложение может занимать более высокие позиции в топ-списках.
+</p>
+
+<p>
+  Чтобы эти списки представляли интерес для пользователей в любой точке мира,
+ они создаются отдельно для стран, наиболее широко представленных в Google Play. По мере того,
+ как приложения привлекают пользователей и наращивают свои рейтинги и количество загрузок, они поднимаются на более высокие позиции
+ в одном или нескольких топ-списках приложений, становясь еще более открытыми для пользователей.
+</p>
+
+<table style="width:50%;">
+  <tr>
+    <td>
+      Топ бесплатных
+    </td>
+    <td>
+      Списки бесплатных приложений и игр
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Топ платных
+    </td>
+    <td>
+      Списки платных приложений и игр
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Бестселлеры
+    </td>
+    <td>
+      Списки бестселлеров, платных или бесплатных
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Топ новых бесплатных
+    </td>
+    <td>
+      Приложения, опубликованные менее 30 дней назад
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Топ новых платных
+    </td>
+    <td>
+      Приложения, опубликованные менее 30 дней назад
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      Набирающие популярность
+    </td>
+    <td>
+      Новинки с быстро растущим числом установок
+    </td>
+  </tr>
+</table>
+
+<div class="headerLine">
+  <h2 id="featured-staff-picks">
+    Списки "Рекомендуемые", "Выбор Google", коллекции и отличительные значки
+  </h2>
+
+
+</div>
+
+<p>
+  Редакция Google Play стремится привлечь внимание пользователей
+ к самым лучшим приложениям, определяя уровень качества для всего содержимого магазина.
+  Все содержимое Google Play регулярно проверяется для выявления не только
+ наиболее популярных приложений и игр, но также приложений с большим потенциалом, на которые желательно
+ обратить внимание пользователей. Редакторы способствуют продвижению
+ качественных приложений, размещая их в списках <em>Рекомендуемые</em>, <em>Выбор Google</em> и других коллекциях.
+</p>
+
+<p>
+  Вы сами не сможете предложить свое приложение для рекомендации, однако редакция
+ постоянно отслеживает появление качественных приложений в Google Play. Если вы создадите приложение, которое понравится пользователям и будет
+ отлично работать на устройствах Android, редакторы его непременно заметят.
+</p>
+
+<h3 id="featured-staff-picks2">
+  Коллекции "Рекомендуемые" и "Выбор Google"
+</h3>
+
+<p>
+  Еженедельно коллектив редакции Google Play выбирает новый набор приложений
+ для размещения в популярных коллекциях <em>Рекомендуемые</em> и <em>Выбор Google</em>
+.
+</p>
+
+<p>
+  Коллекция <em>Рекомендуемые</em> содержит самые свежие и качественные
+ приложения и игры для Android. Этот список также включает в себя самые лучшие и наиболее популярные
+ приложения из топ-категорий. Коллекция <em>Выбор Google</em>
+ содержит все недавно рекомендованные приложения и игры из Google Play. Чтобы не обойти вниманием
+ пользователей планшетов, специальная коллекция <em>Выбор Google</em> выделяет
+ наилучшие приложения для пользователей планшетов Android.
+</p>
+
+<table style="text-align:center;margin:1.5em 0;">
+  <tr>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks1.jpg">
+      <p>
+        Рекомендуемые
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks2.jpg">
+      <p>
+        Коллекция
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks3.jpg">
+      <p>
+        Выбор редакции
+      </p>
+    </td>
+  </tr>
+</table>
+
+<h3 id="collections">
+  Коллекции приложений
+</h3>
+
+<p>
+  В отдельных случаях редакция составляет специальную коллекцию игр и приложений,
+ объединенную какой-либо темой или сезонным событием. Своевременный выход коллекции привлекает пользователей,
+ они чаще обращаются к таким спискам для выбора приложений.
+</p>
+
+<p>
+  Сотрудники редакции выбирают для коллекции наиболее качественные приложения,
+ которые максимально используют возможности Android на смартфонах и планшетах. Сотрудники
+ также ищут приложения, которые могут стать интересным или уникальным дополнением
+ для коллекции в целом.
+</p>
+
+<h3 id="editors-choice">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/editorschoice_ann.png"> Выбор редакции
+</h3>
+
+<p>
+  <em>Выбор редакции</em> представляет собой рекомендованную коллекцию,
+ выделяющую некоторые из самых лучших приложений для Android. Редакторы выбирают такие приложения
+ по критериям качества, удобности интерфейса, длительной популярности и изобретательного использования
+ возможностей Android.
+</p>
+
+<p>
+  Приложения, вошедшие в коллекцию <em>Выбор редакции</em>, также получают отличительный значок,
+ который сопровождает название приложения во всех разделах Google Play.
+</p>
+
+<h3 id="top-developer">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/topdev_ann.png">Топ-разработчик
+</h3>
+
+<p>
+  Значком топ-разработчика награждаются признанные, авторитетные разработчики
+ за стремление к выпуску качественных и оригинальных приложений для Android.
+  Редакция Google Play периодически награждает этим отличительным значком
+ разработчиков по итогам их работы в целом.
+</p>
+
+<p>
+  Значок топ-разработчика отображается рядом с его именем во всех
+ разделах Google Play. Этот отличительный значок предполагает длительное признание
+ всех приложений разработчика. Он означает повышенный уровень доверия пользователей
+ к продуктам такого разработчика.
+</p>
+
+<div class="headerLine">
+  <h2 id="product-detail-pages">
+    Страницы приложений в каталоге магазина
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-listing.jpg">
+</div>
+
+<p>
+  Витриной приложения в Google Play является его красочная цветная <em>страница в каталоге</em>,
+ которая рекламирует приложение, а также выделяет отзывы о нем,
+ его рейтинги и возможности.
+</p>
+
+<p>
+  Каталог &mdash; это то место, где пользователи могут узнать всю информацию о приложении.
+ Когда пользователи видят приложение в результатах поиска, топ-списках, категориях и
+ коллекциях, одно касание перемещает их непосредственно на страницу каталога.
+</p>
+
+<p>
+  С помощью <a href="https://play.google.com/apps/publish/">консоли разработчика Google Play</a> можно управлять страницей
+ сведений о продукте из любого веб-браузера. Войдите в консоль, чтобы выгрузить или обновить данные для своих брендов,
+ введите подробные сведения о продуктах на языках своих потенциальных рынков.
+</p>
+
+<p>
+  После публикации Google Play добавляет на страницу приложения его рейтинги, отзывы, ссылки на другие
+ ваши продукты и прочую информацию. Google Play также обеспечивает корректное отображение страницы каталога
+ на телефонах, планшетах и в веб-браузере.
+</p>
+
+<p>
+  Вы можете направить веб-пользователей прямо на страницу со сведениями о своем продукте
+ по ссылке, размещенной за пределами Google Play, например, со своего веб-сайта, рекламного баннера, обзоров, сообщений в социальных сетях
+ и из других мест. Информацию о размещении ссылок см. в разделе <a href="{@docRoot}distribute/tools/promote/linking.html">Ссылки на ваши
+ продукты</a>.
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="headerLine">
+<h2>Связанные ресурсы</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="4"></div>
+    </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/auto.jd b/docs/html-intl/intl/ru/distribute/googleplay/auto.jd
new file mode 100644
index 0000000..3fc82dd5
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/auto.jd
@@ -0,0 +1,230 @@
+page.title=Распространение приложений для Android Auto
+page.image=/design/auto/images/auto-overview.png
+meta.tags="auto", "publish", "quality"
+page.tags="auto", "publish", "googleplay"
+page.metaDescription=Распространяйте свои приложения и контент для Android Auto.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Как стать участником</h2>
+<ol>
+<li><a href="#understand_guidelines">Изучите инструкции</a></li>
+<li><a href="#develop_app">Создайте качественное автоприложение</a></li>
+<li><a href="#test_app">Проверьте качество автоприложения</a></li>
+<li><a href="#opt_in">Примите условия Android Auto</a></li>
+<li><a href="#track_review">Дождитесь результатов проверки</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/auto.html">Качество автоприложений</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Если вы создали качественное приложение, Android Auto и Google Play помогут
+ предложить его пользователям прямо в их автомобилях. Вы можете
+ адаптировать новые или существующие приложения для соответствия требованиям автоприложений, а затем опубликовать их, используя знакомые
+ инструменты и процессы Google Play.
+</p>
+
+<p>
+  Для начала ознакомьтесь с разделами этого документа, чтобы узнать
+ о распространении автоприложений через Google Play. Обязательно изучите документ
+ <a href="{@docRoot}distribute/essentials/quality/auto.html">Качество автоприложений</a>,
+ описывающий требования к эргономике, качеству и безопасности, которым должно соответствовать
+ ваше приложение. Когда приложение будет готово, вы можете принять условия в консоли разработчика и загрузить
+ пакет APK для проверки.
+</p>
+
+<h2 id="how_to_participate">
+  Как стать участником
+</h2>
+
+<p>
+  Google Play позволяет предоставлять приложения для применения в транспортных средствах. Для разработки и публикации можно использовать свою
+ существующую учетную запись в консоли разработчика и текущие настройки распространения и ценообразования. Процесс
+ участия довольно прост и кратко описан в следующих разделах.
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-auto-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1. Изучите инструкции и требования
+</h3>
+
+<p>
+  Чтобы подготовить успешный запуск приложения на Android Auto, начните с изучения
+ руководств по созданию качественных интерфейсов для автоприложений. Воспользуйтесь приведенными в <a href="{@docRoot}design/auto/index.html">Руководстве по проектированию для Android Auto</a>
+ советами по преобразованию приложений в автоприложения, а также подробной информацией по проектированию и эргономике приложений.
+</p>
+
+<p>
+  Приступив к проектированию интерфейса для автоприложения, обязательно изучите
+ критерии качества для этих приложений. Для получения соответствующего статуса в Google Play приложение должно
+ специально разрабатываться как автоприложение и соответствовать набору основных критериев
+ качества. Чтобы получить более подробную информацию, см.
+ <a href="{@docRoot}distribute/essentials/quality/auto.html">Качество
+ автоприложений</a>.
+</p>
+
+<h3 id="develop_app">2. Создайте качественное автоприложение</h3>
+
+<p>
+  Качественно спроектированное автоприложение предназначено для использования в
+ транспортном средстве и использует возможности Android Auto. Приложение должно быть максимально удобным для пользователя, находящегося
+ за рулем, обеспечивая, например, воспроизведение аудиофайлов или сообщений.
+</p>
+
+<p>
+  Планируя создание автоприложения, изучите <a href="{@docRoot}training/auto/start/index.html">документацию для разработчиков</a>,
+ инструкции по эргономике и постарайтесь максимально их
+ придерживаться. Постарайтесь спроектировать качественный интерфейс, следуя нашим рекомендациям,
+ как избегать отвлекающих факторов для водителя.
+</p>
+
+<p>
+  Адаптированный для Android Auto интерфейс можно выкладывать вместе с существующим приложением для телефонов, планшетов и других
+ устройств, используя то же имя пакета и ту же страницу каталога.
+</p>
+
+<h3 id="test_app">3. Проверьте качество автоприложения</h3>
+
+<p>
+  Ваши автоприложения должны обладать высокой производительностью,
+ хорошо вписываться в интерьер автомобиля и быть максимально удобными для пользователя. Выбранные лучшие автоприложения демонстрируются на страницах
+ Google Play, что упрощает их обнаружение пользователями. Выполнив следующие шаги, вы сможете стать участником этой программы
+ и создать приложение для Android Auto, которое понравится пользователям.
+</p>
+
+<ul>
+  <li>Выполните требования документа <a href="{@docRoot}distribute/essentials/quality/auto.html">Качество
+ автоприложений</a>
+    <ul>
+      <li>Воспользуйтесь практическими советами по <a href="{@docRoot}training/auto/index.html">разработке
+ автоприложений</a></li>
+      <li>Убедитесь в том, что приложение соответствует всем критериям <a href="{@docRoot}distribute/essentials/quality/auto.html">качества автоприложений</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4. Примите условия Android Auto и опубликуйте приложение</h3>
+
+<p>
+  Перед загрузкой своего пакета APK и публикацией приложения для последующей
+проверки разработчик должен принять
+ <a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html">условия Android Auto</a>,
+ приведенные в разделе <strong>Цены и распространение</strong> консоли
+ разработчика. Принятие этих условий означает, что вы хотите открыть доступ пользователям
+ Android Auto к своему приложению через Google Play, а также то,
+ что приложение соответствует критериям <a href="{@docRoot}distribute/essentials/quality/auto.html">качества
+ для автоприложений</a>.
+</p>
+
+<p>
+  Автоприложение может быть загружено для доступа только после принятия этих условий. Ниже описывается,
+ какие приложения могут считаться автоприложениями.
+</p>
+
+<ul>
+  <li>В манифесте приложения должна быть декларирована запись метаданных <code>com.google.android.gms.car.application</code>
+ с функциональными возможностями автомобиля, используемыми приложением. Чтобы получить более подробную информацию
+ о конфигурации приложения для Android Auto, см. 
+<a href="{@docRoot}training/auto/start/index.html#auto-metadata">Начало работы с Android Auto</a>.
+  </li>
+</ul>
+
+<p>
+  Создав готовый к выпуску пакет APK и проверив его на соответствие
+ требованиям <a href="{@docRoot}distribute/essentials/quality/auto.html">качества
+автоприложений</a>, загрузите пакет в консоль разработчика. Добавьте дополнительные
+ сведения об используемых функциях Android Auto на странице своего каталога и установите нужные параметры
+ распространения. Если вы не знаете, как подготовить приложение к публикации на Google Play,
+ изучите <a href="{@docRoot}distribute/googleplay/publish/preparing.html">Контрольный список выпуска приложения
+ при публикации приложения.</a>
+</p>
+
+<p>
+  После принятия условий и сохранения изменений вы можете загрузить и опубликовать свое приложение в обычном порядке.
+  Перед тем, как открыть доступ к приложению пользователям Android Auto, Google Play передает
+приложение на проверку его соответствия критериям <a href="{@docRoot}distribute/essentials/quality/auto.html">качества автоприложений</a>
+и уведомляет о ее результатах. Если приложение было одобрено, Google Play делает его 
+доступным пользователям Android Auto. Подробная информация о том, как отслеживать статус подтверждения приложения, приведена
+ в следующем разделе.
+</p>
+
+<p>
+  Следует отметить, что результат проверки влияет на доступность приложения в магазине Google Play и для
+ других устройств, например, для телефонов и планшетов.
+  Если в существующем приложении был обновлен компонент для телефона
+ или планшета, то прежде чем обновленное приложение станет доступным
+ в Google Play, его компонент для Android Auto должен пройти проверку.
+</p>
+
+<p>
+  Ниже приведены шаги по принятию условий Android Auto в консоли разработчика.
+</p>
+
+<ol>
+  <li>Убедитесь, что приложение соответствует всем критериям <a href="{@docRoot}distribute/essentials/quality/auto.html">качества автоприложений</a>.
+  </li>
+
+  <li>Выберите публикуемое приложение на странице <strong>Все приложения</strong>.
+  </li>
+
+  <li>В списке <strong>Цена и распространение</strong> найдите пункт <em>Android Auto</em> и ссылку
+ на условия.
+  </li>
+
+  <li>Перейдите по ссылке на <em>условия</em>.
+  </li>
+
+  <li>Внимательно прочитайте условия и выберите <em>Согласен</em>.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png">
+  <p class="caption">
+    <strong>Согласие с условиями для автоприложений:</strong> включите свое приложение в Android Auto, согласившись
+ с условиями из консоли разработчика.
+  </p>
+</div>
+
+<h3 id="track_review">5. Отслеживание результатов проверки</h3>
+
+<p>
+  Ваше приложение будет проверено на отсутствие отвлекающих факторов для водителя,
+ а также на соответствие описанным выше техническим требованиям и критериям качества. Этот процесс тщательной проверки может потребовать больше времени
+ в сравнении с проверкой обычных приложений для телефонов или планшетов.
+  До прохождения проверки приложение или его обновление не могут быть опубликованы в Google Play.
+  После успешного прохождения проверки приложение будет опубликовано
+ и станет доступно пользователям Google Play.
+</p>
+
+<p>Если приложение не было принято, вы получите <strong>уведомление на адрес
+ электронной почты, указанный в учетной записи разработчика</strong>, с описанием проблем, которые следует устранить. После
+ внесения необходимых исправлений вы можете загрузить новую
+ версию своего приложения в консоль разработчика.
+</p>
+
+<p>
+  Обратите внимание, что в случае, когда обновление существующего приложения
+ не удовлетворяет критериям проверки, это обновление отклоняется,
+ а существующее приложение остается опубликованным в Google Play.
+</p>
+
+<p>Процесс оценки приложений более подробно описан в документе <a href="{@docRoot}distribute/essentials/quality/auto.html">Качество автоприложений</a>. </p>
+
+
+  <h3>Связанные ресурсы</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:autolanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/ru/distribute/googleplay/developer-console.jd
new file mode 100644
index 0000000..cb62c2f
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/developer-console.jd
@@ -0,0 +1,584 @@
+page.title=Консоль разработчика
+page.metaDescription=Ознакомьтесь с консолью разработчика, вашим центром публикации приложений в Google Play.
+page.image=/distribute/images/developer-console.jpg
+Xnonavpage=true
+
+@jd:body
+    
+    <div id="qv-wrapper">           
+  <div id="qv">
+    <h2>Возможности для публикации приложений</h2>
+    <ol>
+      <li><a href="#allapps">Раздел "Все приложения"</a></li>
+      <li><a href="#account-details">Данные учетной записи</a></li>
+      <li><a href="#merchant-account">Привязка учетной записи продавца</a></li>
+      <li><a href="#multiple-user-accounts">Поддержка учетных записей нескольких пользователей</a></li>
+      <li><a href="#alpha-beta">Альфа- и бета-тестирование</a></li>
+      <li><a href="#staged-rollouts">Поэтапный выпуск приложения</a></li>
+      <li><a href="#multiple-apk">Поддержка нескольких пакетов APK</a></li>
+      <li><a href="#selling-pricing-your-products">Продажа и назначение цен</a></li>
+      <li><a href="#in-app-products">Продукты, продаваемые в приложениях</a></li>
+      <li><a href="#distribution-controls">Управление распространением</a></li>
+      <li><a href="#reviews-reports">Отзывы пользователей, отчеты об ошибках</a></li>
+      <li><a href="#app-stats">Статистика приложения</a></li>
+      <li><a href="#related-resources">Связанные ресурсы</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  <a href="https://play.google.com/apps/publish/">Консоль разработчика Google Play</a> является основной страницей для вызова
+ инструментов и выполнения операций при публикации приложений.
+</p>
+<!-- <img src="{@docRoot}images/gp-dc-startscreen.jpg" style="width:480px;" /> -->
+<img src="{@docRoot}images/gp-devconsole-home.png" style="width:480px;">
+<p>
+  Здесь вы можете выгрузить приложения, создать страницы для своих продуктов,
+ настроить цены и параметры распространения, опубликовать приложения. С помощью консоли разработчика, доступной через любой веб-браузер, вы
+ можете управлять всеми этапами публикации в Google Play.
+</p>
+
+<p>
+  Для доступа в консоль разработчика Google Play необходимо пройти <a href="{@docRoot}distribute/googleplay/start.html">регистрацию</a> и получить
+ подтверждение по электронной почте.
+</p>
+
+<div class="headerLine">
+  <h2 id="allapps">
+    Раздел "Все приложения"
+  </h2>
+
+
+</div>
+
+<p>
+  Раздел "Все приложения" содержит быстрый обзор ваших приложений,
+ позволяет перейти к их статистике, отзывам, подробной информации о продуктах или загрузить новое приложение.
+</p>
+
+<div style="padding:1em 0em 0em 0em;">
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine" style="margin-top:-6px">
+  <h2 id="account-details">
+    Данные учетной записи
+  </h2>
+
+
+</div>
+
+<p>
+  Укажите основную информацию о себе или своей компании в профиле разработчика
+ на странице данных учетной записи. Эта информация идентифицирует вас для Google Play
+ и ваших клиентов. Указанные данные и свои настройки можно изменить в любое время.
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-profile.png" class="frame">
+</div>
+
+<p>
+  Профиль разработчика содержит следующие данные:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Имя разработчика &mdash; отображается на вашей странице каталога и в других разделах
+ Google Play.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Контактная информация &mdash; используется только Google и не показывается вашим
+ клиентам.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Адрес веб-сайта &mdash; отображается на вашей странице каталога.
+    </p>
+  </li>
+</ul>
+
+<p>
+  На странице данных учетной записи вы можете также добавить ограниченный доступ для помощников по сбыту
+ и других групп, зарегистрировать учетную запись продавца или создать тестовые учетные записи для
+ лицензирования Google Play.
+</p>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    Привязка учетной записи продавца
+  </h2>
+
+
+</div>
+
+<p>
+  Если вы хотите продавать приложения или какие-либо продукты в них, свяжите
+ учетную запись продавца в Google Кошельке со своим профилем разработчика. Google Play использует связанную учетную запись продавца для финансовой
+ и налоговой идентификации, а также для ежемесячных выплат по
+ продажам.
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-user-accounts">
+    Поддержка учетных записей нескольких пользователей
+  </h2>
+
+
+</div>
+
+<p>
+  Настройте учетные записи других членов группы для доступа к различным
+ разделам консоли разработчика.
+</p>
+
+<div style="width:550px;">
+  <img src="{@docRoot}images/gp-dc-invite.png" class="frame">
+</div>
+
+<p>
+  Первой регистрируется учетная запись <em>владельца</em>, который имеет
+ полный доступ ко всем разделам консоли. Владелец может добавлять <em>учетные записи пользователей</em> и
+ управлять доступом к консоли.
+</p>
+
+<p>
+  Например, владелец может разрешить пользователям доступ к публикации и конфигурации приложения,
+ но не к финансовым отчетам. Для более подробной информации ознакомьтесь с <a href="https://support.google.com/googleplay/android-developer/answer/2528691">настройкой
+ нескольких учетных записей</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="store-listing-details">
+    Данные для каталога
+  </h2>
+
+
+</div>
+
+<p>
+  С помощью консоли разработчика можно настроить <em>страницу каталога</em>, которая
+ является основной страницей приложения в Google Play. Эту страницу пользователи видят на своих телефонах
+ или в Интернете, когда хотят узнать подробности о вашем приложении или загрузить его.
+</p>
+
+<p>
+  Выгрузите здесь все сведения о своих брендах, снимки экранов и видеоролики, подчеркивающие преимущества
+ вашего приложения. Предоставьте локализованное описание, примечания о выпуске последней версии
+ и другую нужную информацию. Страницу каталога можно обновить в любое время.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-details.png" class="frame">
+</div>
+
+<div class="headerLine">
+  <h2 id="upload-instantly-publish">
+    Загрузка на веб-сайт и публикация
+  </h2>
+
+
+</div>
+
+<p>
+  Из консоли разработчика можно быстро загрузить и опубликовать на веб-сайте файл пакета готового к выпуску
+ приложения Android. Приложение имеет статус <em>черновой версии</em> до момента своей публикации, после
+ которой Google Play в течение нескольких часов открывает пользователям
+ доступ к приложению и его странице в каталоге магазина.
+
+</p>
+
+<p>
+  Данные опубликованного приложения можно обновлять как угодно часто: изменять
+ цены, конфигурацию и параметры распространения в любой момент, без необходимости
+ обновлять двоичный файл приложения.
+</p>
+
+<p>
+  В случае добавления функций или исправления проблем обновленный двоичный файл
+ можно опубликовать в любое время. Новая версия сразу же становится доступной, а существующие пользователи
+ получают уведомление о готовом к загрузке обновлении. Пользователи также могут 
+ принимать автоматические обновления приложения, которые будут
+ передаваться и устанавливаться сразу после публикации. Вы можете отменить публикацию своих приложений в любое
+ время.
+</p>
+
+<div class="headerLine">
+  <h2 id="alpha-beta">
+    Альфа- и бета-тестирование
+  </h2>
+
+
+</div>
+
+<p>
+  Практические отзывы от пользователей всегда ценны для разработчика, особенно
+ перед выпуском приложения. Google Play упрощает распространение предварительных версий приложения
+ для групп, занимающихся альфа- и бета-тестированием в любой стране мира.
+</p>
+
+<p>
+  В разделе <strong>APK</strong> консоли разработчика Google Play находятся вкладки
+ <strong>Альфа-тестирование</strong> и
+ <strong>Бета-тестирование</strong>. Здесь можно выгрузить версии файлов APK своего приложения
+ и определить список тестеров в виде <a href="https://support.google.com/groups/answer/46601">группы Google</a> или <a href="https://support.google.com/plus/topic/2888488">сообщества Google+</a>. После
+ этого вы получите ссылку, по которой ваши тестировщики смогут присоединиться
+ к программе тестирования.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-ab.png" class="frame">
+</div>
+
+<p>
+  После присоединения тестировщики смогут перейти на страницу вашего приложения
+ и загрузить из Google Play его альфа- или бета-версию в зависимости от
+ своей группы. В случае, если пользователь оказался участником обеих групп тестирования,
+ Google Play передаст ему альфа-версию приложения.
+</p>
+
+<p>
+  Следует отметить, что пользователи не могут оставлять комментарии или
+ отзывы об альфа- или бета-версиях ваших приложений. Для получения отзывов вы можете использовать <a href="https://support.google.com/groups/answer/46601">группу Google</a> или <a href="https://support.google.com/plus/topic/2888488">сообщество Google+</a>,
+ либо свой адрес электронной почты или собственный веб-сайт.
+</p>
+
+<p>
+  Эти программы тестирования помогут <a href="{@docRoot}distribute/essentials/optimizing-your-app.html">оптимизировать ваши
+ приложения</a>, будут способствовать <a href="{@docRoot}distribute/users/expand-to-new-markets.html">выходу на
+ новые рынки</a>, или <a href="{@docRoot}distribute/users/build-community.html">созданию своего
+ сообщества</a>. Дополнительная информация об использовании бета-тестирования
+ содержится в <a href="{@docRoot}distribute/tools/launch-checklist.html">Контрольном списке выпуска
+ приложения</a> и <a href="{@docRoot}distribute/tools/localization-checklist.html">Контрольном списке
+ локализации</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="staged-rollouts">
+    Поэтапный выпуск приложения
+  </h2>
+
+
+</div>
+
+<p>
+  Вы можете поэтапно выпускать приложения, используя вкладку "Выпуск" в разделе
+ "APK" консоли разработчика Google Play. Здесь можно указать
+ процент пользователей, которые смогут загрузить ваше приложение.
+</p>
+
+<p>
+  Поэтапный выпуск позволяет ограничить последствия непредвиденных ошибок или нагрузки сервера,
+ а также оценить отзывы по случайной выборке пользователей.
+  В процессе поэтапного выпуска пользователи могут оценивать ваши приложения,
+ поэтому, если у вас нет уверенности в их качестве, начните выпуск с небольшого процента пользователей. Обязательно обращайте внимание
+ и реагируйте на любые негативные отзывы.
+</p>
+
+<p>
+  Следует отметить, что установленные для платформы Android <a href="{@docRoot}tools/publishing/versioning.html">требования к управлению версиями</a>
+ не позволяют выполнить возврат к предыдущим версиям. В случае необходимости такого возврата можно выпустить
+ прежний APK с новым номером версии. Однако такой метод следует использовать
+ лишь в качестве крайней меры, поскольку пользователи потеряют доступ к новым возможностям,
+ а прежнее приложение может оказаться несовместимым с изменениями вашего сервера
+ или форматов данных. Поэтому следует обязательно провести <a href="#alpha-beta">альфа- и бета-тестирование</a>
+ своих обновлений.
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-apk">
+    Поддержка нескольких пакетов APK
+  </h2>
+
+
+</div>
+
+<p>
+  В большинстве случаев вам достаточно использовать один пакет приложения (APK),
+ что, как правило, является наиболее простым способом управления и сопровождения
+ приложения. Однако Google Play позволяет также предоставить разные APK
+ для разных устройств.
+</p>
+
+<p>
+  <em>Поддержка нескольких APK</em> позволяет создать несколько пакетов приложения с одинаковым
+ именем, но разными форматами сжатия текстур OpenGL,
+ поддерживаемыми размерами экрана или версиями платформы Android. Вы можете просто
+ загрузить все APK для одного продукта на веб-сайт, а Google Play сам выберет
+ наиболее подходящие варианты для пользователей на основании характеристик
+ их устройств.
+</p>
+
+<p>
+  С помощью параметра <em>Файлы расширения APK</em> можно выложить до двух
+ дополнительных вариантов загрузки для каждого опубликованного APK, включая их модификации. Каждый
+ файл расширения может содержать любой код или ресурсы, а его размер не должен превышать 2 ГБ.
+  Google Play обеспечивает бесплатное размещение этих файлов и обрабатывает
+ их загрузку как часть установки обычного приложения.
+</p>
+
+<div class="headerLine">
+  <h2 id="selling-pricing-your-products">
+    Продажа и назначение цен
+  </h2>
+
+
+</div>
+
+<div class="figure-right">
+  <img src="{@docRoot}images/gp-buyer-currency.png" class="frame">
+</div>
+
+<p>
+  Разработчику предоставляются инструменты для установки цен на приложения и встроенные в них продукты. Загрузка
+ приложения может быть бесплатной или требовать предварительной оплаты.
+</p>
+
+<ul>
+  <li>Если вы публикуете свое приложение в качестве бесплатного, оно должно <strong>оставаться
+ бесплатным в течении всего своего жизненного цикла</strong>. Бесплатные приложения могут быть загружены всеми пользователями Google Play.
+  </li>
+
+  <li>Если приложение опубликовано как платное, впоследствии его можно сделать бесплатным. Приобретение
+ и загрузка платных приложений разрешена только пользователям, зарегистрировавшим
+ способ оплаты в Google Play.
+  </li>
+</ul>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <p>
+      См. <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294&amp;topic=2365624&amp;ctx=topic">список стран</a>,
+ в которых вы можете распространять или продавать
+ свои приложения.
+    </p>
+  </div>
+</div>
+
+<p>
+  Независимо от того, является ли приложение платным или бесплатным, вы можете
+ продавать внутри него различные продукты и подписки. Цены на платные приложения, продаваемые внутри приложений продукты
+ и подписки устанавливаются отдельно.
+</p>
+
+<p>
+  Когда пользователи просматривают страницы приложений в каталоге или
+ инициируют покупку, Google Play показывает им цену в их местной валюте.
+</p>
+
+<p>
+  Для каждого продукта вы сначала устанавливаете цену по умолчанию в своей собственной валюте. Если
+ настройку цен на этом завершить, Google Play будет ежемесячно автоматически устанавливать местные цены
+ на основе цены вашего приложения в долларах США.
+</p>
+
+<p>
+  Однако Google Play дает вам полный контроль над ценами ваших продуктов
+ для каждой страны. Для начала вы можете вручную установить фиксированные местные цены
+ на основе цены по умолчанию, используя функцию <strong>автоматической конвертации цен</strong>.
+ После этого вы можете проверить эти цены и установить новые для любых стран
+ по своему желанию. Цены для стран независимы друг от друга, поэтому вы можете регулировать
+ одну цену, не влияя на другие. Для большинства стран установленная вами цена
+ является окончательной ценой для пользователей (включая налоги).
+</p>
+
+<p>
+  Дополнительную информацию о ценообразовании ваших приложений см. в документе <a href="{@docRoot}distribute/users/expand-to-new-markets.html#localize-your-google-play-listing">
+Выход на новые рынки</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="in-app-products">
+    Продукты, продаваемые в приложении
+  </h2>
+
+
+</div>
+
+<p>
+  Вы можете продавать в приложениях подписки и продукты, используя функцию <a href="{@docRoot}google/play/billing/index.html">продажи контента через приложения</a> как
+ способ получения дополнительных доходов от своих приложений. Продукты, продаваемые в приложениях, являются одноразовыми покупками, тогда как
+ подписки оплачиваются ежемесячно или ежегодно.
+</p>
+
+<p>
+  В разделе <strong>Продукты, продаваемые в приложении</strong> вы можете выполнить следующие
+ действия для опубликованного или чернового пакета APK:
+</p>
+
+<ul>
+  <li>создать списки продаваемых продуктов и подписок;
+  </li>
+
+  <li>установить цены;
+  </li>
+
+  <li>опубликовать новые продаваемые в приложении продукты или отказаться от устаревших.
+  </li>
+</ul>
+
+<p>
+  Дополнительную информацию об организации продаж внутри приложения см. в документе
+ <a href="{@docRoot}google/play/billing/index.html">Продажа контента через приложение</a>. Для продуктов, продаваемых в приложении, используются следующие модели замещения бесплатных услуг платными:
+ <a href="{@docRoot}distribute/monetize/premium.html">премиум</a>, <a href="{@docRoot}distribute/monetize/freemium.html">условно-бесплатная</a> и <a href="{@docRoot}distribute/monetize/subscriptions.html">подписка</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="distribution-controls">
+    Управление распространением
+  </h2>
+
+
+</div>
+
+<p>
+  Управляйте распространением своих приложений по странам и регионам. Для
+ некоторых стран можно указать операторов мобильной связи, на которых будут нацелены ваши продажи. Вы также можете просмотреть
+ список устройств, которым доступно ваше приложение, составленный на основании правил распространения 
+ из файла манифеста приложения.
+</p>
+
+<h3 id="geotargeting">
+  Геотаргетинг
+</h3>
+
+<p>
+  Консоль разработчика позволяет легко управлять географией
+ распространения ваших приложений, не изменяя их файлы.
+ Вы можете выбрать для распространения страны, регионы и даже операторов
+ мобильной связи (в некоторых странах).
+</p>
+
+<p>
+  Перед тем, как разрешить загрузку вашего приложения, Google Play проверяет принадлежность
+ посетителей к его целевым странам. Вы можете изменить настройки
+ распространения для стран и операторов в любой момент, сохранив изменения в консоли разработчика
+ Google Play.
+</p>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-supported-dev-requirements.png" class="frame">
+</div>
+
+<p>
+  Чтобы помочь выходу приложения на международный рынок, вы можете <a href="{@docRoot}distribute/tools/launch-checklist.html#start-localization">локализовать
+ свою страницу каталога</a>, включая данные о приложении, его описание, рекламную графику,
+ снимки экрана и другую информацию.
+</p>
+
+<h3 id="captargeting">
+  Направленность на характеристики устройств
+</h3>
+
+<p>
+  Google Play также позволяет управлять распространением в соответствии
+с возможностями или характеристиками устройств, от которых зависит работа вашего приложения. В манифесте приложения могут быть определены требования различных видов,
+ такие как возможности оборудования, форматы сжатия
+ текстур OpenGL, библиотеки, версии платформы Android и другие характеристики.
+
+</p>
+
+<p>
+  Когда вы выгружаете приложение, Google Play считывает эти требования
+ и устанавливает все необходимые правила распространения. Техническая информация о декларировании требований содержится в документе
+ <a href="{@docRoot}google/play/filters.html">Фильтры в
+ Google Play</a>.
+</p>
+
+<p>
+  Для более точного контроля за распространением Google Play позволяет
+ увидеть все устройства, для которых доступно ваше приложение, исходя из существующих для него требований (при их наличии). В
+ консоли разработчика Google Play вы можете просмотреть список поддерживаемых устройств и даже
+ исключить из него конкретные устройства в случае необходимости.
+</p>
+
+<div class="headerLine">
+  <h2 id="reviews-reports">
+    Отзывы пользователей и отчеты об ошибках
+  </h2>
+
+
+</div>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-dc-reviews.png" class="frame">
+  <p class="img-caption">
+    Раздел отзывов пользователей позволяет просмотреть отзывы по конкретному
+ приложению. Вы можете отфильтровать их различными способами в целях
+ выявления проблем и более эффективной поддержки своих клиентов.
+  </p>
+</div>
+
+<p>
+  Google Play упрощает пользователям отправку отзывов о вашем приложении
+ в интересах остальных пользователей. Эти отзывы позволяют узнать мнение об эргономике приложения, получить
+ запросы на поддержку и информацию о проблемах с функциональностью
+ непосредственно от ваших клиентов.
+</p>
+
+<p>
+  Используйте отчеты об ошибках для отладки и усовершенствования приложения.
+ Отчеты об ошибках включают в себя трассировку стека и другие данные,
+ автоматически переданные с устройств Android.
+</p>
+
+<div class="headerLine">
+  <h2 id="app-stats">
+    Статистика приложения
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:500px">
+  <img src="{@docRoot}images/gp-dc-stats.png">
+  <p class="img-caption">
+    <b>Страница статистики приложения.</b> Различная статистика по установкам
+ конкретного приложения.
+  </p>
+</div>
+
+<p>
+  Вам доступна подробные статистические данные по числу установок вашего приложения.
+</p>
+
+<p>
+  Показатели установок измеряются как по отдельным пользователям, так и по
+ устройствам. Вы можете узнать количество активных установок, общее количество установок,
+ количество обновлений, количество установок по дням, количество удалений приложения и показатели рейтингов.
+</p>
+
+<p>
+  В общей статистике установок можно выделить отдельные показатели, такие как версия платформы Android,
+ устройство, страна, язык, версия приложения и оператор мобильной связи. Данные установок
+ для каждого показателя можно вывести на диаграмму с временной шкалой.
+</p>
+
+<p>
+  Эти диаграммы позволяют увидеть резкие скачки и долговременные тенденции количества установок вашего приложения.
+  Они помогают понять тенденции распространения приложения среди пользователей,
+ соотнести данные статистики с рекламой, заметить эффект усовершенствования приложения и другие факторы. Вы можете более
+ подробно изучить часть значений показателя, добавив конкретные точки на временной шкале.
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="dynamic-grid">
+<div class="headerLine">
+<h2 id="related-resources">Связанные ресурсы</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/developerconsole"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+  </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/families/about.jd b/docs/html-intl/intl/ru/distribute/googleplay/families/about.jd
new file mode 100644
index 0000000..b7f2509
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/families/about.jd
@@ -0,0 +1,61 @@
+page.title=Для всей семьи
+page.metaDescription=Программа Для всей семьи помогает сделать ваши приложения и игры более доступными для семейных пользователей.
+page.image=/distribute/images/about-dff-sm.jpg
+meta.tags="families, googleplay, distribution"
+page.tags="families"
+
+@jd:body
+
+<p>
+  Через несколько недель новый интерфейс Google Play, ориентированный на семейных пользователей,
+ откроет для них новые способы поиска и доступа к качественным приложениям и играм
+ для своих семей.
+</p>
+
+<p>
+  Чтобы поддержать этот раздел магазина, разработчики приглашаются к участию
+ в новой программе "Для всей семьи", направленной на семейные приложения и игры. Приложения,
+ соответствующие <a href="https://support.google.com/googleplay/android-developer/answer/6184502">требованиям
+ программы</a>, будут представлены в новом семейном разделе магазина, в котором
+ родителям будет проще найти подходящие, проверенные и качественные приложения и игры.
+</p>
+
+<img src="{@docRoot}distribute/images/about-dff-sm.jpg">
+
+<p>
+  Предложите для участия в программе свои приложения и игры, используя текущие инструменты и процессы
+ для управления приложениями в консоли разработчика. Приложения, участвующие в программе,
+ станут более открытыми для пользователей, при этом сохранив свои
+ существующие категории, рейтинги и отзывы в других разделах магазина Google Play
+.
+</p>
+
+<h2 id="elibibility">Соответствие требованиям</h2>
+
+<p>
+  Родители и семейные пользователи смогут быстрее найти соответствующие
+ возрасту приложения в семейном разделе Google Play.
+ В программу "Для всей семьи" должны войти как приложения для детей,
+ так и приложения, предназначенные
+ для всех членов семьи. Содержимое приложений для этой аудитории будет проверяться
+ на соответствие специальным инструкциям и
+ правилам.
+</p>
+
+<p>
+  Обязательно ознакомьтесь с правилами, которым должно соответствовать
+ ваше приложение. В их число входят <a href="http://play.google.com/about/developer-content-policy.html">правила в отношении
+ содержимого</a>, <a href="http://play.google.com/about/developer-distribution-agreement.html">Соглашение
+ о распространении ПО</a> и <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Дополнение к соглашению о распространении ПО для программы
+ "Для всей семьи"</a>.
+</p>
+
+<p>
+  Приложение также должно соответствовать <a href="https://support.google.com/googleplay/android-developer/answer/6184502">требованиям программы
+ "Для всей семьи"</a>, приведенным в справочном центре разработчика
+ Google Play.
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">Далее: Участие в программе</a>
+</div>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/ru/distribute/googleplay/families/faq.jd
new file mode 100644
index 0000000..9551108
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/families/faq.jd
@@ -0,0 +1,329 @@
+page.title=Часто задаваемые вопросы
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=Вопросы и ответы по программе Для всей семьи
+
+@jd:body
+
+    <style>
+  dt {
+    font-weight:bold;
+  }
+  </style>
+  
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>Содержание документа</h2>
+<ol>
+  <li><a href="#review">Проверка приложения и участие в программе</a></li>
+  <li><a href="#monetization">Замещение бесплатных услуг платными</a></li>
+  <li><a href="#other">Другие вопросы</a></li>
+</ol>
+</div>
+
+<p>
+  Следующие разделы содержат дополнительную информацию о программе "Для всей семьи"
+ и ответы на общие вопросы, которые могут возникнуть в связи с этой программой.
+</p>
+
+
+<h2 id="review">Проверка приложения и участие в программе</h2>
+
+<dl>
+<dt>Каким образом мое приложение может участвовать в этой программе?</dt>
+
+<dl>
+  <dd>
+    Вы можете присоединиться к программе "Для всей семьи" на вкладке "Цена и распространение"
+ для своего приложения в консоли разработчика Google Play. Используйте <a href="{@docRoot}distribute/googleplay/families/start.html">пошаговые
+ инструкции</a>.
+  </dd>
+
+  <dt>
+    Где я должен сообщить об интерактивных функциях моего приложения? Зачем вы собираете
+ эту информацию?
+  </dt>
+
+  <dd>
+    Раскрытие интерактивных функций является частью анкеты, предназначенной для определения
+ возрастного рейтинга контента. У вас есть возможность просмотреть свои сведения, которые будут раскрыты в
+ процессе присоединения к программе "Для всей семьи". Сбор этой информации
+ помогает пользователям сделать осознанный выбор
+ при оценке вашего приложения.
+  </dd>
+
+  <dt>
+    Что такое COPPA?
+  </dt>
+
+  <dd>
+    COPPA – закон о защите конфиденциальности информации о детях в сети Интернет,
+ принятый Федеральной торговой комиссией (FTC) США. Дополнительные сведения см. в документе FTC – <a href="http://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions">
+ Часто задаваемые вопросы о COPPA</a>. Следует отметить, что Google Play не может предоставить разработчикам консультацию
+ о выполнении требований COPPA или других нормативных актов, связанных с детьми.
+  </dd>
+
+  <dt>
+    Нужно ли предоставлять актуальную политику обеспечения конфиденциальности и где это сделать?
+  </dt>
+
+  <dd>
+    Да, вы должны предоставить ссылку на долгосрочную политику конфиденциальности
+ на страницах своих приложений в каталоге и подтвердить свое соответствие
+ местным правилам обеспечения конфиденциальности в консоли разработчика. Чтобы добавить или проверить свою политику конфиденциальности, выберите свое приложение
+ в консоли разработчика и перейдите к нижней части раздела
+ <strong>Каталог</strong>.
+  </dd>
+
+  <dt>
+    Сколько возрастных групп я могу выбрать?
+  </dt>
+
+  <dd>
+    Вы можете выбрать не более двух смежных возрастных групп. Используются следующие возрастные группы: 5 лет и
+ менее, 6-8 лет, 9-12 лет. Однако, если целевая аудитория приложения
+ охватывает как детей, так и взрослых, следует выбрать категорию <em>Общая
+ аудитория</em>.
+  </dd>
+
+  <dt>
+    Сколько категорий контента можно выбрать в программе "Для всей семьи"?
+
+  </dt>
+
+  <dd>
+    Вы можете выбрать одну категорию в рамках программы "Для всей семьи"
+ и вторую категорию для общего каталога Google Play.
+  </dd>
+
+  <dt>
+    Какие категории используются в программе "Для всей семьи"?
+  </dt>
+
+<ul>
+<li><strong>Игры в стиле "экшен" и приключения</strong>. Эта категория, ориентированная на активные действия игрока, включает широкий диапазон игр,
+ таких как гонки, сказочные приключения и многие другие.
+  </li>
+
+  <li style="list-style: none"><strong>Интеллектуальные игры</strong>. В эту категорию входят игры,
+ заставляющие игрока думать – головоломки, игры на поиск соответствия
+ и им подобные.
+  </li>
+
+  <li><strong>Творчество</strong>. Сюда входят приложения и игры, стимулирующие творческое мышление.
+  Примеры, ожидаемые в этой категории, включают рисование,
+ раскрашивание и другие игры, где вы можете что-то создавать.
+  </li>
+
+  <li><strong>Образование</strong>. Эти приложения и игры имеют образовательный характер и затрагивают
+ математику, естественные науки, ознакомление с алфавитом и счетом, а также множество видов
+ образовательного контента, например, географию и историю.
+  </li>
+
+  <li><strong>Музыка и видео</strong>. Эти приложения и игры содержат музыкальные элементы или видеофрагменты
+ и включают в себя самые разнообразные действия, от игры на пианино
+ до просмотра видео.
+  </li>
+
+  <li><strong>Ролевые игры</strong>. В этих приложениях и играх пользователь может выступить в какой-либо роли,
+ например, повара или врача.
+  </li>
+</ul>
+
+<dl>
+  <dt>
+    Может ли участие в программе "Для всей семьи" стать причиной задержки публикации
+ моего приложения?
+  </dt>
+
+  <dd>
+    Когда вы присоединяетесь к программе "Для всей семьи", Google Play проверяет, подходит ли ваше
+ приложение семейным пользователям. Если приложение удовлетворяет всем
+ требованиям программы, срок его публикации будет не больше обычного. Однако
+ если в процессе проверки приложение было отклонено, срок его публикации
+ задержится. 
+  </dd>
+
+  <dt>
+    Что происходит, если приложение было отклонено от участия в программе "Для всей семьи"?
+  </dt>
+
+  <dd>
+    Если ваше приложение было отклонено от участия в программе "Для всей семьи",
+ причины отказа будут указаны в консоли разработчика и в сообщении по электронной почте. Вам будет предоставлена
+ возможность исправить проблемы и повторно отправить приложение на участие в программе
+ или изменить свою заявку на участие. Обратите внимание, что в случае обновления существующего приложения,
+ опубликованного в Google Play, будет отклонено только обновление (ваше приложение
+ останется опубликованным в магазине Google Play). Если на участие в программе "Для всей семьи"
+ было отправлено новое приложение, не соответствующее требованиям,
+ будет отклонена вся заявка на участие и приложение не будет опубликовано
+ в Google Play. В этом случае вы можете попытаться исправить выявленные проблемы и отправить
+ приложение повторно или отказаться от участия в программе.
+  </dd>
+
+  <dt>
+    Что происходит, если в приложении были обнаружены несоответствия с требованиями
+ программы "Для всей семьи" после его публикации?
+  </dt>
+
+  <dd>
+    Ваше приложение может быть удалено или заблокировано не только
+ в программе "Для всей семьи", но и во всем магазине Google Play. Удаленные приложения могут пройти ту же
+ процедуру решения проблем, что и в случае отклоненных. Блокировка приложений может быть обжалована разработчиком
+ в процессе апелляции.
+  </dd>
+
+  <dt>
+    Если я присоединился к программе "Для всей семьи", могу ли я выйти из нее впоследствии?
+  </dt>
+
+  <dd>
+    Да, вы можете выйти из программы в любое время. Обратите внимание, что после выхода из программы вы потеряете доступ к
+ размещению приложений в новом семейном разделе каталога, а также
+ другие преимущества программы.
+  </dd>
+
+  <dt>
+    Что произойдет, если я обновлю приложение после того, как оно было принято
+ к участию в программе?
+  </dt>
+
+  <dd>
+    Приложения, участвующие в программе "Для всей семьи", должны постоянно
+ обеспечивать свое соответствие требованиям программы. При необходимости
+ метаданные программы, связанные с вашим приложением, можно
+ изменить в разделе "Цены и распространение" консоли разработчика
+ Google Play. Если обновление приложения приводит к изменению
+ его целевой аудитории, мы рекомендуем предупредить об этом пользователей,
+ уже установивших ваше приложение.
+  </dd>
+
+  <dt>
+    Могут ли приложения и игры, использующие вход в учетную запись Google или игровых сервисов Google Play,
+ участвовать в программе "Для всей семьи"?
+  </dt>
+
+  <dd>
+    Те приложения из программы "Для всей семьи", которые полностью ориентированы на детей,
+ т. е. предназначены для возрастных групп 5 лет и менее,
+ 6-8 лет или 9-12 лет, <strong>не могут</strong> использовать вход в Google+
+ или в игровые сервисы Google Play для входа в приложение.
+
+
+    <p>
+      Те приложения из программы "Для всей семьи", которые предназначены для детей и взрослых,
+ могут использовать вход в Google+ или в игровые сервисы Google Play в качестве
+ <strong>дополнительной</strong> возможности входа в приложение. Детям должна быть предоставлена возможность
+ полного доступа к приложению или игре без регистрации в Google+ или в игровых сервисах Google Play.
+    </p>
+  </dd>
+
+  <dt>
+    Мое приложение участвует в программе "Google Play для образования" и интегрировано со входом в Google,
+ чтобы пользователи могли использовать свои школьные учетные записи. Требуются ли в моем приложении
+ какие-либо изменения, касающиеся входа в Google?
+   </dt>
+
+  <dd>
+    Приложения, участвующие в программе "Google Play для образования", могут использовать вход в Google для
+ учетных записей учащихся, если это не является блокирующим требованием для всех пользователей приложения.
+  </dd>
+</dl>
+
+<h2 id="monetization">
+  Замещение бесплатных услуг платными в программе "Для всей семьи"
+</h2>
+
+<dl>
+  <dt>
+    Где можно узнать подробнее о правилах размещения рекламы в программе
+ "Для всей семьи"?
+  </dt>
+
+  <dd>
+    Ознакомьтесь с документом <a href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">
+ Реклама в программе "Для всей семьи"</a>.
+  </dd>
+
+  <dt>
+    Может ли мое приложение содержать рекламные вставки?
+  </dt>
+
+  <dd>
+    В некоторых приложениях допускается использование рекламных вставок. Однако у пользователя
+ должна быть возможность перейти к основным действиям приложения до показа какой-либо рекламы.
+  </dd>
+
+  <dt>
+    Как узнать, соответствует ли используемая мною рекламная сеть правилам размещения
+ рекламы в программе "Для всей семьи"?
+  </dt>
+
+  <dd>
+    Обратитесь к представителям рекламной сети для получения информации
+ об их правилах размещения контента и методах подачи рекламы. Если вы используете сервис AdMob, ознакомьтесь в <a href="https://support.google.com/admob/answer/3248194">справочном центре AdMob</a>
+ с подробной информацией об использовании тегов, которые отметят ваше приложение
+ или конкретный рекламный блок как предназначенные для детей. Разработчик обязан обеспечить соответствие общего интерфейса приложения
+ и встроенной рекламы <a href="https://support.google.com/googleplay/android-developer/answer/6184502">требованиям программы
+ "Для всей семьи"</a>.
+  </dd>
+
+  <dt>
+    Можно ли использовать продажу контента внутри приложения?
+  </dt>
+
+  <dd>
+    Для приложений, участвующих в программе "Для всей семьи", нет каких-либо
+ специальных ограничений на продажу контента внутри приложения (IAP),
+ кроме соответствия требованиям <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Соглашения
+ о распространении ПО для программы "Для всей семьи"</a> и другим
+ применимым нормативным требованиям. Однако Google Play оставляет
+ за собой право отклонять приложения, использующие излишне агрессивные коммерческие методы. Продажа контента во всех приложениях
+ программы "Для всей семьи", предназначенных в основном для детской
+ аудитории, будет защищена паролем, чтобы покупки подтверждались
+ родителями, а не детьми. Следует отметить, что эта защита не распространяется на приложения, 
+ предназначенные для общей аудитории.
+  </dd>
+</dl>
+
+<h2 id="other">
+  Другие вопросы
+</h2>
+
+<dl>
+  <dt>
+    Какова предполагаемая целевая аудитория приложений, участвующих
+в программе "Для всей семьи"?
+  </dt>
+
+  <dd>
+    Наша цель – предоставить родителям и опекунам удобный интерфейс в магазине Google Play,
+ который поможет найти увлекательные приложения для детей и членов семьи,
+ созданные надежными брендами и разработчиками.
+  </dd>
+
+  <dt>
+    Доступна ли программа "Для всей семьи" разработчикам из любых
+ стран?
+  </dt>
+
+  <dd>
+    Программа "Для всей семьи" является глобальной.
+  </dd>
+
+  <dt>
+    Что произойдет с приложениями, опубликованными в категории
+ "Семейные игры"?
+  </dt>
+
+  <dd>
+    Существующая категория "Семейные игры" будет исключена в мае 2015 года. Для приложений,
+ включенных в настоящее время в эту категорию, необходимо выбрать
+ другую категорию магазина Google Play. Приложения, для которых не была выбрана
+ другая категория, попадут в категорию "Случайные игры".
+  </dd>
+</dl>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="https://docs.google.com/forms/d/1EtvUWqlkxS6RxHJjeI-3-7uzdbIZx6n9Cocy2D369B8/viewform" class="next-class-link">Далее: Подписка на новости</a>
+</div>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/families/start.jd b/docs/html-intl/intl/ru/distribute/googleplay/families/start.jd
new file mode 100644
index 0000000..fcb0d34
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/families/start.jd
@@ -0,0 +1,106 @@
+page.title=Участие в программе "Для всей семьи"
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=Присоединяйтесь к программе Для всей семьи, выполнив несколько простых шагов.
+
+@jd:body
+
+<p>
+  Если вы создаете приложение, предназначенное для детей и всех членов семьи, необходимо
+ выполнить несколько действий, описанных ниже, <em>прежде</em> чем вы будете готовы
+ участвовать в программе "Для всей семьи".
+</p>
+
+<ul>
+  <li>Заполните анкету для определения возрастного рейтинга контента вашего приложения,
+ у вас должен быть рейтинг ESRB уровня Everyone (Для всех) или Everyone 10+ (Для всех старше 10).
+  </li>
+
+  <li>Добавьте ссылку на политику конфиденциальности на страницу своего приложения <strong>в каталоге</strong>
+ Google Play.
+  </li>
+
+  <li>Убедитесь, что приложение соответствует всем <a href="https://support.google.com/googleplay/android-developer/answer/6184502">требованиям
+ программы "Для всей семьи".</a>
+  </li>
+</ul>
+
+<p>
+  Теперь, когда приложение готово, вы можете стать участником программы "Для всей семьи"
+ прямо из <a href="https://play.google.com/apps/publish/">консоли разработчика</a>. Участие в программе означает, что вы хотите, чтобы ваше приложение
+ стало доступно в новом, оптимизированном для семейных пользователей интерфейсе
+ Google Play в дополнение к выбранной вами категории в магазине
+Google Play.
+</p>
+
+<p>
+  Участие в программе также подтверждает, что ваше приложение соответствует <a href="http://play.google.com/about/developer-content-policy.html">правилам
+ программы для разработчиков Google Play</a> и <a href="http://play.google.com/about/developer-distribution-agreement.html">Соглашению о распространении ПО</a>,
+ включая <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Дополнение к соглашению о распространении ПО для программы
+"Для всей семьи"</a>. Если вы не знакомы с документами, описывающими эти правила,
+ или с упомянутым дополнением, обязательно прочтите их перед участием в программе.
+</p>
+
+<p>
+  Как только вы будете готовы, следуйте описанным ниже шагам, чтобы стать участником программы "Для всей семьи" для определенного приложения.
+</p>
+
+<ol>
+<li>Выберите на странице <strong>Все приложения</strong> в консоли разработчика то приложение,
+ которое нужно добавить к программе. В списке "Цена и распространение" найдите пункт <strong>Для всей семьи</strong>
+ и флажок участия в программе.<img src="/images/gp-dff-optin.png" style="border:2px solid #ddd;margin:1em 0;">
+  </li>
+
+  <li>Начните процедуру вступления в программу и подтвердите, что ваше приложение
+ соответствует ее требованиям.</li>
+  <li>Если в приложении есть реклама, подтвердите, что она соответствует действующим правилам в отношении рекламы.
+ <img src="/images/gp-dff-appinfo.png" style="border:2px solid #ddd;margin:1em 0;"></li>
+  <li>Выберите предполагаемую возрастную группу из следующих вариантов: "5 лет и младше", "6 - 8 лет", "9 - 12 лет"
+ или "Общая аудитория" (для приложения, предназначенных детям и
+ взрослым). Если приложение предназначено для нескольких возрастных групп, можно выбирать
+ не более двух соседних возрастных групп. Для приложений, имеющих рейтинг ESRB 10+, можно выбирать только из возрастных
+ групп "9 - 12 лет" или "Общая аудитория".
+  </li>
+
+  <li>Выберите категорию для вашего приложения в новом, ориентированном на семейных
+ пользователей интерфейсе Google Play. Также ваше приложение будет доступно в существующей категории в магазине
+ Google Play.</li>
+  <li>Прочтите приложенные документы и подтвердите согласие с их содержимым, затем нажмите
+ <strong>Участвовать в программе</strong>. В завершение нажмите <strong>Отправить обновление</strong> на странице
+ "Цена и распространение", чтобы опубликовать или обновить свое приложение.
+  </li>
+</ol>
+
+<p>
+  Как только вы добавите свое приложение к программе "Для всей семьи",
+ оно будет тщательно проверено, прежде чем его включат в программу.
+</p>
+
+<p class="note">
+  <strong>Примечание</strong>. Опубликованные в рамках программы "Для всей семьи" приложения также доступны для
+ всех пользователей Google Play. 
+</p>
+
+<p>
+  Если вы добавляете к программе приложение, которое публикуете впервые, и оно не
+ соответствует требованиям программы "Для всей семьи", чтобы сделать его доступным
+ пользователям Google Play, необходимо <strong>либо</strong> обновить приложение для
+ соответствия требованиям программы, <strong>либо</strong> снять флажок участия в
+ программе и пройти стандартную процедуру проверки в Google Play.
+</p>
+
+<p>
+  Если вы добавляете к программе приложение, которое уже опубликовано на Google Play,
+ и оно не соответствует требованиям программы "Для всей семьи", оно будет доступно всем
+ пользователям, но чтобы сделать его доступным в новом, оптимизированном для семейных
+ пользователей интерфейсе, необходимо обновить приложение для соответствия требованиям программы.
+</p>
+
+<p>
+  Если публикуется обновление для приложения, которое участвует в программе "Для все
+ семьи", обновление этого приложения должно пройти проверку, предусмотренную для
+ программы, прежде чем оно станет доступно пользователям Google Play.</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">Далее: Часто задаваемые вопросы</a>
+</div>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/guide.jd b/docs/html-intl/intl/ru/distribute/googleplay/guide.jd
new file mode 100644
index 0000000..94d6996
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/guide.jd
@@ -0,0 +1,70 @@
+page.title=Найдите свой путь к успеху в Google Play
+page.metaDescription=Руководство, которое поможет вам успешно реализовать себя как разработчика приложений и игр в Google Play.
+meta.tags="distribute", "bestpractices"
+page.tags="google play", "business", "monetize", "engagement"
+page.image=distribute/images/play_dev_guide.png
+
+@jd:body
+
+<p>
+  Мы создали загружаемую версию руководства, которое поможет вам успешно реализовать
+ себя как разработчика приложений и игр в Google Play. В нем вы найдете описания функциональных возможностей, советы, передовой опыт, которые
+ помогут вам эффективно выстроить свою стратегию.
+</p>
+
+<p>
+  Данное руководство состоит из следующих разделов.
+</p>
+<ul>
+  <li>
+    <strong>Публикация в Google Play</strong> &mdash; с помощью консоли разработчика Google Play,
+ позволяющей предложить ваше приложение 1 миллиарду пользователей Android по всему
+ миру.
+  </li>
+
+  <li>
+    <strong>Качество</strong> &mdash; фундаментальные основы создания удобного приложения,
+ понятное объяснение руководств и правил Google Play.
+  </li>
+
+  <li>
+    <strong>Открытость и доступность</strong> &mdash; обеспечение предельной открытости и доступности ваших приложений
+ для максимально возможной аудитории.
+  </li>
+
+  <li>
+    <strong>Привлечение и удержание</strong> &mdash; объясняется, как превратить каждый случай установки
+ в активного пользователя, а также как удерживать пользователей.
+  </li>
+
+  <li>
+    <strong>Замещение бесплатных услуг платными</strong> &mdash; изложены стратегии замещения бесплатных услуг платными, позволяющие
+ организовать непрерывные и все увеличивающиеся потоки денежных поступлений.
+  </li>
+
+  <li>
+    <strong>Оценка результатов с помощью Google Analytics</strong> &mdash; позволяет понять
+ потребности ваших пользователей, улучшить интерфейс приложения, оптимизировать конвертацию валют, организовать маркетинг.
+  </li>
+
+  <li>
+    <strong>Переход к глобальному режиму работы</strong> &mdash; возможность выпускать ваше
+ приложение на локальных рынках по всему миру.
+  </li>
+</ul>
+
+<p>
+  Загрузите руководство, щелкнув показанное ниже изображение, или <a href="http://goo.gl/DFjbrS">найдите его в Google Play</a>.
+</p>
+
+<p>
+  В ближайшие месяцы это руководство будет выпущено для нескольких дополнительных языков. Регулярно
+ посещайте наш сайт, на котором мы публикуем информацию о новых возможностях
+ и передовом опыте, тем самым помогая более активно распространять и больше зарабатывать на приложениях.
+</p>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:play_dev_guide"
+    data-cardSizes="9x6"
+    data-maxResults="1">
+  </div>
+
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/auto.jd
new file mode 100644
index 0000000..69a93db
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/auto.jd
@@ -0,0 +1,488 @@
+
+page.title=Качество автоприложений
+page.metaDescription=Автомобильные приложения, интегрированные с системами контроля и управления транспортным средством, предоставляют удобный интерфейс, минимально отвлекающий водителя.
+page.image=/distribute/images/gp-auto-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Критерии качества</h2>
+  <ol>
+    <li><a href="#core">Основные критерии качества приложений</a></li>
+    <li><a href="#ux">Графический дизайн и взаимодействие</a></li>
+    <li><a href="#fn">Функциональность</a></li>
+    <li><a href="#faq">Часто задаваемые вопросы</a></li>
+  </ol>
+
+  <h2>См. также:</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+Основные критерии качества приложений</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+Оптимизация ваших приложений</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Руководство по разработке интерфейса пользователя Android Auto
+ для аудиоприложений</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">Руководство по разработке интерфейса пользователя Android Auto
+ для приложений обмена сообщениями</a></li>
+  </ol>
+</div>
+</div>
+
+
+  <img src="{@docRoot}distribute/images/gp-auto-quality.png" style="width:480px;">
+
+
+<p>При проектировании поддержки Android Auto в приложении прежде всего следует избегать факторов, отвлекающих водителя.
+  Приложения, работающие с пользовательским интерфейсом Android Auto, должны как можно меньше отвлекать водителя.
+ Это достигается благодаря таким проверенным методам, как голосовые команды и упрощенный визуальный дизайн.
+</p>
+
+<p>
+  Удобные интерфейсы для применения в автомобилях отличаются своей предсказуемостью.  Приложения, поддерживающие Android Auto,
+ должны отображать оперативную информацию водителю только тогда, когда это необходимо,
+ и использовать простые, предсказуемые шаблоны для обычных задач.
+</p>
+
+<p class="caution">
+  <strong>Внимание!</strong> Критерии, перечисленные на этой странице, относятся к
+ пользовательскому интерфейсу и функциям приложения, которое выполняется на устройствах, подключенных к экрану Android Auto. Соответствие этим критериям является необходимым условием
+ для квалификации в качестве приложений Android Auto в Google Play.
+</p>
+
+
+<div class="headerLine">
+  <h2 id="core">
+  Основные критерии качества приложений
+  </h2>
+
+<p>
+ Помимо приведенных ниже специальных критериев автоприложения должны
+ соответствовать всем базовым требованиям к качеству приложений на платформе Android,
+ подробно описанным в документе <a href="{@docRoot}distribute/essentials/quality/core.html">Основные критерии качества приложений</a>. Руководствуясь
+ этими критериями, проверьте свое приложение на соответствие стандартам
+ Android для навигации и дизайна. Затем снова проверьте свое приложение на соответствие перечисленным
+ здесь специальным критериям для автоприложений, выполняемых
+ на устройстве, которое подключено к Android Auto.
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  Графический дизайн и взаимодействие с пользователем
+  </h2>
+
+</div>
+
+<p>
+  Соблюдение этих критериев означает, что приложение соответствует наиболее важным шаблонам дизайна и взаимодействия,
+ обеспечивая последовательный, интуитивно понятный и удобный пользовательский интерфейс Android Auto. Многие элементы,
+ такие как панель навигации, фон, шрифты и цвета значков, настраиваются и отображаются
+ системой. Собственные элементы дизайна приложения должны соответствовать следующим критериям.
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    Тип
+  </th>
+  <th style="width:54px;">
+    Тест
+  </th>
+  <th>
+    Описание
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="safety">
+    Внимание водителя
+  </td>
+
+  <td id="AU-MV">
+    AU-MV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение не должно отображать на экране Android Auto движущиеся элементы,
+ такие как анимированная графика, игры, видео или индикаторы выполнения.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VA">
+    AU-VA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение не должно отображать какую-либо визуальную или текстовую рекламу на экране Android Auto.  Допускается
+ только аудиореклама.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-IM">
+    AU-IM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Элементы приложения не должны выводить какие-либо изображения на экране Android Auto. Исключения: приложение может показывать
+ одно статическое фоновое изображение
+ в контексте содержимого основного экрана, например обложку альбома, а также может
+ отображать значки на панели навигации.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-DS">
+    AU-DS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложение не должно содержать какие-либо функции, отвлекающие водителя.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VI">
+    AU-VI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Пока приложение активно в Android Auto, оно не должно отображать
+ какую-либо визуальную информацию (уведомления, всплывающие подсказки, видео, изображения, рекламу и т. п.) на экране телефона.
+    </p>
+  </td>
+</tr>
+
+
+
+<tr>
+  <td rowspan="3" id="layout">
+    Компоновка
+  </td>
+
+  <td id="AU-SC">
+    AU-SC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     В приложении не должно быть автоматически прокручивающегося текста.
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td id="AU-FT">
+    AU-FT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно отображать все строки, используя шрифты Roboto двух утвержденных размеров, которые установлены по умолчанию.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-ST">
+    AU-ST
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение не должно отображать строки длиннее 120 символов.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="contrast">
+    Визуальный контраст
+  </td>
+
+  <td id="AU-DM">
+    AU-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно поддерживать дневной режим, отображая темные элементы управления и текст на светлом фоне.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Подробнее</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NM">
+    AU-NM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно поддерживать ночной режим, отображая светлые элементы управления и текст на темном фоне.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Подробнее</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-WI">
+    AU-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно предоставлять наборы белых значков, цвет которых устанавливается
+ системой при обеспечении автоматической компенсации контраста.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Подробнее</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-OC">
+    AU-OC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно предлагать палитру цветов, которая может быть оптимизирована системой для более удобного чтения в автомобиле.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">Подробнее</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="interaction">
+    Взаимодействие
+  </td>
+
+  <td id="AU-VC">
+    AU-VC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно поддерживать голосовые команды.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-AB">
+    AU-AB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Кнопки приложения должны реагировать на действия пользователя не более чем с двухсекундной задержкой.
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  Функциональность
+  </h2>
+
+
+</div>
+
+<p>
+  Выполнение этих требований обеспечивает правильную конфигурацию приложения
+ и его ожидаемое функциональное поведение.
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    Тип
+  </th>
+  <th style="width:54px;">
+    Тест
+  </th>
+  <th>
+    Описание
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="general">
+   Общие
+  </td>
+
+  <td id="AU-LT">
+    AU-LT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно загружаться не дольше 10 секунд.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-FP">
+    AU-FP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Функции автоприложения должны работать в соответствии с требованиями или характеристиками, приведенными в каталоге Google Play.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-RL">
+    AU-RL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     После перезапуска приложения с начального экрана его состояние должно
+ быть восстановлено максимально близко к предыдущему состоянию.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SS">
+    AU-SS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Выполнение любых задач в приложении должно требовать не более шести шагов.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-GO">
+    AU-GO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Любая нефункциональная или заблокированная кнопка приложения должна отображаться серым цветом.
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="media">
+    Мультимедиа
+  </td>
+
+
+  <td id="AU-PA">
+    AU-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     На панели управления приложения должно быть не более четырех основных действий и одного переключателя
+ дополнительных действий (или пяти основных действий без использования дополнительных).
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Подробнее</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SA">
+    AU-SA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Панель дополнительных действий приложения должно содержать не более четырех дополнительных действий и одного переключателя для возврата к основной панели.
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">Подробнее</a>)
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="notifications">
+    Уведомления
+  </td>
+
+  <td id="AU-NA">
+    AU-NA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение не должно содержать рекламу в уведомлениях.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NT">
+    AU-NT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Приложение должно отображать только те уведомления, которые полезны водителю.
+   </p>
+   <p>
+    Примеры.<br />
+    Допускается: уведомление пользователя о новом сообщении.<br />
+    Не допускается: уведомление пользователя о выходе нового альбома.
+    </p>
+  </td>
+</tr>
+
+</table>
+
+<!--
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+-->
+
+<div class="headerLine">
+  <h2 id="faq">
+  Часто задаваемые вопросы
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>Как после подачи приложения на проверку узнать, что оно не соответствует всем
+ требованиям Android Auto?</strong>
+</p>
+<p>Если вы планируете разрабатывать автоприложения, вам предлагаются критерии
+ для соблюдения и тесты для проверки функциональности ваших приложений. Однако даже разработанные с соблюдением всех требований автоприложения не могут быть опубликованы сразу. Присоединяйтесь к
+ <a href="http://g.co/AndroidAutoDev" class="external-link">сообществу разработчиков автоприложений
+ в Google+</a>, чтобы узнать, когда вы сможете передать свои автоприложения на
+ проверку.</p>
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Мое приложение предназначено не только для Android Auto. Если оно не соответствует требованиям
+ для автоприложений, возможна ли его публикация в Google Play для телефонов и
+ планшетов?</strong>
+</p>
+<p>
+  Нет. Когда Google начинает процесс подтверждения автоприложения, оно проходит проверку на безопасность для водителя,
+ а его распространение невозможно
+ без успешного завершения такой проверки. Поскольку для автоприложения используется тот же пакет APK,
+ что для телефонов и планшетов, обновления в Google Play для этих устройств
+ будут недоступны до завершения проверки автоприложения.
+</p>
+
+<p class="caution">
+  <strong>Внимание!</strong> Вследствие этого ограничения не рекомендуется использовать распространяемый APK
+ для создания прототипа автоприложения.
+</p>
+
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..ca1b671
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/core.jd
@@ -0,0 +1,1148 @@
+page.title=Основные критерии качества приложений
+page.metaDescription=Качество приложений напрямую влияет на востребованность вашего приложения: как много будет его установок, каким будут рейтинг и отзывы пользователей, насколько будет популярно приложение и как долго оно будет использоваться.
+page.image=/distribute/images/core-quality-guidelines.jpg
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Критерии качества</h2>
+  <ol>
+    <li><a href="#ux">Дизайн и взаимодействие</a></li>
+        <li><a href="#fn">Функциональность</a></li>
+        <li><a href="#ps">Производительность и стабильность</a></li>
+        <li><a href="#listing">Соответствие требованиям Google Play</a></li>
+
+  </ol>
+  
+  <h2>Тестирование</h2>
+  <ol>
+    <li><a href="#test-environment">Настройка среды тестирования</a></li>
+        <li><a href="#tests">Процедуры тестирования</a></li>
+        </ol>
+
+  <h2>См. также:</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">Качество приложений для планшетных ПК</a></li>
+        <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">Оптимизация приложений</a></li>
+  </ol>
+  
+
+</div>
+</div>
+
+<div class="top-right-float">
+  <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;">
+</div>
+
+<p>
+  Пользователи Android ожидают высокого качества от устанавливаемых приложений. Качество приложений напрямую влияет
+на востребованность вашего приложения: как много будет его установок, каким будут рейтинг и отзывы пользователей,
+ насколько будет популярно приложение и как долго оно будет использоваться
+</p>
+
+<p>
+  Этот документ помогает оценить основные аспекты качества вашего приложения,
+ используя компактный набор основных критериев качества приложений и связанные с ними процедуры проверки. Все приложения Android
+ должны удовлетворять этим критериям.
+</p>
+
+<p>
+  Прежде чем публиковать свои приложения, проверьте их на соответствие
+ данным критериям, убедившись, что они корректно работают на различных
+ устройствах, отвечают стандартам Android в отношении навигации и дизайна,
+ подготовлены к использованию рекламно-популяризаторских возможностей магазина Google Play. Проводимое тестирование может существенно выходить за рамки описанных здесь процедур, цель этого документа
+ – обозначить основные признаки качества, которые должны демонстрироваться всеми приложениями, чтобы вы могли
+ предусмотреть их в своих планах проверки.
+</p>
+
+<p>
+  Если вы разрабатываете свои приложения для планшетных ПК или для
+ программы "Google Play для образования", необходимо учитывать
+ дополнительные критерии качества, которые сформулированы в документах <a href="{@docRoot}distribute/essentials/quality/tablets.html">Качество приложений
+ для планшетных ПК</a> и <a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">Руководство по разработке
+ образовательных приложений</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="ux">
+  Графический дизайн и взаимодействие с пользователем
+  </h2>
+
+
+</div>
+
+<p>
+  Эти критерии подразумевают, что в вашем приложении обеспечивается стандартный графический дизайн Android,
+ а там где это возможно, используются шаблоны взаимодействия, делающие интерфейс пользователя согласованным
+ и интуитивно понятным.
+</p>
+
+<table>
+  <tr>
+    <th style="width:2px;">
+      Область
+    </th>
+    <th style="width:54px;">
+      ИД
+    </th>
+    
+
+    <th>
+      Описание
+    </th>
+    <th style="width:54px;">
+      Тесты
+    </th>
+  </tr>
+  <tr id="UX-B1">
+  <td>Стандартный дизайн</td>
+  <td>
+    UX-B1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложения соответствуют рекомендациям по <a href="{@docRoot}design/index.html">дизайну Android</a>
+ и используют общепринятые <a href="{@docRoot}design/patterns/index.html">значки и шаблоны интерфейса пользователя</a>.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>В приложении не переопределяются привычные функции системных значков (например,
+ кнопка "Назад").
+    </li>
+
+    <li>В приложении не происходит подмена системных значков совершенно новыми значками,
+ если используются стандартные функции интерфейса пользователя.
+    </li>
+
+    <li>Если в предложении предлагается адаптированная версия стандартного системного значка,
+ этот значок должен в значительной степени напоминать исходный системный значок и порядок работы с ним должен соответствовать поведению
+ системного значка.
+    </li>
+
+    <li>Приложение не должно переопределять или некорректно использовать стандартные шаблоны интерфейса пользователя
+ Android, например значки или их действия, чтобы не путать пользователей и не затруднять их работу.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-все</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td rowspan="3">
+    Навигация
+  </td>
+  <td id="UX-N1">
+    UX-N1
+  </td>
+  <td>
+    <p>
+    В приложении поддерживается стандартная системная <a href="{@docRoot}design/patterns/navigation.html">навигация с помощью кнопки "Назад"</a>
+, для которой не используются какие-либо адаптированные экранные подсказки.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td id="UX-N2">
+    UX-N2
+  </td>
+  <td>
+    <p>
+    Любое диалоговое окно можно закрыть с помощью кнопки "Назад".
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr id="UX-N3">
+  <td>
+    UX-N3
+  </td>
+  <td>
+    При нажатии кнопки "Домой" всегда происходит переход к главному экрану
+ устройства.
+  </td>
+  <td>
+    <a href="#core">CR-1</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S1">
+  <td rowspan="2">
+    Уведомления
+  </td>
+  <td>
+    UX-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Уведомления должны соответствовать <a href="{@docRoot}design/patterns/notifications.html">рекомендациям</a> по дизайну Android. В 
+частности, должны быть соблюдены следующие правила.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Несколько уведомлений (там, где это возможно) должны объединяться
+ в один информационный блок.
+    </li>
+
+    <li>Повторение уведомлений возможно только в том случае, если они относятся к текущему событию
+ (например, воспроизведению музыки или телефонному звонку).
+    </li>
+
+    <li>Уведомления не должны содержать рекламу или контент, не относящийся к основной
+ функции приложения, если пользователь явным образом не согласился на получение такой информации.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S2">
+  <td>
+    UX-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложение использует уведомления только в следующих случаях.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Чтобы отметить контекстное изменение, связанное лично с пользователем
+ (например, сообщить о входящем сообщении).
+    </li>
+
+    <li>Чтобы выделить информацию, элементы управления, относящиеся к текущему
+ событию (например, воспроизведению музыки или телефонному звонку).
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="fn">
+  Функциональность
+  </h2>
+
+
+</div>
+
+<p>
+  Этот критерий подразумевает, что обеспечивается исключительно высокая функциональность при работе с приложением,
+ в нем предусмотрены необходимые уровни прав доступа.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Область
+  </th>
+  <th style="width:54px;">
+    ИД
+  </th>
+  <th>
+    Описание
+  </th>
+  <th style="width:54px;">
+    Тесты
+  </th>
+  </tr>
+
+  <tr id="FN-P1">
+  <td rowspan="2">
+    Права доступа
+  </td>
+  <td>
+    FN-P1
+  </td>
+  <td>
+    Приложение запрашивает только <em>абсолютный минимум</em> прав доступа,
+ которые необходимы ему для поддержания основных функциональных возможностей.
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="FN-P2">
+  <td>
+    FN-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложение не запрашивает прав доступа к наиболее важным данным (например,
+ к контактам или системному журналу), а также к платным сервисам 
+ (например, службам дозвона или отправки СМС), если это не связано с основной функциональностью данного
+ приложения.
+    </p>
+  </td>
+  </tr>
+
+  <tr id="FN-L1">
+  <td>
+    Место установки
+  </td>
+  <td>
+    FN-L1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложение нормально работает при установке на SD-карту (если такая возможность поддерживается приложением).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Поддержка установки на SD-карту рекомендована для всех больших приложений
+ (превышающих 10 МБ). См. в руководстве разработчика в разделе <a href="{@docRoot}guide/topics/data/install-location.html">Место 
+установки приложения</a> информацию о том,
+ какие типы приложений должны поддерживать установку на SD-карты.
+    </p>
+  </td>
+  <td>
+    <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A1">
+  <td rowspan="4">
+    Звук
+  </td>
+  <td>
+    FN-A1
+  </td>
+  <td>
+    Звук не должен воспроизводиться, если отображение на экране выключено, за исключением случаев, когда
+ это является основной функциональной задачей (например, если приложение – музыкальный проигрыватель).
+  </td>
+  <td>
+    <a href="#core">CR-7</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A2">
+  <td>
+    FN-A2
+  </td>
+  <td>
+    Звук не должен воспроизводиться,<a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">
+ если экран заблокирован</a>, за исключением случаев, когда это является основной функциональной задачей приложения.
+  </td>
+  <td>
+    <a href="#core">CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A3">
+  <td>
+    FN-A3
+  </td>
+  <td>
+    Звук не должен воспроизводиться на главном экране или при переходе в другое
+ приложение, если это не является основной функциональной задачей данного приложения.
+  </td>
+  <td>
+    <a href="#core">CR-1,<br>
+    CR-2</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A4">
+  <td>
+    FN-A4
+  </td>
+  <td>
+    Воспроизведение звука возобновляется при переходе в приложение
+ или пользователю сообщается, что воспроизведение приостановлено.
+  </td>
+  <td>
+    <a href="#core">CR-1, CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U1">
+  <td rowspan="3">
+    Графика и интерфейс пользователя
+  </td>
+  <td>
+    FN-U1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложение поддерживает как альбомную так и книжную ориентацию экрана (если возможно).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    В обоих ориентациях экрана поддерживаются равные функциональные
+ возможности и действия. Допустимы незначительные изменения в содержимом и режимах представления.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U2">
+  <td>
+    FN-U2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложение рационально использует весь экран в обеих ориентациях
+ без появления "черных полос" при смене ориентации.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Допустимо отображение лишь незначительных черных полос по краям экрана,
+ компенсирующих незначительную разницу в геометрических размерах экранов.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U3">
+  <td>
+    FN-U3
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложения правильно обрабатывают быстрый переход от одной ориентации
+ экрана к другой, не вызывая проблем с визуальным воспроизведением.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S1">
+  <td rowspan="2">
+    Состояние пользователя и приложения
+  </td>
+  <td>
+    FN-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    В приложении не должно оставаться каких-либо запущенных служб при переходе в фоновый
+ режим, если это не требуется для его основной функции.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Например, приложение не должно сохранять службы подключения
+ к сети для получения уведомлений, поддерживать подключение по Bluetooth
+ или оставлять включенным модуль GPS.
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-6</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S2">
+  <td>
+    FN-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Должно обеспечиваться корректное сохранение и восстановление состояние пользователя или приложения.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Приложение сохраняет состояние пользователя или самого приложения при переходе в
+ фоновый режим, предотвращая случайную потерю данных при навигации с помощью
+ кнопки "Назад" или при других изменениях состояния. При возврате из фонового в активный режим приложение должно
+ восстановить сохраненное состояние и все связанные с состоянием операции, ожидавшие
+ выполнения, например, изменения в редактируемых полях, текущее состояние в игре,
+ меню, видео и другие составляющие приложения или игры.
+    </p>
+
+    <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+    <li>Когда приложение вызывается из переключателя последних приложений,
+ восстанавливается состояние пользователя на момент последней работы с этим приложением.
+    </li>
+
+    <li>Когда приложение восстанавливается после пробуждения устройства после
+ блокировки, приложение возвращает пользователя в состояние, соответствующее последнему
+ моменту работы с ним.
+    </li>
+
+    <li>Когда приложение повторно запускается с начального экрана или экрана приложений,
+ его состояние должно быть восстановлено максимально близко к предыдущему состоянию.
+    </li>
+
+    <li>При нажатии кнопки "Назад" приложение позволяет сохранить свое текущее состояние или 
+состояние пользователя, которое в противном случае будет потеряно при переходе назад.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-1, CR-3, CR-5</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ps">
+  Производительность и стабильность
+  </h2>
+
+
+</div>
+
+<p>
+  Этот критерий предполагает, что приложения обеспечивают ожидаемые пользователем
+ высокую производительность, стабильность и быстрое время реакции.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Область
+  </th>
+  <th style="width:54px;">
+    ИД
+  </th>
+  <th>
+    Описание
+  </th>
+  <th style="width:54px;">
+    Тесты
+  </th>
+  </tr>
+
+  <tr id="PS-S1">
+  <td>
+    Стабильность
+  </td>
+  <td>
+    PS-S1
+  </td>
+  <td>
+    Не происходит аварийных или вынужденных закрытий приложения, зависаний или других
+ аномалий в его работе на любых поддерживаемых устройствах.
+  </td>
+  <td>
+    <a href="#core">CR-все</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P1">
+  <td rowspan="2">
+    Производительность
+  </td>
+  <td>
+    PS-P1
+  </td>
+  <td>
+    Приложение загружается быстро или предлагает пользователю соответствующую
+ информацию на экране (индикатор выполнения и т. п.), если для загрузки требуется
+ больше двух секунд.
+  </td>
+  <td>
+    <a href="#core">CR-все</a>, <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P2">
+  <td>
+    PS-P2
+  </td>
+  <td>
+    При включенном режиме StrictMode (см. ниже <a href="#strictmode">Тестирование в режиме
+ StrictMode</a>) отсутствуют красные мигания (предупреждения
+ StrictMode о низкой производительности) при выполнении приложения, включая воспроизведение
+ игр, анимацию и переходы между элементами интерфейса, а также другие элементы приложения.
+  </td>
+  <td>
+    <a href="#PM-1">PM-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-M1">
+  <td>
+    Мультимедиа
+  </td>
+  <td>
+    PS-M1
+  </td>
+  <td>
+    В процессе загрузки и нормальной работы с приложением звуковые и видеоданные
+ воспроизводятся плавно, без щелчков, заминок и прочих артефактов.
+  </td>
+  <td>
+    <a href="#core">CR-все</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V1">
+  <td rowspan="2">
+    Качество визуализации
+  </td>
+  <td>
+    PS-V1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Приложение отображает графику, тексты, изображения и различные элементы интерфейса
+ без заметных искажений, смазываний или эффектов пикселизации.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Приложение обеспечивает высокое качество графики на всех поддерживаемых размерах
+ и форм-факторах экрана, включая <a href="{@docRoot}distribute/essentials/quality/tablet.html">устройства с большими экранами,
+ такие как планшетные ПК</a>.
+    </li>
+
+    <li>Нет ступенчатых артефактов на границах меню, кнопок и других элементах интерфейса
+пользователя.
+    </li>
+    </ol>
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-все</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V2">
+  <td>
+    PS-V2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    В приложении тексты и текстовые блоки отображаются удобными для чтения.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Обеспечивается их правильная компоновка на всех поддерживаемых форм-факторах,
+ включая устройства с большими экранами, такие как планшетные ПК.
+    </li>
+
+    <li>Отсутствуют обрезанные буквы или слова.
+    </li>
+
+    <li>Нет некорректных переносов слов в названиях кнопок и значков.
+    </li>
+
+    <li>Имеется достаточное пространство между текстом и окружающими его элементами.
+    </li>
+    </ol>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/performance" data-sortorder="-timestamp"
+data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="listing">
+  Соответствие требованиям Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  Соблюдение эти критериев подразумевает готовность ваших приложений к публикации в Google Play.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Область
+  </th>
+  <th style="width:54px;">
+    ИД
+  </th>
+  <th>
+    Описание
+  </th>
+  <th style="width:54px;">
+    Тесты
+  </th>
+  </tr>
+
+  <tr id="GP-P1">
+  <td rowspan="2">
+    Политики
+  </td>
+  <td>
+    GP-P1
+  </td>
+  <td>
+    В приложениях должны строго соблюдаться условия <a href="http://play.google.com/about/developer-content-policy.html">Правил программы для
+ разработчиков приложений Google Play</a>, не должно предлагаться неуместное содержимое,
+ нельзя использовать интеллектуальную собственность или товарные знаки других лиц и т. д.
+  </td>
+  <td>
+    <a href="#gp">GP-все</a>
+  </td>
+  </tr>
+
+  <tr id="GP-P2">
+  <td>
+    GP-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Должны быть правильно настроены возрастные ограничения приложения с учетом <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=188189">
+Руководства по определению возрастного рейтинга содержимого</a>.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    В частности, обратите внимание, что приложениям, запрашивающим доступ к данным о
+ местоположении устройства, нельзя назначать возрастной рейтинг "Для всех".
+    </p>
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D1">
+  <td rowspan="3">
+    Страница со сведениями&nbsp;о приложении
+  </td>
+  <td>
+    GP-D1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Картинка для раздела "Рекомендуемые" должна соответствовать правилам, описанным в данной <a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">
+ публикации</a>. Проверьте следующие моменты.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>При публикации приложение должно сопровождаться качественной картинкой для раздела "Рекомендуемые".
+    </li>
+
+    <li>Эта представляющая приложение картинка не должна содержать изображений устройств,
+ снимков экранов или мелкого текста, который станет неразличим при уменьшении
+ масштаба на устройствах с минимальным поддерживаемым размером экрана.
+    </li>
+
+    <li>Картинка для раздела "Рекомендуемые" не должна напоминать рекламу.
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#gp">GP-1, GP-2</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D2">
+  <td>
+    GP-D2
+  </td>
+  <td>
+    На снимках экранов и в видеороликах не должны показываться или упоминаться не поддерживающие Android устройства.
+  </td>
+  <td rowspan="2">
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D3">
+  <td>
+    GP-D3
+  </td>
+  <td>
+    На снимках экранов и в видеороликах не должна содержаться недостоверная
+ информация о контенте и функциональных возможностях вашего приложения.
+  </td>
+  </tr>
+
+  <tr id="GP-X1">
+  <td>
+    Поддержка пользователя
+  </td>
+  <td>
+    GP-X1
+  </td>
+  <td>
+    Ошибки, сообщаемые пользователями на вкладке "Отзывы" на странице Google Play, подлежат
+ исправлению, если они воспроизводимы и происходят на многих разных устройствах.
+    Если ошибка возникает только на нескольких устройствах, ее необходимо исправить,
+ если это особо популярные или новые устройства.
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/play" data-sortorder="-timestamp"
+data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-environment">
+  Настройка среды тестирования
+  </h2>
+
+
+</div>
+
+<p>
+  Чтобы оценить качество своего приложения, вам необходимо настроить подходящее
+ аппаратное обеспечение или эмулировать нужную среду для тестирования.
+</p>
+
+<p>
+  Идеальной средой для тестирования будет небольшое количество реальных устройств,
+ представляющих все основные форм-факторы и аппаратные/программные
+ комбинации, которые сейчас доступны пользователям. Нет необходимости проверять приложение на
+ <em>всех</em> продаваемых устройствах &mdash; лучше выберите небольшое число представителей,
+ буквально один-два на каждый возможный
+ форм-фактор.
+</p>
+
+<p>
+  Если у вас не получается получить реальное устройство для тестирования, необходимо
+ <a href="{@docRoot}tools/devices/index.html">настроить эмулируемые устройства
+ (AVD)</a>, воспроизводящие наиболее распространенные форм-факторы и аппаратные/программные
+ комбинации.
+</p>
+
+<p>
+  Чтобы выйти за рамки начального тестирования, можно добавить больше устройств, больше форм-факторов,
+ а также новые комбинации аппаратного/программного обеспечения к вашей среде тестирования. Также можно
+ увеличить число или сложность тестов и повысить критерии качества.
+</p>
+
+<div class="headerLine">
+  <h2 id="tests">
+  Процедуры тестирования
+  </h2>
+
+
+</div>
+
+<p>
+  Данные процедуры тестирования помогают обнаружить различные типы проблем
+ с качеством ваших приложений. Можно комбинировать эти тесты или интегрировать группы
+ тестов вместе в ваши собственные планы тестирования. См. в приведенных выше разделах сведения о том, как связаны
+ определенные критерии с конкретными тестами.
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    Тип
+  </th>
+  <th style="width:54px;">
+    Тест
+  </th>
+  <th>
+    Описание
+  </th>
+  </tr>
+
+  <tr>
+  <td rowspan="12" id="core">
+    Базовый набор
+  </td>
+  <td>
+    CR-0
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Пройдитесь по всем частям приложения &mdash; проверьте все экраны,
+ диалоги, настройки и все варианты работы пользователя.
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>Если приложение позволяет редактировать или создавать контент, играть в игры
+ или воспроизводить мультимедийные файлы,
+ убедитесь, что такие сценарии включены в проверку по созданию и добавлению контента.
+    </li>
+
+    <li>Испытывая приложение, попробуйте внести изменения в сетевые соединения, в настройки
+ функций, связанных с экономией заряда батареи, GPS
+ или обнаружением устройства, в параметры загрузки системы и т. д.
+    </li>
+    </ol>
+  </td>
+  </tr>
+
+  <tr id="tg2">
+  <td id="core2">
+    CR-1
+  </td>
+  <td>
+    На каждом экране приложения нажмите кнопку перехода на начальную страницу,
+ затем повторно запустите приложение с экрана приложений.
+  </td>
+  </tr>
+
+  <tr id="CR-2">
+  <td>
+    CR-2
+  </td>
+  <td>
+    С каждого экрана приложения выполните переход в другое запущенное приложение,
+ а затем вернитесь в тестируемое, используя переключатель последних приложений.
+  </td>
+  </tr>
+
+  <tr id="CR-3">
+  <td>
+    CR-3
+  </td>
+  <td>
+    Из каждого экрана приложения (и каждого диалогового окна) нажмите кнопку "Назад".
+  </td>
+  </tr>
+
+  <tr id="CR-5">
+  <td>
+    CR-5
+  </td>
+  <td>
+    Для каждого экрана приложения не менее трех раз поверните устройство для переключения
+ между портретной и книжной ориентациями.
+  </td>
+  </tr>
+
+  <tr id="CR-6">
+  <td>
+    CR-6
+  </td>
+  <td>
+    Переключитесь в другое приложение, чтобы перевести тестируемое приложение в фоновый режим. Перейдите в меню
+ "Настройки" и проверьте, нет ли для тестируемого приложения каких либо работающих служб, когда оно переключено
+ в фоновый режим. В ОС Android 4.0 и более поздних версий перейдите на экран приложений
+ и найдите приложение на вкладке "Работающие". В более ранних версиях используйте "Управление
+ приложениями", чтобы проверить наличие запущенных служб.
+  </td>
+  </tr>
+
+  <tr id="CR-7">
+  <td>
+    CR-7
+  </td>
+  <td>
+    Нажмите кнопку питания, чтобы перевести устройство в спящий режим, а затем вновь
+ нажмите кнопку питания, чтобы экран вернулся в активное состояние.
+  </td>
+  </tr>
+
+  <tr id="CR-8">
+  <td>
+    CR-8
+  </td>
+  <td>
+    Настройте блокировку устройства при нажатии кнопки питания. Нажмите кнопку питания,
+ чтобы перевести устройство в спящий режим, а затем вновь нажмите кнопку питания,
+ чтобы экран вернулся в активное состояние, разблокируйте устройство.
+  </td>
+  </tr>
+
+  <tr id="CR-9">
+  <!-- Hardware features -->
+
+  <td>
+    CR-9
+  </td>
+  <td>
+    Для устройств с выдвижной клавиатурой – сложите, а потом выдвиньте клавиатуру
+ хотя бы один раз. Для устройств, имеющих клавиатурные док-станции – выполните подключение
+ устройства к док-станции.
+  </td>
+  </tr>
+
+  <tr id="CR-10">
+  <td>
+    CR-10
+  </td>
+  <td>
+    Для устройств, имеющих порт подключения внешнего экрана – выполните подключение
+ этого экрана.
+  </td>
+  </tr>
+
+  <tr id="CR-11">
+  <td>
+    CR-11
+  </td>
+  <td>
+    Откройте панель уведомлений и внимательно просмотрите все типы уведомлений,
+ которые могут отображаться приложением. Раскройте уведомления, если это возможно (в Android 4.1
+ и более поздних версиях), выполните все предлагаемые действия.
+  </td>
+  </tr>
+
+  <tr id="CR-12">
+  <td>
+    CR-12
+  </td>
+  <td>
+    Ознакомьтесь, какие права доступа запрашиваются приложением, перейдя в "Настройки" &gt;
+ "Информация о приложении".
+  </td>
+  </tr>
+
+  <tr id="tg3">
+  <td>
+    Установка на SD-карту
+  </td>
+  <td>
+    SD-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Повторите тесты из серии <em>Базовый набор</em> с приложением, установленным <a href="{@docRoot}guide/topics/data/install-location.html">на SD-карту устройства</a>
+ (если она поддерживается устройством).
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Чтобы перенести приложение на SD-карту, выберите "Настройки &gt; Информация о приложении &gt;
+ Переместить на SD-карту".
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg32">
+  <td>
+    Аппаратное ускорение
+  </td>
+  <td>
+    HA-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Повторите тесты из серии <em>Базовый набор</em>, включив на устройстве аппаратное ускорение.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Чтобы принудительно задействовать аппаратное ускорение (если оно поддерживается 
+ устройством), добавьте параметр <code>hardware-accelerated="true"</code> к разделу 
+ <code>&lt;application&gt;</code> в манифесте приложения и выполните его повторную компиляцию.
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg33">
+  <td>
+    Контроль производительности
+  </td>
+  <td>
+    PM-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    Повторите тесты из серии <em>Базовый набор</em>, включив режим StrictMode, <a href="#strictmode">как это описано ниже</a>.
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    Уделите особое внимание вопросу очистки памяти и тому, как это влияет на работу
+ пользователя.
+    </p>
+  </td>
+  </tr>
+
+  <tr id="gp">
+  <td rowspan="3">
+    Соответствие требованиям Google Play
+  </td>
+  <td>
+    GP-1
+  </td>
+  <td>
+    Войдите в <a href="https://play.google.com/apps/publish/">консоль
+ разработчика</a>, проверьте свой профиль разработчика, описание приложения,
+ снимки экранов, картинку для раздела "Рекомендуемые", настройки возрастного рейтинга, а также отзывы пользователей.
+  </td>
+  </tr>
+
+  <tr id="GP-2">
+  <td>
+    GP-2
+  </td>
+  <td>
+    Загрузите снимки экранов и картинку для раздела "Рекомендуемые", уменьшите
+ их в соответствие с размерами и форм-факторами поддерживаемых приложением
+ устройств.
+  </td>
+  </tr>
+
+  <tr id="GP-3">
+  <td>
+    GP-3
+  </td>
+  <td>
+    Проверьте все графические ресурсы, мультимедийные данные, тексты, библиотеки кодов и
+ прочее содержимое, упакованное в файл загрузки приложения или расширения к нему.
+  </td>
+  </tr>
+
+  <tr id="GP-4">
+  <td>
+    Платежи
+  </td>
+  <td>
+    GP-4
+  </td>
+  <td>
+    Пройдите по всем экранам своего приложения и проверьте все задействованные в нем процессы покупок.
+  </td>
+  </tr>
+</table>
+
+<h3 id="strictmode">
+  Тестирование в режиме StrictMode
+</h3>
+
+<p>
+  Для проверки производительности мы рекомендуем в приложении включить режим {@link android.os.StrictMode}
+ и использовать его для отслеживания операций в основном и в других
+ потоках приложения, которые могут негативно сказываться на быстродействии, доступе к сети,
+ чтении или записи файлов и т. д.
+</p>
+
+<p>
+  Можно настроить политики контроля каждого из потоков, используя инструмент {@link
+ android.os.StrictMode.ThreadPolicy.Builder} и включив все поддерживаемые
+ функции контроля в <code>ThreadPolicy</code>с помощью параметра {@link
+ android.os.StrictMode.ThreadPolicy.Builder#detectAll()}.
+</p>
+
+<p>
+  Обязательно задействуйте <strong>визуальные уведомления</strong> о нарушениях политик
+ в отношении <code>ThreadPolicy</code>, используя {@link
+ android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen()
+ penaltyFlashScreen()}.
+</p>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/tablets.jd
new file mode 100644
index 0000000..4e0322f
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/tablets.jd
@@ -0,0 +1,846 @@
+page.title=Качество приложений для планшетных ПК
+page.metaDescription=Планшеты являются быстро растущим сегментом на рынке устройств Android, что обеспечивает новые возможности для ваших приложений.
+page.image=/distribute/images/tablet-guidelines-color.jpg
+Xnonavpage=true
+
+@jd:body
+<div id="qv-wrapper"><div id="qv">
+<h2>Контрольный список</h2>
+<ol>
+<li><a href="#core-app-quality">1. Проверка основных критериев качества приложений для планшетных ПК</a></li>
+<li><a href="#optimize-layouts">2. Оптимизация макетов</a></li>
+<li><a href="#use-extra-space">3. Использование дополнительной области экрана</a></li>
+<li><a href="#use-tablet-icons">4. Применение ресурсов, разработанных для планшетных ПК</a></li>
+<li><a href="#adjust-font-sizes">5. Настройка шрифтов и элементов управления сенсорного экрана</a></li>
+<li><a href="#adjust-widgets">6. Настройка виджетов главного экрана</a></li>
+<li><a href="#offer-full-feature-set">7. Обеспечение полного набора функциональных возможностей</a></li>
+<li><a href="#android-versions">8. Правильный выбор поддерживаемых версий Android</a></li>
+<li><a href="#hardware-requirements">9. Правильное декларирование аппаратных требований</a></li>
+<li><a href="#support-screens">10. Правильное декларирование совместимых планшетных экранов</a></li>
+<li><a href="#google-play">11. Представление планшетного интерфейса для вашего приложения</a></li>
+<li><a href="#google-play-best-practices">12. Следование передовому опыту публикаций в Google Play</a></li>
+
+</ol>
+<h2>Тестирование</h2>
+<ol>
+<li><a href="#test-environment">Настройка среды тестирования</a></li>
+</ol>
+</div></div>
+
+<div class="todp-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/tablet-guidelines-color.jpg" style="width:480px;">
+</div>
+
+<p>
+  Планшеты являются быстро растущим сегментом на рынке устройств Android,
+ что обеспечивает новые возможности для <a href="{@docRoot}distribute/stories/tablets.html">привлечения новых
+ пользователей и замещения бесплатных услуг платными</a>. Рекомендации в этом документе помогут вам оправдать ожидания пользователей
+планшетных ПК, предложив им привлекательные функциональные возможности
+ и удобный, интуитивно понятный интерфейс.
+</p>
+
+<p>
+  Хотя рекомендации пронумерованы, их можно применять в любом порядке. Каждую
+ из рекомендаций необходимо применять разумно и в той мере, в какой она уместна
+ для вашего приложения, стараясь не только обеспечить оптимальное качество продукта,
+ но и в максимально возможной степени удовлетворить ожидания
+ пользователей.
+</p>
+
+<p>
+  В документе содержатся ссылки на различные ресурсы, которые помогут при выполнении
+ каждой из рекомендаций.
+</p>
+
+<div class="headerLine"><h2 id="core-app-quality">1. Проверка основных критериев качества приложений для планшетных ПК</h2></div>
+
+<p>Первым шагом к созданию хорошего планшетного приложения будет соблюдение
+ <em>основных критериев качества</em> для всех устройств
+ и форм-факторов, для которых предназначается приложение. Полную информацию об этом см. в руководстве <a href="{@docRoot}distribute/essentials/quality/core.html">Основные критерии качества приложений</a>. 
+</p>
+
+<p>
+Перед публикацией приложения убедитесь, что выполнены основные технические проверки и соблюдены критерии выпуска, включая следующие:
+</p>
+
+<ul>
+  <li><a href="#android-versions">приложение поддерживает актуальные версии Android;</a></li>
+  <li><a href="#hardware-requirements">правильно указаны имеющиеся аппаратные требования;</a></li>
+  <li><a href="#support-screens">задекларирована поддержка подходящих размеров экранов;</a></li>
+  <li><a href="#use-extra-space">используется все доступное пространство экрана;</a></li>
+  <li><a href="#google-play">в Google Play доступны снимки экранов приложения.</a></li>
+</ul>
+
+<p>Если приложение уже загружено в консоль разработчика Google Play, можно проверить,
+ как оно соответствует всем этим критериям,
+ открыв страницу <a href="#google-play-optimization-tips">Советы по
+ оптимизации</a>.</p>
+
+
+<div class="headerLine">
+<h2 id="optimize-layouts">2. Оптимизация макетов для больших экранов</h2></div>
+
+<p>
+  Система Android упрощает разработку приложений, которые одинаково хорошо работают
+ на широком спектре устройств с различными размерами и форм-факторами экранов. Такая исключительная совместимость
+ дает вам преимущество, позволяя разрабатывать одно приложение, которое затем может распространять
+ для всех поддерживаемых устройств. В то же время, чтобы обеспечить максимально удобный интерфейс для каждой
+ конфигурации экрана &mdash; в особенности для планшетных ПК &mdash; необходимо
+ оптимизировать макеты и другие компоненты интерфейса для каждой из
+ поддерживаемых конфигураций. На планшетах оптимизация интерфейса позволяет
+ полностью использовать преимущества дополнительного экранного пространства, например, предлагая
+ новые возможности, предоставляя новый контент, повышая удобство работы другими способами,
+ и все это делает приложение более привлекательным для пользователей.
+</p>
+
+<p>
+  Если приложение изначально разрабатывалось для смартфонов, но теперь вы хотите
+ распространять его и на планшетных ПК, необходимо начать с внесения минимальных
+ исправлений в макет, шрифты и интервалы между объектами интерфейса. В некоторых случаях &mdash; например, для 7-дюймовых планшетов или для игр, использующих все пространство
+ экрана &mdash; этих настроек может оказаться достаточно, чтобы ваше приложение
+ выглядело великолепно. В других случаях, например, для больших планшетов, можно изменить дизайн
+ некоторых частей интерфейса, заменив "растянутый экран" эффективным интерфейсом
+с несколькими панелями, упростив навигацию и добавив дополнительные элементы.
+</p>
+
+
+<div style="width:500px;margin:1.5em;margin-top:-16px;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">Избавьтесь от "растянутого" интерфейса</span>: На планшетных ПК однопанельные макеты экрана приводят
+ к появлению неуместных пустых пространств и чрезмерной длине линий. Используйте заполнение,
+ чтобы уменьшить ширину интерфейсных элементов, рассмотрите возможность перехода к макетам с несколькими панелями.</p>
+</div>
+
+<p>Ознакомьтесь со следующими рекомендациями.</p>
+
+
+<ul>
+  <li>Обеспечьте необходимые макеты для экранов категории <code>large</code> и
+ <code>xlarge</code>. Также можно подготовить макеты,
+ загружаемые с учетом характеристик экрана: <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">наименьшего значения
+ одного из показателей</a> или <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">минимально
+ доступных ширины и высоты</a>.
+  </li>
+
+  <li>Как минимум, настройте для больших экранов геометрические параметры – размеры
+ шрифтов, поля, интервалы – лучше используя пространство и делая контент нагляднее.
+  </li>
+
+  <li>Настройте расположение интерфейсных элементов управления, так чтобы они были
+ легко доступны пользователям планшетов, например, если они работают с ним в
+ альбомной ориентацией экрана.
+  </li>
+
+  <li>Заполнение для элементов интерфейса на планшетах обычно должно быть больше,
+ чем на смартфонах. Рекомендуемый <a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm">минимальный размер
+ элементов – 48 пикселей</a> (с сеткой 16 пикселей).
+  </li>
+
+  <li>Адекватно используйте заполнение вокруг текста, он не должен располагаться
+ непосредственно по краям экрана. Минимальная величина заполнения вокруг текста на краях экрана должна быть <code>16dp</code>
+ (16 пикселей).
+  </li>
+</ul>
+
+<p>Особенно внимание уделите тому, чтобы ваш макет не выглядел "растянутым"
+ по экрану.</p>
+
+<ul>
+<li>Линии и текст не должны быть чрезмерно длинны &mdash; оптимизируйте текст, чтобы
+ длина строк не превышала 100 символов, а еще лучше – выдержите размер 50-75 символов.</li>
+<li>Прокручиваемые списки элементов ListView и меню не должны занимать всю ширину экрана.</li>
+<li>Используйте заполнение для управления шириной экранных элементов или перехода к
+ планшетным интерфейсам с несколькими панелями (см. следующий раздел).</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/optimize"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="use-extra-space">3. Использование дополнительной области экрана</h2></div>
+
+<div style="width:340px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">Макеты с несколькими панелями</span> обеспечивают лучшую визуальную балансировку планшетных экранов,
+ одновременно обеспечивая их большую эффективность и наглядность.</p>
+</div>
+
+<p>Планшеты обеспечивают значительно больше полезной площади экрана
+ для вашего приложения, особенно в альбомной ориентации. Особенно этот прирост заметен на 10-дюймовых планшетах, но даже 7-дюмовые
+ планшеты добавляют значительное количество места для отображения контента 
+и привлечения пользователей. </p>
+
+<p>Планируя интерфейс пользователя для работы на планшетах, убедитесь, что в нем будут
+ полностью использованы все преимущества доступного дополнительного пространства. Ознакомьтесь
+ со следующими рекомендациями.</p>
+
+<ul>
+<li>Изучите все возможности: можно добавить дополнительный контент или использовать
+ альтернативные способы обработки уже имеющегося контента.</li>
+<li>Используйте на экранах планшетов <a href="{@docRoot}design/patterns/multi-pane-layouts.html">макеты с несколькими панелями</a>, чтобы
+ скомбинировать отдельные представления в одно составное представление. Это
+ позволит использовать дополнительное пространство экрана более эффективно и
+ упростит пользователям навигацию внутри приложения. </li>
+<li>Спланируйте расположение панели в составных представлениях при изменении
+ ориентации экрана.</li>
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+<div style="">
+<img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
+<img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Составные представления</span> объединяют несколько простых представлений из 
+интерфейса для смартфонов<em>(см. верхнюю часть рисунка)</em> в информативном и более эффективном
+ интерфейсе для планшетов <em>(см. нижнюю часть рисунка)</em>. </p>
+</div>
+</div>
+
+<li>Хотя отдельные экраны реализуются с помощью подкласса {@link android.app.Activity}, 
+ старайтесь реализовать отдельные составные панели с помощью подкласса {@link
+android.app.Fragment}. Это позволит повысить
+ применимость программного кода для использующих один и тот же контент экранов,
+ отличающихся форм-факторами и размерами.</li>
+<li>Примите решение, для каких размеров экранов будет использоваться интерфейс с
+ несколькими панелями, а затем предложите разные макеты для подобных размеров экранов (например, для категорий 
+<code>large</code>/<code>xlarge</code>) или для экранов с минимальной шириной (таких, как категории 
+<code>sw600dp</code>/<code>sw720</code>).</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/extrascreen"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="use-tablet-icons">4. Применение ресурсов, разработанных для планшетных ПК</h2></div>
+
+<div><img src="{@docRoot}design/media/devices_displays_density@2x.png"></div>
+
+<p>Чтобы обеспечить оптимальное отображение приложений, подготовьте отдельные значки и
+ другие растровые ресурсы для каждого разрешения экрана, поддерживаемого планшетами. В частности, необходимо
+ изготовить значки для строки действий, уведомлений и значков запуска в соответствии с рекомендациями
+ по <a href="{@docRoot}design/style/iconography.html">дизайну значков</a>, обеспечив для них различное разрешение, так чтобы они отображались
+ с подходящим размером на всех экранах без смазываний или других искажений
+ при масштабировании.</p>
+
+<p class="table-caption"><strong>Таблица 1.</strong> Размеры растровых ресурсов для разных типов значков.<table>
+<tr>
+<th>Разрешение</th>
+<th>Значок запуска</th>
+<th>В строке действий</th>
+<th>Маленький/ в контекстном меню</th>
+<th>Уведомление</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48 пикс.</td>
+<td>32x32 пикс.</td>
+<td>16x16 пикс.</td>
+<td>24x24 пикс.</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72 пикс.</td>
+<td>48x48 пикс.</td>
+<td>24x24 пикс.</td>
+<td>36x36 пикс.</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(используется hdpi)</em></td>
+<td><em>(используется hdpi)</em></td>
+<td><em>(используется hdpi)</em></td>
+<td><em>(используется hdpi)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96 пикс.</td>
+<td>64x64 пикс.</td>
+<td>32x32 пикс.</td>
+<td>48x48 пикс.</td>
+</tr>
+<tr>
+<td><code>xxhdpi</code></td>
+<td>144x144 пикс.</td>
+<td>96x96 пикс.</td>
+<td>48x48 пикс.</td>
+<td>72x72 пикс.</td>
+</tr>
+
+</table>
+
+<p>
+  Как минимум, представьте версию каждого значка и растровый ресурс,
+ оптимизированный <strong>хотя бы для одного</strong> из следующих разрешений,
+ типичных для планшетных экранов.
+</p>
+<ul>
+  <li><code>hdpi</code></li>
+  <li><code>xhdpi</code></li>
+  <li><code>xxhdpi</code></li>
+</ul>
+
+<p>Прочие рекомендации.</p>
+
+<ul>
+<li>При разработке значков используйте векторные формы, которые будут масштабироваться без ухудшения качества деталей и без искажений по краям.</li>
+<li>Используйте предусмотренный для разрешения <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+квалификатор ресурса</a>, чтобы обеспечить загрузку правильных значков для каждого разрешения экрана.</li>
+<li>Для планшетов и других устройств с большими экранами часто требуется значок запуска,
+ который на один "размер разрешения" больше, чем фактическое разрешение экрана,
+ поэтому необходимо подготовить значок запуска с максимально возможным разрешением. Например, если у планшета экран {@code xhdpi},
+ он будет запрашивать версию значка запуска {@code xxhdpi}.</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/assets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-font-sizes">5.
+Настройка размеров шрифтов и элементов управления сенсорного экрана</h2></div>
+
+<p>Чтобы обеспечить оптимальную работу с вашим приложением на планшетных устройствах,
+ выполните настройку размера шрифта и элементов управления в своем планшетном
+ интерфейсе для всех поддерживаемых конфигураций экранов. Можно настроить размер шрифтов с помощью <a href="{@docRoot}guide/topics/ui/themes.html">стилизующих атрибутов</a> или <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">ресурсов
+ размеров</a>, также можно настроить элементы управления сенсорного экрана с
+ помощью макетов и растягиваемых растровых ресурсов, как описано выше. </p>
+
+<p>Ознакомьтесь со следующими рекомендациями.</p>
+<ul>
+<li>Текст не должен выглядеть чрезмерно большим или слишком маленьким на всех экранах
+ планшетов, независимо от их размера и разрешения. Убедитесь, что размеры для надписей элементов интерфейса подобраны в соответствии с
+ элементами, к которым они относятся; проверьте, нет ли неуместных переносов в этих
+ надписях, заголовках и других элементах.</li>
+<li>Рекомендуемый размер для элементов управления сенсорного экрана составляет 48 пикселей
+ (минимум 32 пикселя) &mdash; возможно потребуется настройка вашего интерфейса.
+ См. информацию о стратегиях внедрения, которые помогут большинству пользователей, в
+ документе <a href="{@docRoot}design/style/metrics-grids.html">Количественные показатели и сетка</a>. Чтобы удовлетворить потребность некоторых пользователей в доступных
+ элементах управления, будет уместно использовать элементы управления
+ большего размера. </li>
+<li>Там, где это возможно, для маленьких значков расширьте область касания, сделайте ее больше
+48 пикселей, используя класс {@link android.view.TouchDelegate},
+ или просто поместите значок в центр прозрачной кнопки.</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/fonts"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-widgets">6. Настройка размеров виджетов главного экрана</h2></div>
+
+<p>Если в вашем приложении содержится виджет для главного экрана, здесь объясняется ряд
+ моментов, учтя которые, вы сделаете приложение удобным для пользователей планшетов. </p>
+
+<ul>
+<li>Установите для высоты и ширины виджета по умолчанию значение, пригодное для
+ планшетного экрана, сделайте это для минимального и максимального значений изменения высоты и ширины виджета.
+</li>
+<li>Виджет должен иметь возможность растягиваться до 420 пикселей и более, чтобы занимать
+ 5 и более строк начального экрана (если это вертикальный или квадратный виджет) или
+ столбцов (если это горизонтальный или квадратный виджет). </li>
+<li>Убедитесь, что созданные с помощью 9-Patch изображения отображаются корректно.</li>
+<li>Используйте заданные по умолчанию системные границы.</li>
+<li>Установите в манифесте приложения для атрибута <code>targetSdkVersion</code> значение 14 или выше, если
+ это возможно.</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/widgets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="offer-full-feature-set">7. Обеспечение полного набора функциональных возможностей для пользователей планшетов</h2></div>
+
+<div class="centered-full-image" style="width:600px;margin:1.5em"><img src="{@docRoot}images/gp-tablets-full-feature-set.png" alt="Tablet feature sets"></div>
+
+<p>Предложите пользователям планшетов наилучшие возможности вашего
+ приложения. Вот несколько рекомендаций.</p>
+
+<ul>
+  <li>Спроектируйте свое приложение так, чтобы для планшетов предлагался как минимум такой
+ же набор возможностей, что и на мобильных телефонах.
+  </li>
+
+  <li>В особых случаях в планшетной версии приложения можно исключить или заменить некоторые
+ функции, если они не поддерживаются имеющимся оборудованием
+ или стандартными сценариями использования большинства планшетов. Например:
+    <ul>
+      <li>Если смартфон использует функции телефонной связи, но они не доступны на данном планшете,
+ можно исключить или заменить соответствующую функцию.
+      </li>
+
+      <li>Во многих планшетах есть датчик GPS, но большинство пользователей обычно
+не берут свои планшеты на пробежку. Если ваше приложение для телефона предлагает
+ пользователям возможность записать с помощью GPS маршрут, который вы пробежали с телефоном,
+ нет смысла добавлять эту функцию в приложение для планшетов, поскольку этот сценарий использования
+ не будет востребован.
+      </li>
+    </ul>
+  </li>
+
+  <li>Если вы исключаете какую-то функцию или совместимость из своего интерфейса для
+ планшетов, убедитесь, что она действительно недоступна, а также проверьте работоспособность
+ основных функций без этой возможности (см. раздел об аппаратных возможностях ниже).
+  </li>
+</ul>
+
+<div class="headerLine"><h2 id="android-versions">8. Правильный выбор поддерживаемых версий Android</h2></div>
+
+<p>
+  Чтобы обеспечить максимальное распространение приложения на планшетах, убедитесь, что
+ для него верно указаны совместимые версии Android и они поддерживают планшеты. Первоначально
+ поддержка планшетов была добавлена в <a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a> (уровень API 11).
+  Единая платформа
+ пользовательского интерфейса для планшетов, телефонов и других устройств была представлена в <a href="{@docRoot}about/versions/android-4.0.html">Android
+ 4.0</a>
+</p>
+
+<p>
+  Можно настроить диапазон поддерживаемых версий Android,
+ используя элемент <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>в файле
+ манифеста. В большинстве случаев можно правильно определить совместимые версии Android,
+ установив в атрибуте <code>targetSdkVersion</code> этого элемента максимально доступный
+ уровень API.
+</p>
+
+<p style="margin-bottom:.5em;">
+  Как минимум, проверьте элемент <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>,
+ проконтролировав следующие моменты.
+</p>
+
+<ol style="list-style-type:lower-alpha;margin-top:0em;">
+  <li>
+    Атрибут <code>targetSdkVersion</code> задекларирован со значением 11 или выше (рекомендуется 14 или
+ выше).
+  </li>
+
+  <li>
+    ИЛИ, атрибут <code>minSdkVersion</code> задекларирован со значением 11 или выше.
+  </li>
+
+  <li>Если задекларирован атрибут <code>maxSdkVersion</code>, он должен иметь значение
+ 11 или выше. Обратите внимание, что, как правило, применение атрибута
+ <code>maxSdkVersion</code> <em>не рекомендуется</em>.
+  </li>
+</ol>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/versions"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="hardware-requirements">9. Правильное декларирование требований аппаратных требований</h2></div>
+
+<p>
+  Смартфоны и планшетные ПК обычно обеспечивают немного разную поддержку для
+ датчиков, камеры, телефона и других встроенных функций. Например, на многих планшетах предусмотрена конфигурация Wi-Fi,
+ не включающая поддержку функций телефонной связи.
+</p>
+
+<p>
+  Таким образом, чтобы распространять один APK для всех своих пользователей на
+ смартфонах и планшетах, убедитесь, что в вашем приложении не задекларированы
+ требования аппаратных возможностей, не поддерживаемых большинством планшетов.
+  Наоборот, правильнее задекларировать, какие аппаратные возможности <em>не требуются</em>, сделав это в манифесте приложения,
+ как о описано ниже.
+</p>
+
+<ul>
+<li>Найдите все элементы <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> в файле манифеста вашего
+ приложения. В частности, обратите внимание на аппаратные возможности, которые могут быть
+ недоступны на некоторых планшетах, такие как:
+
+<ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code> (связана с задней камерой), или</li>
+<li><code>android.hardware.camera.front</code></li>
+</ul></li>
+
+<li>Задекларируйте элементы <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+ как <em>нетребуемые</em>, включив атрибут <code>android:required=”false”</code>.
+
+
+<p>
+  Например, ниже показан правильный способ, как задекларировать требование
+ <code>android.hardware.telephony</code>, так чтобы вы могли и дальше без ограничений распространять свое приложение,
+ даже для устройств, на которых нет функций телефонной связи.
+</p>
+
+<pre>&lt;uses-feature android:name="android.hardware.telephony" android:required="false" /&gt;</pre></li>
+
+<li>Аналогичным образом, проверьте, нет ли в манифесте элементов <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permission&gt;</code></a>,
+ которые <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">подразумевают наличие аппаратных
+ возможностей</a>, не применимых к планшетам. Если вы обнаружите декларацию таких прав доступа,
+ обязательно явным образом задекларируйте соответствующий элемент
+<code>&lt;uses-feature&gt;</code> для подразумеваемых возможностей и включите в него атрибут 
+<code>android:required=”false”</code>.</li>
+</ul>
+
+
+<p>
+  После того как вы задекларируете аппаратные возможности как <em>не требуемые</em>,
+ обязательно проверьте свое приложение на различных устройствах. Приложение должно нормально работать, даже если
+ некоторые используемые им аппаратные возможности недоступны, обеспечивая принцип "постепенного
+ отключения" и добавляя альтернативные функции, где это возможно.
+</p>
+
+<p>
+  Например, если приложение для определения местоположения использует модуль GPS,
+ но он отсутствует на устройстве, приложение может позволить пользователю самому
+ указать свое местоположение. Приложение может проверять аппаратные возможности устройства при запуске и
+ выполняться с учетом этой информации.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/hardware"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="support-screens">10. Декларирование совместимости планшетных экранов</h2></div>
+
+<p>Чтобы приложение могло распространяться среди множества различных планшетов, в его
+ файле манифеста должна быть указана поддержка планшетных размеров экрана.</p>
+
+<ul>
+  <li>В элементе
+ <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>, если он задекларирован,
+ не должны указываться атрибуты <code>android:largeScreens="false"</code>
+ или <code>android:xlargeScreens="false"</code>.</li>
+  <li>Для определения совместимости приложений значение <code>minSdkVersion</code> не должно быть
+ меньше 13, а для элемента <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+ необходимо указать оба атрибута<code>android:largeScreens="true"</code> и
+ <code>android:xlargeScreens="true"</code>.</li>
+</ul>
+
+<p>Если в манифесте приложения задекларирован элемент 
+<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>,
+ в нем должны быть атрибуты, указывающие
+ <em>все комбинации размеров и разрешений для планшетных экранов</em>,
+ поддерживаемые приложением. Обратите внимание, что там, где это возможно, вы должны избегать использования элемента 
+<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>
+ для своего приложения.</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/tabletscreens"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="google-play">11. Представление планшетного интерфейса для вашего приложения в Google Play</h2></div>
+
+<p>
+  После того, как проведена вся работа по созданию полнофункционального
+ оптимизированного интерфейса для вашего планшетного приложения, обязательно сообщите об этом своим пользователям! Здесь описаны некоторые
+ основные способы рекламы вашего планшетного приложения для пользователей в Google Play.
+</p>
+
+<div><img class="border-img" src="{@docRoot}images/gp-tablet-quality-4.jpg"></div>
+
+
+<h4>
+  Выложите снимки экранов планшетного интерфейса вашего приложения
+</h4>
+
+<p>
+  Пользователям планшетов нужно знать, как будет выглядеть ваше приложение на
+ их устройстве, не на мобильном телефоне. Если вы разработали планшетное приложение, обязательно загрузите снимки экранов
+ вашего планшетного интерфейса в консоль разработчика в Google Play. Вот несколько рекомендаций.
+  </p>
+
+<ul style="margin-top:0;">
+  <li>Продемонстрируйте основные функциональные возможности вашего приложения, но не
+ экран запуска и не страницу входа. На снимках экранов нужно показывать те страницы, где пользователи будут проводить
+ основное время в вашем приложении.
+  </li>
+
+  <li>Добавьте снимки экранов как для 7-дюмовых, так и для 10-дюймовых планшетов.
+  </li>
+
+  <li>Добавьте снимки экранов как в альбомной, так и в книжной ориентации экрана, если
+ это возможно.
+  </li>
+
+  <li>Используйте именно снимки экранов, если возможно. Старайтесь не показывать на снимках какого-либо
+ оборудования.</li>
+
+  <li>Рекомендованное разрешение снимков экранов планшетного интерфейса – <strong>1280 x 720</strong>
+ или выше для каждой из ориентаций.
+  </li>
+
+  <li>Загрузите примерно 8 снимков экранов вашего планшетного интерфейса для 7-дюймовых планшетов
+ и дополнительные 8 снимков экранов для 10-дюймовых планшетов.
+  </li>
+</ul>
+
+<h4>
+  Обновите описание своего приложения и примечания к выпуску
+</h4>
+
+<ul>
+  <li>В описании своего приложения обязательно подчеркните, что в нем пользователям
+ планшетов предлагается оптимизированный интерфейс и замечательные возможности. Добавьте
+ информацию о том, как работает ваш планшетный интерфейс и почему он нравится пользователям.
+  </li>
+
+  <li>Включите сведения о поддержке планшетов в примечаниях к выпуску и информацию об
+ обновлении.
+  </li>
+</ul>
+
+<h4>
+  Обновите свой рекламный видеоролик
+</h4>
+
+<p>
+  Просматривая рекламные видеоролики, многие пользователи узнают, как выглядит
+ приложение, и решают, нравится ли оно им. Можно воспользоваться этим интересом применительно к пользователям планшетов,
+ подчеркнув в рекламном видео ролике поддержку приложением планшетного интерфейса. Вот
+ несколько советов и рекомендаций.
+</p>
+
+<ul>
+  <li>Добавьте один или несколько снимков вашего приложения, выполняющегося на планшете. Чтобы наиболее
+ эффективно привлечь пользователей планшетов, рекомендуется
+ рекламировать ваш планшетный интерфейс в равном объеме с интерфейсом для телефонов.
+  </li>
+
+  <li>Ваш планшетный интерфейс должен быть как можно раньше показан в видеоролике. Не надейтесь, что пользователи
+ планшетов будут терпеливо ждать, пока вы рассматриваете телефонную версию интерфейса.
+ В идеале, если вы привлечете их в самом начале, показав планшетный интерфейс в первые
+ 10 секунд или одновременно с представлением интерфейса для телефонов.
+  </li>
+
+  <li>Чтобы сделать понятным, что вы показываете интерфейс для планшета, добавьте снимки
+ приложения, работающего на устройстве, которое вы держите в руках.
+  </li>
+
+  <li>Упомяните планшетный интерфейс своего приложения в звуковом сопровождении видеоролика.
+  </li>
+</ul>
+
+<h4>
+  Представьте планшетный интерфейс в своей рекламной кампании
+</h4>
+
+<p>
+  Обязательно расскажите пользователям планшетов о своем интерфейсе в ходе рекламной
+ кампании: на веб-сайтах, в публикациях в социальных сетях, в рекламных материалах и т. д. Вот несколько
+ рекомендаций.
+</p>
+
+<ul>
+  <li>Спланируйте маркетинговую или рекламную кампанию, подчеркивающую возможность
+ использования вашего приложения на планшетах.</li>
+
+  <li>В ходе этой кампании представьте сильные стороны своего планшетного
+ приложения &mdash; используйте <a href="{@docRoot}distribute/tools/promote/device-art.html">Генератор изображений устройств</a> для быстрой
+подготовки качественного рекламного изображения приложения, выполняющегося на
+ 7- или 10-дюймовом планшете с нужной ориентацией экрана, с падающей тенью и блеском экрана или без них. Все просто – сделайте снимок экрана и перетащите изображение.
+  </li>
+
+  <li>Включите отличительные значки Google Play в свою онлайн-рекламу, чтобы обеспечить пользователям прямую
+ связь со страницей вашего приложения в каталоге. Можно создать отличительные значки для множества языков используя
+ <a href="{@docRoot}distribute/tools/promote/badges.html">Генератор отличительных значков</a>.
+  </li>
+</ul>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/showcase"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine">
+  <h2 id="google-play-best-practices">
+    12. Следование передовому опыту публикаций в Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  Здесь рассказывается о некоторых проверенных методах публикации планшетных
+ приложений, которые помогают добиться успеха в Google Play.
+</p>
+
+<div>
+  <img class="border-img" src="{@docRoot}images/gp-tablet-quality-5.jpg" style="1px solid #ddd">
+</div>
+
+<h4 id="google-play-optimization-tips">
+  Проверка выполнения советов по оптимизации для вашего приложения
+</h4>
+
+<p>В консоли разработчика Google Play теперь предлагаются советы по оптимизации,
+которые позволяют быстро проверить, насколько приложение соответствует основным
+ рекомендациям по распространению и обеспечению качества планшетных приложений. Чтобы попасть на эту страницу, войдите в консоль разработчика, загрузите приложение
+ из раздела "Все приложения", а затем выберите пункт "Советы по оптимизации" в
+ навигационной панели слева.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Как оставить отзыв</h2>
+
+<p>Используйте приведенную ниже ссылку, чтобы отправить отзыв или запросить обзор
+ специалистом советов по оптимизации вашего приложения.</p>
+
+<p>Обязательно прочтите все связанные разделы в руководстве "Качество планшетных
+ приложений", прежде чем отправлять свой отзыв.</p>
+
+<p><strong><a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">Контактная форма: Разработано для планшетов&raquo;</a></strong></p>
+</div>
+</div>
+
+<p>В консоли разработчика страница с советами по оптимизации вашего
+ приложения создается путем выполнения серии проверок на соблюдение основных
+ критериев качества. Если обнаруживаются какие-то проблемы, вам сообщается о них как об элементах
+ "Нужно выполнить" на странице с советами по оптимизации.</p>
+
+<p>Если вы разработали планшетный интерфейс для своего приложения,
+ обязательно посетите страницу с советами по оптимизации и посмотрите,
+ как прошли основные проверки приложения.  Если в списке указаны какие-либо проблемы,
+ рекомендуется устранить их в приложении, а затем, если необходимо, загрузить новый двоичный
+ файл для распространения. </p>
+
+<p>Если на странице советов по оптимизации в списке "Нужно выполнить" есть проблемы,
+ не относящиеся к вашему приложению, а также, если рекомендации могут снизить качество планшетного
+ приложения, уведомите нас, используя <a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">контактную форму Разработано для планшетов&raquo;</a>. Мы
+ выполним обзор вашего приложения и внесем соответствующие обновления на страницу советов по
+ оптимизации.</p>
+
+
+<h4>Подтверждение фильтрации приложения</h4>
+
+<p>
+  После того, как вы выгрузили приложение в <a href="https://play.google.com/apps/publish/">консоль разработчика</a>, проверьте список
+ поддерживаемых пакетом APK устройств, чтобы убедиться, что приложение не отфильтровывается для
+ планшетных устройств, для которых оно предназначено.
+</p>
+
+<h4>Распространение в одном пакете APK</h4>
+
+<p>
+  Рекомендуется публиковать свои приложения как один пакет APK для всех поддерживаемых
+ размеров экрана (телефонов и планшетов) на одной странице в каталоге Google Play. У такого подхода есть несколько
+ важных преимуществ.
+</p>
+
+<ul style="margin-top:.25em;">
+  <li>Пользователям будет проще находить приложение при поиске, просмотре или в рекламных кампаниях.
+  </li>
+
+  <li>Пользователям будет проще автоматически восстановить приложение при переходе
+ на новые устройства.
+  </li>
+
+  <li>Ваши рейтинги и статистика загрузок будут объединены на всех устройствах.
+  </li>
+
+  <li>Публикация приложения на второй странице каталога может понизить рейтинги вашего
+ бренда.
+  </li>
+</ul>
+
+<p>
+  Если потребуется, вы можете выбрать альтернативную доставку приложения с
+ помощью <a href="{@docRoot}google/play/publishing/multiple-apks.html">Поддержки нескольких APK</a>, хотя в большинстве случаев рекомендуется
+ использование одного APK для поддержки всех устройств.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine">
+  <h2 id="test-environment">
+    Настройка среды тестирования планшетных ПК
+  </h2>
+
+
+</div>
+
+<p>
+  Оцените качество работы своего приложения на планшетах, учитывая как основные
+ критерии качества приложений, так и критерии качества планшетных приложений &mdash;
+ используйте для тестирования подходящее аппаратное обеспечение или эмулируйте нужную среду.
+</p>
+
+<p>
+  Сравнив <a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">рекомендуемую
+ среду тестирования</a> для проверки с основными критериями качества приложения,
+ включите в нее планшеты среднего размера и планшеты с большим или меньшим количеством 
+ аппаратных или программных функциональных возможностей.
+</p>
+
+<p class="table-caption"><strong>Таблица 1.</strong> Стандартная среда тестирования может включать одно-два устройства из каждой
+ категории (строки) в следующей таблице, которые поддерживают одну из версий
+ платформы, какую-либо конфигурацию экрана и аппаратных возможностей.</p>
+
+<table>
+<tr>
+<th>Тип</th>
+<th>Размер</th>
+<th>Разрешение</th>
+<th>Версия</th>
+<th>Оболочка эмулятора AVD</th>
+</tr>
+
+<tr>
+<td>7-дюймовый планшет</td>
+<td><span style="white-space:nowrap"><code>large</code> или</span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
+<td>Android 4.0+ (уровень API 14 и выше)</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">10-дюймовый</span> планшет</td>
+<td><span style="white-space:nowrap"><code>xlarge</code> или</span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>,<br /><code>hdpi</code>,<br /><code>xhdpi</code></td>
+<td>Android 3.2+ (уровень API 13 и выше)</td>
+<td>WXGA800</td>
+</tr>
+</table>
+
+<div class="headerLine"><h2 id="related-resources">Связанные ресурсы</h2></div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/tv.jd
new file mode 100644
index 0000000..995f2e5
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/tv.jd
@@ -0,0 +1,509 @@
+page.title=Качество телеприложений
+page.metaDescription=Телевидение – растущий сегмент рынка устройств Android, для которого характерно особое внимание к дизайну и функциональности приложений для максимального удобства работы.
+page.image=/distribute/images/gp-tv-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Критерии качества</h2>
+  <ol>
+    <li><a href="#ux">Дизайн и взаимодействие</a></li>
+    <li><a href="#fn">Функциональность</a></li>
+    <li><a href="#faq">Часто задаваемые вопросы</a></li>
+  </ol>
+
+  <h2>См. также:</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+Основные критерии качества приложений</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+Оптимизация приложений</a></li>
+  </ol>
+</div>
+</div>
+
+<div class="top-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/gp-tv-quality.png" style="width:480px;">
+</div>
+
+<p>
+  Ожидания пользователей, смотрящих обычный телевизор, как правило, значительно отличаются от ожиданий пользователям телефонов или планшетов.
+  При просмотре телевизора зритель обычно находится в 3 метрах от экрана, так что
+ мелкие детали для него малозаметны, а мелкий текст трудноразличим. Поскольку зрители находятся вдали от телевизора, им нужен пульт дистанционного
+ управления для переключения программ, которые нельзя выбрать простым касанием экрана. Эти
+ различия существенно меняют те требования, которые предъявляются к удобству при просмотре телепрограмм.
+</p>
+
+<p>
+  Первым шагом к созданию удобного телезрителям интерфейса будет изучение и
+ соблюдение <a href="{@docRoot}design/tv/index.html">Рекомендаций по разработке приложений для Android TV</a>,
+ в которых представлены инструкции по созданию оптимальных теле-приложений. Также необходимо
+ ознакомиться с учебным материалом <a href="{@docRoot}training/tv/start/index.html">Создание телеприложений</a>, чтобы понять основные
+ требования к разрабатываемым телеприложениям.
+</p>
+
+<p class="caution">
+  <strong>Внимание!</strong> Чтобы обеспечить удобство работы с приложениями для ТВ-устройств, при их разработке
+ необходимо соблюдать определенные требования к эргономике. Только те приложения, которые соответствуют следующим критериям качества, могут быть
+ квалифицированы как приложения для электронной витрины Android TV в Google Play.
+</p>
+
+<p class="note"><strong>Примечание.</strong> Информацию о том, как публиковать телеприложения в Google Play, см. в документе
+ <a href="{@docRoot}distribute/googleplay/tv.html">Распространение приложений в Android TV</a>.</p>
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  Визуальный дизайн и взаимодействие с пользователем
+  </h2>
+
+
+</div>
+
+<p>
+  Соблюдение этих критериев означает, что приложение соответствует наиболее важным шаблонам дизайна и взаимодействия,
+ обеспечивая согласованный, интуитивно понятный и удобный телезрителям интерфейс.
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    Тип
+  </th>
+  <th style="width:54px;">
+    Тест
+  </th>
+  <th>
+    Описание
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="4" id="launcher">
+    Значок запуска
+  </td>
+
+  <td id="TV-LM">
+    TV-LM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      После установки приложения, его значок запуска отображается на экране Android TV Launcher.
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LB">
+    TV-LB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Для приложения в качестве значка запуска на экране Android TV Launcher отображается полноразмерный баннер 320x180 пикселей.
+      (<a href="{@docRoot}design/tv/patterns.html#banner">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-BN">
+    TV-BN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Баннер запуска приложения содержит его название.
+      (<a href="{@docRoot}design/tv/patterns.html#banner">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LG">
+    TV-LG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Если приложение – игра, оно отображается в строке "Игры" в Android TV Launcher.<br>
+      (<a href="{@docRoot}training/tv/games/index.html#manifest">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="layout">
+    Макет
+  </td>
+
+  <td id="TV-LO">
+    TV-LO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Всех интерфейсы приложения поддерживают работу в альбомной ориентации экрана.
+      (<a href="{@docRoot}training/tv/start/layouts.html#structure">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TC">
+    TV-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Весь основной текст на экране имеет размер не менее 16 независимых от масштабирования пикселей.
+      (<a href="{@docRoot}design/tv/style.html#typography">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TA">
+    TV-TA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Весь текст на экране имеет размер не менее 12 пикселей (независимых от масштаба).
+      (<a href="{@docRoot}design/tv/style.html#typography">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-OV">
+    TV-OV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Весь текст и функциональные элементы приложения отображаются полностью,
+ без обрезания по краям экрана.
+      (<a href="{@docRoot}training/tv/start/layouts.html#overscan">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TR">
+    TV-TR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение никак не препятствует отображению других приложений. Приложение занимает полностью весь экран и имеет
+ непрозрачный фон.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="navigation">
+    Навигация
+  </td>
+
+  <td id="TV-DP">
+    TV-DP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Управление приложением осуществляется 5-позиционной навигационной клавишей, если
+ только для приложения не требуется джойстик, как это указано в тесте <a href="#TV-GP">TV-GP</a>.
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DK">
+    TV-DK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Для управления приложением требуется джойстик, как указано в тесте <a href="#TV-GP">TV-GP</a>, все
+ функции доступны с помощью стандартных клавиш игрового котроллера Android.
+      (<a href="{@docRoot}training/game-controllers/controller-input.html#button">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DM">
+    TV-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение не зависит от пульта ДУ и наличия в нем кнопки меню для доступа к
+ элементам управления пользовательского интерфейса.
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  Функциональность
+  </h2>
+
+
+</div>
+
+<p>
+  Выполнение этих требований обеспечивает правильную конфигурацию приложения
+ и его ожидаемое функциональное поведение.
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    Тип
+  </th>
+  <th style="width:54px;">
+    Тест
+  </th>
+  <th>
+    Описание
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="2" id="manifest">
+   Манифест
+  </td>
+
+  <td id="TV-ML">
+    TV-ML
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      В манифесте приложения для объекта Intent установлен тип {@link android.content.Intent#ACTION_MAIN} с категорией
+ {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER}.
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+</tr>
+  <td id="TV-MT">
+    TV-MT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      В манифесте приложения аппаратная возможность {@code android.hardware.touchscreen} указана как необязательная.
+      (<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">См. как
+ это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="game-controllers">
+    Игровые контроллеры
+  </td>
+
+  <td id="TV-GP">
+    TV-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Если приложение использует игровой контроллер в качестве основного устройства ввода,
+ это требование должно быть задекларировано в теге манифеста <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>.
+      (<a href="{@docRoot}training/tv/games/index.html#gamepad">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-GC">
+    TV-GC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Если в приложении есть наглядные инструкции по работе с игровыми контроллерами,
+ в них нужно показывать совместимые элементы управления и не должны упоминаться бренды.
+      (<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="advertising">
+    Реклама
+  </td>
+
+  <td id="TV-AP">
+    TV-AP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение поддерживает работу с рекламой с помощью навигационных клавиш.
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AD">
+    TV-AD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение позволяет пользователю с помощью навигационной клавиши мгновенно убрать
+ с экрана рекламу, занимающую весь экран, если она не является видеорекламой.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AU">
+    TV-AU
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      В интерактивной рекламе, которая не занимает весь экран и не является видеорекламой,
+ приложение не позволяет открывать веб-страницы по URL-адресам в рекламе.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AA">
+    TV-AA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      В интерактивной рекламе, которая не занимает весь экран и не является видеорекламой,
+ приложение не позволяет вызывать другое приложение, недоступное для данных устройств.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="web">
+    Веб-содержимое
+  </td>
+
+  <td id="TV-WB">
+    TV-WB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение использует компоненты {@link android.webkit.WebView} для обработки веб-контента
+ и не пытается запускать приложение веб-браузера.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="media-playback">
+    Воспроизведение медиаданных
+  </td>
+
+  <td id="TV-NP">
+    TV-NP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Если воспроизведение звука не прекращается после того как пользователь вышел из
+ приложения, должна выводиться карточка <em>Воспроизводится сейчас</em> в строке
+ рекомендаций главного экрана, позволяющая пользователю вернуться в приложение для контроля за воспроизведением.
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PA">
+    TV-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Если приложение показывает карточку <em>Воспроизводится сейчас</em>, то после ее выбора
+ пользователь попадает на экран, где можно приостановить воспроизведение.
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PP">
+    TV-PP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Если приложение воспроизводит видео или музыку, происходит переключение режимов
+ паузы и воспроизведения медиаданных при отправке событий нажатия этих клавиш.<br>
+      (<a href="{@docRoot}reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE">См. как
+ это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+<div class="headerLine">
+  <h2 id="faq">
+  Часто задаваемые вопросы
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>Как после отправки приложения на проверку узнать, что оно не соответствует всем
+ требованиям ТВ-устройств?</strong>
+</p>
+<p>
+  Если ваше приложение не отвечает требованиям к эргономике, описанным на этой странице,
+ сотрудники Google Play напишут вам по эл. почте на адрес, указанный в основной
+ учетной записи <a href="https://play.google.com/apps/publish/">консоли разработчика Google Play</a>, связанной с этим приложением.
+</p>
+<p class="caution">
+  <strong>Внимание!</strong> Обязательно проверьте, что приложение содержит <a href="{@docRoot}preview/tv/start/index.html#tv-activity">записи в манифесте, требуемые</a>
+ ТВ-устройствами, иначе приложение не будет считаться телевизионным
+ и не будет проверяться на выполнение требований для работы на ТВ-устройствах.
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Мое приложение предназначено не только для ТВ-устройств. Если мое приложение не соответствует требованиям
+ для ТВ-устройств, возможна ли его публикация в Google Play для телефонов и
+ планшетов?</strong>
+</p>
+<p>
+  Да. Описанные выше требования ограничивают распространение приложений в магазине
+ Google Play только для ТВ-устройств. На распространение приложения на других устройствах, таких как телефоны, планшеты и
+ прочие устройства это никак не влияет.
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Если мое приложение соответствует требованиям к публикации, когда оно будет
+ доступно в магазине Google Play для ТВ-устройств?</strong>
+</p>
+
+<p>
+  Приложения, соответствующие требованиям к телеприложениям, появятся в магазине
+ Google Play для ТВ-устройств <em>после</em> официального выхода Android 5.0.
+</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/wear.jd
new file mode 100644
index 0000000..0881a50
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/wear.jd
@@ -0,0 +1,452 @@
+page.title=Качество приложений Android Wear
+page.tags="wear","wearables","quality","guidelines"
+page.metaDescription=Умные часы – это небольшие устройства, которые обладают предельно лаконичным интерфейсом и требуют уникальных приложений, предоставляющих только нужную информацию в нужное время.
+page.image=/distribute/images/gp-wear-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Критерии качества</h2>
+  <ol>
+    <li><a href="#ux">Дизайн и взаимодействие</a></li>
+    <li><a href="#fn">Функциональность</a></li>
+    <li><a href="#faq">Часто задаваемые вопросы</a></li>
+  </ol>
+
+  <h2>См. также:</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+Основные критерии качества приложений</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+Оптимизация приложений</a></li>
+    <li><a href="{@docRoot}design/patterns/notifications.html">
+Уведомления</a></li>
+  </ol>
+</div>
+</div>
+
+<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;">
+
+<p>
+  Операционная система Android Wear ориентирована на предоставление пользователям нужной информации в нужное время. Удобные
+ интерфейсы Android Wear запускаются автоматически, предельно лаконичны
+ и требуют минимального (или вообще не требуют) взаимодействия с пользователем. Дизайн приложений для часов существенно отличается от дизайна для телефонов или
+ планшетов. В этих видах дизайна необходимо учитывать разные достоинства и недостатки устройств,
+ разные сценарии использования и разные требования эргономики.
+</p>
+
+<p>
+  Первым шагом к созданию удобного интерфейса является изучение
+ <a href="{@docRoot}design/wear/index.html">Рекомендаций по разработке приложений для Android Wear</a>,
+ которые содержат инструкции по созданию оптимальных интерфейсов для приложений Android Wear. Также необходимо
+ ознакомиться с учебным материалом <a href="{@docRoot}training/building-wearables.html">Создание приложений для умных часов</a>,
+ чтобы понять основные требования к разработке приложений Android Wear.
+</p>
+
+<p class="caution">
+  <strong>Внимание!</strong> Чтобы интерфейс приложений для часов был удобен для пользователей, при их разработке
+ необходимо соблюдать определенные требования к эргономике. Только те приложения, которые соответствуют нижеприведенным критериям качества, могут быть
+ квалифицированы как приложения для Android Wear в Google Play. Приложение, квалифицированное для Android Wear,
+ может быть быстрее обнаружено пользователями в Google Play.
+</p>
+
+<p class="note">
+ <strong>Примечание.</strong> Информацию о публикации приложений Android Wear в Google Play см. в документе <a href="{@docRoot}distribute/googleplay/wear.html">Распространение приложений Android Wear</a>.
+</p>
+
+<div class="headerLine">
+  <h2 id="fn">
+  Функциональность
+  </h2>
+
+
+</div>
+
+<p>
+  Выполнение этих требований обеспечивает правильную конфигурацию приложения
+ и его ожидаемое функциональное поведение.
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    Тип
+  </th>
+  <th style="width:54px;">
+    ИД
+  </th>
+  <th>
+    Описание
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="general">
+   Общие
+  </td>
+
+  <td id="WR-GL">
+    WR-GL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение должно быть предназначено для мобильных устройств и использовать
+ уведомления с функциями для умных часов, либо предназначено для часов и выполняться непосредственно на устройстве Android Wear.
+      (<a href="{@docRoot}training/building-wearables.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-VF">
+    WR-VF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложение должно иметь функции Android Wear, видимые пользователю.
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-BF">
+    WR-BF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Функции Android Wear должны работать в соответствии с требованиями или характеристиками, приведенными в каталоге Google Play.
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="packaging">
+   Организация пакета приложения
+  </td>
+
+  <td id="WR-PK">
+    WR-PK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложения для часов, чья функциональность зависит от мобильного приложения,
+ должны быть упакованы внутри этого мобильного приложения.
+      (<a href="{@docRoot}training/wearables/apps/packaging.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="functional-notifications">
+    Уведомления
+  </td>
+
+  <td id="WR-FW">
+    WR-FW
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Уведомления, связанные с функциями для часов, должны использовать объекты {@code RemoteInput}
+ или {@code WearableExtender}.
+      (<a href="{@docRoot}training/wearables/notifications/index.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FR">
+    WR-FR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Уведомления в приложениях для обмена сообщениями должны предусматривать ответ пользователя голосом или с помощью функции быстрого ответа.
+      (<a href="{@docRoot}training/wearables/notifications/voice-input.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FG">
+    WR-FG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Похожие уведомления должны объединяться в пакеты.
+      (<a href="{@docRoot}training/wearables/notifications/stacks.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="gestures">
+    Жесты
+  </td>
+
+  <td id="WR-GP">
+    WR-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      В полноэкранных действиях длинное нажатие должно использоваться только для запроса на выход.
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/exit.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-GD">
+    WR-GD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Если в приложении отключен жест сдвига для отмены в полноэкранном действии,
+ оно должно реагировать в этом действии на жест длинного нажатия для отмены.
+      (<a href="{@docRoot}training/wearables/ui/exit.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="watchface">
+    Циферблат
+  </td>
+
+  <td id="WR-WF">
+    WR-WF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Приложения, изменяющие циферблат, должны использовать официальный API Watch Face.
+      (<a href="{@docRoot}training/wearables/watch-faces/index.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ux">
+  Визуальный дизайн и взаимодействие с пользователем
+  </h2>
+
+
+</div>
+
+<p>
+  Соблюдение этих критериев означает, что приложение соответствует наиболее
+ важным шаблонам дизайна и взаимодействия, обеспечивая согласованный, интуитивно понятный и удобный пользовательский интерфейс часов.
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    Тип
+  </th>
+  <th style="width:54px;">
+    ИД
+  </th>
+  <th>
+    Описание
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="layout">
+    Макет
+  </td>
+
+  <td id="WR-LS">
+    WR-LS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Формат пользовательского интерфейса приложения должен соответствовать квадратным экранам. Контент приложения должен помещаться
+ внутри физического экрана, а текст и элементы управления не должны выходить за его границы.
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-LR">
+    WR-LR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Формат пользовательского интерфейса приложения должен соответствовать круглым экранам,
+ включая устройства со вставкой ("подбородком") в нижней части экрана. Контент приложения должен помещаться
+ внутри физического экрана, а текст и элементы управления не должны выходить за его границы.
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-TC">
+    WR-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Текст приложения должен быть крупным и читаемым с одного взгляда (размером не менее 16 независимых от масштабирования пикселей).
+      (<a href="{@docRoot}design/wear/style.html#Typography">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="launcher">
+    Средство запуска
+  </td>
+
+  <td id="WR-LN">
+    WR-LN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Строкой запуска приложения должно быть его название, а не команда.
+      (<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="notifications">
+    Уведомления
+  </td>
+
+  <td id="WR-NC">
+    WR-NC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      В приложении должна поддерживаться анимация подтверждений, если необходимо.
+      (<a href="{@docRoot}design/wear/patterns.html#Countdown">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-NR">
+    WR-NR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      В правом верхнем углу карточек уведомлений должен быть виден значок приложения. Единственным исключением из этого правила
+ являются карточки уведомлений с одним возможным действием, например, карточка воспроизведения мультимедийного контента.
+      <br/>
+      (<a href="{@docRoot}design/wear/style.html#Assets">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-WI">
+    WR-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Действия уведомления должны иметь белый значок, название действия и прозрачный фон.
+      <br/>
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PB">
+    WR-PB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Фотографии, используемые в качестве фона уведомления, должны использоваться только для передачи информации и не должны содержать информацию о бренде.
+      (<a href="{@docRoot}design/wear/style.html#Branding">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PR">
+    WR-PR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Фотографии, используемые в качестве фона уведомления, должны иметь разрешение не менее 400x400 пикселей.
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="googleplay">
+    Google Play
+  </td>
+
+  <td id="WR-GS">
+    WR-GS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      На странице каталога приложения в Google Play должен быть представлен как минимум один снимок экрана с интерфейсом Android Wear.
+      (<a href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">См. как это сделать</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="faq">
+  Часто задаваемые вопросы
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>Как после подачи приложения на проверку узнать, что оно не соответствует
+ всем требованиям Android Wear?</strong>
+</p>
+<p>
+  Если ваше приложение не отвечает требованиям к эргономике, описанным на этой странице,
+ сотрудники Google Play напишут вам по эл. почте на адрес, указанный в основной
+ учетной записи <a href="https://play.google.com/apps/publish/">консоли разработчика Google Play</a>, связанной с этим приложением.
+</p>
+<p class="caution">
+  <strong>Внимание!</strong> Убедитесь в соответствии приложения <a href="#fn">функциональным
+ требованиям</a>, в противном случае оно не будет считаться приложением для Android Wear
+ и не будет проверяться на соответствие <a href="#ux">критериям дизайна и взаимодействия</a>.
+</p>
+<p class="note">
+ <strong>Примечание.</strong> Информацию о публикации приложений Android Wear в Google Play см. в документе <a href="{@docRoot}distribute/googleplay/wear.html">Распространение приложений Android Wear</a>.
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>Если мое приложение не соответствует требованиям Android Wear, возможна ли его публикация
+ в Google Play для телефонов и планшетов? Возможна ли его установка на часах?</strong>
+</p>
+<p>
+  Да. Описанные выше требования определяют лишь возможность квалификации приложения
+ для Android Wear, позволяющей быстрее обнаружить его пользователям в Google Play. Если приложение не было принято
+ в качестве приложения для Android Wear, оно остается доступным для других устройств, таких как телефоны и планшеты,
+ и может быть установлено на часах.
+</p>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/start.jd b/docs/html-intl/intl/ru/distribute/googleplay/start.jd
new file mode 100644
index 0000000..ecab85d
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/start.jd
@@ -0,0 +1,156 @@
+page.title=Первые шаги в публикациях
+page.metaDescription=Зарегистрировав свою учетную запись разработчика в Google Play, вам потребуется всего несколько минут, чтобы начать публикации.
+meta.tags="publishing"
+page.tags="google play", "publishing", "register", "signup"
+page.image=/distribute/images/getting-started.jpg
+
+@jd:body
+
+<div class="top-right-float" style="margin-right:24px;margin-top:-18px">
+  <a href="https://play.google.com/apps/publish/"><img src="{@docRoot}images/gp-start-button.png"></a>
+</div>
+
+<p>
+  Чтобы уже через несколько минут начать публиковаться в Google Play, выполните следующие действия.
+</p>
+
+<ul>
+  <li>Зарегистрируйте учетную запись для публикации в Google Play.
+  </li>
+
+  <li>Если вы будете продавать приложения или какие-либо продукты в них, настройте учетную
+ запись продавца в Google Кошельке.
+  </li>
+
+  <li>Ознакомьтесь с <a href="https://play.google.com/apps/publish/">консолью разработчика
+ Google Play</a> и средствами публикации.
+  </li>
+</ul>
+
+<p>
+  Когда будете готовы, используйте кнопку Start (Пуск), чтобы перейти в консоль разработчика.
+</p>
+
+<div class="headerLine">
+  <h2>
+    Регистрация учетной записи для публикации
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Советы
+    </h2>
+
+    <ul>
+      <li>Для регистрации вам необходима учетная запись Google. Ее можно создать в ходе выполнения данного
+ процесса.
+      </li>
+
+      <li>Если вы представляете организацию, рекомендуем создать новую учетную
+ запись Google, чтобы не использовать свою личную запись.
+      </li>
+
+      <li>Выполните обзор <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294">
+ стран для разработки</a> и <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">
+ стран для продаж</a>, где вы сможете распространять или продавать свои приложения.
+      </li>
+    </ul>
+  </div>
+</div>
+
+<ol>
+  <li>Перейдите в <a href="https://play.google.com/apps/publish/">консоль разработчика
+ Google Play</a>.
+  </li>
+
+  <li>Введите основные сведения о себе, <strong>идентифицирующие вас как разработчика</strong>:
+ ваше имя, адрес электронной почты и т. д. Эту информацию затем можно будет
+ изменить.
+  </li>
+
+  <li>Прочтите и примите <strong>Соглашение о распространении ПО</strong> для
+ своей страны или региона. Обратите внимание, что приложения и их страницы каталога,
+ публикуемые в Google Play должны соответствовать правилам программы для разработчиков
+ и экспортному законодательству США.
+  </li>
+
+  <li>Оплатите <strong>регистрационный взнос 25 долларов США</strong> с помощью Google Кошелька. Если
+ у вас еще нет Google Кошелька, вы можете быстро организовать его прямо в ходе выполнения данного
+ процесса.
+  </li>
+
+  <li>Когда ваша регистрация будет подтверждена, вам придет уведомление на адрес электронной почты,
+ указанный в ходе регистрации.
+  </li>
+</ol>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    Настройка учетной записи продавца в Google Кошельке
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:200px;">
+  <img src="{@docRoot}images/gp-start-wallet-icon.png">
+</div>
+
+<p>
+  Если вы хотите продавать приложения по установленной цене, а также какие-либо продукты
+ или подписки в них, вам необходима учетная запись продавца в Google Кошельке. Создать такую учетную запись можно в любой момент времени, но сначала изучите
+ список <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">
+ стран для продаж</a>.<br>
+  <br>
+  Порядок настройки учетной записи продавца в Google Кошельке.<br>
+  <br>
+</p>
+
+<ol>
+  <li>
+    <strong>Войдите </strong> в свою консоль разработчика Google Play по адресу <a href="https://play.google.com/apps/publish/" target="_blank">https://play.google.com/apps/publish/</a>.
+  </li>
+
+  <li>На боковой панели навигации выберите <strong>Финансовые отчеты</strong> <img src="{@docRoot}images/distribute/console-reports.png">.
+  </li>
+
+  <li>Нажмите <strong>Создать учетную запись продавца</strong>.
+  </li>
+</ol>
+
+<p>
+  При этом будет выполнен переход на сайт Google Кошелька; до выполнения этого шага
+ вам необходимо приготовить информацию о своем предприятии.
+</p>
+
+<div class="headerLine">
+  <h2>
+    Знакомство с консолью разработчика
+  </h2>
+
+
+</div>
+
+<p>
+  Когда ваша регистрация будет подтверждена, можно выполнить вход в консоль
+ разработчика, являющуюся центром, где находятся основные инструменты разработчика
+ и откуда выполняются операции публикации приложений в Google Play.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine">
+<h2 id="related-resources">Связанные ресурсы</h2><hr />
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/gettingstarted"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/tv.jd b/docs/html-intl/intl/ru/distribute/googleplay/tv.jd
new file mode 100644
index 0000000..31a40ce
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/tv.jd
@@ -0,0 +1,305 @@
+page.title=Распространение приложений в Android TV
+page.image=/design/tv/images/atv-home.jpg
+meta.tags="tv", "publish", "quality"
+page.tags="tv", "publish", "googleplay"
+page.metaDescription=Распространяйте свои приложения, игры и контент в Android TV.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Как стать участником</h2>
+<ol>
+<li><a href="#understand_guidelines">Изучите инструкции</a></li>
+<li><a href="#develop_app">Создайте качественное телеприложение</a></li>
+<li><a href="#test_app">Проверьте качество телеприложения</a></li>
+<li><a href="#opt_in">Станьте участником программы</a></li>
+<li><a href="#track_review">Дождитесь результатов проверки</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/tv.html">Качество телеприложений</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">Основные критерии качества приложений</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Если вы создали качественное приложение или игру, Android TV и Google Play помогут
+ предложить его пользователям на экранах их домашних телевизоров. У вас появится возможность предложить свои приложения и игры, используя интерфейс
+ электронной витрины, оптимизированной для ТВ-устройств. Вы можете адаптировать новые
+ или существующие приложения для соответствия требованиям телеприложений, а затем
+ опубликовать их, используя знакомые инструменты и процессы Google Play.
+</p>
+
+<p>
+  Для начала ознакомьтесь с разделами этого документа, чтобы узнать
+ о распространении телеприложений через Google Play. Обязательно изучите документ
+ <a href="{@docRoot}distribute/essentials/quality/tv.html">Качество телеприложений</a>,
+ описывающий требования к эргономике и стандарты качества, которым должно соответствовать
+ ваше приложение. Когда приложение будет готово, вы можете стать участником программы, опубликовав его в
+ электронной витрине Android TV из консоли разработчика.
+</p>
+
+<h2 id="how_to_participate">
+  Как стать участником
+</h2>
+
+<p>
+  Google Play позволяет привлечь к вашим ТВ-приложениям внимание новой аудитории
+ – телезрителей. Для разработки и публикации можно использовать свою существующую учетную запись в
+ консоли разработчика и текущие настройки распространения и ценообразования. Процесс
+ участия довольно прост и кратко описан в следующих разделах.
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-tv-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1. Изучите инструкции и требования
+</h3>
+
+<p>
+  Чтобы подготовить успешный запуск приложения на Android TV, начните с изучения
+ руководств по разработке интересных телеприложений. Идеи о том,
+ как преобразовать существующее приложение в телевизионное, см. в документе
+</p>
+
+<p>
+ <a href="{@docRoot}design/tv/index.html">Рекомендации по разработке приложений для Android TV</a>, в котором также можно найти
+ подробные сведения об их дизайне и использовании. В интерфейсе Google Play для
+ Android TV <strong>отображаются только те приложения, которые пригодны для работы на телеэкране</strong>
+ &mdash; ваши приложения могут участвовать в этой программе, если они соответствуют набору основных
+ критериев качества. Более подробная информация содержится в документе <a href="{@docRoot}distribute/essentials/quality/tv.html">Качество
+ телеприложений</a>.
+</p>
+
+<h3 id="develop_app">2. Создайте качественное телеприложение</h3>
+
+<p>
+  Качественное телеприложение предназначено для использования на 
+ телевизионном экране, в нем реализованы возможности Android TV, а также соответствующих
+ устройств ввода: джойстиков, навигационных кнопок и пультов дистанционного управления. Это приложение тщательно проработано, обладает отлаженным и качественным
+ интерфейсом для больших экранов, предлагает привлекательный для пользователей
+ набор функций.
+</p>
+
+<p>
+  Обдумывая свое будущее телеприложение, изучите <a href="{@docRoot}training/tv/start/index.html">документацию для разработчиков</a> и
+ рекомендации относительно эргономики и постарайтесь максимально их
+ придерживаться. Позаботьтесь о максимальном удобстве работы для пользователей и обеспечьте
+ его с помощью специальной библиотеки Leanback, входящей в SDK. Возможно, потребуется оптимизировать другие 
+ части вашего приложения для использования на телеэкране, правильно будет определить это
+ в начальной стадии процесса разработки.
+</p>
+
+<p>
+  В большинстве случаев мы рекомендуем, чтобы телеинтерфейс был предоставлен
+ в составе существующего приложения для телефонов, планшетов и других устройств с тем же
+ именем пакета и с той же страницей каталога. Такой подход позволяет пользователям легко адаптироваться к работе с телеинтерфейсом,
+ а также дает вам возможность использовать для привлечения пользователей отзывы и
+ рейтинги, полученные для телефонной и планшетной версий приложения.
+</p>
+
+<p>
+  Можно включить используемые в телеинтерфейсе объекты Intent, библиотеку Leanback
+ и специфичный для ТВ-устройств код и ресурсы как часть единого пакета APK для всех поддерживаемых устройств. Если
+ необходимо, можно разрешить <a href="{@docRoot}google/play/publishing/multiple-apks.html">поддержку нескольких пакетов APK</a>, чтобы доставлять специальный
+ двоичный файл устройствам, поддерживаемым Android TV, с тем же именем пакета и с той же
+ страницы каталога, что используется для телефонов и планшетов.
+</p>
+
+<p>
+  В процессе проектирования и разработки очень важно иметь в своем распоряжении
+ подходящее устройство для макетирования и тестирования создаваемого интерфейса. Необходимо приобрести одно или несколько устройств, совместимых с
+ Android TV, или использовать эмуляторы, чтобы как можно раньше организовать среду для
+ тестирования. Рекомендуемым аппаратным устройством, для тестирования в среде
+ Android TV является Nexus Player, который <a href="http://www.google.com/intl/all/nexus/player/">можно заказать в Google Play</a>
+ и других магазинах, вместе с ним необходимо также приобрести игровой контроллер и прочие
+ ТВ-устройства.
+</p>
+
+<h3 id="test_app">3. Проверьте качество телеприложения</h3>
+
+<p>
+  Ваши телеприложения должны обладать высокой производительностью,
+ хорошо смотреться в Android TV и быть максимально удобными для пользователя. Выбранные лучшие
+ телеприложения демонстрируются на страницах Google Play, что упрощает их обнаружение пользователями. Выполнив следующие шаги, вы сможете стать участником этой программы
+ и создать приложение для Android TV, которое понравится пользователям.
+</p>
+
+<ul>
+  <li>Предусмотрите соблюдение основных критериев качества приложений.
+    <ul>
+      <li>Следуйте <a href="{@docRoot}design/index.html">рекомендациям
+ по дизайну Android</a>. Уделите особое внимание использованию <a href="http://www.google.com/design/spec/material-design/introduction.html">дизайна
+ материалов</a> в вашем приложении.
+      </li>
+
+      <li>Проверьте, как в приложении соблюдаются <a href="{@docRoot}distribute/essentials/quality/core.html">Основные критерии качества
+ приложений</a>.
+      </li>
+    </ul>
+  </li>
+  <li>Предусмотрите соблюдение критериев <a href="{@docRoot}distribute/essentials/quality/tv.html">Качества
+ телеприложений</a>.
+    <ul>
+      <li>Используйте передовые 
+методы <a href="{@docRoot}training/tv/index.html">разработки телеприложений</a>.</li>
+      <li>Убедитесь в том, что приложение соответствует всем критериям <a href="{@docRoot}distribute/essentials/quality/tv.html">качества телеприложений</a>.</li>
+    </ul>
+  </li>
+  <li>Стремитесь сделать его максимально простым и удобным.</li>
+</ul>
+
+<h3 id="opt_in">4. Вступление в программу Android TV и публикация</h3>
+
+<p>
+  После создания готового к выпуску пакета APK и проверки его на соответствие
+ требованиям <a href="{@docRoot}distribute/essentials/quality/tv.html">качества телеприложений</a> загрузите пакет
+ в консоль разработчика. Добавьте дополнительные
+ снимки телеэкранов и ТВ-баннер на страницу своего каталога и установите нужные параметры
+ распространения. Если вы не знаете, как подготовить приложение к публикации на Google Play,
+ изучите <a href="{@docRoot}distribute/googleplay/publish/preparing.html">Контрольный список
+ выпуска приложения</a>.
+</p>
+
+<p>
+  Прежде чем вы сможете опубликовать приложение для пользователей Android TV, вам
+ необходимо стать участником этой программы, см. раздел <strong>Цены и распространение</strong>
+ в консоли разработчика. Участие в программе означает, что вы хотите открыть доступ пользователям
+ Android TV к своему приложению через Google Play, а также то,
+ что приложение соответствует критериям <a href="{@docRoot}distribute/essentials/quality/tv.html">качества
+ телеприложений</a>.
+</p>
+
+<p>
+  Стать участником программы можно лишь в том случае, если приложение отвечает двум
+ предварительным критериям качества, которые автоматически проверяются при загрузке пакета APK в Google Play.
+</p>
+
+<ul>
+  <li>В манифесте приложения для объекта Intent должен быть установлен тип <a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a>
+ с категорией<a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"> 
+<code>CATEGORY_LEANBACK_LAUNCHER</code></a>. Дополнительную информацию см. <a href="{@docRoot}training/tv/start/start.html#tv-activity">здесь</a>.
+  </li>
+
+  <li>Для приложения должна быть задекларирована необязательность сенсорного экрана. Для
+ этого в манифесте для оборудования <code>android.hardware.touchscreen</code> необходимо установить
+ атрибут <code>android:required="false”</code>. Дополнительную информацию см. <a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">здесь</a>.
+  </li>
+</ul>
+
+<p>
+  Если приложение соответствует предварительным критериям, появится флажок,
+ подтверждающий участие в программе Android TV, как показано на рисунке далее. Если флажок участия в программе снят, проверьте свой пакет APK, убедившись, что он
+ соответствует предварительным критериям.
+</p>
+
+<p>
+  После присоединения к программе и сохранения изменений вы можете загрузить и опубликовать свое приложение в обычном порядке.
+  Перед тем, как открыть доступ к приложению пользователям Android TV, Google Play передает
+ приложение на проверку его соответствия критериям <a href="{@docRoot}distribute/essentials/quality/tv.html">качества телеприложений</a>
+ и сообщает о ее результатах. Отслеживание статуса подтверждения приложения подробно
+ описано в следующем разделе.
+</p>
+
+<p>
+  Если приложение соответствует критериям <a href="{@docRoot}distribute/essentials/quality/tv.html">качества
+ телеприложений</a>, Google Play делает его доступным пользователям
+ Android TV. Ваше приложение также может воспользоваться возможностью высокой доступности в
+ коллекциях приложений и рекламных кампаниях. Чтобы все пользователи сразу поняли, что приложение
+ разработано для Android TV, в Google Play страница приложения отмечена отличительным
+ значком "TV".
+</p>
+
+<p>
+  Следует отметить, что участие в программе и результат проверки не влияет на доступность
+ приложения для других устройств в магазине Google Play, например, для телефонов и
+ планшетов, для которых приложение станет доступно сразу после публикации.
+</p>
+
+<p>
+  Ниже приведены шаги по присоединению к программе Android TV в консоли разработчика.
+</p>
+
+<ol>
+  <li>Убедитесь в том, что приложение соответствует всем критериям <a href="{@docRoot}distribute/essentials/quality/tv.html">качества телеприложений</a>.
+  </li>
+
+  <li>Добавьте снимки телеэкранов и картинку баннера к странице приложения в каталоге.
+  </li>
+
+  <li>Выберите на странице <strong>Все приложения</strong> то приложение, которое нужно добавить к программе.
+  </li>
+
+  <li>В списке <strong>Цена и распространение</strong> найдите пункт <em>Android TV</em> и флажок
+ участия в программе.
+  </li>
+
+  <li>Установите флажок <em>Распространять ваше приложение в Android TV</em>.
+  </li>
+
+  <li>Нажмите <strong>Сохранить</strong>, чтобы сохранить свои изменения.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-tv-opt-in.png">
+  <p class="caption">
+    <strong>Участие в программе для ТВ-устройств</strong>. Включите свое приложение в Android TV, присоединившись к программе из
+ консоли разработчика.
+  </p>
+</div>
+
+<h3 id="track_review">5. Дождитесь результатов проверки и подтверждения</h3>
+
+<p>
+  Если приложение соответствует описанным выше техническим и качественным критериям
+ Android TV, оно станет доступно пользователям этой программы. Если приложение не
+ соответствует критериям, вы получите <strong>уведомление на адрес электронной почты,
+ указанный в учетной записи разработчика</strong>, с описанием проблем, которые следует устранить. После
+ внесения необходимых исправлений вы можете загрузить новую версию своего приложения в консоль
+ разработчика. 
+</p>
+
+<p>
+  Результаты проверки и текущий статус подтверждения вашего приложения всегда
+ можно посмотреть в консоли разработчика в разделе <em>Android TV</em> на странице
+ <strong>Цены и распространение</strong> для вашего приложения.
+</p>
+
+<p>
+  Возможны три следующих статуса подтверждения.
+</p>
+
+<ul>
+  <li>
+    <em>Ожидает подтверждения</em> – приложение отправлено для проверки, и она еще не
+ закончена.
+  </li>
+
+  <li>
+    <em>Утверждено</em> – ваше приложение было проверено и утверждено. Приложение
+ становится доступно пользователям программы Android TV. 
+  </li>
+
+  <li>
+    <em>Отклонено</em> – ваше приложение было проверено, но отклонено. Информацию о том,
+ почему приложение было отклонено, смотрите в сообщении по электронной почте. Можно
+ исправить указанные проблемы и повторно подать заявку, опубликовав приложение,
+ чтобы начать его новую проверку.
+  </li>
+</ul>
+
+<p>Процесс оценки приложений более подробно описан в документе <a href="{@docRoot}distribute/essentials/quality/tv.html">Качество телеприложений</a>. </p>
+
+
+  <h3>Связанные ресурсы</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:tvlanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/wear.jd b/docs/html-intl/intl/ru/distribute/googleplay/wear.jd
new file mode 100644
index 0000000..1c6b270
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/googleplay/wear.jd
@@ -0,0 +1,262 @@
+page.title=Распространение приложений Android Wear
+page.image=/design/media/wear/ContextualExample.008_2x.png
+meta.tags="wear", "publish", "quality"
+page.tags="wear", "publish", "googleplay"
+page.metaDescription=Распространяйте свои приложения, игры и контент для Android Wear.
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Как стать участником</h2>
+<ol>
+<li><a href="#understand_guidelines">Изучите инструкции</a></li>
+<li><a href="#develop_app">Создайте качественное приложение для Android Wear</a></li>
+<li><a href="#test_app">Проверьте качество приложения для Android Wear</a></li>
+<li><a href="#opt_in">Станьте участником программы</a></li>
+<li><a href="#track_review">Дождитесь результатов проверки</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/wear.html">Качество приложений Android Wear</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">Основные критерии качества приложений</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  Если вы создали качественное приложение, Android Wear и Google Play помогут вам предоставить его пользователям. Отправка простых уведомлений на устройства Android Wear доступна всем
+ приложениям, но вы можете добиться гораздо большего.
+  Включите в ваши приложения поддержку настраиваемых взаимодействий Android Wear
+ и создайте усовершенствованный, привлекательный пользовательский интерфейс для всех устройств Android Wear. Если ваши приложения соответствуют основным критериям качества для мобильных
+ устройств и предоставляют качественный интерфейс для устройств Android Wear, их
+ квалификация в Google Play поможет пользователям быстрее их обнаружить.
+</p>
+
+<p>
+  Для начала ознакомьтесь с разделами этого документа, чтобы узнать о распространении приложений
+ для Android Wear через Google Play. Обязательно изучите документ<a href="{@docRoot}distribute/essentials/quality/wear.html"> Качество приложений Android Wear</a>,
+ описывающий требования к удобству использования и стандарты качества, которым должно соответствовать ваше приложение. Когда приложение будет готово,
+ вы можете подать заявку на его квалификацию для Android Wear в консоли разработчика.
+</p>
+
+<h2 id="how_to_participate">
+  Как стать участником
+</h2>
+
+<p>
+  Google Play позволяет пользователям быстрее обнаруживать ваши приложения для Android Wear. Для разработки и публикации
+ можно использовать свою существующую учетную запись в консоли разработчика
+ и текущие настройки распространения и ценообразования. Процесс участия довольно прост и кратко описан в следующих разделах.
+</p>
+
+<h3 id="understand_guidelines">
+  1. Изучите инструкции и требования
+</h3>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-wear-process.png">
+</div>
+
+<p>
+  Чтобы подготовить успешный выпуск приложения для Android Wear, начните с изучения
+ руководств по созданию качественных интерфейсов приложений для Android Wear. Воспользуйтесь приведенными в <a href="{@docRoot}design/wear/index.html">Руководстве по проектированию для Android Wear</a>
+ советами по расширению приложений функциями для Android Wear,
+ а также подробной информацией по дизайну и удобству использования приложений.
+</p>
+
+<p>
+  Приступив к проектированию интерфейса для Android Wear, обязательно изучите
+ критерии качества для этих приложений. Для получения соответствующего статуса в Google Play приложение должно
+ специально разрабатываться как приложение Android Wear и соответствовать набору основных критериев качества. Более подробную информацию см. в документе <a href="{@docRoot}distribute/essentials/quality/wear.html">Качество приложений Android Wear</a>.
+</p>
+
+<h3 id="develop_app">2. Создайте качественное приложение для Android Wear</h3>
+
+<p>
+Следующим шагом после изучения рекомендаций является разработка приложения. Нижеприведенные разделы
+ описывают, как приступить к созданию качественного интерфейса приложения для Android Wear.
+</p>
+
+<h4>Дизайн прежде всего</h4>
+
+<p>
+  Операционная система Android Wear ориентирована на предоставление пользователям нужной информации в нужное время. Удобные
+ интерфейсы Android Wear запускаются автоматически, предельно лаконичны
+ и требуют минимального (или вообще не требуют) взаимодействия с пользователем. Все приложения без каких-либо модификаций могут отправлять простые уведомления на устройства Android Wear,
+ однако качественные приложения для Android Wear способны предложить продуманный
+ и удобный интерфейс, работающий с различными макетами экранов и предоставляющий
+ пользователям привлекательный набор функций.
+</p>
+
+<p>
+  Планируя создание приложения для часов, изучите <a href="{@docRoot}training/building-wearables.html">документацию для разработчиков</a>, <a href="{@docRoot}design/wear/index.html">инструкции по эргономике</a>
+ и постарайтесь максимально их придерживаться. Вы можете спроектировать удобный интерфейс уведомлений для пользователей с помощью API-интерфейсов,
+ предоставленных в SDK и вспомогательной библиотеке. Вы также можете выбрать вариант создания приложения, которое выполняется
+ непосредственно на часах.
+</p>
+
+<h4>Создание пакета приложения</h4>
+
+<p>
+  Мы рекомендуем выкладывать интерфейс для Android Wear вместе с существующим
+ приложением для телефонов, планшетов и других устройств, используя то же имя пакета и ту же страницу каталога. Это позволяет
+ пользователям легко адаптироваться к работе с интерфейсом Android Wear,
+ а также дает вам возможность использовать для привлечения пользователей отзывы и рейтинги, полученные для телефонной и планшетной версий приложения. Приложения для часов, чья функциональность
+ зависит от мобильного приложения, должны быть упакованы внутри этого мобильного приложения. Более подробно см. в документе <a href="{@docRoot}training/wearables/apps/packaging.html">Создание пакета приложения для Android Wear</a>.
+</p>
+
+<h4>Проверка на различных устройствах</h4>
+
+<p>
+  В процессе проектирования и разработки очень важно иметь в своем распоряжении
+ подходящие устройства для макетирования и тестирования создаваемого интерфейса. Рекомендуется приобрести одно или несколько устройств Android Wear,
+ либо создать различные конфигурации эмулятора, чтобы как можно раньше
+ организовать среду для тестирования. Большое значение имеет оптимизация вашего дизайна для макетов обоих видов – квадратных и круглых.
+</p>
+
+<h3 id="test_app">3. Проверьте качество приложения для Android Wear</h3>
+
+<p>
+  Ваши приложения для часов должны обладать высокой производительностью,
+ хорошо смотреться на устройствах Android Wear и быть максимально удобными для пользователя. Выбранные лучшие приложения Android Wear демонстрируются на страницах
+ Google Play, что упрощает их обнаружение пользователями. Выполнив следующие шаги, вы сможете стать участником этой программы
+ и создать приложение для Android Wear, которое понравится пользователям.
+</p>
+
+<ul>
+  <li>Выполните основные требования к качеству приложений
+    <ul>
+      <li>Следуйте <a href="{@docRoot}design/index.html">рекомендациям
+ по дизайну Android</a>. Уделите особое внимание использованию <a href="http://www.google.com/design/spec/material-design/introduction.html">дизайна
+ материалов</a> в вашем приложении.
+      </li>
+
+      <li>Проверьте, как в приложении соблюдаются <a href="{@docRoot}distribute/essentials/quality/core.html">основные критерии качества
+ приложений</a>.
+      </li>
+    </ul>
+  </li>
+  <li>Выполните требования к <a href="{@docRoot}distribute/essentials/quality/wear.html">качеству приложений
+ Android Wear</a>.
+    <ul>
+      <li>Воспользуйтесь практическими советами по <a href="{@docRoot}training/building-wearables.html">разработке
+ приложений для Android Wear</a>.</li>
+      <li>Убедитесь в том, что приложение соответствует всем критериям <a href="{@docRoot}distribute/essentials/quality/wear.html">качества приложений Android Wear</a>.</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4. Присоединение к программе Android Wear и публикация</h3>
+
+<p>
+  Создав готовый к выпуску пакет APK и проверив его на соответствие всем критериям <a href="{@docRoot}distribute/essentials/quality/wear.html">качества приложений Android Wear</a>,
+ загрузите пакет в консоль разработчика. Добавьте снимки экранов Android Wear на страницу своего каталога
+ и установите нужные параметры распространения. Если вы не знаете, как подготовить приложение к выпуску в Google Play, изучите 
+<a href="{@docRoot}distribute/googleplay/publish/preparing.html">контрольный список при выпуске приложения.</a>
+</p>
+
+<p>
+  Перед публикацией приложения вы можете присоединиться к программе Android Wear
+ в разделе <strong>Цены и распространение</strong> консоли разработчика. Участие в программе означает, что вы хотите
+ упростить обнаружение своего приложения в Google Play для пользователей Android Wear, а также то, что приложение соответствует критериям <a href="{@docRoot}distribute/essentials/quality/wear.html">качества приложений Android Wear</a>.
+</p>
+
+<p>
+  После присоединения к программе и сохранения изменений вы можете загрузить и опубликовать свое приложение в обычном порядке. В дополнение к этому
+ Google Play передает ваше приложение на проверку его соответствия критериям
+ <a href="{@docRoot}distribute/essentials/quality/wear.html">качества приложений Android Wear</a>и уведомляет о ее результатах. Подробная информация о том, как отслеживать статус подтверждения приложения, приведена
+ в следующем разделе.
+</p>
+
+<p>
+  Если приложение соответствует всем критериям <a href="{@docRoot}distribute/essentials/quality/wear.html">качества приложений Android Wear</a>,
+ Google Play позволяет быстрее его обнаружить пользователям Android Wear. Ваше приложение
+ также может воспользоваться возможностью высокой доступности в коллекциях приложений и в рекламных кампаниях.
+</p>
+
+<p>
+  Следует отметить, что участие в программе и результат проверки не влияет на доступность
+ приложения в магазине Google Play &mdash; приложение станет доступно сразу после публикации.
+</p>
+
+<p>
+  Ниже приведены шаги по присоединению к программе Android Wear в консоли разработчика.
+</p>
+
+<ol>
+  <li>Убедитесь в том, что приложение соответствует всем критериям <a href="{@docRoot}distribute/essentials/quality/wear.html">качества приложений Android Wear</a>.
+  </li>
+
+  <li>Добавьте снимки экранов Android Wear на страницу приложения в каталоге.
+  </li>
+
+  <li>На странице <strong>Все приложения</strong> выберите приложение, которое вы хотите присоединить к программе.
+  </li>
+
+  <li>В разделе <strong>Цена и распространение</strong> найдите пункт <em>Android Wear</em>
+ и флажок участия в программе.
+  </li>
+
+  <li>Установите флажок <em>Распространять ваше приложение для Android Wear</em>.
+  </li>
+
+  <li>Нажмите <strong>Сохранить</strong>, чтобы сохранить изменения параметров цены и распространения.
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-wear-opt-in.png">
+  <p class="caption">
+    <strong>Участие в программе для Android Wear.</strong> Включите свое приложение в программу Android Wear из
+ консоли разработчика.
+  </p>
+</div>
+
+<h3 id="track_review">5. Отслеживание результатов проверки и подтверждения</h3>
+
+<p>
+  Если приложение соответствует описанным выше техническим и качественным критериям
+ Android Wear, оно станет более доступно пользователям Android Wear. Если приложение не соответствует
+ критериям, вы получите <strong>уведомление на адрес электронной почты, указанный в учетной записи разработчика</strong>,
+ с описанием проблем, которые следует устранить. После внесения необходимых исправлений
+ вы можете загрузить новую версию своего приложения в консоль разработчика.
+</p>
+
+<p>
+  Результаты проверки и текущий статус подтверждения вашего приложения
+ всегда можно посмотреть в консоли разработчика в разделе <em>Android Wear</em> на странице
+ <strong>Цены и распространение</strong> для вашего приложения.
+</p>
+
+<p>
+  Возможны три следующих статуса подтверждения.
+</p>
+
+<ul>
+  <li>
+    <em>Ожидает подтверждения</em> – приложение отправлено для проверки, и она еще не закончена.
+  </li>
+
+  <li>
+    <em>Утверждено</em> – ваше приложение было проверено и утверждено. Приложение становится более доступным
+ пользователям Android Wear.
+  </li>
+
+  <li>
+    <em>Отклонено</em> – ваше приложение было проверено и отклонено. Информацию о том,
+ почему приложение было отклонено, смотрите в уведомлении, пришедшем по электронной почте. Вы можете исправить указанные проблемы
+ и повторно подать заявку, опубликовав приложение, чтобы начать его новую проверку.
+  </li>
+</ul>
+
+<p>Процесс оценки приложений более подробно описан в документе <a href="{@docRoot}distribute/essentials/quality/wear.html">Качество приложений Android Wear</a>. </p>
+
+
+  <h3>Связанные ресурсы</h3>
+
+  <div class="resource-widget resource-flow-layout col-13"
+    data-query="collection:wearlanding"
+    data-cardSizes="6x2"
+    data-maxResults="3">
+  </div>
diff --git a/docs/html-intl/intl/ru/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/ru/distribute/tools/launch-checklist.jd
new file mode 100644
index 0000000..a62e3f1
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/tools/launch-checklist.jd
@@ -0,0 +1,1023 @@
+page.title=Контрольный список выпуска приложения
+page.metaDescription=Полный обзор всего процесса доставки ваших приложений пользователям. Ознакомьтесь с контрольным списком в самом начале процесса разработки – это поможет спланировать успешный запуск своего приложения в Google Play.
+meta.tags="localizing, publishing, disttools"
+page.tags="launch, publishing, Google Play"
+page.image=/distribute/images/launch-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>Контрольный список</h2>
+    <ol>
+      <li><a href="#understand-publishing">1. Знакомство с процессом публикации</a></li>
+      <li><a href="#understand-policies">2. Знакомство с правилами Google Play</a></li>
+      <li><a href="#test-quality">3. Проверка основных критериев качества приложения</a></li>
+      <li><a href="#determine-rating">4. Определение возрастного рейтинга контента</a></li>
+      <li><a href="#determine-country">5. Определение стран для распространения</a></li>
+      <li><a href="#confirm-size">6. Подтверждение общего размера</a></li>
+      <li><a href="#confirm-platform">7. Подтверждение платформы и размеров экранов</a></li>
+      <li><a href="#decide-price">8. Выбор модели распространения: платно или бесплатно</a></li>
+      <li><a href="#consider-billing">9. Использование службы продажи контента через приложения</a></li>
+      <li><a href="#set-prices">10. Установка цен на ваши продукты</a></li>
+      <li><a href="#start-localization">11. Запуск локализации</a></li>
+      <li><a href="#prepare-graphics">12. Подготовка рекламных картинок, снимков экранов и видеороликов</a></li>
+      <li><a href="#build-upload">13. Создание готовых к выпуску пакетов APK</a></li>
+      <li><a href="#plan-beta">14. Планирование выпуска бета-версии</a></li>
+      <li><a href="#complete-details">15. Завершение описания в каталоге</a></li>
+      <li><a href="#use-badges">16. Использование отличительных значков и ссылок Google Play</a></li>
+      <li><a href="#final-checks">17. Окончательные проверки и публикация</a></li>
+      <li><a href="#support-users">18. Поддержка пользователей после выпуска приложения</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg"></div>
+
+<p>
+  Прежде чем опубликовать свои приложения в Google Play и распространять их пользователям, вам
+ необходимо подготовить эти приложения, выполнить их проверку, а также подготовить рекламные
+ материалы.
+</p>
+
+<p>
+  Эта страница поможет понять суть процесса публикации и подготовиться к успешному
+ выпуску продукта в Google Play. Здесь подытожены основные задачи
+ которые необходимо выполнить, прежде чем публиковать свое приложение в Google Play, например,
+ создать подписанный, готовый к выпуску пакет приложения (APK), познакомиться с требованиями
+ к приложениям, создать страницу продукта и графические материалы
+ для каждого вашего приложения.
+</p>
+
+<p>
+  Задачи, связанные с подготовкой и публикацией, пронумерованы, чтобы дать
+ общее представление о последовательности их выполнения. Но вы можете выполнять эти задачи в любой удобном вам порядке
+ и даже пропускать некоторые шаги, если это уместно.
+</p>
+
+<p>
+  По мере приближения к моменту публикации все большее число разнообразных ресурсов
+ поддержки будут становиться доступными для вас. Соответствующие ссылки представлены для каждого шага.
+</p>
+
+<div class="headerLine">
+  <h2 id="understand-publishing">
+    1. Знакомство с процессом публикации
+  </h2>
+
+
+</div>
+
+<p>
+  Перед выполнением шагов из этого контрольного списка предварительно следует
+ внимательно ознакомиться с материалами, описывающими схему выполнения
+ публикации в целом, чтобы узнать, как работает этот процесс. В частности, вам или вашей команде разработчиков необходимо подготовить ваши
+ приложений к выпуску, используя технологический процесс, общий для всех приложений Android.
+  <a href="{@docRoot}tools/publishing/publishing_overview.html">Документы
+ о процессе публикации</a> содержат подробное описание того, как выполняется публикация и как
+ подготовить пакет APK к выпуску.
+</p>
+
+<p>
+  Получив общее представление о процессе публикации, продолжите чтение,
+ чтобы выяснить все моменты, которым надо уделить внимание
+ при публикации своих приложений в Google Play.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/understanding"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="understand-policies">
+    2. Знакомство с правилами и соглашениями Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  Убедитесь, что вы полностью понимаете и соблюдаете правила программы Google Play,
+ которое вы приняли при регистрации. Google Play активно отслеживает соблюдение правил
+ и любые их нарушения могут привести к отстранению ваших приложений, а в случае
+ повторных нарушений, к полному удалению вашей учетной записи разработчика.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/policies" data-sortorder=
+"-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-quality">
+    3. Проверка качества
+  </h2>
+
+
+</div>
+
+<p>
+  Прежде чем публиковать приложения в Google Play, очень важно убедиться, что они
+ соответствуют основным требованиям качества, предъявляемым ко всем приложениям Android на всех
+ устройствах, для которых предназначено ваше приложение. Можно оценить качество своего приложения, создав
+ среду тестирования и проверив приложение относительно небольшого набора
+ <strong>критериев качества, применимых ко всем приложениям</strong>. Полную информацию
+ об этом см. в руководстве <a href="{@docRoot}distribute/essentials/quality/core.html">Основные критерии качества приложений</a>
+.
+</p>
+
+<p>
+  Если приложение предназначено для планшетных устройств, убедитесь, что оно обеспечивает полнофункциональный,
+ удобный интерфейс для пользователей планшетных ПК. В руководстве <a href="{@docRoot}distribute/essentials/quality/tablets.html">Критерии качества приложений для планшетных ПК</a>
+ ознакомьтесь с рекомендациями о способах оптимизации ваших приложений для планшетных устройств.
+</p>
+
+<p>
+  Если вы планируете выложить свое приложение в рамках программы "Google Play для образования", тогда
+ необходимо убедиться в его соответствии категории K-12 (дошкольное и школьное образование) и сделать
+ его действительно полезным для образовательных целей. См. <a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">Руководство по разработке
+ образовательных приложений</a>, чтобы получить информацию о том, какими характеристиками должно обладать ваше
+ образовательное приложение.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/quality" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-rating">
+    4. Определение возрастного рейтинга для содержимого приложения
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play требует, чтобы вы установили возрастной рейтинг содержимого своего приложения, который будет
+информировать пользователей Google Play о существующих возрастных ограничениях. Перед публикацией необходимо указать
+ используемый уровень возрастных ограничений. Доступны следующие уровни возрастных
+ ограничений:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Для всех
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Для младшей возрастной группы
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Для подростков
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Для взрослых
+    </p>
+  </li>
+</ul>
+
+<p>
+  На своих устройствах Android пользователи могут установить желаемый уровень возрастных ограничений
+ для просмотра. Google Play выполняет фильтрацию с учетом этих ограничений, поэтому установленные
+ вами возрастные ограничения могут влиять на распространение приложения. Вы можете
+ назначить (или изменить) возрастной рейтинг для содержимого своих приложений в консоли разработчика Google Play,
+ никаких изменений в двоичном коде приложения для этого не требуется.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/rating" data-sortorder=
+"-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-country">
+    5. Определение стран для распространения
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play позволяет вам выбирать, в какие страны и на каких территориях будет распространяться ваше
+ приложение. Обеспечивая приложению наибольшую доступность и максимальную клиентскую базу,
+ обычно запрашивается распространение для всех доступных стран и территорий.
+  Однако с учетом бизнес-потребностей, запросов приложения или требований выпуска
+ вам может потребоваться исключить одну или несколько стран из сферы распространения.
+</p>
+
+<p>
+  Очень важно определить страны для распространения как можно раньше, поскольку от
+ этого могут зависеть следующие аспекты.
+</p>
+
+<ul>
+  <li>
+    <p>
+      Необходимость локализации ресурсов в приложении.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Необходимость локализации описания приложения в консоли разработчика.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Юридические требования к приложению, которые могут быть специфичны для некоторых стран.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Поддержка часовых поясов, цены в локальной валюте и так далее.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Учитывая страны, где предполагается распространение, вам необходимо оценить потребности
+ в локализации, как для самого приложения, так и для сведений в каталоге Google Play, и заранее
+начать работы по локализации, чтобы успеть к намеченной дате выпуска приложения.
+</p>
+
+<p>
+  Сведения об основных шагах и о том,
+ что необходимо учитывать в процессе локализации см. в документе <a href="{@docRoot}distribute/tools/localization-checklist.html">Контрольный список локализации</a>.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/country" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-size">
+    6. Подтверждение общего размера приложения
+  </h2>
+
+
+</div>
+
+<p>
+  Общий размер вашего приложения может отразиться на дизайне и способах его
+ публикации в Google Play. В настоящий момент максимальный размер публикуемого пакета APK в Google Play
+ составляет <strong>50 МБ</strong>. Если приложение превышает этот размер или если планируется
+ предложить дополнительную загрузку, можно применять <a href="{@docRoot}google/play/expansion-files.html">файлы расширения APK</a>, которые
+ Google Play будет бесплатно размещать в своей серверной инфраструктуре и автоматически
+ обрабатывать их загрузку на устройства.
+</p>
+
+<ul>
+  <li>
+    <p>
+      Максимальный размер публикуемого пакета APK в Google Play составляет 50 МБ.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Дополнительно для каждого пакета APK можно использовать еще два (2) файла
+ расширения APK, каждый размером до 2 ГБ.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Использование файлов расширения APK – это удобный, экономически эффективный метод
+ распространения объемных приложений. Но для применения файлов расширения APK требуются
+ определенные изменения в двоичном коде приложения, поэтому эти изменения
+ необходимо выполнить до создания готового к выпуску пакета APK.
+</p>
+
+<p>
+  Чтобы максимально уменьшить размер двоичного файла вашего приложения, обязательно используйте инструмент <a href="{@docRoot}tools/help/proguard.html">Proguard</a>
+ или другие подобные оптимизаторы кода при подготовке пакета APK к выпуску.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/size" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-platform">
+    7. Подтверждение поддерживаемых вариантов платформ и размеров экрана
+  </h2>
+
+
+</div>
+
+<p>
+  Перед публикацией важно убедиться, что приложение правильно работает на тех
+ версиях платформы Android и поддерживает все те размеры экрана,
+ для которых оно предназначено.
+</p>
+
+<p>
+  Совместимость приложения с версиями платформы Android определяется
+ уровнем <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API,
+ им назначенного</a>. Необходимо подтвердить минимальную версию, с которой совместимо ваше приложение,
+ используя атрибут <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;minSdkVersion&gt;</a>;
+ после публикации приложения, это будет влиять на его распространение по устройствам Android.
+</p>
+
+<p>
+  Необходимо указать поддерживаемые варианты размеров и разрешений экрана,
+ при которых приложение правильно работает и нормально
+ отображается на экране. Следуйте рекомендациям, представленным в документе <a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких
+ экранов</a>, чтобы обеспечить масштабируемую поддержку для экранов различных размеров. Но
+ если не удается добиться этого, укажите минимальный размер экрана, поддерживаемый
+ вашим приложением, используя элемент <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a>.
+  Google Play ограничит доступность вашего приложения соответствующим образом,
+ сделав приложение видимым для устройств с экранами указанного или большего размеров.
+</p>
+
+<p>
+  Для лучшего понимания текущего распределения различных версий платформы Android
+ на мобильных устройствах и поддерживаемых для них размеров экранов,
+ см. диаграммы в документе <a href="{@docRoot}about/dashboards/index.html">Распределение устройств по конфигурациям</a>.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/platform" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="decide-price">
+    8. Выбор модели распространения приложения: платно или бесплатно
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-launch-checklist-1.png">
+</div>
+
+<p>
+  Можно публиковать приложения в Google Play как для бесплатной, так и для платной загрузки. Бесплатные приложения
+ в Google Play могут быть загружены любым пользователем Android. Платные приложения могут
+ быть загружены только теми пользователями, которые находятся в стране, поддерживающей платные загрузки,
+ также они должны зарегистрировать форму оплаты в Google Play, например,
+ с помощью кредитной карты или со счета мобильного оператора.
+</p>
+
+<p>
+  Решение о том, будет ваше приложение платным или нет, очень важно, поскольку в
+ Google Play <strong>бесплатные приложения должны оставаться бесплатными</strong>.
+</p>
+
+<ul>
+  <li>
+    <p>
+      После публикации приложения как бесплатного нельзя изменить его тип, сделав платным
+ приложением. В то же время можно продавать <a href="{@docRoot}google/play/billing/billing_overview.html#products">продукты в рамка
+ этого приложения</a>, а также различные <a href="{@docRoot}google/play/billing/billing_subscriptions.html">подписки</a>,
+ используя <a href="{@docRoot}google/play/billing/index.html">службу продажи контента через приложения</a> в Google Play.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Если приложение опубликовано как платное, в любой момент времени <em>можно</em> изменить его тип,
+ сделав бесплатным приложением (<strong>но последующее обратное изменение на
+ платное уж невозможно</strong>). Также в рамках приложения можно продавать различные товары и подписки.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Если приложение платное, а также если вы будет продавать какие-либо товары внутри
+ приложения, перед публикацией вам необходимо <a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">
+ настроить учетную запись продавца в Google Кошельке</a>.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/price" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="consider-billing">
+    9. Принятие решения об использовании службы продажи контента через приложения
+  </h2>
+
+
+</div>
+
+<p>
+  <a href="{@docRoot}google/play/billing/index.html">Служба продажи
+ контента через приложения</a> Google Play позволяет вам продавать цифровой контент в своих приложениях. С помощью
+ этой службы можно продавать самое разнообразное содержимое, включая загружаемый контент,
+ например аудио- и видеофайлы и фотографии, а также виртуальный контент, например уровни или
+ артефакты в игре. Служба продажи контента через приложения позволяет выполнять как разовые продажи, так и продавать
+ подписки в рамках приложения. Это помогает получать экономический эффект от приложение в то время,
+ пока оно установлено у пользователей.
+</p>
+
+<p>
+  Если вы ищите дополнительные способы заработка с помощью своего приложения и хотите заинтересовать
+им потенциальных покупателей, рассмотрите использование служб продажи контента или разовой покупки. Эти службы стали очень популярны
+ как среди пользователей, так и среди разработчиков. Но для использования служб продажи контента через приложения и разовой
+ продажи требуются определенные изменения в двоичном коде приложения, поэтому
+ следует осуществить и проверить их внедрение до создания готового к выпуску пакета APK.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/purchasemethod"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="set-prices">
+    10. Установка цен на ваши продукты
+  </h2>
+
+
+</div>
+
+<p>
+  Если ваше приложение платное или вы осуществляете продажи товаров внутри приложения, или
+ продаете какие-то материальные продукты, Google Play позволяет установить цены на ваши продукты в различных валютах, для
+ работы с пользователями на различных рынках мира. Можно устанавливать цены отдельно
+ в различных валютах, так что у вас будет возможность гибко регулировать цены
+ с учетом ситуации и обменных курсов на различных рынках.
+</p>
+
+<p>
+  Перед выполнением публикации, решите, какую цену вы установите на свои продукты и как
+ цена будет различаться в различных валютах. Позднее вы сможете установить цены для всех
+ доступных валют с помощью консоли разработчика.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/setprice" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="start-localization">
+    11. Запуск локализации
+  </h2>
+
+
+</div>
+
+<p>
+  Учитывая страны, где предполагается распространение, необходимо оценить потребности в
+ локализации, убедиться, что приложение готово для выхода на международный уровень, заранее
+ начать работы по локализации, чтобы успеть к намеченной дате выпуска приложения.
+</p>
+
+<p>
+  Помимо дизайна самого приложения есть еще три следующих аспекта, которые нужно
+ учесть при локализации.
+</p>
+
+<ul>
+  <li>
+    <p>
+      Локализация строк, изображений и других ресурсов вашего приложения.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Локализация сведений о приложении в каталоге Google Play.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Локализация графических материалов, снимков экранов и видеороликов,
+ которые сопровождают страницу приложения в каталоге.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Сведения об основных шагах и о том,
+ что необходимо учитывать в процессе локализации см. в документе <a href="{@docRoot}distribute/tools/localization-checklist.html">Контрольный список локализации</a>.
+</p>
+
+<p>
+  Чтобы локализовать страницу приложения в каталоге, вначале подготовьте и окончательно
+ утвердите название приложения, его описание и рекламный текст. Соберите и отправьте всю эту информацию для
+ локализации. Также можно перевести текст "Последние изменения" для обновлений
+ приложения. Позднее можно будет добавить переведенные сведения
+ из каталога в консоль разработчика или разрешить Google Play выполнить автоматический перевод
+ страницы каталоге на все поддерживаемые вами языки.
+</p>
+
+<p>
+  Важным моментом, помогающим сделать страницу вашего приложения в каталоге
+ привлекательной для клиентов со всего мира, являются локализованные версии рекламных
+ материалов, снимков экранов и видеороликов. Например, если в представляющей приложение картинке для раздела "Рекомендуемые"
+ содержится текст, для максимальной эффективности его необходимо перевести. Можно создать разные
+ версии рекламных материалов для каждого языка и загрузить их в консоль
+ разработчика. Если предлагается рекламный видеоролик, можно создать
+ его локализованные версии, а затем добавить ссылку на нужный видеофайл для каждого
+ языка, поддерживаемого приложением.
+</p>
+
+<p>
+  Когда переводы будут готовы, поместите эти материалы в соответствующие
+ ресурсы приложения и выполните проверку правильности их загрузки. Сохраните переведенные
+ сведения о вашем приложении для последующей доработки, которая будет выполняться при выгрузке ваших материалов и настройке страницы в
+ каталоге.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/localization"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="prepare-graphics">
+    12. Подготовка рекламных картинок, снимков экранов и видеороликов
+  </h2>
+
+
+</div>
+
+<p>
+  При публикации в Google Play можно использовать различные высококачественные
+ графические материалы, позволяющие эффектно представить ваше приложение или бренд. После публикации они
+ будут отображаться на вашей странице в каталоге, в результатах поиска и везде, где необходимо. Эти
+ графические материалы – важная составляющая успешного размещения в каталоге,
+ они помогают привлечь и заинтересовать пользователей, поэтому разумно поручить их создание
+ профессионалам. Снимки экранов и видеоролики также очень важны, поскольку они демонстрируют, как выглядит
+ приложение, как с ним можно работать или играть, демонстрируют его преимущества.
+</p>
+
+<p>
+  Все ваши графические материалы должны быть спроектированы максимально наглядными,
+ они должны выделять ваши приложения или бренд ярким и интересным способом. Правильно связать их
+ единим логотипом или отличительным значком, чтобы пользователи легко находили ваши
+ приложения после загрузки на свое страничке запуска приложений. Ваши графические материалы должны
+ гармонировать с графикой во всех опубликованных вами приложениях, которые также будут
+ отображаться для пользователей на вашей странице в каталоге.
+</p>
+
+<p>
+  Чтобы помочь в эффективном продвижении приложений на глобальном рынке Google
+ Play позволяет создавать локализованные версии рекламных картинок, снимков экранов и
+ видеоматериалов и загружать их в консоль разработчика. Когда пользователь
+ посещает вашу страницу в каталоге, Google Play показывает ему рекламную картинку,
+ снимки экранов и видеоролики, подготовленные вами специально для языка этого пользователя.
+</p>
+
+<p>
+  Для локализации рекламных картинок можно перевести любой содержащийся в них текст,
+ использовать другие изображения или презентационные средства, изменить маркетинговый подход,
+ чтобы точнее адресовать приложение запросам конкретных языковых групп пользователей. Например,
+ если рекламная или представляющая приложение в разделе "Рекомендуемые" картинка содержит
+ название продукта или рекламный слоган, можно перевести этот текст и добавить его в локализованную
+ версию данной картинки.
+</p>
+
+<p>
+  Поскольку локализованные графические ресурсы имеют очень важное
+ значение, необходимо начинать их создание и локализацию заранее,
+ чтобы успеть к намеченной дате публикации.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/graphics" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="build-upload">
+    13. Создание и выгрузка готовых к выпуску пакетов APK
+  </h2>
+
+
+</div>
+
+<p>
+  Когда приложения, на ваш взгляд, будут соответствовать требованиям к интерфейсу пользователя,
+ совместимости и обеспечению качества, можно создавать готовые к выпуску версии этих приложений.
+  Готовые к выпуску пакеты APK выгружаются в вашей консоли разработчика
+ и распространяются среди пользователей.
+</p>
+
+<p>
+  Процесс подготовки готовых к выпуску пакетов APK един для всех приложений,
+ независимо от вариантов их распространения. Обычно в этот процесс входит базовая очистка
+ и оптимизация кода, создание пакета и подпись его вашим кодом разработчика,
+ а затем окончательное тестирование.
+</p>
+
+<p>
+  Подробные сведения о создании готовых к выпуску версий
+ приложения см. в документе <a href="{@docRoot}tools/publishing/preparing.html">Подготовка к
+ выпуску</a>.
+</p>
+
+<p>
+  Как только у вас будут готовые к выпуску пакеты APK, можно выгружать их в
+ консоли разработчика. Если необходимо, перед публикацией можно заменить пакеты APK более новыми
+ версиями.
+</p>
+<!--<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/build"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>-->
+
+<div class="headerLine">
+  <h2 id="plan-beta">
+    14. Планирование выпуска бета-версии
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Начальное бета-тестирование
+    </h2>
+
+    <p>
+      Google Play позволяет вам легко организовать группы альфа- и бета-тестировщиков
+ в любых уголках мира. Обязательно ознакомьтесь с этой эффективной возможностью при своем следующем посещении
+ консоли разработчика.
+    </p>
+  </div>
+</div>
+
+<p>
+  Прежде чем выпускать свои приложения всегда полезно получить отзывы 
+от настоящих пользователей &mdash; даже в большем количестве, чем при запуске новых приложений. Поэтому
+ настоятельно рекомендуется распространить предварительную версию приложения среди
+ таких тестирующих пользователей на ключевых для вас рынках и обеспечить для них удобный
+ механизм передачи своих отзывов и сообщений об ошибках.
+</p>
+
+<p>
+  Google Play поможет организовать программу бета-тестирования для вашего
+ приложения. После того как вы войдете в свою консоль разработчика и выгрузите свои пакеты APK,
+ можно настроить группы пользователей для альфа- и бета-тестирования этих приложений. Вначале можно организовать небольшую
+ группу альфа-тестирования, потом перейти к более большой группе для бета-тестирования. Добавленные
+ пользователи сразу получают доступ к вашей странице в каталоге и могут установить приложение.
+ <strong>Пользователи альфа- и бета-версий не могут оставлять отзывы или
+ рейтинги</strong>, поэтому нет риска <strong>снизить ваш рейтинг</strong> в
+ Google Play. Необходимо предусмотреть механизм получения обратной связи от выполняющих
+ тестирование, например, используя Google Форум или Google+.
+</p>
+
+<p>
+  Полученные отзывы помогут настроить пользовательский интерфейс,
+ перевод и страницу в каталоге, обеспечив максимальное удобство для будущих пользователей.
+</p>
+<!-- Related resources
+
+<table>
+  <tr>
+    <td>Beta-testing and Staged Rollouts
+See how you can facilitate testing with Google Play.</td>
+  </tr>
+</table> -->
+
+<div class="headerLine">
+  <h2 id="complete-details">
+    15. Подготовка описания приложения в каталоге
+  </h2>
+
+
+</div>
+
+<p>
+  В Google Play информация о ваших приложениях отображается пользователям
+ на соответствующих страницах каталога. Пользователи посещают эти страницы,
+ чтобы получить сведения о ваших приложениях и принять решение об их покупке или
+ загрузке на свои устройства Android или через Интернет.
+</p>
+
+<p>
+  Google Play предлагает на страницах каталога ваших приложений множество способов их рекламы и
+ привлечения пользователей, включая красочную графику, снимки
+ экранов и видеоролики, а также локализованные описания, сведения о выпусках и ссылки
+ на другие ваши приложения. Как только вы будете готовы к публикации своих приложений, убедитесь,
+ что вы задействовали все возможности, предлагаемые на странице сведений о продукте,
+ и сделали свое приложение максимально привлекательным для пользователей.
+</p>
+
+<p>
+  Необходимо начать планировать страницы своих продуктов задолго до намеченной
+ даты выпуска, подготовив для них локализованное описание, качественные графические
+ ресурсы, снимки экранов, видеоролики и т. д.
+</p>
+
+<p>
+  По мере приближения намеченной даты публикации необходимо ознакомиться со всеми
+ информационными полями, параметрами и ресурсами страницы настройки каталога в
+ консоли разработчика. Собирая информацию и ресурсы для
+ страницы каталога, убедитесь, что у вас есть возможность выгрузить их в консоль разработчика,
+ сделав это заранее, до того как страница будет подготовлена к публикации.
+</p>
+
+<p>
+  После того как вы настроите геотаргетинг в консоли разработчика, не забудьте
+ добавить в каталог локализованные версии своей страницы, рекламных картинок
+ и прочих материалов, сделав это для всех поддерживаемых языков.
+</p>
+
+<p>
+  Если ваше приложение предназначено для планшетных устройств, постарайтесь
+ добавить хотя бы один снимок экрана этого приложения, выполняющегося на
+ планшете, а также отметьте, что ваше приложение поддерживает планшетные ПК
+ в его описании, примечаниях к выпускам, рекламных кампаниях и т. д.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/productdetails"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="use-badges">
+    16. Использование отличительных значков и ссылок Google Play в ваших рекламных кампаниях
+  </h2>
+
+
+</div>
+
+<p>
+  Отличительный значки Google Play обеспечивают для вас поддерживаемый официальными
+ брендами способ продвижения своих приложений среди пользователей Android. Используйте <a href="{@docRoot}distribute/tools/promote/badges.html">генератор отличительных
+ значков Google Play</a>, чтобы быстро создать значки, которые будут направлять пользователей к вашим продуктам с
+ различных веб-страниц, из рекламных объявлений и обзоров. Также можно пользовать особые <a href="{@docRoot}distribute/tools/promote/linking.html">форматы ссылок</a>, чтобы организовать прямые
+ ссылки на вашу страницу в каталоге, на список ваших продуктов или на результаты
+ поиска.
+</p>
+
+<p>
+  Чтобы помочь вашим приложениям получить распространение после выпуска, настоятельно рекомендуем,
+ чтобы выпуск поддерживался рекламной кампанией, в которой сведения о вашем продукте
+ распространялись бы по максимально возможному числу каналов, в максимально возможном числе стран. Например,
+ можно прорекламировать выпуск, используя направленную рекламу, социальные сети или публикации в блогах,
+ видеоролики и другие мультимедийные материалы, интервью и обзоры, а также любые другие доступные
+ информационные каналы.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/badges" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="final-checks">
+    17. Окончательные проверки и публикация
+  </h2>
+
+
+</div>
+
+<p>
+  Если вы считаете, что готовы к публикации приложения, войдите в консоль разработчика
+ и потратьте несколько минут на выполнение ряда заключительных проверок.
+</p>
+
+<p>
+  Проверьте следующие моменты.
+</p>
+
+<ul>
+  <li>
+    <p>
+      В вашем профиле разработчика должна быть указана правильная информация, он должен
+ быть привязан к соответствующей учетной записи продавца в Google Кошельке (если вы продаете продукты).
+    </p>
+  </li>
+
+  <li>
+    <p>
+      В консоль выгружена правильная версия приложения.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Все части вашей страницы в каталоге готовы, включая все графические ресурсы,
+ снимки экранов, видеоролики, локализованные описания и прочее.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Вы настроили цены на свое приложение, сделав его платным или бесплатным.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Вы правильно указали страны (и мобильных операторов) для распространения и оценили
+ свои продукты (если это применимо) в странах потенциальных покупателей.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      В разделе "Совместимые устройства" должна отображаться информация о том, что ваши приложения
+ доступны устройствам, для которых они предназначены. Если это окажется не так, уточните у своей группы разработки, каковы требования
+ приложения и правила фильтрации.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Вами должна быть предоставлена правильная ссылка на ваш веб-сайт и правильный адрес
+ адрес электронной почты для оказания поддержки.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Ваши приложения не должны нарушать представленные в правилах для разработчиков рекомендации в отношении контента.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Вы должны подтвердить, что ваши приложения соответствуют рекомендациям по
+ контенту приложений Android в Google Play, а также экспортному законодательству США.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Ваши приложения готовы к публикации!
+</p>
+
+<p>
+  Если вы впускаете обновление, обязательно ознакомьтесь с <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=113476&amp;topic=2365760&amp;ctx=topic">
+ требованиями к публикации обновлений</a>.
+</p>
+
+<p>
+  Когда вы будете готовы, нажмите кнопку <strong>Опубликовать</strong> в консоли
+ разработчика. В течение нескольких часов ваши приложения станут доступным пользователям
+ и страница ваших продуктов будет отображаться в Google Play для просмотра,
+ поиска или ссылок из ваших рекламных кампаний.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/finalchecks"
+data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    18. Поддержка пользователей после выпуска приложения
+  </h2>
+
+
+</div>
+
+<p>
+  После публикации приложений или обновлений к ним очень важно обеспечить поддержку
+ ваших пользователей. Своевременная и вежливая поддержка будет способствовать положительному опыту
+ работы пользователей, что повысит рейтинги и сделает отзывы о продуктах более
+ позитивными. Пользователи с большей вероятностью заинтересуются вашим приложением и будут
+ рекомендовать его, если вы будет реагировать на их потребности и отзывы. Это особенно справедливо,
+ если после публикации вы проведете скоординированную кампанию по продвижению своего приложения.
+</p>
+
+<p>
+  Существует несколько способов того, как поддерживать контакты с пользователями и
+ предлагать им поддержку. Наиболее основательный – это указать <em>адрес электронной почты
+ для оказания поддержки</em> на своих страницах в каталоге. Помимо этого поддержку можно оказывать
+ любым выбранным способом, например, с помощью форума, списка рассылки или
+ страницы в Google+. Коллектив Google Play обеспечит пользователям поддержку при загрузке, установке,
+ а также по вопросам, связанным с платежами, но остальные вопросы попадают в вашу
+ зону ответственности. В рамках оказания поддержки возможны следующие обращения: запросы на добавление
+ возможностей, вопросы по работе с приложениями, вопросы о настройках совместимости.
+</p>
+
+<p>
+  После публикации запланируйте выполнение следующих действий.
+</p>
+
+<ul>
+  <li>
+    <p>
+      Регулярно проверяйте свои рейтинги и отзывы на страницах ваших приложений
+ в каталоге. Отслеживайте повторяющиеся темы, это может быть сигналом о наличии ошибок или других проблем с приложением.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Не забывайте о выпусках новых версий платформы Android, возможно необходимо будет
+ обновить настройки совместимости ваших приложений.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Разместите ссылки на свои ресурсы поддержки на своем веб-сайте и настройте другие
+ каналы поддержки, например в формах.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Предоставьте действующий адрес электронной почты для оказания поддержки на
+ страницах каталога и всегда отвечайте на письма пользователей, обращающихся за поддержкой.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Помимо окна автоматического возмещения, предлагаемого Google Play, будьте щедрыми 
+ в своей собственной политике возмещения, удовлетворенные пользователи скорее совершат повторную
+ покупку в будущем.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Уведомляйте о найденных в ваших приложениях ошибках и исправляйте их. Будьте открыты для своих пользователей,
+ поддерживайте список известных проблем на своих страницах в каталоге.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Публикуйте обновления с максимально возможной регулярностью, не снижая при этом
+ качества приложения, и не утомляя пользователей слишком частыми обновлениями.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      С каждым обновлением обязательно предоставляйте обзор того, что было изменено. Эту
+ информацию можно вводить в консоли разработчика. Пользователи прочтут эту информацию
+ и оценят серьезность, с которой вы относитесь к улучшению качества своих
+ приложений.
+    </p>
+  </li>
+</ul>
+</ul>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/ru/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/ru/distribute/tools/localization-checklist.jd
new file mode 100644
index 0000000..7aef25c
--- /dev/null
+++ b/docs/html-intl/intl/ru/distribute/tools/localization-checklist.jd
@@ -0,0 +1,937 @@
+page.title=Контрольный список локализации
+page.metaDescription=Воспользуйтесь преимуществами глобальной аудитории пользователей Android и Google Play. Этот контрольный список позволяет получить представление о том, как представить ваш продукт на рынках других стран.
+meta.tags="localizing, publishing, disttools"
+page.tags="local, l10n, translation, language"
+page.image=/distribute/images/localization-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>Контрольный список</h2>
+    <ol>
+      <li><a href="#identify-languages">1. Определение поддерживаемых языков и языковых настроек</a></li>
+      <li><a href="#design">2. Дизайн для локализации</a></li>
+      <li><a href="#manage-strings">3. Управление строками для локализации</a></li>
+      <li><a href="#translate-strings">4. Перевод строк интерфейса и других ресурсов</a></li>
+      <li><a href="#test">5. Проверка локализованного приложения</a></li>
+      <li><a href="#prepare-launch">6. Подготовка к выпуску на международном уровне</a></li>
+      <li><a href="#support-users">7. Поддержка пользователей в других странах после выпуска</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px">
+  <img src="{@docRoot}distribute/images/localization-checklist.jpg">
+</div>
+
+<p>
+  Android и Google Play позволяют предложить ваши приложения глобальной
+ аудитории с доступным для адресации контингентом пользователей, который очень быстро
+ растет в таких странах, как Япония, Корея, Индия, Бразилия и Россия. Мы настоятельно рекомендуем локализовать приложения, поскольку это
+ позволяет обеспечить максимальный потенциал их распространения и получить
+ оценки от пользователей всего мира.
+</p>
+
+<p>
+  Процесс локализации включает в себя выполнение различных задач в цикле разработки приложения,
+ поэтому важно спланировать его заранее. Этот документ помогает определить
+ ключевые аспекты локализации и подготовить ваше приложение к успешному глобальному выпуску
+ в Google Play.
+</p>
+
+<div class="headerLine">
+  <h2 id="identify-languages">
+    1. Определение поддерживаемых языков и языковых настроек
+  </h2>
+
+
+</div>
+
+<p>
+  Наиболее простым, но важным шагом в подготовке локализации является определение
+ стран и языков для распространения приложения.
+  Локализация приложений особенно важна для стран с большими возможностями
+ рынка, но слабым распространением английского или другого международного
+ языка.
+</p>
+
+<p>
+  Вы можете управлять тремя основными параметрами для зарубежных пользователей:
+ страна, язык и языковые настройки. Ключевым фактором для локализации является выбор языка
+ (языковые настройки также могут быть важны, поскольку они определяют различия в форматах
+ дат, времени, валют и другой подобной информации). Пользователи управляют
+ выбором языка и языковых настроек на своих устройствах Android, которые,
+ в свою очередь, влияют на отображение вашего приложения на экране.
+</p>
+
+<p>
+  Обычно вы выбираете поддерживаемые для распространения страны с учетом
+ общего размера и возможностей рынка, категории приложения, конкурентной среды,
+ местных ценовых и финансовых факторов и т. д. Затем на основе выбора стран
+ вы определяете языки, которые должны поддерживаться в ваших
+ приложениях.
+</p>
+
+<p>
+  После этого вы можете решить, следует ли выполнять локализацию на
+ все или только на некоторые языки выбранной страны. Имеет смысл начать с основного регионального языка,
+ добавляя остальные по мере увеличения количества пользователей.
+</p>
+
+<p>
+  Определив поддерживаемые языки, вы можете ориентировать на эти рынки свои процессы
+ разработки, перевода, тестирования и маркетинга.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/identifylocales"
+data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="design">
+    2. Дизайн для локализации
+  </h2>
+
+
+</div>
+
+<p>
+  После определения намеченных для локализации языков оцените свои потребности
+ для их поддержки в своих приложениях и заранее спланируйте работу.
+  Следует учесть расширение лексики, требования к написанию, ограничению интервалов между знаками и
+ переноса слов, поддержку написания слева направо и справа налево, а также другие 
+ потенциальные факторы каждого языка.
+</p>
+
+<h4>
+  <strong>Спроектируйте единый набор гибких макетов</strong>
+</h4>
+
+<p>
+  При создании макетов обеспечьте запас пространства в дизайне любых элементов
+ интерфейса, которые содержат текст. Для других языков рекомендуется оставлять больше места,
+ чем требовалось исходному языку (как правило, добавляют до 30%).
+</p>
+
+<p>
+  Кроме того, у элементов должна быть возможность горизонтального или вертикального расширения для
+ размещения варьирующихся по ширине и высоте строк интерфейса или текста ввода.
+  Строки текста на любом из поддерживаемых языков не должны выходить за границы
+ экрана.
+</p>
+
+<p>
+  Продуманный дизайн интерфейса обычно позволяет использовать один набор
+ макетов для всех поддерживаемых языков. Дополнительную информацию см. в документе <a href="{@docRoot}training/basics/fragments/fragment-ui.html">Создание гибкого интерфейса
+ пользователя</a>.
+</p>
+
+<h4>
+  <strong>Используйте альтернативные макеты в случае необходимости</strong>
+</h4>
+
+<p>
+  Если ваш интерфейс пользователя не может вместить текст на каком-либо
+ из поддерживаемых языков, вы можете создать <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">альтернативный макет</a>
+ только для этого языка. Android позволяет декларировать
+ наборы макетов и других загружаемых ресурсов для конкретных языков,
+ языковых настроек, размеров экрана и других характеристик, просто отмечая их
+ соответствующими квалификаторами ресурсов. Хотя альтернативным макетам присуща некая
+ степень гибкости, они могут со временем усложнить сопровождение ваших приложений. В целом, более предпочтительным
+ является использование одного, более гибкого макета.
+</p>
+
+<h4>
+  <strong>Поддержка макетов и текста с написанием справа налево</strong>
+</h4>
+
+<p>
+  При распространении в странах, в которых используется написание справа налево (RTL),
+ следует учесть реализацию максимальной поддержки отображения и редактирования
+ макетов и текста RTL.
+</p>
+
+<p>
+  В Android 4.1 появилась ограниченная поддержка двунаправленного текста,
+ которая позволяет приложениям отображать и редактировать текст как с написанием слева направо (LTR),
+ так и справа налево (RTL). В Android 4.2 была добавлена <a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">полная поддержка
+ макетов RTL</a>, включая их зеркальное отображение, поэтому вы
+ можете предоставить одинаковые удобные интерфейсы для всех своих пользователей.
+</p>
+
+<p>
+  Для пользователей Android 4.2 можно, как минимум, просто добавить базовое зеркальное отображение макета RTL,
+ что в значительной степени удовлетворяет потребности пользователей, использующих написание справа налево.
+</p>
+
+<h4>
+  <strong>Используйте системные форматы дат, времени, чисел и денежных
+ единиц</strong>
+</h4>
+
+<p>
+  При указании в приложении дат, времени, чисел, денежных единиц и других данных,
+ которые зависят от языковых настроек, обязательно используйте системные форматы вместо
+ форматов приложения. Помните, что разделители тысяч, десятичные разделители
+ или знаки процента могут различаться в зависимости от языковых настроек.
+</p>
+
+<p>
+  Android предоставляет различные инструменты для форматирования и преобразования
+ шаблонов языковых настроек, такие как <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> и
+ <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a> для дат,
+ <a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)">String.format()</a> и <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a>
+ для чисел и денежных единиц, <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a>
+ для телефонных номеров и другие.
+
+</p>
+
+<p>
+  Жесткое использование форматов на основании предполагаемых языковых
+ настроек пользователя может привести к проблемам при изменении пользователем своих языковых настроек. Настоятельно
+ рекомендуется использовать системные форматы и инструменты.
+</p>
+
+<h4>
+  <strong>Включите полный набор ресурсов по умолчанию</strong>
+</h4>
+
+<p>
+  Обеспечьте корректную работу приложений вне зависимости от языка или языковой настройки,
+ предоставив полный набор ресурсов, используемых по умолчанию. Приложение использует по умолчанию ресурсы,
+ <em>не отмеченные</em> квалификаторами какого-либо языка или языковой настройки,
+ например, хранящиеся в папках res/drawable/ и res/values/. Если приложение
+ пытается загрузить ресурс, который недоступен для текущего языка
+ или набора по умолчанию, возникает сбой.
+</p>
+
+<p>
+  Вне зависимости от языка, используемого по умолчанию в ваших приложениях, разместите
+ соответствующие макеты, графические элементы и строки в папках ресурсов
+ по умолчанию без квалификаторов языка или языковых настроек.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/tools/loc/designforloc" data-sortorder="-timestamp"
+data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="manage-strings">
+    3. Управление строками для локализации
+  </h2>
+
+
+</div>
+
+<p>
+  Эффективное управление строками интерфейса позволяет упростить процесс
+ локализации и создать удобный интерфейс для пользователей.
+</p>
+
+<h4>
+  <strong>Переместите все строки в файл strings.xml</strong>
+</h4>
+
+<p>
+  При создании приложений не определяйте строки внутри кода. Вместо этого декларируйте
+ <em>все</em> строки в качестве ресурсов внутри файла strings.xml
+ – это упростит процессы обновления и локализации. Строки в файле strings.xml можно
+ извлечь, перевести и интегрировать обратно в приложение
+ (с соответствующими квалификаторами), не изменяя скомпилированный код.
+</p>
+
+<p>
+  В случае создания изображений с текстом также поместите строки в файл
+ strings.xml и создайте изображения заново после перевода.
+</p>
+
+<h4>
+  <strong>Следуйте рекомендациям Android для строк интерфейса пользователя</strong>
+</h4>
+
+<p>
+  При проектировании и разработке интерфейсов уделите особое внимание тому,
+ <em>как</em> вы обращаетесь к пользователю. Используйте <a href="{@docRoot}design/style/writing.html">лаконичные, сжатые выражения</a>,
+ которые понятны, но кратки, и старайтесь поддерживать единообразный стиль во всех интерфейсах.
+</p>
+
+<p>
+  Обязательно изучите рекомендации по дизайну для Android относительно
+ <a href="{@docRoot}design/style/writing.html">стиля и выбора слов</a> и следуйте
+ им. Это позволит вашим приложениям выглядеть более привлекательными и поможет
+ пользователям быстрее разобраться в интерфейсе.
+</p>
+
+<p>
+  Также старайтесь всегда использовать стандартные термины Android для
+ элементов интерфейса, такие как "панель действий", "меню параметров", "системная панель",
+ "уведомления" и т. п. Корректное и согласованное использование терминов Android упрощает
+ перевод и улучшает качество конечного продукта.
+</p>
+
+<h4>
+  <strong>Предоставьте достаточный контекст для декларированных строк</strong>
+</h4>
+
+<p>
+  При декларации строк в файле strings.xml обязательно опишите контекст,
+ в котором они используются. Эта информация очень важна для переводчиков,
+ и позволяет улучшить качество перевода, а также помогает более эффективно управлять
+ строками впоследствии.
+</p>
+
+<p>
+  Пример:
+</p>
+
+<pre class="prettyprint">
+&lt;!-- The action for submitting a form. This text is on a button that can fit 30 chars --&gt;
+&lt;string name="login_submit_button"&gt;Sign in&lt;/string&gt;
+</pre>
+<p>
+  Рекомендуется предоставить следующую информацию о контексте:
+</p>
+
+<ul>
+  <li>
+    <p>
+      Для чего эта строка? Когда или где она видна пользователю?
+    </p>
+  </li>
+
+  <li>
+    <p>
+      В каком месте макета она находится? Например, перевод для кнопки менее
+ гибок, чем для текстового окна.
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>Отметьте фрагменты сообщений, не подлежащие переводу</strong>
+</h4>
+
+<p>
+  Строки часто содержат текст, который не подлежит переводу на другие
+ языки. Примерами могут служить часть кода, заполнитель для значения,
+ специальный символ или имя. При подготовке строк к переводу
+ найдите и отметьте текст, который должен остаться без перевода,
+ чтобы переводчики его не изменяли.
+</p>
+
+<p>
+  Чтобы отметить текст, не подлежащий переводу, используйте
+ тег-заполнитель <code>&lt;xliff:g&gt;</code>. Ниже приведен пример тега, который
+ защищает текст "%1$s" от изменения в процессе перевода (в противном случае сообщение может быть
+ выведено с ошибкой).
+</p>
+
+<pre class="prettyprint">
+&lt;string name="countdown"&gt;
+    &lt;xliff:g id="time" example="5 days&gt;%1$s&lt;/xliff:g&gt;until holiday
+&lt;/string&gt;
+</pre>
+<p>
+  При декларации тега-заполнителя всегда добавляйте атрибут id, поясняющий
+ назначение заполнителя. Если значение заполнителя будет впоследствии заменено в приложениях,
+ обязательно добавьте пример атрибута, поясняющий предполагаемое использование.
+</p>
+
+<p>
+  Ниже приведены еще несколько примеров тегов-заполнителей.
+</p>
+
+<pre>
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+
+&lt;!-- Example placeholder for a special unicode symbol --&gt;
+
+&lt;string name="star_rating"&gt;Check out our 5
+
+    &lt;xliff:g id="star"&gt;\u2605&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a for a URL --&gt;
+
+&lt;string name="app_homeurl"&gt;
+
+    Visit us at &lt;xliff:g id="application_homepage"&gt;http://my/app/home.html&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a name --&gt;
+
+&lt;string name="prod_name"&gt;
+
+    Learn more at &lt;xliff:g id="prod_gamegroup"&gt;Game Group&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a literal --&gt;
+
+&lt;string name="promo_message"&gt;
+
+    Please use the "&lt;xliff:g id="promotion_code"&gt;ABCDEFG&lt;/xliff:g&gt;” to get a discount.
+
+&lt;/string&gt;
+
+...
+
+&lt;/resources&gt;
+</pre>
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/managestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="translate-strings">
+    4. Перевод строк интерфейса и других ресурсов
+  </h2>
+
+
+</div>
+
+<p>
+  Перевод строк интерфейса приложения и ресурсов на поддерживаемые языки является
+ ключевой стадией локализации, требующей особого внимания и
+ планирования.
+</p>
+
+<p>
+  Чтобы обеспечить высокое качество перевода, повышающего ценность вашего приложения,
+ рекомендуется поручить эту работу профессиональному переводчику (см. <a href="#gp-trans">Заказ профессиональных переводов через Google Play</a>). Машинный перевод
+ также является возможным вариантом, однако он вряд ли сможет обеспечить достаточно хорошее качество локализации.
+</p>
+
+<h4>
+  <strong>Подготовка к переводу</strong>
+</h4>
+
+<p>
+  Качество перевода отчасти зависит от исходного текста, поэтому позаботьтесь о том,
+ чтобы ваш файл strings.xml был хорошо организован, точен и снабжен
+ подробными комментариями.
+</p>
+
+<p>
+  Ниже приведены несколько рекомендаций по подготовке строк к переводу.
+</p>
+
+<ul>
+  <li>
+    <p>
+      Обеспечьте корректное и согласованное форматирование строк.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Следуйте рекомендациям, приведенным выше в разделе <a href="#manage-strings">Управление строками для локализации</a>.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Удалите ненужные строки из файла strings.xml.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Добавьте в файл комментарии с информацией о владельце, происхождении
+ и версии файла, а также все специальные инструкции для переводчиков.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      При наличии существующих переводов включите их в ZIP-архив
+ или другой пакет, отправляемый переводчикам.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Определите графические элементы или другие ресурсы, требующие перевода,
+ и включите их в пакет для переводчиков.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Учтите необходимость перевода данных для каталога (название и описание
+ приложения, примечания к выпуску и т. п.), а также других
+ маркетинговых материалов, требуемых для распространения в других странах.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Составьте список терминологии, поясняющий значение и использование ключевых терминов,
+ встречающихся для вашего продукта, рынка или используемой технологии. Включите этот
+ список в пакет для переводчиков.
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>Отправка строк на перевод</strong>
+</h4>
+
+<p>
+  На ранних стадиях разработки обратитесь к профессиональным переводчикам,
+ чтобы получить представление о примерной стоимости и сроках выполнения перевода. Не забудьте учесть в стоимости несколько этапов
+ улучшения перевода. Вы можете найти поставщиков услуг перевода в Интернете или воспользоваться
+ сервисами для перевода непосредственно из консоли разработчика Google Play
+ (см. <a href="#gp-trans">Заказ профессиональных переводов через Google Play</a>).
+</p>
+
+<p>
+  После завершения перевода выполните его предварительную проверку.
+ Проверьте, все ли файлы переведены, имеются ли потенциальные проблемы
+ кодировки и не повреждены ли форматы деклараций.
+</p>
+
+<p>
+  Если все выглядит хорошо, аккуратно переместите локализованные папки и файлы
+ обратно в ресурсы вашего приложения. Обязательно отметьте папки соответствующими
+ квалификаторами языка и языковых настроек для их последующей корректной
+ загрузки.
+</p>
+
+<p>
+  После включения переводов в ресурсы начните <a href="#test">тестирование локализованного приложения</a>.
+</p>
+
+<h4 id="gp-trans">
+  <strong>Заказ профессиональных переводов через Google Play</strong>
+</h4>
+
+<p>
+  Сервис перевода приложений Google Play помогает быстро найти поставщика
+ и заказать у него перевод приложения. В консоли разработчика можно просмотреть список
+ сторонних поставщиков, предварительно проверенных Google и предлагающих
+ качественный перевод по разумным ценам. Здесь можно выгрузить строки для перевода,
+ выбрать языки, на которые вы хотите перевести приложение, и выбрать поставщика услуг перевода
+ с учетом предлагаемых сроков и цен.
+</p>
+
+<p>
+  После заказа перевода вы получите сообщение электронной почты от вашего поставщика.
+  Ваш заказ на перевод является прямым деловым соглашением между вами и вашим
+ поставщиком. Вы будете напрямую работать с поставщиком с целью управления процессом
+ перевода и поставками переведенных материалов, а также для решения любых вопросов поддержки.
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-localization-trans-0.png" class="border-img">
+</div>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/translatestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test">
+    5. Проверка локализованного приложения
+  </h2>
+
+
+</div>
+
+<p>
+  После получения и переноса в приложения переведенных строк и ресурсов
+ необходимо проверить приложения и убедиться, что они готовы к
+ распространению среди пользователей в других странах.
+</p>
+
+<p>
+  Посредством тестирования вручную вы можете обнаружить проблемы локализации
+ в макетах и строках, способные повлиять на восприятие пользователей и, в конечном итоге,
+ на пользовательский рейтинг приложения.
+</p>
+
+<h4>
+  <strong>Создание среды тестирования</strong>
+</h4>
+
+<p>
+  Для тестирования локализованного приложения вам потребуется создать среду, состоящую
+ из нескольких устройств (или виртуальных устройств) с разными размерами
+ экрана, выбранных с учетом намеченных рынков и форм-факторов. Следует учесть, что выбор устройств для конкретных регионов
+ может различаться. По возможности подберите тестовые устройства в соответствии
+ с теми, которые доступны пользователям.
+</p>
+
+<h4>
+  <strong>Выявление общих проблем локализации</strong>
+</h4>
+
+<p>
+  На каждом тестовом устройстве выберите язык или языковые настройки. Установите и запустите
+ приложение, затем пройдите по всем переходам интерфейса, диалогам и
+ взаимодействиям с пользователем. Введите текст, где этого требует приложение. Обратите внимание на следующие возможные проблемы:
+</p>
+
+<ul>
+  <li>
+    <p>
+      обрезанный текст или выход текста за границы элементов интерфейса или экрана;
+    </p>
+  </li>
+
+  <li>
+    <p>
+      неверные переносы строк;
+    </p>
+  </li>
+
+  <li>
+    <p>
+      некорректные переносы слов или ошибки пунктуации;
+    </p>
+  </li>
+
+  <li>
+    <p>
+      неверная сортировка по алфавиту;
+    </p>
+  </li>
+
+  <li>
+    <p>
+      некорректное расположение макета или направление текста;
+    </p>
+  </li>
+
+  <li>
+    <p>
+      непереведенный текст &mdash; если вместо переведенных строк отображаются исходные строки,
+ возможно, вы могли пропустить их при выборе строк для перевода
+ или отметить папку ресурсов неправильным квалификатором
+ языка.
+    </p>
+  </li>
+</ul>
+
+<p>
+  В тех случаях, когда строки после перевода стали длиннее и не помещаются в макеты,
+ следует попытаться упростить исходный или переведенный текст,
+ либо исправить исходные макеты. Если проблему
+ не удалось решить ни одним из этих способов, можно создать специальный макет для этого языка.
+</p>
+
+<h4>
+  <strong>Тест ресурсов по умолчанию</strong>
+</h4>
+
+<p>
+  После проверки приложений со всеми поддерживаемыми вами языками и языковыми настройками
+ обязательно протестируйте их еще раз с <em>неподдерживаемым языком</em> и языковой настройкой.
+  Это поможет убедиться в том, что приложения включают полный набор строк и ресурсов по умолчанию
+ и могут использоваться всеми пользователями вне зависимости от их
+ предпочитаемого языка.
+</p>
+
+<h4>
+  <strong>Проверка носителями языка</strong>
+</h4>
+
+<p>
+  В процессе тестирования или после него рекомендуется выполнить проверку
+ локализованных приложений с привлечением носителей языка. Одним из способов такой проверки является бета-тестирование
+ среди региональных пользователей, которое может быть организовано с помощью Google Play. <!-- </p>
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/test"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> -->
+</p>
+
+<div class="headerLine">
+  <h2 id="prepare-launch">
+    6. Подготовка к выпуску в разных странах
+  </h2>
+
+
+</div>
+
+<p>
+  Перевод приложений является ключевым этапом локализации, но чтобы помочь
+ вашему продукту привлечь пользователей и стать популярным, вы должны подготовиться к выпуску в поддерживаемых
+ странах и создать расширенный план выпуска и маркетинга для
+ зарубежных пользователей.
+</p>
+
+<h4>
+  <strong>Локализация каталога в Google Play</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Локализация каталога в Google Play
+    </h2>
+
+    <p>
+      Каталог Google Play является местом, где пользователи из других стран
+ получают первое впечатление о приложении. Здесь вы должны
+ выделить достоинства ваших приложений для всех пользователей. Локализуйте свой каталог в консоли разработчика,
+ включая:
+    </p>
+
+    <ul>
+      <li>название и описание приложения;
+      </li>
+
+      <li>снимки экрана приложения на телефонах и планшетах;
+      </li>
+
+      <li>рекламную графику и видеоролики.
+      </li>
+    </ul>
+  </div>
+</div>
+
+<p>
+  Локализация каталога в значительной степени определяет успех приложения
+ на международных рынках. Управление локализованным
+ каталогом осуществляется в консоли разработчика.
+</p>
+
+<p>
+  Задолго до выпуска решите, какими будут название и описание приложения, рекламный текст,
+ маркетинговые названия и программы, а также другой текст и графические изображения. Отправьте текст каталога
+ и изображений на перевод заранее, чтобы они были готовы к началу
+ бета-тестирования. Готовый переведенный текст можно добавить в каталог
+ с помощью консоли разработчика.
+</p>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Перевод каталога в Google Play
+    </h2>
+
+    <p>
+      Для перевода каталога вы можете использовать сервис перевода приложений
+ в Google Play. Подготовьте файл в формате XML с информацией вашего каталога
+ и выгрузите его таким же образом, как и файл strings.xml (см. раздел<a href="#gp-trans">Заказ профессиональных переводов через Google Play</a>).
+    </p>
+  </div>
+</div>
+
+<p>
+  Ознакомьте пользователей с вашим локализованным приложением, к созданию
+ которого вы приложили столько усилий. Сделайте снимки экрана вашего интерфейса
+ на каждом языке для телефонов и планшетов с 7- и 10-дюймовыми экранами. Вы можете выгрузить в консоль разработчика снимки экрана
+ для каждого поддерживаемого языка. Эти изображения представляют большую ценность для пользователей, просматривающих
+ ваш каталог на других языках.
+</p>
+
+<p>
+  Также весьма важным является создание локализованных версий рекламной графики
+ и видеороликов. Например, иллюстрация функций приложения может
+ содержать текст, который должен быть переведен для максимальной
+ эффективности материала, также можете потребоваться использование разных визуальных подходов в оформлении для разных стран. Можно создать
+ разные версии рекламных материалов для каждого языка и загрузить их в
+ консоль разработчика. Если предлагается рекламный видеоролик,
+ можно создать его локализованные версии, а затем добавить ссылку
+ на нужный видеофайл для каждого языка, поддерживаемого приложением.
+</p>
+
+<h4>
+  <strong>Планирование выпуска бета-версии в ключевых странах</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Начальное бета-тестирование
+    </h2>
+
+    <p>
+      Google Play позволяет организовать группы альфа- и бета-тестеров в
+ любых уголках мира. Обязательно ознакомьтесь с этой эффективной возможностью
+ при своем следующем посещении консоли разработчика.
+    </p>
+  </div>
+</div>
+
+<p>
+  Перед выпуском приложений всегда полезно получить практические отзывы от пользователей.
+ Их ценность становится еще больше при выпуске приложения на новом языке,
+ в новой стране или регионе. В этих случаях настоятельно рекомендуется
+ распространить предварительную версию приложения среди пользователей
+ на ключевых рынках, предоставив им простые средства передачи
+ своих отзывов и сообщений об ошибках.
+</p>
+
+<p>
+  Google Play может помочь в организации бета-тестирования ваших приложений. После входа в консоль
+ разработчика и выгрузки пакета APK можно настроить группы пользователей
+ для альфа- и бета-тестирования приложения. Сначала можно организовать
+ небольшую группу альфа-тестирования, а затем перейти к более многочисленной группе бета-тестирования.
+</p>
+
+<p>
+  Добавленные пользователи получают доступ к вашей странице в каталоге
+ и могут установить приложение.<strong> Пользователи альфа- и бета-версий не могут оставлять отзывы или оценки</strong>,
+ поэтому вы <strong>не рискуете своим рейтингом</strong> в Google Play. В то же
+ время это означает, что вашим тестерам нужен механизм передачи
+ отзывов, в качестве которого мы рекомендуем использовать страницу <a href="http://www.google.com/+/business/">Google+</a> или <a href="https://groups.google.com/forum/#!overview">группу Google</a>.
+</p>
+
+<p>
+  Полученные отзывы помогут исправить пользовательский интерфейс,
+ перевод и страницу в каталоге, обеспечив максимальное удобство для будущих пользователей приложения.
+</p>
+
+<h4>
+  <strong>План международного маркетинга</strong>
+</h4>
+
+<p>
+  Для максимального охвата аудитории в разных странах рассмотрите возможность
+ международной маркетинговой или рекламной кампании. Масштаб кампании может меняться в зависимости от выделенного бюджета,
+ но, как правило, наиболее эффективным и продуктивным является маркетинг
+ на уровне региона или страны во время выпуска приложения или сразу после него.
+</p>
+
+<h4>
+  <strong>Создание локализованных значков Google Play</strong>
+</h4>
+
+<p>
+  Если вы готовите международную маркетинговую кампанию, обязательно включите
+ в нее <a href="{@docRoot}distribute/tools/promote/badges.html">локализованный значок Google Play</a>, который укажет пользователям, где можно найти ваше приложение. С помощью генератора значков
+ вы можете быстро создать локализованные значки, которые можно использовать на веб-сайтах или
+ в рекламных материалах. Для значков также доступны изображения с высоким разрешением.
+</p>
+
+<h4>
+  <strong>Создание локализованных изображений устройства со снимком экрана</strong>
+</h4>
+
+<p>
+  Если вы используете снимки экрана ваших приложений, работающих на
+ устройствах Android, сделайте их более привлекательными и отражающими вид новейших устройств.
+  Для создания качественных рекламных материалов используйте
+ <a href="{@docRoot}distribute/tools/promote/device-art.html">генератор изображений устройства</a>,
+ позволяющий путем перетаскивания снимка экрана получить его изображение на устройстве Nexus.
+</p>
+
+<h4>
+  <strong>Проверка подсказок по оптимизации</strong>
+</h4>
+
+<p>
+  При подготовке к выпуску обязательно зайдите в консоль разработчика и
+ проверьте подсказки по оптимизации вашего приложения. Эти подсказки позволяют узнать о недостающих
+ частях локализованного каталога и содержат
+ другие полезные напоминания для успешного выпуска локализованного приложения.
+</p>
+
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/preplaunch"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    7. Поддержка пользователей в других странах после выпуска
+  </h2>
+
+
+</div>
+
+<p>
+  После выпуска приложений в других странах следует подготовиться к поддержке
+ пользователей на разных языках и в разных часовых поясах. Степень поддержки
+ зарубежных пользователей зависит от вашего бюджета, но вы должны, как минимум,
+ внимательно следить за своими рейтингами, отзывами и статистикой загрузок
+ после выпуска.
+</p>
+
+<p>
+  Вот несколько рекомендаций.
+</p>
+
+<ul>
+  <li>
+    <p>
+      Используйте статистику приложения в консоли разработчика для сравнения показателей загрузок,
+ установок, удалений приложения и рейтингов по разным языкам и странам.
+ Если показатели загрузок или рейтингов не поднимаются для каких-либо
+ конкретных языков или стран, обдумайте варианты улучшения вашего продукта
+ или изменения стратегии маркетинга.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Регулярно проверяйте отзывы. Google Play автоматически переводит для вас все отзывы пользователей,
+ поэтому вы всегда можете узнать мнения зарубежных пользователей о ваших
+ приложениях, какие функции им нравятся и какие проблемы им мешают. Просматривая
+ отзывы, вы можете заметить технические проблемы, которые могут возникать
+ у пользователей какой-либо конкретной страны, после чего вы можете исправить и обновить свои приложения.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      Старайтесь по возможности отвечать на отзывы. Рекомендуется общаться с
+ пользователями в других странах на их родных языках или на общепринятом, если это возможно.
+      Вы также можете попытаться использовать инструменты автоматического перевода,
+ хотя результаты в этом случае будут непредсказуемы. Если ваши приложения
+ становятся очень популярными для какого-либо языка, рассмотрите возможность организации поддержки с участием носителей языка.
+    </p>
+  </li>
+
+  <li>
+    <p>
+      На вашем веб-сайте обязательно должны быть ссылки на все ресурсы поддержки.
+      Рассмотрите возможность создания для конкретных языков групп пользователей,
+ сообществ Google+ или других форумов поддержки.
+    </p>
+  </li>
+</ul>
+
+<p>
+  Следуя этим рекомендациям при локализации приложений, организации рекламной и маркетинговой
+ кампаний среди пользователей в других странах, а также обеспечении текущей поддержки, вы можете
+ привлечь многих новых и сохранить существующих пользователей своих приложений.
+</p>
+
+<p>
+  Обязательно изучите <a href="{@docRoot}distribute/tools/launch-checklist.html">Контрольный список выпуска приложения</a>,
+ чтобы получить более подробную информацию о планировании, создании и выпуске вашего приложения в Google Play.
+</p>
+<h3 class="rel-resources clearfloat">Связанные ресурсы</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
diff --git a/docs/html-intl/intl/ru/google/play/filters.jd b/docs/html-intl/intl/ru/google/play/filters.jd
new file mode 100644
index 0000000..f9af767
--- /dev/null
+++ b/docs/html-intl/intl/ru/google/play/filters.jd
@@ -0,0 +1,439 @@
+page.title=Фильтры в Google Play
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Краткое описание</h2>
+<ul>
+<li>С помощью фильтров Google Play управляет тем, какие устройства Android смогут загрузить
+ваше приложение из магазина.</li>
+<li>Фильтры обеспечивают доступность приложений только для тех устройств, которые соответствуют заявленным для этих приложений требованиям совместимости.
+<li>Фильтры определяются по конфигурационным требованиям, которые были задекларированы
+ в файле манифеста приложения, а также другими факторами.</li>
+</ul>
+
+<h2>Содержание документа</h2>
+
+<ol>
+  <li><a href="#how-filters-work">Как работают фильтры в Google Play</a></li>
+  <li><a href="#manifest-filters">Фильтрация на основе элементов манифеста</a>
+  </li>
+  <li><a href="#other-filters">Другие фильтры</a></li>
+  <li><a href="#MultiApks">Публикация нескольких пакетов APK с различными фильтрами</a></li>
+</ol>
+
+<h2>См. также:</h2>
+ <ol>
+<li><a href="{@docRoot}guide/practices/compatibility.html">Совместимость Android</a></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Когда пользователь просматривает каталог Google Play или ищет там приложения для загрузки, 
+отображаемые результаты фильтруются с учетом того, какие приложения совместимы с его устройством. 
+Например, если для приложения требуется камера, Google Play не отобразит его для устройств,
+ не оборудованных камерами. Такая <em>фильтрация</em> помогает разработчикам управлять
+ распространением своих приложений, а также обеспечивает максимальный уровень удобства для
+ пользователей.</p>
+
+<p>Для фильтрация в Google Play используется несколько типов метаданных приложений и 
+настройки конфигурации, включая декларированные в манифесте сведения, необходимые
+библиотеки, архитектурные требования, и набор средств контроля за распространением, предусмотренный в консоли разработчика Google
+Play, например, геотаргетинг, ценообразование и т. п.</p>
+
+<p>Фильтрация в Google Play частично основывается на декларациях в манифесте и прочих
+аспектах платформы Android, но фактические функции фильтрации определяются 
+именно самой платформой и не связаны с конкретными уровнями API-интерфейсов. В этом документе 
+описываются действующие сейчас правила фильтрации в Google Play.</p>
+
+
+<h2 id="how-filters-work">Как работают фильтры в Google Play</h2>
+
+<p>В Google Play описанные ниже правила фильтрации используются, чтобы определить,
+будет ли ваше приложение показываться пользователю, просматривающему или ищущему приложения в
+каталоге Google Play.</p>
+
+<p>Определяя, показывать или нет приложение, Google Play проверяет требования к
+аппаратным и программным компонентам устройств, а также операторам связи, местоположению и другим
+характеристикам. Затем эти данные сравниваются с существующими требованиями и
+особенностями, определенными в файле манифеста приложения, а также со сведениями,
+ указанными при публикации. </p>
+
+<p>Если приложение совместимо с устройством в соответствии с этими правилами
+ фильтрации, Google Play отображает приложение для пользователя. В противном случае, Google Play
+скрывает приложение в результатах поиска и при просмотре категорий в каталогах даже в том случае, если пользователь
+специально запрашивает данное приложение или пытается перейти к нему по внешней ссылке, прямо указывающей на
+идентификатор этого приложения в Google Play.</p>
+
+<p>Можно использовать любые комбинации доступных фильтров для своих приложений. Например, можно установить для 
+<code>minSdkVersion</code> требуемое значение <code>"4"</code> и задать <code>smallScreens="false"</code>
+в самом приложении, тогда при загрузке приложения в Google Play можно будет нацелить приложение
+только на определенные европейские страны (или операторов связи). Таким образом, фильтры Google Play делают приложение недоступным на любом устройстве,
+не соответствующем всем трем приведенным требованиям. </p>
+
+<p>Все ограничения фильтрации связаны с версией приложения и могут
+изменяться от версии к версии. Например, если пользователь установил ваше приложение, а вы опубликовали для него
+обновление, которое делает приложение невидимым для этого пользователя,
+пользователю это обновление не показывается.</p>
+
+<h4>Фильтрация на веб-сайте Google Play</h4>
+
+<p>При просмотре <a href="http://play.google.com/apps">веб-сайта
+Google Play</a> пользователи могут увидеть все опубликованные приложения. На веб-сайте Google Play выполняется
+проверка на соответствие требованиям приложения для каждого из зарегистрированных устройств
+пользователя, разрешая установку приложения только на совместимое с ним
+устройство.</p>
+
+<h2 id="manifest-filters">Фильтрация с учетом манифеста приложения</h2>
+
+<p>Большинство фильтров запускаются определенными элементами в файле манифеста
+приложения – <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
+(хотя не все содержимое файла манифеста может запускать фильтрацию).
+В таблице 1 перечислены элементы манифеста, которые использоваться для запуска
+фильтрации, а также объясняется как работает фильтрация по каждому из элементов.</p>
+
+<p id="table1" class="table-caption"><strong>Таблица 1.</strong> Элементы манифеста, которые
+запускают фильтрацию в Google Play.</p>
+<table>
+  <tr>
+    <th>Элемент манифеста</th>
+    <th>Имя фильтра</th>
+    <th>Как это работает</th>
+  </tr>
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">Размер экрана</td>
+    <td valign="top">
+
+<p>Поддерживаемые приложением размеры экрана определяются путем установки атрибутов
+ для элемента <code>&lt;supports-screens&gt;</code>. При
+публикации приложения Google Play использует эти атрибуты для определения того,
+показывать или нет это приложение пользователям, учитывая размеры экранов их
+устройств. </p>
+
+<p>В качестве общего правила Google Play предполагается, чтоб платформа устройства сможет адаптировать
+макеты для меньших по размером экранов на больших экранах, но не
+наоборот. Таким образом, если для приложения задекларирована поддержке только "нормального" размера экрана,
+Google Play делает это приложение доступным как для устройств с нормальным, так и с большим размером экранов,
+но отфильтровывает приложение для устройств с маленькими
+экранами.</p>
+
+<p>Если для приложения не задекларированы атрибуты элемента
+<code>&lt;supports-screens&gt;</code>, Google Play использует стандартные значения для этих атрибутов,
+которые зависят от уровня API-интерфейса. С учетом следующих особенностей. </p>
+
+<ul>
+<li><p>В приложениях, для которых в параметрах <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> или <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> установлено значение 3 или ниже, сам элемент <code>&lt;supports-screens&gt;</code>
+не определен и какие-либо атрибуты для него отсутствуют. В этом случае в Google Play предполагается, что
+это приложение разработано для экранов нормального размера и его
+показывают для устройств с обычным и большим размером экранов. </p>
+
+<li>Если для какого-либо из элементов <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> или <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> установлено
+значение 4 или выше, по умолчанию для все атрибутов устанавливается <code>"true"</code>. При этом подразумевается, что приложение поддерживает все размеры экранов
+по умолчанию.</li>
+</ul>
+
+    <p><strong>Пример 1</strong><br />
+    В манифесте декларируется <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>
+ и не содержится элемент <code>&lt;supports-screens&gt;</code>.
+    <strong>Результат</strong>: Google Play не показывает это приложение пользователю
+устройства с маленьким экраном, но приложение доступно пользователям устройств с нормальными и большими
+экранами, пока не будут применены другие фильтры. </p>
+    <p><strong>Пример 2<br />
+    </strong>В манифесте декларируется <code>&lt;uses-sdk android:minSdkVersion="3"
+    android:targetSdkVersion="4"&gt;</code> и не содержится элемент
+ <code>&lt;supports-screens&gt;</code>.
+    <strong>Результат</strong>: Google Play показывает это приложение пользователям всех устройств,
+ пока не будут применены другие фильтры. </p>
+    <p><strong>Пример 3<br />
+    </strong>В манифесте декларируется <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code> 
+и не содержится элемент <code>&lt;supports-screens&gt;</code>.
+    <strong>Результат</strong>: Google Play показывает это приложение всем пользователям,
+ пока не будут применены другие фильтры. </p>
+    <p>Дополнительную информацию о том, как декларировать поддержку размеров экранов в своем
+приложении см. в документах <code><a
+    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+ и <a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких
+ экранов</a>.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
+      <!-- ##api level 3## --></td>
+    <td valign="top">Конфигурация
+ устройства: <br />
+    клавиатура, средства навигации, сенсорный экран</td>
+    <td valign="top"><p>Приложение может запросить наличие определенных
+возможностей, и Google Play будет показывать это приложение только для тех устройств, на которых имеется требуемое оборудование.</p>
+      <p><strong>Пример 1<br />
+      </strong>В манифесте содержится декларация <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>, а пользователь ищет приложения, в которых отсутствует 5-позиционный джойстик. <strong>Результат</strong>: Google Play не показывает это приложение пользователю. </p>
+      <p><strong>Пример 2<br />
+      </strong>В манифесте не содержится элемент <code>&lt;uses-configuration&gt;</code>. <strong>Результат</strong>: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры.</p>
+<p>Чтобы получить более подробную информацию, см. <a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>.</p></td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">Функции устройства<br />
+      (<code>name</code>)</td>
+    <td valign="top"><p>Приложением могут запрашиваться определенные аппаратные возможности, которые
+должны поддерживаться устройством. Эта функциональность появилась в Android 2.0 (уровень 5
+API-интерфейса).</p>
+      <p><strong>Пример 1<br />
+      </strong>В манифесте содержится декларация <code>&lt;uses-feature
+android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>, а пользователь ищет
+приложения для устройства, в котором отсутствует датчик освещенности.
+<strong>Результат</strong>: Google Play не показывает это приложение пользователю. </p>
+      <p><strong>Пример 2<br />
+      </strong>В манифесте не содержится элемент <code>&lt;uses-feature&gt;</code>
+. <strong>Результат</strong>: Google Play показывает это приложение всем пользователям,
+ пока не будут применены другие фильтры.</p>
+      <p>Чтобы получить более подробную информацию, см. <code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>.</p>
+      <p><em>Фильтрация на основе подразумеваемых функций:</em> В некоторых случаях Google
+Play интерпретирует права доступа, запрошенные с помощью элементов
+<code>&lt;uses-permission&gt;</code>, эквивалентно требованиям наличия возможностей, как если бы
+они декларировались элементами <code>&lt;uses-feature&gt;</code>. См. раздел <a href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>,
+приведенный ниже.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top">Версия
+OpenGL-ES<br />
+(<code>openGlEsVersion</code>)</td>
+    <td valign="top"><p>Приложение может запросить, чтобы устройством поддерживалась определенная
+версия OpenGL-ES, используя атрибут <code>&lt;uses-feature
+        android:openGlEsVersion=&quot;int&quot;&gt;</code>.</p>
+      <p><strong>Пример 1<br />
+      </strong>Приложение
+запрашивает несколько версий OpenGL-ES, указав атрибут <code>openGlEsVersion</code> несколько раз в
+манифесте.  <strong>Результат</strong>: В этом случае Google Play предполагает, что приложению требуется самая последняя из указанных версий.</p>
+<p><strong>Пример 2<br />
+</strong>Приложение запрашивает
+OpenGL-ES версии 1.1, а пользователь ищет приложения для устройства, поддерживающего OpenGL-ES версии 2.0. <strong>Результат</strong>: Google Play показывает это приложение пользователю, пока не будут применены другие фильтры. Если
+устройство сообщает о поддержке OpenGL-ES версии <em>X</em>, Google Play предполагает, что устройством также
+поддерживаются все версии, предшествующие <em>X</em>.
+</p>
+<p><strong>Пример 3<br />
+</strong>Пользователь ищет приложения для устройства, которое не сообщает о поддержке
+OpenGL-ES (например, устройство с Android 1.5 или более ранними версиями). <strong>Результат</strong>: Google Play предполагает, что устройство
+поддерживает только OpenGL-ES 1.0. Google Play будет показывать пользователю приложения, для которых не указан атрибут <code>openGlEsVersion</code>, а также приложения, для которых указан OpenGL-ES версии 1.0. </p>
+      <p><strong>Пример 4<br />
+      </strong>В манифесте не указан атрибут <code>openGlEsVersion</code>. <strong>Результат</strong>: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры. </p>
+<p>Чтобы получить более подробную информацию, см. <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>.</p></td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
+    <td valign="top">Программные библиотеки</td>
+    <td valign="top"><p>Приложением могут запрашиваться определенные
+общие библиотеки, их наличие на устройстве. </p>
+      <p><strong>Пример 1<br />
+      </strong>Приложение запрашивает библиотеку <code>com.google.android.maps</code>, а пользователь ищет приложения для устройства, на котором нет библиотеки <code>com.google.android.maps</code>. <strong>Результат</strong>: Google Play не показывает это приложение пользователю. </p>
+      <p><strong>Пример 2</strong><br />
+        В манифесте не содержится элемент <code>&lt;uses-library&gt;</code>. <strong>Результат</strong>: Google Play показывает это приложение всем пользователям, пока не будут применены другие фильтры.</p>
+<p>Чтобы получить более подробную информацию, см. <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>.</p></td>
+  </tr>
+  <tr id="uses-permission-filtering">
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
+    <td valign="top">&nbsp;</td>
+    <td valign="top">Собственно, Google Play не выполняет фильтрацию по элементам 
+<code>&lt;uses-permission&gt;</code>. Однако эти элементы считываются
+для определения того, есть ли у приложения какие-либо требования к аппаратным компонентам,
+которые, возможно, не были правильно задекларированы элементами <code>&lt;uses-feature&gt;</code>.
+ Например, если приложение запрашивает доступ к компоненту <code>CAMERA</code>,
+ но в его манифесте не задекларирован элемент <code>&lt;uses-feature&gt;</code> для
+<code>android.hardware.camera</code>, Google Play считает, что для приложения требуется камера
+и его не следует показывать пользователям, в чьих устройствах нет
+камеры.</p>
+    <p>В целом, если приложение запрашивает доступ к каким-то аппаратным компонентам,
+Google Play считает, что для приложения необходимо наличие
+этих компонентов, даже когда это не отражено в соответствующих декларациях 
+<code>&lt;uses-feature&gt;</code>. Затем Google Play осуществляет
+фильтрацию с учетом таких функциональных возможностей, подразумеваемых декларациями <code>&lt;uses-feature&gt;</code>
+в манифесте.</p>
+    <p>Список возможных прав доступа, подразумевающих наличие определенных
+аппаратных компонентов, можно найти в документации для элемента <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a>.
+</p>
+</td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
+    <td valign="top">Минимальная версия платформы (<code>minSdkVersion</code>)</td>
+    <td valign="top"><p>Для приложения может требоваться минимально необходимый уровень API-интерфейса.  </p>
+      <p><strong>Пример 1</strong><br />
+        Манифест содержит атрибут <code>&lt;uses-sdk
+      android:minSdkVersion=&quot;3&quot;&gt;</code>, и приложение использует API-интерфейсы, которые появились для уровня 3 API-интерфейса. Пользователь ищет приложения для устройства, поддерживающего уровень 2 API-интерфейса. <strong>Результат</strong>: Google Play не показывает это приложение пользователю. </p>
+      <p><strong>Пример 2</strong><br />
+      Манифест не содержит атрибут <code>minSdkVersion</code>, а приложение использует API-интерфейсы, которые появились для уровня 3 API-интерфейса. Пользователь ищет приложения для устройства, поддерживающего уровень 2 API-интерфейса. <strong>Результат</strong>: Google Play считает, что для атрибута <code>minSdkVersion</code> установлено значение "1", а значит приложение совместимо со всеми версиями Android. Google Play показывает это приложение пользователю и позволяет загрузить его. Запуск приложения завершается ошибкой. </p>
+    <p>Поскольку вы сами заинтересованы в том, чтобы избежать подобного сценария, рекомендуем всегда декларировать атрибут <code>minSdkVersion</code>. Чтобы получить более подробную информацию, см. <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>.</p></td>
+  </tr>
+  <tr>
+    <td valign="top">Максимальная версия платформы (<code>maxSdkVersion</code>)</td>
+    <td valign="top"><p><em>Устаревший атрибут.</em> В Android 2.1
+и более поздних версиях не проверяется и не подлежит исполнению атрибут<code>maxSdkVersion</code>, а
+SDK не будет скомпилирован, если атрибут <code>maxSdkVersion</code> установлен в манифесте приложения. Для устройств, для которых уже выполнена
+компиляция с атрибутом <code>maxSdkVersion</code>, Google Play будет учитывать его и использовать для
+фильтрации.</p>
+<p> Декларирование атрибута <code>maxSdkVersion</code> <em>не</em> рекомендуется. Чтобы получить более подробную информацию, см. <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>.</p></td>
+  </tr>
+</table>
+
+
+
+<h3 id="advanced-filters">Расширенные фильтры манифеста</h3>
+
+<p>Помимо элементов манифеста из <a href="#table1">таблицы 1</a>, Google Play также может фильтровать
+приложения с учетом расширенных элементов манифеста, приведенных в таблице 2.</p>
+
+<p>Эти элементы манифеста, а также запускаемые ими способы фильтрации предназначены для
+использования только в исключительных случаях. Они разработаны для определенных типов высокопроизводительных игр и подобных
+им приложений, которым требуется строгий контроль за распространением. <strong>Большинству приложений такие фильтры использовать
+не требуется</strong>.</p>
+
+<p id="table2" class="table-caption"><strong>Таблица 2.</strong> Расширенные элементы манифеста для фильтрации
+в Google Play.</p>
+<table>
+  <tr><th>Элемент манифеста</th><th>Сводная информация</th></tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play отфильтровывает приложение, если размер и разрешение экрана устройства
+не соответствуют какой-либо конфигурации экрана(декларируемые элементом {@code &lt;screen&gt;}) в элементе {@code
+&lt;compatible-screens&gt;}.</p>
+      <p class="caution"><strong>Внимание!</strong> В обычной практике <strong>вы не должны использовать
+этот элемент манифеста</strong>. Применение этого элемента существенно
+сокращает число потенциальных пользователей вашего приложения, исключая все комбинации размеров
+и разрешения экрана, которые не указаны в списке. Вместо этого используйте элемент манифеста <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> (описанный выше в <a href="#table1">
+таблице 1</a>), чтобы определить режим совместимости для неучтенных альтернативными ресурсами
+конфигураций экранов.</p>
+    </td>
+  </tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play будет отфильтровывать приложение, если не окажется ни одного формата
+сжатия GL-текстуры, поддерживаемого устройством. </p>
+    </td>
+  </tr>
+</table>
+
+
+
+<h2 id="other-filters">Другие фильтры</h2>
+
+<p>Google Play использует характеристики приложения, чтобы установить будет ли оно показано или скрыто для определенного пользователя с заданным устройством, как это описано в следующей таблице. </p>
+
+<p id="table3" class="table-caption"><strong>Таблица 3.</strong> Характеристики публикации и приложения,
+которые влияют на фильтрацию в Google Play.</p>
+<table> <tr>
+    <th>Имя фильтра</th> <th>Как это работает</th> </tr>
+
+  <tr>
+    <td valign="top">Статус публикации</td> <td valign="top"><p>Только опубликованные приложения будут отображаться
+при просмотре каталога и поиске в Google Play.</p> <p>Даже если приложение не опубликовано,
+его можно установить, если пользователи видят его в своей области "Загрузки" среди своих купленных,
+загруженных или недавно удаленных приложений.</p> <p>Если приложение было
+исключено из каталога, пользователи не смогут повторно установить или обновить его, даже если оно показано в их "Загрузках".</p> </td></tr>
+  <tr>
+  <td valign="top">Ценовой
+статус</td> <td valign="top"><p>Не все пользователи могут видеть платные приложения. Для отображения платных приложений на устройстве должна быть SIM-карта, оно должно
+работать под управлением Android 1.1 или более поздней версии, а вы должны находиться в стране
+(определяемой оператором SIM-карты), где разрешена загрузка платных приложений.</p></td>
+</tr> <tr>
+  <td valign="top">Определение страны назначения</td> <td valign="top"> <p>При выгрузке своего приложения
+в Google Play можно указать страны, в которых будет распространяться приложение,
+сделав это в разделе<strong>Цены и распространение</strong>. После этого приложение будет
+доступно только пользователям в выбранных странах.</p>
+</td> </tr> <tr>
+  <td valign="top" style="white-space:nowrap;">Архитектура процессора (ABI)</td>
+  <td valign="top"><p>Приложение, которое содержит специфичные библиотеки,
+предназначенные для какой-то определенной процессорной архитектуры (например, ARM EABI v7 или x86)
+видны только на устройствах, поддерживающих эту архитектуру. Чтобы получить дополнительную информацию об NDK и работе
+с такими библиотеками, см. <a href="{@docRoot}tools/sdk/ndk/index.html#overview">Что такое
+Android NDK?</a></p> </tr> <tr>
+  <td valign="top">Защищенные от копирования приложения</td> <td valign="top"><p class="caution">Google
+ Play больше не поддерживает возможность защиты от копирования в консоли разработчика и больше
+не фильтрует приложения по этому свойству. Вместо этого, чтобы защитить свое приложение, используйте возможность <a href="{@docRoot}google/play/licensing/index.html">
+Лицензирование приложений</a>. Чтобы получить дополнительную информацию, см. <a href="{@docRoot}google/play/licensing/overview.html#CopyProtection">
+Замена функции защиты от копирования</a>.</p></td> </tr> </table>
+
+<h2 id="MultiApks">Публикация нескольких пакетов APK с различными фильтрами</h2>
+
+<p>Некоторые специфичные фильтры Google Play позволяют публиковать несколько пакетов APK для одного
+приложения, чтобы обеспечить разные пакеты APK для различных конфигураций устройств. Например, если
+создается видеоигра, в которая используются высококачественные графические ресурсы, возможно, потребуется создать два
+пакета APK, каждый из которых будет поддерживать различные форматы компрессии текстур. Таким образом можно уменьшить
+размер файла APK, включив него только те текстуры, которые требуются для каждой из конфигураций
+устройств. В зависимости от поддержки устройствами этих форматов сжатия текстур, Google Play
+будет предоставлять тот APK, для которого задекларирована поддержка данного типа устройств.</p>
+
+<p>В настоящее время Google Play позволяет публиковать несколько пакетов APK для одного приложения только
+в тех случаях, если каждый APK обеспечивает различные фильтры с учетом следующих особенностей конфигурации.</p>
+<ul>
+  <li>Форматы сжатия текстур OpenGL
+    <p>Используя элемент <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a>.</p>
+  </li>
+  <li>Размер экрана (а в некоторых случаях и разрешение)
+    <p>Используя элемент <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> или <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a>.</p>
+  </li>
+  <li>Уровень API-интерфейса
+    <p>Используя элемент <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
+&lt;uses-sdk&gt;}</a>.</p>
+  </li>
+  <li>Архитектура процессора (ABI)
+    <p>Включая специфичные библиотеки, созданные на основе <a href="{@docRoot}tools/sdk/ndk/index.html">Android
+ NDK</a>, которые предназначены для определенной процессорной архитектуры (например, ARM EABI v7 или x86).</p>
+  </li>
+</ul>
+
+<p>Все прочие фильтры будут работать в обычном режиме, но только по этим четырем фильтрам можно
+отличить один APK от другого в рамках одного приложения в каталоге Google Play. Например,
+<em>нельзя</em> опубликовать несколько пакетов APK для одного приложения, если эти пакеты APK отличаются только
+наличием камеры в устройстве.</p>
+
+<p class="caution"><strong>Внимание!</strong> Публикация нескольких пакетов APK для одного приложения
+расценивается как дополнительная возможность и <strong>большинство приложений должны публиковаться с одним
+пакетом APK, поддерживающим широкий диапазон конфигураций устройств</strong>. Для публикации с несколькими пакетами APK
+необходимо выполнение определенных правил при установке фильтров, а также следует уделить дополнительное внимание
+кодам версии для каждого пакета APK, чтобы обеспечить правильные пути обновления для каждой конфигурации.</p>
+
+<p>Чтобы получить дополнительную информацию о том, как опубликовать несколько пакетов APK в Google Play, см. <a href="{@docRoot}google/play/publishing/multiple-apks.html">Поддержка нескольких пакетов APK</a>.</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/ru/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/index.jd
new file mode 100644
index 0000000..b8de11ec
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/index.jd
@@ -0,0 +1,72 @@
+page.title=Управление жизненным циклом операций
+page.tags=жизненный цикл операций
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<h2>Необходимые знания и компоненты</h2>
+<ul>
+  <li>Как создать проект для Android (см. <a href="{@docRoot}training/basics/firstapp/creating-project.html">Создание проекта для Android
+</a>)</li>
+</ul>
+
+
+<h2>См. также:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/activities.html">Операции</a></li>
+</ul>
+
+
+<h2>Попробуйте сами</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Загрузить демонстрацию</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>Во время навигации пользователя по вашему приложению экземпляры 
+{@link android.app.Activity} внутри приложения переключаются между разными состояниями их
+жизненного цикла Например, при первом запуске
+операции она получает высокий приоритет в системе и привлекает внимание
+пользователя. Во время этого процесса система Android вызывает серию методов жизненного цикла
+операции, позволяя настроить пользовательский интерфейс и другие компоненты. Если пользователь выполняет 
+действие, запускающее другую операцию, или переключается на другое приложение, система вызывает другой набор
+методов жизненного цикла для операции, поскольку она переносится на фоновый уровень (операция больше не
+отображается, но экземпляр и состояние остаются без изменений).</p>
+
+<p>В методах обратного вызова жизненного цикла можно декларировать поведение операции, когда
+пользователь прекращает и снова запускает операцию.  Например, если вы разрабатываете проигрыватель потокового видео,
+то можете сделать так, чтобы при переключении пользователя на другое приложение видео ставилось на паузу,
+а сетевое соединение разрывалось. После возврата пользователя проигрыватель может снова подключиться к сети, и пользователь сможет возобновить воспроизведение
+видео с того же самого места.</p>
+
+<p>В этом учебном курсе разъясняются важные методы обратного вызова жизненного цикла, которые получает каждый экземпляр {@link 
+android.app.Activity}, и описывается как их использовать, чтобы операция выполнялась так, как этого ожидает
+пользователь, и не потребляла системные ресурсы, когда они ей не нужны.</p>
+
+<h2>Уроки</h2>
+ 
+<dl>
+  <dt><b><a href="starting.html">Запуск операции</a></b></dt>
+  <dd>Из этого урока вы узнаете об основах жизненного цикла операций, способах запуска вашего приложения пользователями и вариантах
+создания базовых операций.</dd>
+  <dt><b><a href="pausing.html">Приостановка и возобновление операции</a></b></dt>
+  <dd>Вы узнаете, что происходит во время приостановки операции (окно операции частично затемнено) и возобновления операции,
+и что следует делать во время подобных изменений состояния.</dd>
+  <dt><b><a href="stopping.html">Остановка и перезапуск операции</a></b></dt>
+  <dd>В этом уроке рассказывается о том, что происходит, когда пользователь полностью прекращает операцию, а потом возвращается к ней.</dd>
+  <dt><b><a href="recreating.html">Повторное создание операции</a></b></dt>
+  <dd>Вы узнаете, что происходит при полном прекращении операции, и как можно восстановить ее состояние
+в случае необходимости.</dd>
+</dl> 
+
diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd
new file mode 100644
index 0000000..c483780
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/pausing.jd
@@ -0,0 +1,147 @@
+page.title=Приостановка и возобновление операции
+page.tags=жизненный цикл операции
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Содержание этого урока</h2>
+    <ol>
+      <li><a href="#Pause">Приостановка операции</a></li>
+      <li><a href="#Resume">Возобновление операции</a></li>
+    </ol>
+    
+    <h2>См. также:</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Операции</a>
+      </li>
+    </ul>
+
+<h2>Попробуйте сами</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Загрузить демонстрацию</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>При обычном использовании приложения выполняемая на экране операция иногда закрывается другими
+визуальными компонентами, в результате чего операция <em>приостанавливается</em>.  Например, при открытии полупрозрачной
+операции (например диалогового окна) предыдущая операция приостанавливается. Пока
+операция остается частично видимой, но не остается в фокусе, она остается на паузе.</p>
+
+<p>Однако когда операция полностью закрывается и становится невидимой, она <em>останавливается</em> (об этом будет рассказано
+на следующем уроке).</p>
+
+<p>Когда операция приостанавливается, система вызывает метод {@link
+android.app.Activity#onPause onPause()} на {@link android.app.Activity}, что позволяет
+остановить текущие действия, которые не должны продолжаться во время паузы (например воспроизведение видео), или сохранять
+любую информацию, которая должна постоянно сохраняться в случае выхода пользователя из приложения. Если
+пользователь возвращается к операции после паузы, система возобновляет ее и вызывает метод
+{@link android.app.Activity#onResume onResume()}.</p>
+
+<p class="note"><strong>Примечание.</strong> Когда операция получает вызов {@link
+android.app.Activity#onPause()}, это может указывать, что операция будет приостановлена совсем ненадолго
+и пользователь сможет к ней вернуться. Однако обычно это является первым признаком
+выхода пользователя из операции.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
+<p class="img-caption"><strong>Рисунок 1</strong>. Когда полупрозрачная операция закрывает
+вашу операцию, система вызывает {@link android.app.Activity#onPause onPause()} и операция
+переходит в состояние паузы (1). Если пользователь возвращается к операции, находящейся в состоянии паузы,
+система вызывает {@link android.app.Activity#onResume onResume()} (2).</p>
+
+
+<h2 id="Pause">Приостановка операции</h2>
+      
+<p>Когда система вызывает {@link android.app.Activity#onPause()} для операции, это
+технически означает, что операция остается частично видимой. Однако чаще всего это означает, что
+пользователь покидает операцию, и вскоре она войдет в состояние остановки.  Обратный вызов
+ {@link android.app.Activity#onPause()} обычно следует использовать для следующих целей:</p>
+
+<ul>
+  <li>Остановка анимации или других текущих действий, которые могут потреблять ресурсы процессора.</li>
+  <li>Запись несохраненных изменений, если пользователи ожидают сохранения таких изменений
+при выходе (например черновиков электронных писем).</li>
+  <li>Высвобождение ресурсов системы, например ресиверов, интерфейсов сенсоров (например
+GPS) или других ресурсов, влияющих на время работы аккумулятора во время паузы и не
+требующихся пользователю.</li>
+</ul>
+
+<p>Например, если ваше приложение использует {@link android.hardware.Camera}, метод
+{@link android.app.Activity#onPause()} подойдет для его освобождения.</p>
+
+<pre>
+&#64;Override
+public void onPause() {
+    super.onPause();  // Always call the superclass method first
+
+    // Release the Camera because we don't need it when paused
+    // and other activities might need to use it.
+    if (mCamera != null) {
+        mCamera.release()
+        mCamera = null;
+    }
+}
+</pre>
+
+<p>Обычно <strong>не</strong> следует использовать {@link android.app.Activity#onPause()} для сохранения
+пользовательских изменений (например введенной в форму личной информации) в постоянном хранилище. Изменения
+пользователя нужно сохранять в постоянном хранилище {@link android.app.Activity#onPause()}
+только в тех случаях, когда пользователи ожидают автоматического сохранения изменений (например при составлении черновика электронного письма).
+Однако в состоянии {@link
+android.app.Activity#onPause()} следует избегать операций с высокой нагрузкой на процессор, например выполнения записи в базу данных, поскольку это может замедлить видимый
+переход к следующей операции (вместо этого следует выполнять операции завершения работы с высокой нагрузкой при
+{@link android.app.Activity#onStop onStop()}).</p>
+
+<p>Количество операций, выполняемых с помощью метода {@link android.app.Activity#onPause
+onPause()}, должно быть не очень большим, чтобы пользователь мог быстро переключаться на следующую
+задачу при фактической остановке вашей операции.</p>
+
+<p class="note"><strong>Примечание.</strong> При приостановке операции экземпляр {@link
+android.app.Activity} остается в памяти и заново вызывается при возобновлении операции.
+Не нужно заново инициализировать компоненты, созданные с использованием любого из методов обратного вызова для возобновления
+операции.</p>
+
+
+
+<h2 id="Resume">Возобновление операции</h2>
+
+<p>Когда пользователь возобновляет операцию после паузы, система вызывает метод {@link
+android.app.Activity#onResume()}.</p>
+
+<p>Учтите, что система вызывает этот метод каждый раз, когда ваша операция выполняется на экране,
+в том числе и при первом ее запуске. В связи с этим, нужно реализовать метод {@link
+android.app.Activity#onResume()} для инициализации компонентов, освобождаемых в состоянии {@link
+android.app.Activity#onPause()}, и выполнения других операций инициализации, которые должны происходить каждый раз при возобновлении операции
+(например при запуске анимированных элементов и компонентов, которые используются
+только когда пользователь следит за операцией на экране).</p>
+
+<p>Следующий пример {@link android.app.Activity#onResume()} дополняет
+пример {@link android.app.Activity#onPause()} выше. В нем инициализируется камера,
+которая освобождается на время приостановки операции.</p>
+
+<pre>
+&#64;Override
+public void onResume() {
+    super.onResume();  // Always call the superclass method first
+
+    // Get the Camera instance as the activity achieves full user focus
+    if (mCamera == null) {
+        initializeCamera(); // Local method to handle camera init
+    }
+}
+</pre>
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/recreating.jd
new file mode 100644
index 0000000..acb89fa
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/recreating.jd
@@ -0,0 +1,178 @@
+page.title=Воссоздание операции
+page.tags=жизненный цикл операции
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Содержание этого урока</h2>
+    <ol>
+      <li><a href="#SaveState">Сохранение состояния операции</a></li>
+      <li><a href="#RestoreState">Восстановление состояния операции</a></li>
+    </ol>
+    
+    <h2>См. также:</h2>
+    <ul>
+      <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">Поддержка
+различных экранов</a></li>
+      <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений в режиме выполнения</a></li>
+      <li><a href="{@docRoot}guide/components/activities.html">Операции</a>
+      </li>
+    </ul>
+
+  </div>
+</div>
+
+<p>Существуют ситуации, когда операция уничтожается в результате нормального поведения приложения. Например, это происходит,
+когда пользователь нажимает кнопку <em>Назад</em> или когда операция подает сигнал о своем уничтожении
+посредством вызова {@link android.app.Activity#finish()}. Система также может уничтожить операцию,
+если она остановлена и не используется в течение длительного времени, или если для выполнения операции на экране требуется больше
+системных ресурсов и системе нужно закрыть фоновые процессы для освобождения памяти.</p>
+
+<p>Если операция уничтожается при нажатии пользователем кнопки <em>Назад</em> или завершении
+операции, система считает, что экземпляр {@link android.app.Activity} исчезает навсегда,
+так как такое поведение указывает, что операция больше не нужна. Однако если система уничтожает
+операцию в связи с системными ограничениями (а не в процессе обычной работы приложения), хотя фактический
+{@link android.app.Activity} экземпляр исчезает, система помнит о его существовании, и если
+пользователь вернется к нему, система создаст новый экземпляр действия, используя набор
+сохраненных данных, описывающий состояние операции на момент ее уничтожения. Сохраненные данные, используемые
+системой для восстановления предыдущего состояния, называются "состоянием экземпляра" и представляют собой набор
+пар "ключ-значение", хранящийся в объекте {@link android.os.Bundle}.</p>
+
+<p class="caution"><strong>Внимание!</strong> Ваша операция будет уничтожаться и восстанавливаться каждый раз,
+когда пользователь вращает экран. При изменении ориентации экрана система уничтожает и заново создает
+активную операцию, поскольку конфигурация экрана меняется и операции может потребоваться
+загрузка альтернативных ресурсов (например нового макета).</p>
+
+<p>По умолчанию система использует состояние экземпляра {@link android.os.Bundle} для сохранения информации
+о каждом объекте {@link android.view.View} в макете операции (например, о текстовом значении,
+введенном в объект {@link android.widget.EditText}). Таким образом, если экземпляр вашей операции уничтожается и
+воссоздается заново, происходит восстановление предыдущего состояния макета,
+и при этом вам не нужно добавлять в приложение дополнительный код. Однако операция
+может содержать больше информации о состоянии, чем вы хотите восстановить, например переменные,
+отслеживающие ход выполнения операции пользователем.</p>
+
+<p class="note"><strong>Примечание.</strong> Чтобы система Android могла восстановить состояние
+представлений операции, <strong>каждое представление должно иметь уникальный идентификатор</strong>, предоставляемый атрибутом
+<a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
+android:id}</a>.</p>
+
+<p>Для сохранения дополнительных данных о состоянии операции, необходимо
+заменить метод обратного вызова {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}.
+Система вызывает этот метод, когда пользователь покидает операцию,
+и передает ему объект {@link android.os.Bundle}, который будет сохранен в
+случае, если операция будет неожиданно уничтожена. Если
+системе нужно будет воссоздать экземпляр экземпляра операции, она передаст тот же объект {@link
+android.os.Bundle} методам {@link android.app.Activity#onRestoreInstanceState
+onRestoreInstanceState()} и {@link android.app.Activity#onCreate onCreate()}.
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
+<p class="img-caption"><strong>Рисунок 2</strong>. Когда система начинает останавливать операцию, она
+вызывает {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} (1), чтобы вы могли указать
+дополнительные данные состояния, которые нужно сохранить на случай необходимости воссоздания экземпляра {@link android.app.Activity}.
+Если операция будет уничтожена,
+и системе нужно будет воссоздать тот же экземпляр, она передаст данные
+состояния, определенные в (1), методам {@link android.app.Activity#onCreate onCreate()}
+(2) и {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}
+(3).</p>
+
+
+
+<h2 id="SaveState">Сохранение состояния операции</h2>
+
+<p>Когда начинается остановка операции, система вызывает метод {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()}, чтобы операция могла сохранить информацию о состоянии с помощью набора пар
+"ключ-значение". По умолчанию при реализации этого метода сохраняется информация о состоянии иерархии
+представления операции, например текст в виджете {@link android.widget.EditText} или положение экрана
+для {@link android.widget.ListView}.</p>
+
+<p>Для сохранения дополнительной информации о состоянии операции
+необходимо реализовать {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} и добавить
+к объекту {@link android.os.Bundle} пары "ключ-значение". Например:</p>
+
+<pre>
+static final String STATE_SCORE = "playerScore";
+static final String STATE_LEVEL = "playerLevel";
+...
+
+&#64;Override
+public void onSaveInstanceState(Bundle savedInstanceState) {
+    // Save the user's current game state
+    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
+    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
+    
+    // Always call the superclass so it can save the view hierarchy state
+    super.onSaveInstanceState(savedInstanceState);
+}
+</pre>
+
+<p class="caution"><strong>Внимание!</strong> Реализацию суперкласса {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} следует вызывать во всех случаях, чтобы реализация
+по умолчанию могла сохранить состояние новой иерархии.</p>
+
+
+
+<h2 id="RestoreState">Восстановление состояния операции</h2>
+
+<p>В случае воссоздания операции после предыдущего уничтожения сохраненное
+состояние можно восстановить из {@link android.os.Bundle}, куда система
+передает данные операции. Методы обратного вызова {@link android.app.Activity#onCreate onCreate()} и {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} получают один и
+тот же {@link android.os.Bundle}, содержащий информацию о состоянии экземпляра.</p>
+
+<p>Поскольку метод {@link android.app.Activity#onCreate onCreate()} вызывается, если
+система создает новый экземпляр операции или восстанавливает предыдущий экземпляр, перед попыткой чтения необходимо убедиться,
+что {@link android.os.Bundle} имеет состояние null. В этом случае
+система создает новый экземпляр операции
+вместо восстановления ранее уничтоженного экземпляра.</p>
+
+<p>Приведем пример восстановления некоторых данных о состоянии в {@link android.app.Activity#onCreate
+onCreate()}:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState); // Always call the superclass first
+   
+    // Check whether we're recreating a previously destroyed instance
+    if (savedInstanceState != null) {
+        // Restore value of members from saved state
+        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+    } else {
+        // Probably initialize members with default values for a new instance
+    }
+    ...
+}
+</pre>
+
+<p>Вместо восстановления состояния в {@link android.app.Activity#onCreate onCreate()} вы
+можете реализовать метод {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}, который система вызывает
+после метода {@link android.app.Activity#onStart()}. Система вызывает {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} только при наличии сохраненного состояния
+для восстановления, и поэтому вам не нужно проверять, имеет ли {@link android.os.Bundle} значение null:</p>
+        
+<pre>
+public void onRestoreInstanceState(Bundle savedInstanceState) {
+    // Always call the superclass so it can restore the view hierarchy
+    super.onRestoreInstanceState(savedInstanceState);
+   
+    // Restore state members from saved instance
+    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+}
+</pre>
+
+<p class="caution"><strong>Внимание!</strong> Реализацию суперкласса {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} следует вызывать во всех случаях, чтобы реализация
+по умолчанию могла сохранить состояние новой иерархии.</p>
+
+<p>Более подробную информацию о воссоздании операции в связи
+с перезапуском во время исполнения (например при повороте экрана) можно найти в разделе <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений в режиме выполнения</a>.</p>
+
diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd
new file mode 100644
index 0000000..3a946e2
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd
@@ -0,0 +1,285 @@
+page.title=Запуск операции
+page.tags=жизненный цикл операции
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Содержание этого урока</h2>
+<ol>
+  <li><a href="#lifecycle-states">Изучение обратных вызовов жизненного цикла</a></li>
+  <li><a href="#launching-activity">Указание операции, запускающей приложение</a></li>
+  <li><a href="#Create">Создание нового экземпляра</a></li>
+  <li><a href="#Destroy">Уничтожение операции</a></li>
+</ol>
+    
+    <h2>См. также:</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Операции</a></li>
+    </ul>
+
+<h2>Попробуйте сами</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Загрузить демонстрацию</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>В отличие от других парадигм программирования, где приложения запускаются с использованием метода {@code main()}, система
+Android запускает код в {@link android.app.Activity}экземпляре посредством активации определенных 
+методов обратного вызова, соответствующих определенным этапам его
+жизненного цикла. Существует последовательность методов обратного вызова, которые запускают операцию и последовательность
+методов обратного вызова, уничтожающих операцию.</p>
+
+<p>В этом уроке рассматриваются наиболее важные методы жизненного цикла и демонстрируется, как
+обработать первый обратный вызов жизненного цикла, создающий новый экземпляр операции.</p>
+
+
+
+<h2 id="lifecycle-states">Изучение обратных вызовов жизненного цикла</h2>
+
+<p>В течение цикла существования операции система вызывает базовый набор методов жизненного цикла в
+последовательности, сходной с многоступенчатой пирамидой. Таким образом, каждый этап
+жизненного цикла операции представляет собой отдельную ступень пирамиды. Когда система создает новый экземпляр операции,
+каждый метод обратного вызова перемещает состояние действия на одну ступень вверх. Вершина пирамиды представляет собой
+точку, в которой операция выполняется в экранном режиме, и пользователь может с ней взаимодействовать.</p>
+
+<p>Когда пользователь начинает выходить из операции, система вызывает другие методы, которые перемещают состояние
+операции вниз по пирамиде для уничтожения действия. В некоторых случаях действие
+перемещает операцию вниз по пирамиде только частично и ждет (например когда пользователь переключается на другое приложение),
+а затем операция может быть перемещена обратно вверх (если пользователь вернется к операции) и
+возобновлена там, где пользователь вышел из нее.</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle.png" />
+<p class="img-caption"><strong>Рисунок 1</strong>. Упрощенная иллюстрация жизненного цикла операции
+в виде многоступенчатой пирамиды. На рисунке показано, что для каждого обратного вызова,
+поднимающего операцию на одну ступень к состоянию возобновления на вершине пирамиды,
+существует обратный вызов, опускающий операцию на одну ступень вниз. Возобновление операции также может производиться из состояний
+паузы и остановки.</p>
+
+
+<p>В зависимости от сложности операции, некоторые
+методы жизненного цикла могут не требоваться. Однако очень важно понимать все методы и реализовать их так, чтобы
+приложение работало так, как этого ожидают пользователи. Правильная реализация методов жизненного цикла операции
+обеспечивает нормальную работу приложения в нескольких аспектах, в том числе:</p>
+<ul>
+  <li>Не прекращает работу, если пользователь получает телефонный звонок или переключается на другое приложение
+во время использования вашего приложения.</li>
+  <li>Не потребляет ценные системные ресурсы, когда пользователь не использует
+его активно.</li>
+  <li>Сохраняет состояние приложения, если пользователь выходит из него и возвращается
+позднее.</li>
+  <li>Не закрывается с ошибкой и не теряет данные пользователя при повороте экрана (смене ориентации между книжной
+и альбомной.</li>
+</ul>
+
+<!--
+<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 
+methods.</p>
+<table>
+  <tr>
+    <th scope="col">Lifecycle State</th>
+    <th scope="col">Startup Method</th>
+    <th scope="col">Teardown Method</th>
+  </tr>
+  <tr>
+    <td>Created / Destroyed</td>
+    <td>{@link android.app.Activity#onCreate onCreate()}</td>
+    <td>{@link android.app.Activity#onDestroy()}</td>
+  </tr>
+  <tr>
+    <td>Started / Stopped</td>
+    <td>{@link android.app.Activity#onStart()}</td>
+    <td>{@link android.app.Activity#onStop()}</td>
+  </tr>
+  <tr>
+    <td>Resumed / Resumed</td>
+    <td>{@link android.app.Activity#onResume()}</td>
+    <td>{@link android.app.Activity#onPause()}</td>
+  </tr>
+</table>
+-->
+
+<p>Как вы узнаете на следующих уроках, в некоторых ситуациях операция
+переключается между разными состояниями, как показано на рисунке 1. Однако только три
+из этих состояний могут быть статичными. Это означает, что операция может существовать относительно длительное
+время только в одном из этих трех состояний.</p>
+<dl>
+  <dt>Возобновление</dt>
+    <dd>В этом состоянии операция выполняется в экранном режиме, и пользователь может с ней взаимодействовать.
+Иногда это состояние также называется рабочим состоянием.</dd>
+  <dt>Приостановка</dt>
+    <dd>В этом состоянии операция частично закрывается другой операцией &mdash; в экранном режиме
+эта другая операция или является полупрозрачной, или не закрывает экран целиком. Приостановленная операция
+не получает команд пользователя и не может выполнять код.
+  <dt>Остановка</dt>
+    <dd>В этом состоянии операция полностью скрыта и невидима для пользователя. Она считается находящейся в
+фоновом режиме. В состоянии остановки сохраняется экземпляр операции и вся его информация
+о состоянии, например, переменных, однако операция не может выполнять код.</dd>
+</dl>
+
+<p>Другие состояния (создание и запуск) являются переходными, и система быстро переходит от них
+к следующим состояниям посредством вызова следующего метода обратного вызова в жизненном цикле. Таким образом, после вызова
+{@link android.app.Activity#onCreate onCreate()} система быстро вызывает {@link
+android.app.Activity#onStart()}, а затем сразу же вызывает {@link
+android.app.Activity#onResume()}.</p>
+
+<p>Так выглядит базовый жизненный цикл операции. Теперь рассмотрим определенные виды
+поведения в жизненном цикле.</p>
+
+
+
+<h2 id="launching-activity">Указание операции, запускающей приложение</h2> 
+
+<p>Когда пользователь выбирает значок приложения на главном экране, система вызывает метод {@link
+android.app.Activity#onCreate onCreate()} для {@link android.app.Activity} в вашем приложении
+в соответствии с тем, какую операцию вы задекларировали как операцию запуска (или основную операцию). Эта операция выступает
+основной точкой входа в пользовательский интерфейс вашего приложения.</p>
+
+<p>Для определения основной операции вы можете использовать файл манифеста Android <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a>,
+который находится в корневом каталоге вашего проекта.</p>
+
+<p>Основная операция приложения должна декларироваться в манифесте с помощью фильтра <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a>, включающего действие {@link
+android.content.Intent#ACTION_MAIN MAIN} и категорию
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Например:</p> 
+
+<pre>
+&lt;activity android:name=".MainActivity" android:label="&#64;string/app_name">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.MAIN" />
+        &lt;category android:name="android.intent.category.LAUNCHER" />
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>Примечание.</strong> При создании нового проекта Android с помощью инструментов
+Android SDK файлы проекта по умолчанию включают класс {@link android.app.Activity}, который декларируется в
+манифесте с помощью этого фильтра.</p>
+
+<p>Если для одной из операций не декларировано действие {@link android.content.Intent#ACTION_MAIN MAIN} или категория
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}, значок
+приложения не будет отображатья в списке приложений на главном экране.</p>
+
+
+
+<h2 id="Create">Создание нового экземпляра</h2>
+
+<p>Большинство приложений содержат различные операции, позволяющие пользователю выполнять различные действия.
+Как для основных операций, создаваемых при нажатии на значок приложения, так
+и для других операций, которыми приложение реагирует на действия пользователя, система создает
+каждый новый экземпляр {@link android.app.Activity} посредством вызова его метода {@link
+android.app.Activity#onCreate onCreate()}.</p>
+
+<p>Вы должны реализовать метод {@link android.app.Activity#onCreate onCreate()} для выполнения базовой
+логики запуска приложения, которое должно производиться только один раз для всего срока существования операции. Например,
+ваша реализация {@link android.app.Activity#onCreate onCreate()} должна содержать определение пользовательского
+интерфейса и возможно создавать экземпляры некоторых переменных уровня класса.</p>
+
+<p>Например, в следующем примере метода {@link android.app.Activity#onCreate onCreate()}
+показан код, выполняющий фундаментальную настройку операции, включая
+декларирование пользовательского интерфейса (определен в файле макета XML), определение составных переменных
+и частичную настройку пользовательского интерфейса.</p>
+
+<pre>
+TextView mTextView; // Member variable for text view in the layout
+
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    // Set the user interface layout for this Activity
+    // The layout file is defined in the project res/layout/main_activity.xml file
+    setContentView(R.layout.main_activity);
+    
+    // Initialize member TextView so we can manipulate it later
+    mTextView = (TextView) findViewById(R.id.text_message);
+    
+    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+        // For the main activity, make sure the app icon in the action bar
+        // does not behave as a button
+        ActionBar actionBar = getActionBar();
+        actionBar.setHomeButtonEnabled(false);
+    }
+}
+</pre>
+
+<p class="caution"><strong>Внимание!</strong> Использование {@link android.os.Build.VERSION#SDK_INT} для
+предотвращения запуска новых API-интерфейсов на старых системах поддерживается только в Android версии 2.0 (API-интерфейсы уровня
+5) и более поздних версиях. В старых версиях возникнет ошибка времени исполнения.</p>
+
+<p>После завершения выполнения {@link android.app.Activity#onCreate onCreate()} система
+быстро вызывает методы {@link android.app.Activity#onStart()} и {@link android.app.Activity#onResume()} по
+очереди. Операция никогда не остается в состоянии создания или запуска. Технически
+операция становится видимой для пользователя при вызове {@link android.app.Activity#onStart()}, однако затем сразу же происходит 
+{@link android.app.Activity#onResume()} и операция остается в состоянии возобновления,
+пока что-то не произойдет, например пока не поступит телефонный звонок, пользователь не переключится
+на другую операцию или экран устройства не выключится.</p>
+
+<p>На последующих уроках вы увидите, как можно с пользой использовать другие методы запуска, {@link
+android.app.Activity#onStart()} и {@link android.app.Activity#onResume()}, в жизненном цикле операции
+при возобновлении работы после паузы или остановки.</p>
+
+<p class="note"><strong>Примечание.</strong> Метод {@link android.app.Activity#onCreate onCreate()}
+включает параметр <code>savedInstanceState</code>, о котором будет рассказано на
+уроке <a href="recreating.html">Воссоздание операции</a>.</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" />
+<p class="img-caption"><strong>Рисунок 2.</strong> Еще один пример структуры жизненного
+цикла операции, где основное внимание трем главным обратным вызовам, которые система выполняет по очереди при создании
+нового экземпляра операции: {@link android.app.Activity#onCreate onCreate()}, {@link
+android.app.Activity#onStart()} и {@link android.app.Activity#onResume()}. После завершения этой серии
+обратных вызовов операция переходит в состояние возобновления, где пользователи могут
+взаимодействовать с операцией до тех пор, пока не переключатся на другую операцию.</p>
+
+
+
+
+
+
+
+<h2 id="Destroy">Уничтожение операции</h2>
+
+<p>Первым обратным вызовом жизненного цикла операции является {@link android.app.Activity#onCreate
+onCreate()}, а последним – {@link android.app.Activity#onDestroy}. Система вызывает
+этот метод для операции, подавая окончательный сигнал
+о том, что экземпляр операции полностью удаляется из системной памяти.</p>
+
+<p>Большинству приложений не требуется реализация этого метода, потому что ссылки локальных классов уничтожаются
+вместе с операцией, а основные задачи по освобождению ресурсов операция выполняет в состояниях {@link
+android.app.Activity#onPause} и {@link android.app.Activity#onStop}. Однако если ваша
+операция содержит фоновые потоки, созданные во время выполнения {@link
+android.app.Activity#onCreate onCreate()}, или в течение длительного времени использует другие ресурсы, могущие
+вызывать утечку памяти при неправильном закрытии, их нужно уничтожить с помощью метода {@link
+android.app.Activity#onDestroy}.</p>
+
+<pre>
+&#64;Override
+public void onDestroy() {
+    super.onDestroy();  // Always call the superclass
+    
+    // Stop method tracing that the activity started during onCreate()
+    android.os.Debug.stopMethodTracing();
+}
+</pre>
+
+<p class="note"><strong>Примечание.</strong> Система вызывает {@link android.app.Activity#onDestroy}
+после вызова {@link android.app.Activity#onPause} и {@link
+android.app.Activity#onStop} во всех случаях, кроме ситуации, когда вы вызываете {@link
+android.app.Activity#finish()} из метода {@link android.app.Activity#onCreate onCreate()}
+. В некоторых случаях, например когда ваша операция временно отвечает за принятие решения о запуске
+другой операции, вы можете вызвать {@link android.app.Activity#finish()} из метода {@link
+android.app.Activity#onCreate onCreate()} для уничтожения операции. В этом случае система
+сразу же вызывает {@link android.app.Activity#onDestroy}, не вызывая другие методы жизненного
+цикла.</p>
diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/stopping.jd
new file mode 100644
index 0000000..27c771f
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/stopping.jd
@@ -0,0 +1,187 @@
+page.title=Остановка и перезапуск операции
+page.tags=жизненный цикл операции
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>Содержание этого урока</h2>
+    <ol>
+      <li><a href="#Stop">Остановка операции</a></li>
+      <li><a href="#Start">Запуск/перезапуск операции</a></li>
+    </ol>
+    
+    <h2>См. также:</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Операции</a>
+      </li>
+    </ul>
+
+<h2>Попробуйте сами</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Загрузить демонстрацию</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>Правильное выполнение остановки и перезапуска операции является важным шагом в жизненном
+цикле операции, благодаря которому пользователи понимают, что приложение не потеряет их данные.
+Ниже приведен пример нескольких основных ситуаций с остановкой и перезапуском операции.</p>
+
+<ul>
+  <li>Пользователь открывает окно "Последние приложения" и переключается из вашего приложения в другое приложение.
+При этом останавливается операция вашего приложения, работающего на экране. Если пользователь возвращается в ваше
+приложение, нажав значок запуска на главном экране или через окно "Последние приложения", данная операция возобновляется.</li>
+  <li>Пользователь выполняет в вашем приложении действие, запускающее новую операцию. Текущая операция
+останавливается при создании второй операции. Если после этого пользователь нажимает кнопку <em>Назад</em>
+, первая операция запускается заново.</li>
+  <li>Пользователь получает телефонный звонок или переключается на другое приложение во время использования вашего приложения на своем телефоне.</li>
+</ul>
+
+<p>Класс {@link android.app.Activity} предоставляет два метода жизненного цикла, {@link
+android.app.Activity#onStop()} и {@link android.app.Activity#onRestart()}, позволяющие явно
+обрабатывать остановку и перезапуск операции. В отличие от состояния паузы,
+означающем частичное уничтожение пользовательского интерфейса, в состоянии остановки пользовательский интерфейс больше не
+отображается и пользователь переключается на отдельную операцию (или отдельное приложение).</p>
+
+<p class="note"><strong>Примечание.</strong> Поскольку система хранит ваш экземпляр {@link android.app.Activity}
+в системной памяти при остановке, вам, возможно, вообще не потребуется реализация методов
+{@link android.app.Activity#onStop()} и {@link android.app.Activity#onRestart()} (или даже {@link
+android.app.Activity#onStart()}. Большинство операций относительно простые, и операция
+остановится и перезапустится нормально, вам только может потребоваться {@link
+android.app.Activity#onPause()} для приостановки текущих операций и отключения от системных ресурсов.</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-stopped.png" />
+<p class="img-caption"><strong>Рисунок 1.</strong> Когда пользователь выйдет из операции, система
+вызовет {@link android.app.Activity#onStop onStop()} для остановки операции (1). Если пользователь возвращается
+при остановке операции, система вызывает {@link android.app.Activity#onRestart onRestart()}
+(2), затем сразу же {@link android.app.Activity#onStart onStart()} (3) и {@link
+android.app.Activity#onResume()} (4). Вне зависимости от причины остановки
+операции, система всегда вызывает {@link android.app.Activity#onPause onPause()} перед вызовом {@link
+android.app.Activity#onStop onStop()}.</p>
+
+
+
+<h2 id="Stop">Остановка операции</h2>
+
+<p>Когда операция получает вызов метода {@link android.app.Activity#onStop()},
+она становится невидимой и освобождает практически все ресурсы, которые не нужны ей, когда пользователь ее не
+использует. После остановки операции система может уничтожить экземпляр, если ей потребуется
+освободить системную память. В чрезвычайных ситуациях система может закрыть процесс приложения без
+вызова последнего метода обратного вызова {@link android.app.Activity#onDestroy()} операции, и поэтому важно
+использовать {@link android.app.Activity#onStop()} для высвобождения ресурсов, которые могут вызвать утечку памяти.</p>
+
+<p>Хотя метод {@link android.app.Activity#onPause onPause()} вызывается до
+{@link android.app.Activity#onStop()}, вам следует использовать {@link android.app.Activity#onStop onStop()}
+для выполнения более масштабных операций выключения с использованием процессорных ресурсов, например при записи информации в базу
+данных.</p>
+
+<p>В качестве примера приведем реализацию {@link android.app.Activity#onStop onStop()},
+сохраняющую содержание черновой заметки в постоянное хранилище:</p>
+
+<!-- TODO: Find a better example for onStop, because this kind of thing should probably use a
+separate thread but that's too complicated to show here. -->
+<pre>
+&#64;Override
+protected void onStop() {
+    super.onStop();  // Always call the superclass method first
+
+    // Save the note's current draft, because the activity is stopping
+    // and we want to be sure the current note progress isn't lost.
+    ContentValues values = new ContentValues();
+    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
+    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
+
+    getContentResolver().update(
+            mUri,    // The URI for the note to update.
+            values,  // The map of column names and new values to apply to them.
+            null,    // No SELECT criteria are used.
+            null     // No WHERE columns are used.
+            );
+}
+</pre>
+
+<p>При остановке операции объект {@link android.app.Activity} остается в памяти
+и вызывается повторно при возобновлении операции. Не нужно заново инициализировать компоненты,
+созданные с использованием любого из методов обратного вызова для возобновления операции. Система также
+отслеживает текущее состояние каждого {@link android.view.View} в макете, и если
+пользователь вводит текст в виджет {@link android.widget.EditText}, этот текст сохраняется, так что его не
+нужно специально сохранять и восстанавливать.</p>
+
+<p class="note"><strong>Примечание.</strong> Даже если система уничтожит операцию в период остановки,
+она сохранит состояние объектов {@link android.view.View} (например, текста в {@link
+android.widget.EditText}) в {@link android.os.Bundle} (наборе пар "ключ-значение") и восстановит
+их, если пользователь вернется в тот же экземпляр операции (на <a href="recreating.html">следующем уроке</a> мы более подробно поговорим об использовании {@link android.os.Bundle} для сохранения 
+других данных состояния в случае уничтожения и воссоздания вашей операции).</p>
+
+
+
+<h2 id="Start">Запуск/перезапуск операции</h2>
+
+<p>Когда ваша операция возвращается в экранный режим из состояния остановки, она получает вызов
+{@link android.app.Activity#onRestart()}. Система также вызывает метод {@link
+android.app.Activity#onStart()}, что происходит каждый раз, когда операция становится видимой
+(при перезапуске или первоначальном создании). Однако метод {@link
+android.app.Activity#onRestart()} вызывается только при возобновлении операции из состояния
+остановки, так что его можно использовать для выполнения специальных задач восстановления, которые могут требоваться только если операция
+была остановлена, но не была уничтожена.</p>
+
+<p>Приложениям редко требуется использовать {@link android.app.Activity#onRestart()} для восстановления
+состояния операции, и поэтому для этого метода нет правил, относящихся
+к обычным приложениям. Однако поскольку ваш метод {@link android.app.Activity#onStop()}
+должен фактически освободить все ресурсы операции, их нужно снова выделить
+при перезапуске операции. Однако их также нужно выделять при первом
+создании операции (когда нет существующего экземпляра операции). По этому причине обычно
+используют метод обратного вызова {@link android.app.Activity#onStart()} в дополнение
+к методу {@link android.app.Activity#onStop()}, поскольку система вызывает {@link
+android.app.Activity#onStart()} как при создании операции, так и при ее перезапуске
+после остановки.</p>
+
+<p>Например, если пользователь долго не пользовался приложением,
+а затем вернулся в него, метод {@link android.app.Activity#onStart()} хорошо помогает убедиться, что требуемые
+системные функции включены:</p>
+
+<pre>
+&#64;Override
+protected void onStart() {
+    super.onStart();  // Always call the superclass method first
+    
+    // The activity is either being restarted or started for the first time
+    // so this is where we should make sure that GPS is enabled
+    LocationManager locationManager = 
+            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+    boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+    
+    if (!gpsEnabled) {
+        // Create a dialog here that requests the user to enable GPS, and use an intent
+        // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
+        // to take the user to the Settings screen to enable GPS when they click "OK"
+    }
+}
+
+&#64;Override
+protected void onRestart() {
+    super.onRestart();  // Always call the superclass method first
+    
+    // Activity being restarted from stopped state    
+}
+</pre>
+
+
+
+
+<p>Когда система уничтожает вашу операцию, она вызывает метод {@link android.app.Activity#onDestroy()}
+для вашего {@link android.app.Activity}. Поскольку вы уже освобождаете большую часть
+ресурсов с помощью {@link android.app.Activity#onStop()} к моменту вызова {@link
+android.app.Activity#onDestroy()}, большинству приложений почти ничего не нужно делать. Этот метод представляет собой последний
+шанс освободить ресурсы, могущие привести к утечке памяти, обеспечивая уверенность
+в уничтожении дополнительных потоков и других долгосрочных действий, например, отслеживания
+методов.</p>
+
diff --git a/docs/html-intl/intl/ru/training/basics/data-storage/databases.jd b/docs/html-intl/intl/ru/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..418d288
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/data-storage/databases.jd
@@ -0,0 +1,317 @@
+page.title=Сохранение данных в базах данных SQL
+page.tags=хранение данных
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Содержание этого урока</h2>
+<ol>
+  <li><a href="#DefineContract">Определение схемы и контракта</a></li>
+  <li><a href="#DbHelper">Создание базы данных с помощью SQL Helper</a></li>
+  <li><a href="#WriteDbRow">Размещение информации в базе данных</a></li>
+  <li><a href="#ReadDbRow">Чтение информации из базы данных</a></li>
+  <li><a href="#DeleteDbRow">Удаление информации из базы данных</a></li>
+  <li><a href="#UpdateDbRow">Обновление базы данных</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">Использование баз данных</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+  <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>Сохранение данных в базе идеально подходит для повторяющихся и структурированных данных,
+таких как контактная информация. В этом учебном курсе предполагается, что вы
+владеете общими знаниями о базах данных SQL, и он поможет вам начать работать с базами данных
+SQLite на платформе Android. API-интерфейсы, необходимые для использования базы данных
+на платформе Android, доступны в составе пакета {@link android.database.sqlite}.</p>
+
+
+<h2 id="DefineContract">Определение схемы и контракта</h2>
+
+<p>Одним из основных элементов баз данных SQL является схема, которая представляет собой формальную
+декларацию способа организации базы данных. Схема отражается в выражениях SQL,
+используемых для создания базы данных.  Для вас может оказаться полезным
+создать сопутствующий класс (<em>класс-контракт</em>), явно указывающий структуру
+схемы систематическим и самодокументирующим способом.</p>
+
+<p>Класс-контракт представляет собой контейнер, определяющий имена для URI-адресов,
+таблиц и столбцов. Класс-контракт позволяет использовать одни и те же постоянные значения
+во всех других классах этого же пакета. Таким образом, при изменении имени
+столбца в одном месте это изменение применяется во всем коде.</p>
+
+<p>Для удобства организации класс-контракта стоит поместить
+глобальные определения базы данных на корневой уровень класса. Затем нужно создать внутренний
+класс для каждой таблицы, производящей нумерацию столбцов.</p>
+
+<p class="note"><strong>Примечание.</strong> За счет реализации интерфейса {@link
+android.provider.BaseColumns} внутренний класс может наследовать поле первичного
+ключа {@code _ID}, наличия которого ожидают от него некоторые
+классы Android (например, адаптеры курсора).  Это не является обязательным условием, однако может помочь обеспечить гармоничную работу
+вашей базы данных в инфраструктуре Android.</p>
+
+<p>Например, в этом фрагменте кода определяются имя таблицы и имена столбцов для
+одной таблицы:</p>
+
+
+<pre>
+public final class FeedReaderContract {
+    // To prevent someone from accidentally instantiating the contract class,
+    // give it an empty constructor.
+    public FeedReaderContract() {}
+
+    /* Inner class that defines the table contents */
+    public static abstract class FeedEntry implements BaseColumns {
+        public static final String TABLE_NAME = &quot;entry&quot;;
+        public static final String COLUMN_NAME_ENTRY_ID = &quot;entryid&quot;;
+        public static final String COLUMN_NAME_TITLE = &quot;title&quot;;
+        public static final String COLUMN_NAME_SUBTITLE = &quot;subtitle&quot;;
+        ...
+    }
+}
+</pre>
+
+
+
+<h2 id="DbHelper">Создание базы данных с помощью SQL Helper</h2>
+
+<p>После определения внешнего вида базы данных следует реализовать методы
+создания и обслуживания базы данных и таблиц.  Вот некоторые типичные
+выражения для создания и удаления таблиц:</P>
+
+<pre>
+private static final String TEXT_TYPE = &quot; TEXT&quot;;
+private static final String COMMA_SEP = &quot;,&quot;;
+private static final String SQL_CREATE_ENTRIES =
+    &quot;CREATE TABLE &quot; + FeedEntry.TABLE_NAME + &quot; (&quot; +
+    FeedEntry._ID + &quot; INTEGER PRIMARY KEY,&quot; +
+    FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+    FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+    ... // Any other options for the CREATE command
+    &quot; )&quot;;
+
+private static final String SQL_DELETE_ENTRIES =
+    &quot;DROP TABLE IF EXISTS &quot; + FeedEntry.TABLE_NAME;
+</pre>
+
+<p>Как и при сохранении файлов во <a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">внутренней
+памяти</a> устройства, Android сохраняет вашу базу данных в закрытой области диска, связанной
+с приложением Эти данные защищены, потому что эта область
+по умолчанию недоступна другим приложениям.</p>
+
+<p>Полезный набор API-интерфейсов содержится в классе {@link
+android.database.sqlite.SQLiteOpenHelper}. 
+Если вы используете этот класс для получения ссылок на свою базу данных, система
+выполняет потенциально
+долговременные операции создания и обновления базы данных только тогда, когда это
+необходимо, а <em>не при запуске приложения</em>. Для этого нужно использовать вызов 
+{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} или
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}.</p>
+
+<p class="note"><strong>Примечание.</strong> Поскольку операции могут выполняться длительное время,
+вызывайте {@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} или {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} в фоновом потоке,
+например с {@link android.os.AsyncTask} или {@link android.app.IntentService}.</p>
+
+<p>Для использования {@link android.database.sqlite.SQLiteOpenHelper} создайте подкласс, заменяющий методы
+вызова {@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}, {@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} и {@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()}. Также вы можете
+использовать {@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()},
+но это не требуется.</p>
+
+<p>Например, вот реализация {@link
+android.database.sqlite.SQLiteOpenHelper}, при которой используются некоторые из приведенных выше команд:</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+    // If you change the database schema, you must increment the database version.
+    public static final int DATABASE_VERSION = 1;
+    public static final String DATABASE_NAME = &quot;FeedReader.db&quot;;
+
+    public FeedReaderDbHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+    public void onCreate(SQLiteDatabase db) {
+        db.execSQL(SQL_CREATE_ENTRIES);
+    }
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        // This database is only a cache for online data, so its upgrade policy is
+        // to simply to discard the data and start over
+        db.execSQL(SQL_DELETE_ENTRIES);
+        onCreate(db);
+    }
+    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        onUpgrade(db, oldVersion, newVersion);
+    }
+}
+</pre>
+
+<p>Для получения доступа к базе данных создайте экземпляр подкласса {@link
+android.database.sqlite.SQLiteOpenHelper}:</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">Размещение информации в базе данных</h2>
+
+<p>Добавьте данные в базу данных, передав объект {@link android.content.ContentValues}
+в метод {@link android.database.sqlite.SQLiteDatabase#insert insert()}:</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+         FeedEntry.TABLE_NAME,
+         FeedEntry.COLUMN_NAME_NULLABLE,
+         values);
+</pre>
+
+<p>Первый аргумент {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+представляет собой просто название таблицы. Второй аргумент указывает
+имя столбца, в который инфраструктура вставляет значение NULL, если
+{@link android.content.ContentValues} является пустым (если вместо этого указать {@code "null"},
+то инфраструктура не будет вставлять строку в случае отсутствия значений).</p>
+
+
+
+
+<h2 id="ReadDbRow">Чтение информации из базы данных</h2>
+
+<p>Для чтения из базы данных используйте метод {@link android.database.sqlite.SQLiteDatabase#query query()}
+с передачей критериев выделения и желаемых столбцов.
+Метод сочетает элементы {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+и {@link android.database.sqlite.SQLiteDatabase#update update()}, за исключением того, что список столбцов
+определяет данные, которые вы хотите получить, а не данные для вставки. Результаты запроса
+возвращаются в объекте {@link android.database.Cursor}.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+    FeedEntry._ID,
+    FeedEntry.COLUMN_NAME_TITLE,
+    FeedEntry.COLUMN_NAME_UPDATED,
+    ...
+    };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+    FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+    FeedEntry.TABLE_NAME,  // The table to query
+    projection,                               // The columns to return
+    selection,                                // The columns for the WHERE clause
+    selectionArgs,                            // The values for the WHERE clause
+    null,                                     // don't group the rows
+    null,                                     // don't filter by row groups
+    sortOrder                                 // The sort order
+    );
+</pre>
+
+<p>Чтобы посмотреть на строку в месте курсора, используйте один из методов перемещения 
+{@link android.database.Cursor}, которые всегда нужно вызывать перед считыванием значений. Обычно следует начинать
+с вызова {@link android.database.Cursor#moveToFirst}, который помещает "позицию чтения"
+на первую запись в результатах. Для каждой строки значение столбца можно прочитать, вызвав один из методов
+{@link android.database.Cursor} get, например {@link android.database.Cursor#getString
+getString()} или {@link android.database.Cursor#getLong getLong()}. Для каждого из методов get
+вы должны передать указатель желаемого столбца, который может вызвать
+{@link android.database.Cursor#getColumnIndex getColumnIndex()} или
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()}.
+Например:</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+    cursor.getColumnIndexOrThrow(FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">Удаление информации из базы данных</h2>
+
+<p>Для удаления строк из таблицы нужно указать критерии выделения,
+идентифицирующие строки. API-интерфейс базы данных обеспечивает механизм для создания критериев
+выделения, предоставляющий защиту от внедрения SQL-кода. Механизм делит спецификацию выбора
+на предложение выбора и аргументы выбора. Предложение
+определяет столбцы для рассмотрения, а также позволяет объединять операции тестирования
+столбцов. Аргументы представляют собой значения для тестирования, которые привязаны к пункту.
+Поскольку результат обрабатывается не как обычные выражения SQL,
+он защищен от внедрения SQL-кода.</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+// Specify arguments in placeholder order.
+String[] selectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, selection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">Обновление базы данных</h2>
+
+<p>При необходимости изменить набор значений базы данных используйте метод {@link
+android.database.sqlite.SQLiteDatabase#update update()}.</p>
+
+<p>Обновление таблицы сочетает значения синтаксиса {@link
+android.database.sqlite.SQLiteDatabase#insert insert()} и синтаксиса {@code where}
+для {@link android.database.sqlite.SQLiteDatabase#delete delete()}.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+String[] selectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+    values,
+    selection,
+    selectionArgs);
+</pre>
+
diff --git a/docs/html-intl/intl/ru/training/basics/data-storage/files.jd b/docs/html-intl/intl/ru/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..2afecea
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/data-storage/files.jd
@@ -0,0 +1,379 @@
+page.title=Сохранение файлов
+page.tags=хранение данных
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Содержание этого урока</h2>
+<ol>
+  <li><a href="#InternalVsExternalStorage">Выбор внутреннего или внешнего хранилища</a></li>
+  <li><a href="#GetWritePermission">Получение разрешений на доступ к внешнему хранилищу</a></li>
+  <li><a href="#WriteInternalStorage">Сохранение файла во внутреннем хранилище</a></li>
+  <li><a href="#WriteExternalStorage">Сохранение файла во внешнем хранилище</a></li>
+  <li><a href="#GetFreeSpace">Запрос свободного пространства</a></li>
+  <li><a href="#DeleteFile">Удаление файла</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">Использование внутреннего
+хранилища</a></li>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">Использование внешнего
+хранилища</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Операционная система Android использует файловую систему,
+похожую на дисковые файловые системы других платформ. В этом уроке рассказывается,
+как работать с файловой системой Android для чтения и записи файлов в {@link java.io.File}
+API-интерфейсах.</p>
+
+<p>Объект {@link java.io.File} подходит для чтения или записи больших объемов данных в порядке
+от начала к концу без пропусков. Например, этот способ оптимален для изображений или
+любых других файлов, передаваемых по сети.</p>
+
+<p>В этом уроке вы узнаете, как выполнять в приложении базовые задачи, связанные с файлами.
+Для прохождения урока вы должны быть знакомы с основами файловой системы Linux
+и стандартными файловыми API-интерфейсами ввода/вывода в {@link java.io}.</p>
+
+
+<h2 id="InternalVsExternalStorage">Выбор внутреннего или внешнего хранилища</h2>
+
+<p>Все устройства Android имеют две области хранения файлов: внутренняя память и внешние хранилища.  Эти области
+появились в первые годы существования Android, когда на большинстве устройств имелись встроенная память
+(внутреннее хранилище) и карты памяти (например micro SD, внешнее хранилище).
+Некоторые устройства делят встроенную память на внутренний и внешний разделы,
+так что даже без съемных носителей в системе две области хранения файлов,
+и API-интерфейс работает одинаково вне зависимости от типа внешнего хранилища.
+Ниже подробно описаны обе области хранения файлов.</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>Внутренняя память</b></p>
+<ul>
+<li>Всегда доступна.</li>
+<li>Сохраненные здесь файлы по умолчанию доступны только вашему приложению.</li>
+<li>При удалении пользователем вашего приложения система Android удаляет из внутренней памяти
+все файлы этого приложения.</li>
+</ul>
+<p>Внутренняя память лучше всего подходит для ситуаций, когда вы хотите быть уверены, что ни пользователь, ни другие приложения не смогут получить
+доступ к вашим файлам.</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>Внешнее хранилище</b></p>
+<ul>
+<li>Доступно не всегда, потому что пользователь может в любое время подключать и отключать такие
+хранилища, например, USB-накопители.</li>
+<li>Такие хранилища доступны для чтения везде,
+поэтому вы не контролируете чтение сохраненных в них данных.</li>
+<li>При удалении пользователем вашего приложения система Android удаляет из внешних хранилищ
+файлы этого приложения, только если они сохраняются в директории из {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()}.</li>
+</ul>
+<p>Внешнее хранилище лучше всего
+подходит для файлов без ограничений доступа и для файлов, которые вы хотите сделать
+доступными другим приложениям или пользователю через компьютер.</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>Совет.</strong> Хотя по умолчанию приложения устанавливаются во внутреннюю память,
+вы можете указать в манифесте атрибут <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a>, чтобы приложение можно
+было установить во внешнее хранилище. Этот вариант будет полезен пользователям при большом размере файла APK, либо если у них есть доступ
+к внешнему хранилищу, объем которого превышает внутреннюю память. Дополнительную информацию
+см. в разделе <a href="{@docRoot}guide/topics/data/install-location.html">Место установки приложения</a>.</p>
+
+
+<h2 id="GetWritePermission">Получение разрешений доступа к внешнему хранилищу</h2>
+
+<p>Для записи во внешнее хранилище следует указать запрос
+разрешения {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} в <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">файле манифеста</a>:</p>
+
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+
+<div class="caution"><p><strong>Внимание!</strong>
+В настоящее время все приложения могут считывать данные из внешних
+хранилищ без специального разрешения. Однако в новой версии эта ситуация будет изменена. Если вашему приложению потребуется
+считать данные из внешнего хранилища (но не записать туда данные), вам необходимо будет декларировать разрешение {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE}. Чтобы обеспечить дальнейшую работу вашего приложения
+ожидаемым образом, вы должны сразу декларировать это разрешение до того, как изменения вступят в силу.</p>
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+<p>Однако если ваше приложение использует разрешение {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE},
+оно косвенно получает разрешение на чтение данных из внешнего хранилища.</p>
+</div>
+
+<p>Для сохранения файлов во внутреннем хранилище
+не требуется никаких разрешений. У вашего приложения всегда будет разрешение на чтение и запись
+файлов в его каталог внутренней памяти.</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">Сохранение файла во внутренней памяти</h2>
+
+<p>При сохранении файла во внутреннюю память вы можете получить соответствующую директорию в виде
+{@link java.io.File}, вызвав один из двух методов:</p>
+
+<dl>
+  <dt>{@link android.content.Context#getFilesDir}</dt>
+  <dd>Возвращает {@link java.io.File}, соответствующий внутренней директории приложения.</dd>
+  <dt>{@link android.content.Context#getCacheDir}</dt>
+  <dd>Возвращает {@link java.io.File}, соответствующий внутренней директории файлов временной
+кэш-памяти приложения. Обязательно удаляйте каждый файл, когда он перестанет
+быть нужным, и устанавливайте разумное ограничение размера памяти, используемой в каждый момент времени,
+например, 1 МБ. Если системе будет не хватать места в хранилище, она может удалять файлы
+из кэш-памяти без уведомления.</dd>
+</dl>
+
+<p>Для создания файла в одной из этих директорий можно использовать конструктор {@link
+java.io.File#File(File,String) File()}, который передает элемент {@link java.io.File}, предоставляемый одним из вышеприведенных
+методов, с помощью которого указывается директория во внутренней памяти. Например:</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>Кроме того, можно вызвать метод {@link
+android.content.Context#openFileOutput openFileOutput()} для получения объекта {@link java.io.FileOutputStream}
+, производящего запись в файл во внутренней памяти. Вот пример
+записи текста в файл:</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+  outputStream.write(string.getBytes());
+  outputStream.close();
+} catch (Exception e) {
+  e.printStackTrace();
+}
+</pre>
+
+<p>Если вам потребуется кэшировать какие-то файлы, используйте {@link
+java.io.File#createTempFile createTempFile()}. Например, следующий метод извлекает
+имя файла из {@link java.net.URL} и создает файл с этим именем
+в каталоге внутренней кэш-памяти вашего приложения:</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+    File file;
+    try {
+        String fileName = Uri.parse(url).getLastPathSegment();
+        file = File.createTempFile(fileName, null, context.getCacheDir());
+    catch (IOException e) {
+        // Error while creating file
+    }
+    return file;
+}
+</pre>
+
+<p class="note"><strong>Примечание.</strong>
+Каталог вашего приложения во внутренней памяти указывается
+с использованием имени пакета приложения в определенном месте файловой системы Android.
+Технически другое приложение может прочитать ваши файлы во внутренней памяти, если вы установите для файлов
+режим Readable (доступно для чтения). Однако для этого другому приложению должны быть известны имя пакета вашего
+приложения и имена файлов. Другие приложения не могут просматривать внутренние каталоги вашего приложения и не имеют разрешений на
+чтение или запись, если вы специально не установите для своих файлов режим Readable (доступно для чтения) или Writable (доступно для записи). Следовательно, пока
+вы будете использовать режим {@link android.content.Context#MODE_PRIVATE} для своих файлов во внутренней памяти,
+они будут недоступны другим приложениям.</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">Сохранение файла во внешнем хранилище</h2>
+
+<p>Поскольку внешнее хранилище может быть недоступно&mdash; например, если пользователь установил
+хранилище в гнездо на компьютере или извлек из устройства SD-карту, &mdash; перед доступом к тому всегда следует
+проверять его доступность. Состояние внешнего
+хранилища можно узнать, если вызвать {@link android.os.Environment#getExternalStorageState}. Если возвращаемое состояние
+равнозначно {@link android.os.Environment#MEDIA_MOUNTED}, вы сможете выполнять с файлами операции чтения и
+записи. Например, следующие методы будут полезными для определения доступности
+хранилища данных:</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state)) {
+        return true;
+    }
+    return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state) ||
+        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+        return true;
+    }
+    return false;
+}
+</pre>
+
+<p>Хотя внешнее хранилище может быть изменено пользователем и другими приложениями, существует две
+категории файлов, которые в нем можно сохранять:</p>
+
+<dl>
+  <dt>Общедоступные файлы</dt>
+  <dd>Файлы, которые
+должны быть доступны другим приложениям и пользователю. Когда пользователь удаляет ваше приложение,
+эти файлы должны оставаться доступны пользователю.
+  <p>Например, в эту категорию входят снимки, сделанные с помощью вашего приложения, а также другие загружаемые файлы.</p>
+  </dd>
+  <dt>Личные файлы</dt>
+  <dd>Это файлы, принадлежащие вашему приложению. Они должны удаляться при удалении
+вашего приложения пользователем. Хотя технически эти файлы доступны для пользователя и других приложений, поскольку находятся
+во внешнем хранилище, они не имеют никакой ценности для пользователей
+вне вашего приложения. Когда пользователь удаляет ваше приложение, система удаляет
+все файлы из каталога закрытых файлов вашего приложения во внешнем хранилище. 
+  <p>Например, к этой категории относятся дополнительные ресурсы, загруженные приложением, и временные мультимедийные файлы.</p>
+  </dd>
+</dl>
+
+<p>Если вы хотите сохранить публичные файлы во внешнем хранилище, используйте методы
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} для получения {@link java.io.File}, отражающего
+соответствующий каталог во внешнем хранилище. Этот метод принимает аргумент, указывающий
+тип сохраняемого файла и позволяющий включить его в логическую структуру
+с другими публичными файлами, например, {@link android.os.Environment#DIRECTORY_MUSIC} или {@link
+android.os.Environment#DIRECTORY_PICTURES}. Например:</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+    // Get the directory for the user's public pictures directory. 
+    File file = new File(Environment.getExternalStoragePublicDirectory(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+
+<p>Если вы хотите сохранить личные файлы вашего приложения, вы можете получить
+соответствующий каталог посредством, вызвав метод {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} и предоставив ему имя с указанием
+желаемого типа каталога. Каждый каталог, создаваемый таким способом, добавляется в родительский
+каталог, в котором объединены все файлы вашего приложения во внешнем хранилище. При удалении вашего приложения
+пользователем система удаляет этот каталог.</p>
+
+<p>Например, следующий метод позволит вам создать каталог для персонального фотоальбома:</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+    // Get the directory for the app's private pictures directory. 
+    File file = new File(context.getExternalFilesDir(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+<p>Если ни одно из готовых имен подкаталогов не подходит для ваших файлов, вы можете вызвать {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} и передать аргумент {@code null}. При этом
+будет возвращен корневой каталог закрытого каталога вашего приложения во внешнем хранилище.</p>
+
+<p>Следует помнить, что {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+создает каталог внутри каталога, который удаляется при удалении вашего приложения пользователем.
+Если сохраняемые вами файлы должны оставаться доступными после удаления вашего
+приложения пользователем &mdash; например, если ваше приложение работает с камерой, а пользователь хочет сохранить снимки, &mdash; вам
+следует использовать {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}.</p>
+
+
+<p>Вне зависимости от того, используете ли вы {@link
+android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} для общих файлов или
+ link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} для собственных файлов приложения, вы должны использовать имена каталогов, предоставляемые
+постоянными значениями API-интерфейсов, например,
+{@link android.os.Environment#DIRECTORY_PICTURES}. Эти имена каталогов обеспечивают
+правильную обработку файлов системой. Например, сохраненные в {@link
+android.os.Environment#DIRECTORY_RINGTONES} файлы относятся медиа-сканером системы в категорию рингтонов,
+а не музыки.</p>
+
+
+
+
+<h2 id="GetFreeSpace">Запрос доступного пространства</h2>
+
+<p>Если вам заранее известен объем сохраняемых данных, вы можете
+определить наличие достаточного пространства без исключения {@link
+java.io.IOException}, вызвав метод {@link java.io.File#getFreeSpace} или {@link
+java.io.File#getTotalSpace}. Эти методы позволяют узнать текущее доступное пространство и
+общее пространство в хранилище. Эта информация также позволять
+избежать переполнения объема хранилища сверх определенного уровня.</p>
+
+<p>Однако система не гарантирует возможность записи такого же количества байт, как указано 
+в {@link java.io.File#getFreeSpace}.  Если выводимое число на
+несколько мегабайт превышает размер данных, которые вы хотите сохранить, или если файловая система заполнена
+менее, чем на 90%, дальше можно действовать спокойно.
+В противном случае запись в хранилище осуществлять нежелательно.</p>
+
+<p class="note"><strong>Примечание.</strong> Вам необязательно проверять объем доступного места
+перед сохранением файла. Вы можете попробовать сразу записать файл, а затем
+определить событие {@link java.io.IOException}, если оно возникнет. Это может потребоваться,
+если вы точно не знаете, сколько нужно свободного места. Например, если вы
+меняете кодировку файла перед сохранением при конвертации изображения PNG в формат
+JPEG, вы не будете знать размер файла заранее.</p>
+
+
+
+
+<h2 id="DeleteFile">Удаление файла</h2>
+
+<p>Ненужные файлы всегда следует удалять. Наиболее простой способ удалить
+файл – вызвать в открытом файле ссылку {@link java.io.File#delete} на сам этот файл.</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>Если файл сохранен во внутреннем хранилище, вы также можете запросить {@link android.content.Context}, чтобы найти и
+удалить файл посредством вызова {@link android.content.Context#deleteFile deleteFile()}:</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>Примечание.</strong> При удалении пользователем вашего приложения система Android удаляет
+следующие элементы:</p> 
+<ul>
+<li>Все файлы, сохраненные во внутреннем хранилище</li>
+<li>Все файлы, сохраненные во внешнем хранилище с использованием {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
+</ul>
+<p>Однако вам следует регулярно вручную очищать кэш-память, чтобы удалить файлы, созданные с помощью 
+{@link android.content.Context#getCacheDir()}, а также удалять любые
+другие ненужные файлы.</p>
+</div>
+
diff --git a/docs/html-intl/intl/ru/training/basics/data-storage/index.jd b/docs/html-intl/intl/ru/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..064239b
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/data-storage/index.jd
@@ -0,0 +1,57 @@
+page.title=Сохранение данных
+page.tags=хранение данных,файлы,sql,база данных,настройки
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Необходимые знания и компоненты</h2>
+<ul>
+  <li>Android 1.6 (уровень API 4) или более поздняя версия</li>
+  <li>Знакомство с коллекциями значений ключей Map</li>
+  <li>Знакомство с файловым API-интерфейсом ввода/вывода Java</li>
+  <li>Знакомство с базами данных SQL</li>
+</ul>
+
+<h2>См. также:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html">Варианты хранения</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Большинству приложений Android необходимо сохранять данные (даже если это требуется только для сохранения информации о состоянии приложения)
+во время использования {@link android.app.Activity#onPause onPause()}, чтобы текущий прогресс пользователя не был утрачен. Большинству
+приложений, за исключением самых простых, также требуется сохранять настройки пользователя, а некоторым приложениям также требуется управление большими
+объемами информации в файлах и базах данных. В этом учебном курсе вы познакомитесь
+с основными вариантами хранения данных в Android, включая следующие:</p>
+
+<ul>
+    <li>Сохранение пар "ключ-значение" для простых типов данных в общем
+файле настроек.</li>
+    <li>Сохранение произвольных файлов в файловой системе Android</li>
+    <li>Использование баз данных под управлением SQLite</li>
+</ul>
+
+
+<h2>Уроки</h2>
+
+<dl>
+  <dt><b><a href="shared-preferences.html">Сохранение наборов "ключ-значение"</a></b></dt>
+    <dd>В этом уроке вы узнаете, как использовать общий файл настроек для хранения небольших объемов информации
+в парах "ключ-значение".</dd>
+
+  <dt><b><a href="files.html">Сохранение файлов</a></b></dt>
+    <dd>Узнайте, как сохранять простые файлы, например, для хранения длинных последовательностей данных, которые
+обычно читаются по порядку.</dd>
+
+ <dt><b><a href="databases.html">Сохранение данных в базах данных SQL</a></b></dt>
+   <dd>Этот урок содержит информацию об использовании баз данных SQLite для чтения и записи структурированных данных.</dd>
+
+</dl>
diff --git a/docs/html-intl/intl/ru/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/ru/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..61a0037
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,120 @@
+page.title=Сохранение наборов "ключ-значение"
+page.tags=хранение данных
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Содержание этого урока</h2>
+<ol>
+  <li><a href="#GetSharedPreferences">Получение средства обработки SharedPreferences</a></li>
+  <li><a href="#WriteSharedPreference">Запись в общие настройки</a></li>
+  <li><a href="#ReadSharedPreference">Чтение общих настроек</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">Использование общих настроек</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>Если вы хотите сохранить относительно небольшой набор пар "ключ-значение",
+используйте {@link android.content.SharedPreferences} API-интерфейсы.
+Объект {@link android.content.SharedPreferences} указывает на файл,
+содержащий пары "ключ-значение", и предоставляет простые методы для чтения и записи. Управление каждым
+файлом {@link android.content.SharedPreferences} осуществляется
+с помощью инфраструктуры и может быть частным или общим.</p>
+
+<p>На этом уроке вы узнаете, как использовать API-интерфейсы {@link android.content.SharedPreferences} для сохранения и
+получения простых значений.</p>
+
+<p class="note"><strong>Примечание.</strong> API-интерфейсы {@link android.content.SharedPreferences} предназначены
+только для чтения и записи пар "ключ-значение", и их не следует путать с API-интерфейсами
+{@link android.preference.Preference}, которые помогают создать пользовательский интерфейс
+для настроек приложения (хотя они используют {@link android.content.SharedPreferences} в качестве своей
+реализации для сохранения настроек приложения). Информацию об использовании API-интерфейсов {@link
+android.preference.Preference} см. в руководстве <a href="{@docRoot}guide/topics/ui/settings.html">Настройки</a>.</p>
+
+<h2 id="GetSharedPreferences">Получение средства обработки SharedPreferences</h2>
+
+<p>Чтобы создать новый файл общих настроек или получить доступ к существующему,
+нужно вызвать один из двух методов:</p>
+<ul>
+  <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} &mdash; Используйте этот метод, если вам потребуется несколько общих файлов настроек, идентифицируемых
+по имени, указанном в первом параметре. Этот метод можно вызвать из любого
+{@link android.content.Context} в вашем приложении.</li>
+  <li>{@link android.app.Activity#getPreferences(int) getPreferences()} &mdash; Используйте метод из
+{@link android.app.Activity}, если вам нужен
+только один файл общих настроек для операции. Поскольку при этом получается файл общих
+настроек по умолчанию, относящийся к операции, вам не нужно указывать имя.</li>
+</ul>
+
+<p>Например, следующий код выполняется в {@link android.app.Fragment}.
+Он получает доступ к файлу общих настроек,
+идентифицируемому по строке ресурсов {@code R.string.preference_file_key} и открывает его, используя
+закрытый режим так, что данный файл доступен только вашему приложению.</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>Файлу общих настроек следует присваивать имя, которое ваше приложение может уникально
+идентифицировать, например {@code "com.example.myapp.PREFERENCE_FILE_KEY"}.</p>
+
+<p>Если для вашей операции нужен только один файл общих настроек, вы можете использовать метод
+{@link android.app.Activity#getPreferences(int) getPreferences()}:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>Внимание!</strong> Если вы создадите общий файл настроек 
+с {@link android.content.Context#MODE_WORLD_READABLE} или {@link
+android.content.Context#MODE_WORLD_WRITEABLE}, ваши данные будут доступны всем другим приложениям, которым известен идентификатор
+файла.</p>
+
+
+<h2 id="WriteSharedPreference">Записать в общие настройки</h2>
+
+<p>Для записи в файл общих настроек создайте объект {@link
+android.content.SharedPreferences.Editor} посредством вызова {@link
+android.content.SharedPreferences#edit} в {@link android.content.SharedPreferences}.</p>
+
+<p>Передайте ключи и значения, которые хотите записать, с помощью таких методов, как {@link
+android.content.SharedPreferences.Editor#putInt putInt()} и {@link
+android.content.SharedPreferences.Editor#putString putString()}. Затем вызовите {@link
+android.content.SharedPreferences.Editor#commit} для сохранения изменений. Например:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">Чтение общих настроек</h2>
+
+<p>Для получения значений из файла общих настроек следует вызвать такие, методы как {@link
+android.content.SharedPreferences#getInt getInt()} и {@link
+android.content.SharedPreferences#getString getString()}, предоставляя ключ для нужного
+вам значения, а также при желании значение по умолчанию, которое будет выводиться при отсутствии
+ключа. Например:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
+</pre>
+
diff --git a/docs/html-intl/intl/ru/training/basics/intents/filters.jd b/docs/html-intl/intl/ru/training/basics/intents/filters.jd
new file mode 100644
index 0000000..0f5bb31
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/intents/filters.jd
@@ -0,0 +1,236 @@
+page.title=Разрешение другим приложениям на запуск вашей операции
+page.tags=намерения
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>Содержание этого урока</h2>
+<ol>
+  <li><a href="#AddIntentFilter">Добавление фильтра Intent</a></li>
+  <li><a href="#HandleIntent">Обработка объекта Intent в операции</a></li>
+  <li><a href="#ReturnResult">Возврат результата</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Общий доступ к простым данным</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">Общий доступ к файлам</a>
+</ul>
+  </div>
+</div>
+
+<p>Предыдущие два урока были посвящены одной теме – запуску операции вашего приложения
+в другом приложении. Однако если ваше приложение может выполнять операции, полезные другим приложениям,
+его нужно подготовить так, чтобы оно реагировало на запросы других приложений. Представьте, что вы разработали
+приложение для социальных сетей, позволяющее отправлять сообщения и фотографии друзьям пользователя. В этом случае в ваших интересах
+будет поддерживать объекты Intent (намерения) {@link android.content.Intent#ACTION_SEND}, чтобы пользователи могли
+поделиться контентом из другого приложения и запускать ваше приложение для выполнения требуемого действия.</p>
+
+<p>Чтобы разрешить другим приложениям запускать ваши операции, вам нужно добавить в ваш файл манифеста элемент <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a>
+ для соответствующего элемента <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>.</p>
+
+<p>Если ваше приложение установлено на устройстве, система идентифицирует ваши
+фильтры Intent и добавляет информацию во внутренний каталог намерений, поддерживаемый всеми установленными приложениями.
+Когда приложение осуществляет вызов {@link android.app.Activity#startActivity
+startActivity()} или {@link android.app.Activity#startActivityForResult startActivityForResult()}
+с неявными объектами Intent, система определяет, какая операция (или какие операции) может отреагировать на объект
+Intent.</p>
+
+
+
+<h2 id="AddIntentFilter">Добавление фильтра Intent</h2>
+
+<p>Чтобы правильно определить, какие объекты Intent может обрабатывать ваша операция, каждый добавляемый вами фильтр Intent
+должен быть максимально определенным с точки зрения действий и данных, принимаемых
+операцией.</p>
+
+<p>Система может отправить указанный {@link android.content.Intent} в операцию, если у нее имеется
+фильтр Intent, соответствующий следующим критериям объекта {@link android.content.Intent}:</p>
+
+<dl>
+  <dt>Действие</dt>
+    <dd>Строка, называющая действие, которое необходимо выполнить. Обычно это одно из определяемых платформой значений,
+например, {@link android.content.Intent#ACTION_SEND} или {@link android.content.Intent#ACTION_VIEW}.
+    <p>Это следует указать в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code &lt;action&gt;}</a>.
+Указанное в этом элементе значение должно представлять собой полное имя строки действия, а не
+постоянное значение API-интерфейса (см. примеры ниже).</p></dd>
+
+  <dt>Данные</dt>
+    <dd>Описание данных, связанных с объектом Intent.
+    <p>Указывается в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code &lt;data&gt;}</a>. Используя один
+или несколько атрибутов в этом элементе, вы можете указать только тип MIME, только префикс URI,
+только схему URI или из сочетание, а также другие индикаторы типа
+принимаемых данных.</p>
+    <p class="note"><strong>Примечание.</strong> Если вам не нужно декларировать специфику данных
+{@link android.net.Uri}(например, когда операция использует другие виды дополнительных данных вместо
+URI), вы должны указать только атрибут {@code android:mimeType} для декларирования типа
+данных, с которыми работает ваша операция, например, {@code text/plain} или {@code image/jpeg}.</p>
+</dd>
+  <dt>Категория</dt>
+    <dd>Дополнительный способ описания характеристик операции, обрабатывающей объект Intent который обычно связан
+с жестом пользователя или местом запуска. Система поддерживает несколько разных категорий,
+но большинство из них используется редко. Однако по умолчанию все неявные объекты Intent определяются с
+{@link android.content.Intent#CATEGORY_DEFAULT}.
+    <p>Это указывается в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code &lt;category&gt;}</a>
+.</p></dd>
+</dl>
+
+<p>В своем фильтре Intent вы можете декларировать критерии, принимаемые вашей операцией.
+Для этого нужно декларировать каждый из них с соответствующими элементами XML, вложенными в элемент <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a>
+.</p>
+
+<p>Рассмотрим в качестве примера операцию с фильтром Intent, обрабатывающим объект {@link
+android.content.Intent#ACTION_SEND}, для текстовых или графических данных.</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="text/plain"/>
+        &lt;data android:mimeType="image/*"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p>Каждый входящий объект Intent указывает только одно действие и только один тип данных, однако допускается декларирование нескольких
+экземпляров элементов <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a> и <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+&lt;data&gt;}</a> в каждом
+<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a>.</p>
+
+<p>Если поведение любых двух пар действий и данных является взаимоисключающим,
+необходимо создать отдельные фильтры Intent с указанием допустимых действий
+в сочетании с соответствующими типами данных.</p>
+
+<p>Допустим, ваша операция обрабатывает текст и изображения для объектов Intent {@link
+android.content.Intent#ACTION_SEND} и {@link
+android.content.Intent#ACTION_SENDTO}. В этом случае вам необходимо определить два отдельных фильтра Intent
+для двух действий, потому что объект Intent {@link
+android.content.Intent#ACTION_SENDTO} должен использовать данные {@link android.net.Uri} для указания
+адреса получателя с использованием схемы URI {@code send} или {@code sendto}. Например:</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SENDTO"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:scheme="sms" />
+        &lt;data android:scheme="smsto" />
+    &lt;/intent-filter>
+    &lt;!-- filter for sending text or images; accepts SEND action and text or image data -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="image/*"/>
+        &lt;data android:mimeType="text/plain"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>Примечание.</strong> Для получения неявных объектов Intent необходимо включить категорию
+{@link android.content.Intent#CATEGORY_DEFAULT} в фильтр Intent. Методы {@link
+android.app.Activity#startActivity startActivity()} и {@link
+android.app.Activity#startActivityForResult startActivityForResult()} обрабатывают все объекты Intent, как если бы они
+декларировали категорию {@link android.content.Intent#CATEGORY_DEFAULT}. Если вы не декларируете ее
+в своем фильтре Intent, никакие неявные объекты Intent не будут разрешаться в вашу операцию.</p>
+
+<p>Более подробную информацию об отправке и получении объектов {@link android.content.Intent#ACTION_SEND}
+Intent для социальных сетей и обмена данными см. в уроке <a href="{@docRoot}training/sharing/receive.html">Получение простых данных от других приложений</a>.</p>
+
+
+<h2 id="HandleIntent">Обработка объекта Intent в операции</h2>
+
+<p>Чтобы решить, какое действие выполнить в операции, можно прочитать объект {@link
+android.content.Intent}, использованный для ее запуска.</p>
+
+<p>При запуске операции нужно вызвать {@link android.app.Activity#getIntent()} для получения
+{@link android.content.Intent}, запустившего операцию. Это можно сделать в любое время в течение
+жизненного цикла операции, но обычно это делается при ранних обратных вызовах, например,
+{@link android.app.Activity#onCreate onCreate()} или {@link android.app.Activity#onStart()}.</p>
+
+<p>Например:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    setContentView(R.layout.main);
+
+    // Get the intent that started this activity
+    Intent intent = getIntent();
+    Uri data = intent.getData();
+
+    // Figure out what to do based on the intent type
+    if (intent.getType().indexOf("image/") != -1) {
+        // Handle intents with image data ...
+    } else if (intent.getType().equals("text/plain")) {
+        // Handle intents with text ...
+    }
+}
+</pre>
+
+
+<h2 id="ReturnResult">Возврат результата</h2>
+
+<p>Если вы хотите возвратить результат операции, которая вызвала вашу операцию, просто вызовите {@link
+android.app.Activity#setResult(int,Intent) setResult()}, чтобы указать код результата и объект {@link
+android.content.Intent} результата. Когда ваша операция завершается, и пользователь должен вернуться к первоначальной
+операции, вызовите {@link android.app.Activity#finish()}, чтобы закрыть (и уничтожить) вашу операцию. Например:
+</p>
+
+<pre>
+// Create intent to deliver some kind of result data
+Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
+setResult(Activity.RESULT_OK, result);
+finish();
+</pre>
+
+<p>Вместе с результатом всегда нужно указывать код результата. Обычно этот код выглядит так: {@link
+android.app.Activity#RESULT_OK} или {@link android.app.Activity#RESULT_CANCELED}. После этого при
+необходимости можно указать дополнительные данные с помощью {@link android.content.Intent}.</p>
+
+<p class="note"><strong>Примечание.</strong> По умолчанию используется результат {@link
+android.app.Activity#RESULT_CANCELED}. Таким образом, если пользователь нажимает кнопку <em>Назад</em>
+до завершения действия и определения результата, первоначальная операция получает
+результат "Отменено".</p>
+
+<p>Если вам просто нужно возвратить целое число, указывающее один из нескольких вариантов результатов, вы можете установить
+для кода результата любое значение больше 0. Если вы используете код результата для передачи целого числа и вам
+не нужно включать {@link android.content.Intent}, можете вызвать метод {@link
+android.app.Activity#setResult(int) setResult()} и передать только код результата. Например:</p>
+
+<pre>
+setResult(RESULT_COLOR_RED);
+finish();
+</pre>
+
+<p>В этом случае может быть мало возможных результатов, и поэтому код результата представляет собой определяемое
+локально целое число (больше 0). Это хорошо работает, когда вы возвращаете результат операции
+в собственном приложении, поскольку получающая результат операция может ссылаться на общедоступное
+постоянное значение для определения значения кода результата.</p>
+
+<p class="note"><strong>Примечание.</strong> Не нужно проверять, запущена ли ваша операция,
+используя метод {@link
+android.app.Activity#startActivity startActivity()} или {@link
+android.app.Activity#startActivityForResult startActivityForResult()}. Просто вызовите метод {@link
+android.app.Activity#setResult(int,Intent) setResult()}, если запустивший вашу операцию объект Intent может
+ожидать результат. Если исходная операция вызвала метод {@link
+android.app.Activity#startActivityForResult startActivityForResult()}, система передаст
+ей результат, который вы передаете {@link android.app.Activity#setResult(int,Intent) setResult()}. В противном случае
+результат будет проигнорирован.</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ru/training/basics/intents/index.jd b/docs/html-intl/intl/ru/training/basics/intents/index.jd
new file mode 100644
index 0000000..cfb606d
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/intents/index.jd
@@ -0,0 +1,62 @@
+page.title=Взаимодействие с другими приложениями
+page.tags=объекты Intent,операция
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Необходимые знания и компоненты</h2>
+<ul>
+  <li>Базовые знания о жизненном цикле операции (см. раздел <a href="{@docRoot}training/basics/activity-lifecycle/index.html">Управление жизненным циклом
+операции</a>)</li>
+</ul>
+
+
+<h2>См. также:</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Общий доступ к простым данным</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">Общий доступ к файлам</a>
+  <li><a href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">
+Интеграция приложений с объектами Intent (сообщение в блоге)</a></li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Объекты Intent и фильтры
+объектов Intent</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>В приложениях Android обычно имеется несколько <a href="{@docRoot}guide/components/activities.html">операций</a>. Каждая операция отображает
+пользовательский интерфейс, позволяющий пользователю выполнить определенную задачу (например, посмотреть карту или сделать снимок).
+Чтобы обеспечить переход пользователя от одной операции к другой, приложение должно использовать объект {@link
+android.content.Intent} для определения "намерения" приложения что-то сделать. При передаче системе
+{@link android.content.Intent} с помощью такого метода как {@link
+android.app.Activity#startActivity startActivity()} система использует {@link
+android.content.Intent} для идентификации и запуска соответствующего компонента приложения. Использование объектов Intent даже
+позволяет приложению запускать операции, содержащиеся в отдельном приложении.</p>
+
+<p>{@link android.content.Intent} может <em>явно</em> запускать определенный компонент
+(определенный экземпляр {@link android.app.Activity}) или <em>косвенно</em> запускать любой
+компонент, способный выполнить желаемую операцию (например, "сделать снимок").</p>
+
+<p>В этом учебном курсе рассказывается о том, как использовать {@link android.content.Intent} для простого
+взаимодействия с другими приложениями, например для запуска другого приложения, получения результата от этого приложения и обеспечения
+способности приложения реагировать на объекты Intent из других приложений.</p>
+
+<h2>Уроки</h2>
+
+<dl>
+  <dt><b><a href="sending.html">Направление пользователя в другое приложение</a></b></dt>
+  <dd>Вы узнаете, как создавать неявные объекты Intent для запуска других приложений, способных выполнить
+операцию.</dd>
+  <dt><b><a href="result.html">Получение результата операции</a></b></dt>
+  <dd>В этом уроке демонстрируется, как запустить другую операцию и получить ее результат.</dd>
+  <dt><b><a href="filters.html">Разрешение другим приложениям на запуск операции</a></b></dt>
+  <dd>В этом уроке демонстрируется, как разрешить другим приложениям использовать операции вашего приложения за счет определения
+фильтров объектов Intent, которые декларируют неявные намерения, принимаемые вашим приложением.</dd>
+</dl>
+
diff --git a/docs/html-intl/intl/ru/training/basics/intents/result.jd b/docs/html-intl/intl/ru/training/basics/intents/result.jd
new file mode 100644
index 0000000..8ab03d4
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/intents/result.jd
@@ -0,0 +1,178 @@
+page.title=Получение результата операции
+page.tags=объекты Intent
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>Содержание этого урока</h2>
+<ol>
+  <li><a href="#StartActivity">Запуск операции</a></li>
+  <li><a href="#ReceiveResult">Получение результата</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Общий доступ к простым данным</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">Общий доступ к файлам</a>
+</ul>
+
+  </div>
+</div>
+
+<p>Запуск другой операции не обязательно должен быть односторонним действием. Вы можете запустить другую операцию и
+получить от нее результат. Для получения результата нужно вызвать метод {@link android.app.Activity#startActivityForResult
+startActivityForResult()} (вместо {@link android.app.Activity#startActivity
+startActivity()}).</p>
+
+<p>Например, ваше приложение может запустить приложение для камеры и получить в качестве результата фотографию. Также вы
+можете запустить приложение "Люди", чтобы пользователь выбрал в нем
+контакт, и получить контактные данные в качестве результата.</p>
+
+<p>Разумеется, отвечающая операция должна быть способной возвратить результат. При возврате
+результат отправляется как другой объект {@link android.content.Intent}. Ваша операция получает
+его в обратном вызове {@link android.app.Activity#onActivityResult onActivityResult()}.</p>
+
+<p class="note"><strong>Примечание.</strong> Вы можете использовать явные и неявные результаты при вызове 
+{@link android.app.Activity#startActivityForResult startActivityForResult()}. При запуске собственной
+операции для получения результата вы должны использовать явные результаты, чтобы получить
+именно ожидаемый результат.</p>
+
+
+<h2 id="StartActivity">Запуск операции</h2>
+
+<p>В объекте {@link android.content.Intent}, используемом для запуска операции
+для получения результата, нет ничего особенного, однако нужно передать дополнительный целочисленный аргумент методы {@link
+android.app.Activity#startActivityForResult startActivityForResult()}.</p>
+
+<p>Этот целочисленный аргумент представляет собой "код запроса", определяющий ваш запрос. Когда вы получите
+результат {@link android.content.Intent}, обратный вызов использует тот же самый код результата,
+чтобы ваше приложение могло правильно определить результат и понять, как его нужно обработать.</p>
+
+<p>Например, вот так можно запустить операцию, позволяющую пользователю выбрать контакт:</p>
+
+<pre>
+static final int PICK_CONTACT_REQUEST = 1;  // The request code
+...
+private void pickContact() {
+    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
+    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
+    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
+}
+</pre>
+
+
+<h2 id="ReceiveResult">Получение результата</h2>
+
+<p>Когда пользователь завершит последующую операцию и вернется, система вызовет метод вашей операции
+{@link android.app.Activity#onActivityResult onActivityResult()}. Этот метод содержит три
+аргумента:</p>
+
+<ul>
+  <li>Код запроса, переданный вами {@link
+android.app.Activity#startActivityForResult startActivityForResult()}.</li>
+  <li>Полученный в качестве результата код, указанный второй операцией. Или {@link
+android.app.Activity#RESULT_OK}, если операция была успешной, или {@link
+android.app.Activity#RESULT_CANCELED}, если пользователь отказался или операцию не удалось выполнить по какой-либо
+причине.</li>
+  <li>{@link android.content.Intent}, переносящий полученные данные.</li>
+</ul>
+
+<p>Например, результаты для намерения "Выбрать контакт" могут обрабатываться следующим образом:</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // The user picked a contact.
+            // The Intent's data Uri identifies which contact was selected.
+
+            // Do something with the contact here (bigger example below)
+        }
+    }
+}
+</pre>
+
+<p>В этом примере результаты, {@link android.content.Intent} возвращаемые приложениями
+Android Контакты или Люди, предоставляют контент {@link android.net.Uri}, который идентифицирует
+выбранный пользователем контакт.</p>
+
+<p>Для успешной обработки результатов необходимо понимать, каким будет формат этих результатов 
+{@link android.content.Intent}. Это просто, если результат возвращается одной из ваших
+собственных операций. Приложения, входящие в состав платформы Android, имеют собственные прикладные интерфейсы, так что
+вы можете рассчитывать на получение определенных результатов. Например, приложение "Люди" (приложение "Контакты" в старых
+версиях) всегда возвращает результат с URI контента, идентифицирующий выбранный контакт, а приложение
+"Камера" возвращает {@link android.graphics.Bitmap} в дополнительном {@code "data"} (см. урок
+<a href="{@docRoot}training/camera/index.html">Съемка фотографий</a>).</p>
+
+
+<h4>Бонус: Чтение контактных данных</h4>
+
+<p>Приведенный выше код, показывающий как получить результаты из приложения "Люди", не описывает
+детально чтение данных результатов, потому что для этого нужно более
+подробно рассказать о <a href="{@docRoot}guide/topics/providers/content-providers.html">поставщиках
+контента</a>. Если вам все-таки интересно, вот еще код, показывающий как запрашивать
+данные результатов для получения номера телефона выбранного контакта:</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request it is that we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // Get the URI that points to the selected contact
+            Uri contactUri = data.getData();
+            // We only need the NUMBER column, because there will be only one row in the result
+            String[] projection = {Phone.NUMBER};
+
+            // Perform the query on the contact to get the NUMBER column
+            // We don't need a selection or sort order (there's only one result for the given URI)
+            // CAUTION: The query() method should be called from a separate thread to avoid blocking
+            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
+            // Consider using {@link android.content.CursorLoader} to perform the query.
+            Cursor cursor = getContentResolver()
+                    .query(contactUri, projection, null, null, null);
+            cursor.moveToFirst();
+
+            // Retrieve the phone number from the NUMBER column
+            int column = cursor.getColumnIndex(Phone.NUMBER);
+            String number = cursor.getString(column);
+
+            // Do something with the phone number...
+        }
+    }
+}
+</pre>
+
+<p class="note"><strong>Примечание.</strong> До выхода версии Android 2.3 (API-интерфейс уровня 9) для выполнения
+запроса {@link android.provider.ContactsContract.Contacts Contacts Provider} (как
+показанный выше) ваше приложение должно было декларировать разрешение {@link
+android.Manifest.permission#READ_CONTACTS} (см. <a href="{@docRoot}guide/topics/security/security.html">Безопасность и разрешения</a>). Однако,
+начиная с версии Android 2.3, приложение "Контакты/Люди" дает вашему приложению временное
+разрешение на чтение данных Поставщика контактов при выводе результата. Это временное разрешение
+действует только в отношении конкретного запрошенного контакта, так что нельзя запрашивать другой контакт,
+кроме указанного объектом Intent {@link android.net.Uri}, если вы не хотите декларировать разрешение {@link
+android.Manifest.permission#READ_CONTACTS}.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ru/training/basics/intents/sending.jd b/docs/html-intl/intl/ru/training/basics/intents/sending.jd
new file mode 100644
index 0000000..da147ee
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/basics/intents/sending.jd
@@ -0,0 +1,256 @@
+page.title=Направление пользователя в другое приложение
+page.tags=объекты Intent
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>Содержание этого урока</h2>
+<ol>
+  <li><a href="#Build">Создание явного объекта Intent</a></li>
+  <li><a href="#Verify">Проверка наличия приложения для получения объекта Intent</a></li>
+  <li><a href="#StartActivity">Запуск операции с объектом Intent</a></li>
+  <li><a href="#AppChooser">Отображение блока выбора приложения</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">Общий доступ к простым данным</a></li>
+</ul>
+
+  </div>
+</div>
+
+<p>Одна из наиболее важных возможностей системы Android – способность приложений направлять пользователя в другое приложение
+в зависимости от желаемого действия. Например, если
+ваше приложение содержит адрес компании, который нужно показать на карте, вам не нужно встраивать в приложение операцию
+вывода карты. Вместо этого можно создать запрос на просмотр адреса
+с помощью {@link android.content.Intent}. В этом случае система Android запускает приложение,
+которое показывает адрес на карте.</p>
+
+<p>Как объяснялось в первом уроке <a href="{@docRoot}training/basics/firstapp/index.html">Создание
+первого приложения</a>, объекты Intent нужно использовать для навигации между операциями в собственном приложении. Обычно
+для этого используются <em>явные объекты Intent</em>, определяющие точное имя класса
+компонента, который вы хотите запустить. Однако если вы хотите, чтобы действие (например
+просмотр карты) выполнялось отдельным приложением, следует использовать <em>неявный объект Intent</em>.</p>
+
+<p>На этом уроке вы узнаете, как создать неявный объект Intent для определенного действия и использовать его
+для запуска операции, выполняющей действие в другом приложении.</p>
+
+
+
+<h2 id="Build">Создание неявного объекта Intent</h2>
+
+<p>Неявные объекты Intent не декларируют имя класса запускаемого компонента, а декларируют
+выполняемое действие. Действие указывает задачу, которую вы хотите выполнить, например <em>просмотр</em>,
+<em>правка</em>,<em> отправка</em> или <em>получение</em> чего-либо. Объекты Intent часто также содержат данные, ассоциируемые
+с действием, например адрес для просмотра или электронное сообщение для отправки.
+В зависимости от того, какой объект Intent вы хотите создать, данные могут относиться к типу {@link android.net.Uri},
+одному из нескольких других типов данных, либо объекту могут вообще не требоваться данные.</p>
+
+<p>Если ваши данные относятся к типу {@link android.net.Uri}, вы можете использовать простой конструктор {@link
+android.content.Intent#Intent(String,Uri) Intent()} для определения действия и
+данных.</p>
+
+<p>Приведем пример создания объекта Intent для запуска телефонного звонка, в котором данные {@link
+android.net.Uri} используются для указания телефонного номера:</p>
+
+<pre>
+Uri number = Uri.parse("tel:5551234");
+Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
+</pre>
+
+<p>Когда ваше приложение активирует этот объект Intent посредством вызова {@link android.app.Activity#startActivity
+startActivity()}, приложение "Телефон" инициирует звонок на указанный номер телефона.</p>
+
+<p>Вот еще несколько объектов Intent в сочетании с действиями и {@link android.net.Uri} парами
+данных:</p>
+
+<ul>
+  <li>Просмотр карты:
+<pre>
+// Map point based on address
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+// Or map point based on latitude/longitude
+// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+</pre>
+  </li>
+  <li>Просмотр веб-страницы:
+<pre>
+Uri webpage = Uri.parse("http://www.android.com");
+Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
+</pre>
+  </li>
+</ul>
+
+<p>Другие виды неявных объектов Intent требуют дополнительные данные, предоставляющие разные типы данных,
+например строки. Вы можете добавить один или несколько элементов дополнительных данных с помощью разных методов {@link
+android.content.Intent#putExtra(String,String) putExtra()}.</p>
+
+<p>Система по умолчанию определяет соответствующий тип MIME, который требует объект Intent на базе включенных данных
+{@link android.net.Uri}. Если не включать {@link android.net.Uri} в объект
+Intent, обычно нужно использовать {@link android.content.Intent#setType setType()} для указания типа
+данных, связанного с объектом Intent. Установка типа MIME также определяет, какие виды
+действий должен получать объект Intent.</p>
+
+<p>Вот некоторые объекты Intent, добавляющие дополнительные данные для указания желаемого действия:</p>
+
+<ul>
+  <li>Отправка электронного письма с вложением:
+<pre>
+Intent emailIntent = new Intent(Intent.ACTION_SEND);
+// The intent does not have a URI, so declare the "text/plain" MIME type
+emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
+emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
+emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
+emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
+emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
+// You can also attach multiple items by passing an ArrayList of Uris
+</pre>
+  </li>
+  <li>Создание события в календаре:
+<pre>
+Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
+Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
+Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
+calendarIntent.putExtra(Events.TITLE, "Ninja class");
+calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
+</pre>
+<p class="note"><strong>Примечание.</strong> Этот объект Intent для создания события в календаре поддерживается только
+API-интерфейсами уровня 14 и выше.</p>
+  </li>
+</ul>
+
+<p class="note"><strong>Примечание.</strong> Очень важно определять объекты {@link
+android.content.Intent} как можно более конкретно. Например, если вы хотите вывести изображение
+с помощью объекта Intent {@link android.content.Intent#ACTION_VIEW}, вам следует указать тип MIME
+{@code image/*}. Это не даст объекту Intent запускать приложения для просмотра других типов
+данных (например картографические приложения).</p>
+
+
+
+<h2 id="Verify">Проверка наличия приложения для получения объекта Intent</h2>
+
+<p>Хотя платформа Android гарантирует выполнение объектов Intent во
+встроенных приложениях (таких как "Телефон", "Электронная почта" или "Календарь"), перед активацией объекта Intent всегда следует добавлять шаг
+проверки.</p>
+
+<p class="caution"><strong>Внимание!</strong> Если вы активируете объект Intent, а на устройстве не
+будет приложения, способного его обработать, ваше приложение закроется с ошибкой.</p>
+
+<p>Чтобы убедиться в наличии операции, реагирующей на объект Intent, вызовите метод {@link
+android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} для получения списка
+операций, способных обработать ваш {@link android.content.Intent}. Если полученный в результате список {@link
+java.util.List} не пустой, вы можете безопасно использовать данный объект Intent. Например:</p>
+
+<pre>
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
+        PackageManager.MATCH_DEFAULT_ONLY);
+boolean isIntentSafe = activities.size() > 0;
+</pre>
+
+<p>Если<code>isIntentSafe</code> имеет значение <code>true</code>, то хотя бы одно приложение отреагирует на объект
+Intent. Если же он имеет значение <code>false</code>, то на устройстве нет приложений для обработки данного объекта Intent.</p>
+
+<p class="note"><strong>Примечание.</strong> Такую проверку следует выполнять при первом
+запуске операции на случай, если понадобится отключить функцию, обрабатывающую объект Intent, до того, как пользователь попытается использовать
+ее. Если вам известно определенное приложение, которое может обработать данный объект Intent, вы можете указать ссылку,
+по которой пользователь может загрузить приложение (посмотрите, как <a href="{@docRoot}distribute/tools/promote/linking.html">добавить ссылку на свой продукт в Google
+Play</a>).</p>
+
+
+<h2 id="StartActivity">Запуск операции с объектом Intent</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intents-choice.png" alt="" />
+  <p class="img-caption"><strong>Рисунок 1.</strong> Пример диалогового окна выбора,
+которое отображается, если объект Intent могут обработать разные приложения.</p>
+</div>
+
+<p>После создания {@link android.content.Intent} и установки дополнительной информации вызовите {@link
+android.app.Activity#startActivity startActivity()} для отправки в систему. Если система
+идентифицирует несколько операций, способных обработать объект Intent, она выводит для пользователя диалоговое окно
+выбора приложения, как показано на рисунке 1. Если объект Intent может быть обработан
+только одной операцией, система сразу же запускает ее.</p>
+
+<pre>
+startActivity(intent);
+</pre>
+
+<p>Вот полный пример, показывающий, как создать объект Intent для просмотра карты, убедиться в наличии
+приложения для его обработки и запустить это приложение:</p>
+
+<pre>
+// Build the intent
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+
+// Verify it resolves
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List&lt;ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
+boolean isIntentSafe = activities.size() > 0;
+
+// Start an activity if it's safe
+if (isIntentSafe) {
+    startActivity(mapIntent);
+}
+</pre>
+
+
+
+<h2 id="AppChooser">Отображение блока выбора приложения</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="" />
+  <p class="img-caption"><strong>Рисунок 2</strong>. Диалог выбора.</p>
+</div>
+
+<p>Обратите внимание, что при запуске операции посредством передачи {@link android.content.Intent} в {@link
+android.app.Activity#startActivity startActivity()} и наличии нескольких приложений, реагирующих на
+объект Intent, пользователь может выбрать, какое из этих приложений использовать по умолчанию (для этого нужно установить флажок в нижней
+части диалогового окна; см. рисунок 1). Это удобно при выполнении действия, для которого
+пользователь обычно хочет всегда использовать одно и то же приложение, например при открытии веб-страницы (пользователи
+обычно используют один и тот же браузер) или создании снимка (пользователи обычно предпочитают одно и то же приложение камеры).</p>
+
+<p>Однако бывает так, что выполняемое действие может быть обработано несколькими приложениями, и пользователь
+каждый раз может использовать разные приложения &mdash; например, действие "Поделиться", для которого пользователи могут использовать разные
+приложения, &mdash; и в этом случае ваше приложение должно отображать диалоговое окно выбора приложения,
+как показано на рисунке 2. В диалоговом окне
+выбора приложения пользователь должен при каждом запуске выбирать, какое приложение использовать для действия (пользователь не
+может выбрать приложение по умолчанию).</p>
+
+<p>Чтобы отобразить блок выбора приложения, создайте {@link android.content.Intent} с помощью {@link
+android.content.Intent#createChooser createChooser()} и передайте его {@link
+android.app.Activity#startActivity startActivity()}. Например:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+...
+
+// Always use string resources for UI text.
+// This says something like "Share this photo with"
+String title = getResources().getString(R.string.chooser_title);
+// Create intent to show chooser
+Intent chooser = Intent.createChooser(intent, title);
+
+// Verify the intent will resolve to at least one activity
+if (intent.resolveActivity(getPackageManager()) != null) {
+    startActivity(chooser);
+}
+</pre>
+
+<p>В результате отобразится диалоговое окно со списком приложений, которые могут отреагировать на объект Intent, переданный методу {@link
+android.content.Intent#createChooser createChooser()} и используют указанный текст в качестве
+заголовка диалога.</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/design/get-started/principles.jd b/docs/html-intl/intl/zh-cn/design/get-started/principles.jd
new file mode 100644
index 0000000..fbb46c9
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Android 设计原则
+@jd:body
+
+<p>以下设计原则由 Android用户体验团队秉承用户利益至上的理念而制定。他们还会继续为 Android 开发者和设计者针对不同类型的设备制定更详细的设计准则。
+
+
+
+</p>
+
+<p>
+在您应用自己的创意和设计思路时,请考虑这些原则,
+切勿固执己见。
+</p>
+
+<h2 id="enchant-me">让我着迷</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="delight-me">以意想不到的方式让我眼前一亮</h4>
+<p>漂亮的界面、精心布置的动画,或恰到好处的声效,都会带来快乐的体验。
+精细的效果能产生一种轻松的氛围,让人感觉自己拥有强大的力量。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="real-objects-more-fun">实际对象要比按钮和菜单更有趣</h4>
+<p>让用户可以直接触摸和操作您应用中的对象,让执行任务更轻松,让用户更满意。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-it-mine">我的应用我做主</h4>
+<p>用户喜欢添加个性化手势,因为这样会让他们觉得更顺手并且一切尽在他们的掌控之中。提供感性、美观的默认手势,但也要考虑到趣味性,不要让可选的定制手势妨碍主要任务的操作。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="get-to-know-me">让应用了解我</h4>
+<p>逐渐了解用户的偏好。不要让用户反复做出相同的选择,将之前的选择列作快捷选择。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2 id="simplify-my-life">让我的生活更轻松</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="keep-it-brief">语言简洁</h4>
+<p>使用简单的字词组成简短的句子。用户往往会跳过冗长的句子。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="pictures-faster-than-words">图片比文字更直观</h4>
+<p>考虑以图示意。它们会吸引用户的注意力,并且比文字更高效。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="decide-for-me">为我决定,但最终由我做主</h4>
+<p>先提供您心目中的最佳选择,而不是先进行询问。太多的选择和决策会让人不悦。
+只是在您的选择可能不当时,才赋予用户“撤消”的权利。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="only-show-when-i-need-it">仅在我需要时显示我所需要的</h4>
+<p>如果一次性看到过多内容,用户会感到无所适从。将任务和信息细分为更小、更容易接受的片段。
+隐藏当前不必要的选项,并在用户操作期间提供指导。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="always-know-where-i-am">我应该始终清楚自己在哪里</h4>
+<p>让用户感到轻车熟路。为应用中的不同场景赋予不同的外观,使用过渡效果来展现屏幕之间的关系。
+提供任务进度反馈。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="never-lose-my-stuff">决不能让我的成果付诸东流</h4>
+<p>务必保存好用户耗费花时间创造的内容,让他们能随处访问这些内容。跨手机、平板电脑和计算机等平台,记住设置、个人手势和创作内容,
+让应用升级变得无比简单。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="looks-same-should-act-same">如果看上去一样,其行为也应当相同</h4>
+<p>通过视觉上的显著差异(而不是微妙差异)帮助用户区分不同的功能。避免使用固定模式,那样会导致外观相似的场景中,用户执行同样的输入,应用却给出不同的响应。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="interrupt-only-if-important">只在确实对我很重要时才打断我</h4>
+<p>就像优秀的个人助理一样,不要让上司被一些无关紧要的琐事打扰。用户希望专注于核心任务,除非确实非常重要并且情况紧急,否则,打断用户会让人烦不胜烦。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2 id="make-me-amazing">给我惊喜</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="give-me-tricks">到处为我提供有用的诀窍</h4>
+<p>如果能自己摸索出花样来,用户总是很开心的。利用直观的图案以及其他 Android 应用中常见的习惯手势,让您的应用更容易学习。
+例如,滑动手势就是一种不错的导航快捷手势。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="its-not-my-fault">不是我的错</h4>
+<p>在提醒用户改正错误时要礼貌。他们希望在使用您的应用时感觉自己很聪明。如果用户操作出错,请提供清晰的恢复说明,而不要让他们咀嚼详细的技术信息。如果您能在后台修复错误,那当然更好。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="sprinkle-encouragement">多多鼓励</h4>
+<p>将复杂的任务分解为可轻松完成的小步骤。对操作提供反馈,哪怕只是微弱的灯光,也聊胜于无。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="do-heavy-lifting-for-me">为我处理繁重事务</h4>
+<p>通过让新手完成他们认为自己不可能做到的事情,让他们感觉自己就像一名行家。例如,通过提供融合多种照片特效的快捷操作,只需几步,就可以让业余照片达到惊艳的效果。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-important-things-fast">让重要事项能更快地完成</h4>
+<p>不是所有操作都同样重要。确定应用中哪些功能是最重要的,将这些功能放在便于找到和使用的地方,例如相机的快门按钮,或者音乐播放器中的暂停按钮。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/zh-cn/design/material/index.jd b/docs/html-intl/intl/zh-cn/design/material/index.jd
new file mode 100644
index 0000000..78e6d38
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=材料设计
+page.tags=Material, design
+page.type=设计
+page.image=design/material/images/MaterialLight.png
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+  <div>
+    <h3>开发者文档</h3>
+    <p>使用材料设计创建应用</p>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+    <h3>视频</h3>
+    <p>材料设计简介</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+    <h3>视频</h3>
+    <p>纸张和墨水:相关材料</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+    <h3>视频</h3>
+    <p>Google I/O 应用中的材料设计</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">材料设计是专为设计适用于多个平台和设备的视觉、运动与互动效果而制定的综合指南。
+Android 现在已支持材料设计应用。
+如果要在您的 Android 应用中使用材料设计,请遵循<a href="http://www.google.com/design/spec">材料设计规范</a>内定义的指导方针,并使用 Android 5.0(API 级别 21)及以上版本所提供的新组件和功能。
+
+</p>
+
+<p>Android 为您提供了以下元素来构建材料设计应用:</p>
+
+<ul>
+  <li>全新的风格主题</li>
+  <li>用于设计复杂视图的全新小工具</li>
+  <li>用于自定义阴影和动画的全新 API</li>
+</ul>
+
+<p>有关在 Android 上实现材料设计的详细信息,请参阅<a href="{@docRoot}training/material/index.html">创建材料设计应用</a>。
+</p>
+
+
+<h3>材料主题</h3>
+
+<p>材料主题提供了新的应用样式和系统小工具,让您能够为触摸反馈以及活动转换设置配色工具以及默认动画。
+</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">深色材料主题</p>
+  </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">浅色材料主题</p>
+  </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/theme.html">使用材料主题
+</a>。</p>
+
+
+<h3>列表和卡片</h3>
+
+<p>Android 提供了两个全新的小工具,用于显示采用材料设计样式和动画的卡片和列表:
+</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+  <p>全新的 <code>RecyclerView</code> 小工具是 <code>ListView</code>
+ 的可插入版本,支持不同的布局类型,并且具有更高性能。</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+  <p>全新的 <code>CardView</code> 小工具可让您展示卡片内的重要信息,并且有统一的观感。
+</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/lists-cards.html">创建列表和卡片</a>。
+</p>
+
+
+<h3>视图阴影</h3>
+
+<p>除了 X 和 Y 属性之外,Android 中的视图现在还提供了 Z
+属性。这一新属性用于展现视图的高度,从而确定:</p>
+
+<ul>
+<li>阴影的大小:Z 值越高的视图投射的阴影越长。</li>
+<li>绘制顺序:Z 值较高的视图会显示在其他视图的上方。</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+  <div class="framed-nexus5-port-span-5">
+  <video class="play-on-hover" autoplay>
+    <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+  </video>
+  </div>
+  <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+    <em>如果要重新播放影片,请点击设备屏幕</em>
+  </div>
+</div>
+
+<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/shadows-clipping.html">定义阴影与裁剪视图</a>。
+</p>
+
+
+<h3>动画</h3>
+
+<p>动画 API 让您可为 UI 控件中的触摸反馈、视图状态更改以及活动转换创建自定义动画。
+</p>
+
+<p>这些 API 的作用是:</p>
+
+<ul>
+<li style="margin-bottom:15px">
+使用<strong>触摸反馈</strong>动画响应视图中的触摸事件。
+</li>
+<li style="margin-bottom:15px">
+使用<strong>循环显示</strong>动画隐藏和显示视图。
+</li>
+<li style="margin-bottom:15px">
+使用自定义<strong>活动转换</strong>动画切换活动。
+</li>
+<li style="margin-bottom:15px">
+使用<strong>曲线运动</strong>创建更自然的动画。
+</li>
+<li style="margin-bottom:15px">
+使用<strong>视图状态更改</strong>动画以动画形式呈现一个或多个视图属性的更改。
+</li>
+<li style="margin-bottom:15px">
+在视图状态更改期间以<strong>可绘制状态列表</strong>显示动画。
+</li>
+</ul>
+
+<p>触摸反馈动画内建于数个标准视图(例如按钮)中。全新的 API让您可以自定义这些动画并将其添加至自己的自定义视图中。
+</p>
+
+<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/animations.html">定义自定义动画</a>。
+</p>
+
+
+<h3>可绘制对象</h3>
+
+<p>下列可绘制对象的新功能将帮助您实现材料设计应用:</p>
+
+<ul>
+<li><strong>可绘制矢量</strong>可在不影响清晰度的情况下进行缩放,非常适合单色应用内图标。
+</li>
+<li><strong>可绘制底色</strong>可让您将位图定义为 alpha 蒙板,并在运行时为其着色。
+</li>
+<li><strong>颜色提取</strong>可让您从位图图像自动提取突出色彩。
+</li>
+</ul>
+
+<p>如需了解详细信息,请参阅<a href="{@docRoot}training/material/drawables.html">使用可绘制内容</a>。
+</p>
diff --git a/docs/html-intl/intl/zh-cn/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/zh-cn/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..aa4ae1f
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=确认和确知
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>在某些情况下,当用户在您的应用中调用某个操作时,最好使用文字内容来<em>确认</em>或<em>确知</em>该操作。</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+    <p><strong>确认</strong>是要求用户确认自己确实希望执行刚才所调用的操作。在某些情况下,确认随需要用户考虑的操作所相关的警告或关键信息一起显示。</p>
+  </div>
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+    <p><strong>确知</strong>就是显示一段文字信息,让用户知道自己刚才调用的操作已经完成。这将消除系统正在执行的隐式操作的不确定性。在某些情况下,确知随撤消操作的选项一起显示。</p>
+  </div>
+</div>
+
+<p>以上述方式通知用户有助于减少用户对已发生或即将发生的事情的不确定性。确认或确知还可以有效防止用户犯下可能让自己后悔的错误。</p>
+
+<h2>何时需要确认或确知用户操作</h2>
+<p>并非所有操作都一定要确认或确知。请使用以下流程图指导自己的设计决策。</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>确认</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>示例:Google Play 书籍</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+    <p>在该示例中,用户要求从其 Google Play 书架中删除一本书。系统显示了一条<a href="{@docRoot}design/building-blocks/dialogs.html#alerts">警告</a>来要求确认该操作,因为用户必须知道,一旦删除,该书籍将无法继续在任何设备上使用。</p>
+    <p>在设计确认对话框时,请使用反映所请求操作的文字作为标题,使标题更有意义。</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>示例:Android Beam</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+    <p>确认不一定要显示在有两个按钮的警告中。在启动 Android Beam 后,系统提示用户触摸要分享的内容(本例中是一张照片)。如果他们决定不继续操作,只需移开手机即可。</p>
+  </div>
+</div>
+
+<h2>确知</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>示例:已保存中断的 Gmail 草稿</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+    <p>在本例中,如果用户在 Gmail 撰写邮件屏幕中向后或向上导航,可能会发生一些意外情况,此时会自动保存当前草稿。Toast 形式的确知会明确告知这一点。它会在几秒钟后消失。</p>
+    <p>在这种情况下不能执行撤消操作,因为保存是由应用发起的,而不是由用户执行的。通过导航至草稿列表,可迅速方便地恢复邮件。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+    <h4>示例:已删除 Gmail 会话</h4>
+    <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+    <p>在用户从 Gmail 中的列表删除某个会话后,会出现带撤消选项的确知。确知消息会一直等到用户采取无关操作才会消失,例如滚动列表。</p>
+  </div>
+</div>
+
+<h2>无需确认或确知</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>示例:+1 操作</h4>
+    <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+    <p><strong>无需确认</strong>。如果用户意外触摸 +1 按钮,不会有什么大问题。他们只需再次触摸该按钮,撤消该操作即可。</p>
+    <p><strong>无需确知</strong>。用户将看到 +1 按钮弹起并变红。这是非常明确的信号。</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>示例:从主屏幕删除应用</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+    <p><strong>无需确认</strong>。这属于有意操作:用户必须将项目拖放到相对较大并且独立的目标上。因此,很难发生意外。但是如果用户反悔决定,只需数秒钟时间即可复原。</p>
+    <p><strong>无需确知</strong>。用户知道该应用会从主屏幕上消失,因为是他们将其拖走而使其消失的。</p>
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/zh-cn/design/patterns/navigation.jd b/docs/html-intl/intl/zh-cn/design/patterns/navigation.jd
new file mode 100644
index 0000000..339a2c5
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=使用返回和向上导航
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+  <div>
+    <h3>开发者文档</h3>
+    <p>实现有效导航</p>
+  </div>
+</a>
+
+<p itemprop="description">一致的导航操作是整体用户体验的重要组成部分。如果基本的导航方法都不能保持一致,甚至让用户意想不到的话,恐怕没有比这更让人沮丧的事情了。
+Android 3.0对全局导航行为做出了重大改变。
+对用户来说,认真遵照“返回”和“向上”的指导准则可让应用的导航更可靠、更符合预期。
+</p>
+<p>Android 2.3 及更早的版本使用<em>返回</em>按钮来支持应用内的导航。在 Android 3.0 中引入操作栏后,出现了第二种导航机制:即<em>向上</em>按钮,由应用图标和左向箭头构成。
+
+</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">向上和返回</h2>
+
+<p>“向上”按钮用于根据屏幕之间的层级关系在应用中导航。
+例如,如果屏幕 A 显示项目列表,并且选择某个项目会调出屏幕 B(该屏幕显示项目的更多详情),则屏幕 B 应提供可返回屏幕 A 的“向上”按钮。
+
+</p>
+<p>如果屏幕是应用中层级最高的屏幕(即应用的主屏幕),则无需提供向上按钮。
+</p>
+
+<p>系统的“返回”按钮用于按照用户最近操作的屏幕历史记录,按时间逆序导航。
+它通常基于屏幕之间的时间关系,而非应用的层级关系。
+</p>
+
+<p>如果之前查看的屏幕也是当前屏幕的父级项,按下“返回”按钮的作用跟按下“向上”按钮一样 &mdash; 这种情况很常见。
+
+但是,“向上”按钮可确保用户留在应用内,与此不同的是,“返回”按钮可让用户返回到主屏幕,甚至返回不同的应用。
+</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>“返回”按钮还支持与屏幕间导航并无直接关联的一些行为:
+</p>
+<ul>
+<li>清除浮动窗口(对话框、弹出窗口)</li>
+<li>清除上下文操作栏,并取消高亮显示所选项目</li>
+<li>隐藏屏幕键盘 (IME)</li>
+</ul>
+<h2 id="within-app">应用内导航</h2>
+
+<h4>通过多个入口点导航屏幕</h4>
+<p>有时,某个屏幕在应用层级中的位置并不固定,可以从多个入口点抵达 &mdash; 例如可从应用中的其他任何屏幕抵达设置屏幕。在这种情况下,选择“向上”按钮会返回到引用屏幕,其行为跟“返回”按钮相同。
+
+
+</p>
+<h4>更改屏幕中的视图</h4>
+<p>更改屏幕的视图选项不会更改“向上”或“返回”的行为:屏幕仍然位于应用层级中的同一位置,并且不会创建新的导航历史记录。
+</p>
+<p>此类视图更改的示例包括:</p>
+<ul>
+<li>使用选项卡和/或左右滑动切换视图</li>
+<li>使用下拉菜单(即折叠的选项卡)切换视图</li>
+<li>筛选列表</li>
+<li>列表排序</li>
+<li>更改显示特性(例如缩放)</li>
+</ul>
+<h4>在同级屏幕之间导航</h4>
+<p>如果您的应用支持从项目列表导航至其中某个项目的详情视图,通常最好支持从该项目导航到列表中该项目之前或之后的另一项目。
+
+例如,在 Gmail 中,只需在会话中向左或向右滑动,即可轻松查看同一收件箱中较新或较旧的会话。
+在某个屏幕内更改视图这样的导航不会改变“向上”或“返回”的行为。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>然而,当在多个彼此相关、但并未通过引用列表绑定在一起的详情视图之间浏览时,例如,在 Play 商店中同一开发商开发的多款应用或者同一艺术家推出的多张专辑之间切换浏览时,会发生值得注意的例外情况。
+
+在这些情况下,跟踪每个链接不会创建历史记录,这就导致点击“返回”按钮时会逐一显示之前查看过的每个屏幕。
+点击“向上”按钮则会直接绕过这些相关的屏幕并导航至最近查看的容器屏幕。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>您可以根据详情视图的实际情况让“向上”按钮的行为更加智能。
+将上述 Play 商店示例进一步展开,设想用户从查看过的上一本图书导航至电影改编详情。
+在这种情况下,“向上”按钮可返回至用户之前导航时未经历过的容器(电影)。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">通过主屏幕小工具和通知进入您的应用</h2>
+
+<p>使用主屏幕小工具或通知,您可以帮助用户直接导航至应用中的深层屏幕。
+例如,Gmail 的收件箱小工具和新消息通知都可绕过收件箱屏幕,让用户直接进入会话视图。
+</p>
+
+<p>对于这两种情况,请按下述说明处理“向上”按钮:</p>
+
+<ul>
+<li><em>如果目的屏幕通常通过应用</em>中的某个特定屏幕抵达,“向上”按钮应导航至该屏幕。
+</li>
+<li><em>否则</em>,“向上”按钮应导航至应用的顶级屏幕(“主屏幕”)。</li>
+</ul>
+
+<p>对于“返回”按钮,您应将指向应用顶级屏幕的完整向上导航路径插入到任务的返回栈,从而让导航更具预见性。
+这样,如果用户忘记了之前是如何进入您的应用的,则可以在退出之前导航至应用的顶级屏幕。
+
+</p>
+
+<p>例如,Gmail 的主屏幕小工具有一个按钮可以让您直接进入写邮件屏幕。
+在写邮件屏幕上使用“向上”或“返回”可让用户进入“收件箱”,而在收件箱屏幕上使用“返回”则可回到主屏幕。
+</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>间接通知</h4>
+
+<p>如果您的应用需要同时提供关于多个事件的信息,可使用一条通知将用户引导至某个间隙屏幕。
+该屏幕将这些事件汇总,并为用户提供深度导航应用的路径。这种样式的通知称为<em>间接通知</em>。
+
+</p>
+
+<p>与标准(直接)通知不同,在间接通知的间隙屏幕上按下“返回”会让用户回到触发通知的点 &mdash; 不会在返回栈中插入额外的屏幕。
+
+一旦用户从应用的间隙屏幕进入应用的更深层级,则“向上”和“返回”按钮的行为就与用于标准通知时相同,如上所述:在应用内部导航,而非返回至间隙屏幕。
+
+</p>
+
+<p>例如,假设 Gmail 中的用户收到来自日历的间接通知。触摸该通知会打开间隙屏幕,该屏幕会显示数个不同事件的提醒。
+
+在间隙屏幕上触摸“返回”会让用户回到 Gmail。触摸特定事件会让用户离开间隙屏幕并进入完整的日历应用,以显示事件的详情。
+
+在事件详情屏幕上,使用“向上”和“返回”可导航至日历的顶级视图。</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>弹出通知</h4>
+
+<p><em>弹出通知</em>会绕过抽屉式通知栏,直接显示在用户面前。
+一般很少使用这种通知,<strong>仅在需要即时响应并且有必要中断用户当前操作时使用</strong>。
+例如,Talk 使用这种方式来提醒用户收到了好友加入视频聊天的邀请,因为该邀请将在几秒之后自动过期。
+
+</p>
+
+<p>从导航行为的角度来看,弹出通知会密切跟踪间接通知的间隙屏幕的行为。
+使用“返回”会清除弹出通知。如果用户从弹出通知导航至通知应用中,则“向上”和“返回”会依照标准通知的规则在应用内导航。
+
+</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">在应用之间导航</h2>
+
+<p>Android 系统的一个基本优势在于能够让应用相互激活,这样用户就可以直接从一个应用导航到另一个应用。
+例如,需要获取照片的应用可激活相机应用,后者可将照片返回给前者。这对于开发者和用户来说都极为有利,开发者可以方便地利用来自其他应用的代码,而用户则在执行常用操作时可以获得一致的体验。
+
+
+
+</p>
+
+<p>为了理解应用到应用的导航,必须理解下面探讨的 Android 框架行为
+。</p>
+
+<h4>活动、任务和意向</h4>
+
+<p>在 Android 中,<strong>活动</strong>是一个应用组件,用于定义信息屏幕以及用户可执行的所有相关操作。
+您的应用是活动的集合,由您创建的活动以及从其他应用重用的活动构成。
+</p>
+
+<p><strong>任务</strong>是用户为达成某个目标而执行的活动序列。一个
+任务可以只利用一个应用的活动,也可以利用来自多个不同应用的活动。
+</p>
+
+<p><strong>意向</strong>是应用的一种机制,用于发出信号以表明需要另一个应用的辅助才能执行某个操作。
+应用的活动可指示其可响应哪些意向。
+对于诸如“分享”这样的常用意向,用户可能安装有许多可执行该请求的应用。
+</p>
+
+<h4>示例:在应用之间导航以支持分享</h4>
+
+<p>要了解如何结合使用活动、任务和意向,可以考虑一个应用如何让用户通过使用另一应用来分享内容的例子。例如,从主屏幕启动 Play 商店应用可启动新任务 A(参见下图)。
+
+在 Play 商店中导航并触摸某本促销图书来查看其详情之后,用户会停留在该任务中并通过添加活动来扩展该任务。
+触发“分享”操作会通过一个对话框来提示用户选择活动,该对话框中会列出来自不同应用、之前已注册用于处理“分享”意向的每一种活动。
+
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>如果用户选择通过 Gmail 分享,则会以延续任务 A 的形式添加 Gmail 的写邮件活动 &mdash; 而不会创建新任务。
+如果 Gmail 在后台还运行有自己的任务,该任务不会受影响。
+</p>
+
+<p>在写邮件活动中,发送邮件或触摸“返回”按钮会让用户回到图书详情活动。
+之后继续触摸“返回”会在 Play 商店中继续回退,直至抵达主屏幕。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>尽管如此,用户可通过在写邮件活动中触摸“向上”按钮表明其希望留在 Gmail 中。
+此时会显示 Gmail 的会话列表活动,并为其创建新任务 B。新任务都始于主屏幕,因此从会话列表触摸“返回”按钮,始终会回到主屏幕。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>任务 A 保持在后台运行,用户可稍后回到该任务(例如通过“最近使用的应用”屏幕)。
+如果 Gmail 在后台还运行有自己的任务,该任务会被任务 B 取代 &mdash; 之前的上下文会被丢弃,以使用户达成新目标。
+</p>
+
+<p>如果您的应用经过注册,以使用应用中的深层活动来处理意向,可参阅<a href="#into-your-app">通过主屏幕小工具和通知进入您的应用</a>,获得有关如何指定“向上”导航行为的指导。
+
+</p>
diff --git a/docs/html-intl/intl/zh-cn/design/patterns/notifications.jd b/docs/html-intl/intl/zh-cn/design/patterns/notifications.jd
new file mode 100644
index 0000000..57e02e4
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/design/patterns/notifications.jd
@@ -0,0 +1,872 @@
+page.title=通知
+page.tags="notifications","design","L"
+@jd:body
+
+  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
+  <div>
+    <h3>开发者文档</h3>
+    <p>通知用户</p>
+  </div>
+</a>
+
+<a class="notice-designers" href="notifications_k.html">
+  <div>
+    <h3>Android 4.4 及更低版本中的通知</h3>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
+<div>
+    <h3>视频</h3>
+    <p>DevBytes:Android L 开发者预览当中的通知</p>
+</div>
+</a>
+
+<style>
+  .col-5, .col-6, .col-7 {
+    margin-left:0px;
+  }
+</style>
+
+<p>通知系统可让用户随时了解应用中的相关和即时事件,例如来自好友的新聊天信息或日历事件。可将通知视作新闻频道,在重要的事件发生时提醒用户注意,或者当作日志,在用户未注意时记录事件&mdash;可在用户的所有 Android 设备上按需同步。
+
+
+
+
+
+</p>
+
+<h4 id="New"><strong>Android 5.0 新增内容</strong></h4>
+
+<p>在 Android 5.0 中,通知在结构、外观和功能方面获得了重要的更新:
+</p>
+
+<ul>
+  <li>通知在外观上发生了更改,与新的材料设计主题保持一致。
+</li>
+  <li> 通知现在可以在设备锁定屏幕上使用,而敏感信息仍然可以隐藏于背后。
+
+</li>
+  <li>设备在使用时收到的高优先级通知现在采用名为浮动通知的新格式。
+</li>
+  <li>云同步通知:在一台 Android 设备上清除通知,则在其他设备上也会将其清除。
+
+</li>
+</ul>
+
+<p class="note"><strong>注:</strong>该版本 Android 的通知设计与之前的版本大不相同。
+
+有关之前版本通知设计的信息,请参阅<a href="./notifications_k.html"> Android 4.4 及更低版本中的通知</a>。
+</p>
+
+<h2 id="Anatomy">通知详解</h2>
+
+<p>本部分介绍通知的基本组成部分,及其在不同类型设备上显示的方式。
+</p>
+
+<h3 id="BaseLayout">基本布局</h3>
+
+<p>所有通知至少要包括一个基本布局,包括:</p>
+
+<ul>
+  <li> 通知的<strong>图标</strong>。图标以符号形式表示来源应用。如果应用生成多个类型的通知,它也可用于指明通知类型。
+
+
+</li>
+  <li> 通知<strong>标题</strong>以及其他
+<strong>文本</strong>。</li>
+  <li> <strong>时间戳</strong>。</li>
+</ul>
+
+<p>利用 {@link android.app.Notification.Builder Notification.Builder}为之前版本平台创建的通知,其外观和行为方式与在 Android
+5.0 中完全相同,唯一的变动在于系统为您处理通知的方式存在细微的样式变动。
+
+如需了解之前 Android 版本通知设计的详细信息,请参阅<a href="./notifications_k.html"> Android 4.4 及更低版本中的通知</a>。
+
+</p></p>
+
+
+    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
+
+
+<div style="clear:both;margin-top:20px">
+      <p class="img-caption">
+      手持设备通知(左)和穿戴设备(右)上同一通知的基本布局,带有用户照片和通知图标
+
+    </p>
+  </div>
+
+<h3 id="ExpandedLayouts">展开布局</h3>
+
+
+<p>您可以选择让应用的通知提供多少信息详情。
+它们可显示消息的前几行,也可以显示更大的预览图像。
+额外的信息可以为用户提供更多上下文,并且,在某些情况下,可能允许用户完整阅读消息。
+
+
+用户可进行两指缩放或执行单指滑移,在紧凑和展开布局之间切换。
+
+
+ 对于单一事件通知,Android 提供了三种展开布局模板(文本、收件箱和图像),供您在应用中使用。
+
+下图展示单一事件通知在手持设备(左)和穿戴式设备(右)上的外观。
+
+</p>
+
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
+    alt="" width="311px" height;="450px" />
+
+<h3 id="actions" style="clear:both; margin-top:40px">操作</h3>
+
+<p>Android 支持在通知底部显示可选的操作。通过操作,用户可在通知栏中处理最常见的任务,而无需打开来源应用。这样可加快交互的速度,而通过结合使用滑动清除通知的功能,有助于用户专注于对自身重要的通知。
+
+
+
+
+
+</p>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
+
+
+
+<p style="clear:both">请慎重考虑要在通知中包含多少操作。
+您加入的操作越多,用户就越无所适从。
+请通过只包含最重要且有意义的操作,尽量减少通知中的操作数量。
+
+
+</p>
+
+<p>适合在通知中使用的操作具有如下特点:</p>
+
+<ul>
+  <li> 对正在显示的内容类型必要、常用且常见
+
+  <li> 让用户可以迅速完成任务
+</ul>
+
+<p>避免以下类型的操作:</p>
+
+<ul>
+  <li> 含义模糊
+  <li> 跟通知的默认操作一样(例如“阅读”或“打开”)
+
+</ul>
+
+
+
+<p>您最多可以指定三个操作,每个操作由操作图标和名称组成。
+
+ 通过为简单的基本布局添加操作,可以展开该通知,即使该通知没有展开布局,此方法仍然有效。
+
+由于操作仅对展开的通知显示(否则会隐藏),因此要确保用户从通知调用的任何操作都可在相关联的应用中使用。
+
+
+
+
+</p>
+
+<h2 style="clear:left">浮动通知</h2>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
+  <p class="img-caption">
+    出现在沉浸式应用顶部的浮动通知(手机来电,高优先级)示例
+
+
+  </p>
+</div>
+
+<p>收到高优先级通知时(见右侧),它会向用户短时间显示一个包含可选操作的展开布局。
+
+</p>
+<p> 之后,通知会缩回通知栏。
+如果通知的<a href="#correctly_set_and_manage_notification_priority">优先级</a>标志为高、最大或全屏,则会得到浮动通知。
+</p>
+
+<p><b>浮动通知的范例</b></p>
+
+<ul>
+  <li> 使用设备时来电</li>
+  <li> 使用设备时闹铃</li>
+  <li> 新的短信</li>
+  <li> 电池电量过低</li>
+</ul>
+
+<h2 style="clear:both" id="guidelines">指导原则</h2>
+
+
+<h3 id="MakeItPersonal">个人化</h3>
+
+<p>对于他人发送的项目通知(例如消息或状态更新),请使用
+{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()} 包含此人的头像。
+另外将有关此人的信息附加到通知的元数据(参阅 {@link android.app.Notification#EXTRA_PEOPLE})。
+</p>
+
+<p>您通知的主图标仍然会显示,因此,该用户可将其与状态栏中显示的图标相关联。
+
+</p>
+
+
+<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
+<p style="margin-top:10px" class="img-caption">
+  显示触发通知的用户以及该用户所发送信息的通知。
+</p>
+
+
+<h3 id="navigate_to_the_right_place">导航至正确位置</h3>
+
+<p>在用户触摸通知的正文时(在操作按钮的外面),打开应用并定位至正确的位置,以便用户可查看通知中引用的数据并据此操作。
+
+
+在大多数情况下,该位置是某个数据项目(例如消息)的详情视图,但如果是存档通知,那么也可能是摘要视图。
+
+如果您的应用将用户带到应用顶层以下的任何位置,可将导航插入应用的返回栈,这样用户就可以通过按下系统返回按钮返回至顶层。
+
+如需了解详细信息,请参阅<a href="{@docRoot}design/patterns/navigation.html#into-your-app">导航</a>设计模式中的“通过主屏幕小工具和通知进入您的应用”<em></em>。
+
+</p>
+
+<h3 id="correctly_set_and_manage_notification_priority">正确设置和管理通知优先级。
+
+</h3>
+
+<p>Android 支持通知的优先级标志。该标志可以影响您的通知相对于其他通知出现的位置,并且可以帮助确保用户始终能在第一时间看到对他们最重要的通知。
+
+
+在发布通知时,您可以选择下列优先级之一:
+
+</p>
+<table>
+ <tr>
+    <td class="tab0">
+<p><strong>优先级</strong></p>
+</td>
+    <td class="tab0">
+<p><strong>用法</strong></p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MAX</code></p>
+</td>
+    <td class="tab1">
+<p>用于重要和紧急的通知,告知用户属于时间关键型状况,或者必须予以解决方可继续执行某个特定任务。
+
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>HIGH</code></p>
+</td>
+    <td class="tab1">
+<p>主要用于重要通信,例如包含用户特别感兴趣的内容的消息或聊天事件。高优先级通知会触发浮动通知显示。
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>DEFAULT</code></p>
+</td>
+    <td class="tab1">
+<p>用于不属于此处所述其他任何优先级的所有通知。</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>LOW</code></p>
+</td>
+    <td class="tab1">
+<p>用于您希望告知用户但不是很紧急的通知。
+低优先级通知最好显示在列表的底部,这里正适合放置公共事项或无收件人姓名的社交更新之类的通知:
+
+用户要求接收相关通知,但是这些通知的优先级永远不会高于紧急或直接通信。
+
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MIN</code></p>
+</td>
+    <td class="tab1">
+<p>用于上下文或背景信息,例如天气信息或上下文位置信息。最低优先级通知不会出现在状态栏中。
+
+用户可在展开的通知栏上找到它们。
+</p>
+</td>
+ </tr>
+</table>
+
+
+<h4 id="how_to_choose_an_appropriate_priority"><strong>如何选择合适的优先级</strong>
+
+</h4>
+
+<p><code>DEFAULT</code>、<code>HIGH</code> 和 <code>MAX</code> 是中断优先级别,在活动过程中有中断用户的风险。
+
+为了避免打扰应用的用户,中断优先级仅保留用于以下通知
+:</p>
+
+<ul>
+  <li> 涉及另一个用户</li>
+  <li> 时间敏感</li>
+  <li> 可能会立即改变用户在现实世界中的行为</li>
+</ul>
+
+<p>设置为 <code>LOW</code> 和 <code>MIN</code> 的通知可能仍然对用户很重要:
+很多通知(如果不是绝大多数)不需要用户立即注意,也不需要振动,但仍然包含用户选择查看通知时将会觉得重要的信息。
+
+
+<code>LOW</code> 和 <code>MIN</code>优先级通知的条件包括:
+</p>
+
+<ul>
+  <li> 不涉及其他用户</li>
+  <li> 不属于时间敏感型</li>
+  <li> 包含用户可能感兴趣但可选择在空闲时浏览的内容
+</li>
+</ul>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
+
+
+<h3 style="clear:both" id="set_a_notification_category">设置通知类别
+</h3>
+
+<p>如果通知属于以下预定义类别(参阅下文)之一,则为其分配相应的类别。
+
+诸如通知栏(或其他任何通知侦听器)这样的系统 UI 项目,可使用该信息来进行评级和筛选决策。
+
+</p>
+<table>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
+</td>
+    <td>
+<p>来电(语音或视频)或相似的同步通信请求
+</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
+</td>
+    <td>
+<p>传入的直接消息(短信、即时消息等)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
+</td>
+    <td>
+<p>异步群发消息(电子邮件)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
+</td>
+    <td>
+<p>日历事件</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
+</td>
+    <td>
+<p>促销或广告</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
+</td>
+    <td>
+<p>闹铃或定时器</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
+</td>
+    <td>
+<p>长时间运行的后台操作的进度</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
+</td>
+    <td>
+<p>社交网络或共享更新</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
+</td>
+    <td>
+<p>后台操作或身份验证状态中的错误</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
+</td>
+    <td>
+<p>媒体传输播放控制</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
+</td>
+    <td>
+<p>系统或设备状态更新。保留给系统使用。</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
+</td>
+    <td>
+<p>正在运行的后台服务的指示</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
+</td>
+    <td>
+<p>对于某个事件的特定、及时建议。例如,新闻应用可能会建议用户接下来可能想要阅读的新话题。
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
+</td>
+    <td>
+<p>有关设备或上下文状态的持续信息</p>
+</td>
+ </tr>
+</table>
+
+<h3 id="summarize_your_notifications">通知摘要</h3>
+
+<p>如果特定类型的通知已经在您的应用尝试发送同类型的新通知时挂起,可将它们合并到单个应用摘要通知中,而不要新建对象。
+
+</p>
+
+<p>摘要通知会生成摘要说明,让用户了解特定类型的通知有多少处于挂起状态。
+
+</p>
+
+<div class="col-6">
+
+<p><strong>禁忌用法</strong></p>
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
+</div>
+
+<div>
+<p><strong>建议用法</strong></p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
+</div>
+
+<p style="clear:left; padding-top:30px; padding-bottom:20px">您可通过使用展开的摘要布局提供有关组成摘要的各个通知的更多详情。
+
+此方法可让用户更好地了解哪些通知处于挂起状态,如果他们有足够的兴趣,还可在相关联的应用中阅读详情。
+
+
+
+</p>
+<div class="col-6">
+  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
+  <p class="img-caption">
+  展开和收起的摘要通知(使用 <code>InboxStyle</code>)
+  </p>
+</div>
+
+<h3 style="clear:both" id="make_notifications_optional">将通知设置为可选
+</h3>
+
+<p>用户应始终能控制通知。允许用户通过将某个通知设置项目添加至您的应用设置,禁用应用的通知或更改其提醒属性,例如警报声和是否使用振动。
+
+
+
+</p>
+
+<h3 id="use_distinct_icons">使用不同的图标</h3>
+<p>通过扫一眼通知区域,用户可以了解哪些类型的通知当前处于挂起状态。
+
+</p>
+
+<div class="figure">
+  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
+</div>
+
+  <div><p><strong>建议用法</strong></p>
+    <p>查看 Android 应用已经提供的通知图标并为您的应用创建外观明显不同的通知图标。
+
+</p>
+
+    <p><strong>建议用法</strong></p>
+    <p>对小图标使用正确的<a href="/design/style/iconography.html#notification">通知图标样式</a>,对操作图标使用相应的材料灯<a href="/design/style/iconography.html#action-bar">操作栏图标</a>。
+
+
+
+</p>
+<p ><strong>建议用法</strong></p>
+<p >图标外观要简洁清晰,避免使用过于精细、难以辨认的图标。
+</p>
+
+  <div><p><strong>禁忌用法</strong></p>
+    <p>对小图标和操作图标设置任何附加的阿尔法通道属性(变暗或变淡);这些图标会有抗锯齿边缘,但是由于 Android 使用这些图标作为蒙板(即仅使用阿尔法通道),因此通常应以完全不透明的方式绘制图像。
+
+
+
+
+</p>
+
+</div>
+<p style="clear:both"><strong>禁忌用法</strong></p>
+
+<p>利用色彩将您的应用与其他应用区分开来。通知图标应该是纯白透明背景图像。
+</p>
+
+
+<h3 id="pulse_the_notification_led_appropriately">对通知 LED 施加相应的脉冲
+</h3>
+
+<p>许多 Android 设备都配有通知 LED,用于让用户在屏幕关闭时了解事件。
+
+优先级为 <code>MAX</code>、
+<code>HIGH</code> 或 <code>DEFAULT</code> 的通知应让 LED 发光,而优先级较低的通知(<code>LOW</code> 和 <code>MIN</code>)则不应让 LED 发光。
+
+</p>
+
+<p>用户对通知的控制应延伸至 LED。当您使用 DEFAULT_LIGHTS 时,LED 将发出白光。
+
+您的通知不应使用不同的颜色,除非用户明确对其进行了自定义。
+
+</p>
+
+<h2 id="building_notifications_that_users_care_about">构建用户关注的通知
+</h2>
+
+<p>要创建用户喜爱的应用,精心设计通知很重要。通知是应用的代言人,还可增强应用的个性化特征。
+
+
+无用或者不重要的通知会给用户带来烦恼,或者由于过分分散用户的注意力而使其感到愤怒,因此请谨慎使用通知。
+
+
+</p>
+
+<h3 id="when_to_display_a_notification">何时显示通知</h3>
+
+<p>要创建人们乐于使用的应用,就需要认识到用户的注意力和关注点是一种必须予以保护的资源,这一点很重要。
+
+尽管 Android 的通知系统在设计上希望最小化通知对用户注意力的影响,但是仍然要重视通知会中断用户任务流程这一事实。在您计划通知时,要问问自己,它们是否足够重要,是否适合让用户中断手上的任务。
+
+
+
+
+
+
+如果您不确定,可允许用户使用应用的通知设置来选择是否接收通知,或者将通知优先级标志调整为 <code>LOW</code> 或 <code>MIN</code>,从而避免在用户做其他事情时分散他们的注意力。
+
+
+
+</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
+  <p style="margin-top:10px" class="img-caption">
+   时间敏感通知的示例
+  </p>
+
+<p>尽管行为良好的应用通常只在用户对其操作后才会发出通知,但在极少数情况下,应用通过无提示的通知形式打断用户也是值得的。
+</p>
+
+<p>将通知主要用于<strong>时间敏感的事件</strong>,尤其是这些同步事件<strong>涉及其他用户时</strong>。
+例如,传入的聊天属于实时同步通信形式:
+
+另一个用户在主动等待您的回应。
+日历事件是使用通知并引起用户注意的另一个好例子,因为事件已经迫近,并且日历事件通常涉及其他人员。
+
+
+</p>
+
+<h3 style="clear:both" id="when_not_to_display_a_notification">何时不显示通知
+</h3>
+
+<div class="figure" style="margin-top:60px">
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
+</div>
+
+<p>在其他很多情况下都不适合显示通知:</p>
+
+<ul>
+  <li> 不要将并非特定于用户的信息或并非确实时间敏感的信息告知用户。
+
+例如,流经社交网络的异步和未经订阅的更新,通常不适合引发实时中断。
+
+
+对于确实关注它们的用户,可让他们选择接收通知。
+</li>
+  <li> 如果相关的新信息当前显示在屏幕上,则不要创建通知。
+不过可以使用应用本身的 UI 在上下文中将新信息直接告知用户。
+
+
+  例如,聊天应用不应在用户主动和另一名用户聊天时创建系统通知。
+</li>
+  <li> 对于技术要求不高的操作(例如保存或同步信息或更新应用),如果应用或系统无需用户参与就可解决问题,请不要中断用户。
+
+</li>
+  <li> 如果可以让应用自行恢复错误,而不必让用户采取任何操作,则不要中断用户来告知他们发生此错误。
+
+</li>
+  <li> 请不要创建没有实际通知内容和仅仅是为您的应用做宣传的通知。通知应当提供有用、及时、最新的信息,而不应仅用于推广应用。
+
+
+
+</li>
+  <li> 请不要为了向用户宣传您的品牌而创建过多的通知。
+
+  此类通知会让用户不满,从而很可能离您而去。提供少量更新信息并让用户保持与您的应用交互的最佳方式是开发一个小工具,让用户可以选择是否将其放在主屏幕上。
+
+
+
+
+</li>
+</ul>
+
+<h2 style="clear:left" id="interacting_with_notifications">与通知交互
+</h2>
+
+<p>通知由状态栏中的图标指示,并且可以通过打开抽屉式通知栏进行访问。
+
+</p>
+
+<p>触摸通知会打开相关联的应用并进入与通知匹配的详细内容。在通知上向左或向右滑动会将其从抽屉式通知栏中删除。
+
+</p>
+
+<h3 id="ongoing_notifications">持续性通知</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
+      <p class="img-caption">
+    因播放音乐而持续显示的通知
+  </p>
+</div>
+<p>持续性通知可让用户持续了解后台运行的进度。例如,音乐播放器在通知系统中通告当前播放的曲目,并继续进行播放,直至用户停止播放。
+
+
+
+持续性通知也可为持续时间较长的任务(例如下载文件或视频编码之类的任务)向用户显示反馈。
+
+用户无法手动从抽屉式通知栏中删除持续性通知。
+</p>
+
+<h3 id="ongoing_notifications">媒体播放</h3>
+<p>在 Android 5.0 中,锁定屏幕不会为弃用的
+{@link android.media.RemoteControlClient} 类显示传输控件。但是它<em>确实</em>会显示通知,因此每个应用的播放通知现在是用户在锁屏状态控制播放的主要方式。
+
+此行为可让应用更好地控制显示哪些按钮,这样,无论是否锁屏,都可以为用户提供一致的体验。
+
+
+</p>
+
+<h3 style="clear:both"
+id="dialogs_and_toasts_are_for_feedback_not_notification">对话框和 Toast
+</h3>
+
+<p>如果您的应用当前未显示在屏幕上,则不应创建对话框或 Toast。
+对话框或 Toast 应仅限用于即时响应用户在应用内部采取的操作。有关使用对话框和 Toast 的进一步指导,请参阅<a href="/design/patterns/confirming-acknowledging.html">确认和确知</a>。
+
+
+
+</p>
+
+<h3>排名和排序</h3>
+
+<p>通知属于新闻,因此基本以时间倒序显示,并且会特别考虑应用规定的通知<a href="#correctly_set_and_manage_notification_priority">优先级</a>。
+
+
+</p>
+
+<p>通知是锁定屏幕的关键部分,并且在设备显示屏每次亮起时突出显示。
+
+锁定屏幕上的空间有限,因此确定哪些通知最为紧急或最密切相关非常重要。
+
+由于这个原因,Android 在处理通知时使用了更为精密的排序算法,考虑到以下因素:
+
+</p>
+
+<ul>
+  <li> 时间戳以及应用规定的优先级。</li>
+  <li> 通知是否最近以声音或振动形式告知过用户。
+(也就是说,如果手机刚发出了铃声,并且用户希望知道“刚才发生了什么?”,那么锁定屏幕应让用户一眼看到相应的通知。)
+
+
+</li>
+  <li> 与使用 {@link android.app.Notification#EXTRA_PEOPLE} 的通知相关的任何人,尤其是加星标的联系人。
+</li>
+</ul>
+
+<p>为了充分利用此排序功能,请专注于您希望建立的用户体验,而不是拘泥于列表上的某个特定项。
+
+</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
+
+  <p class="img-caption" style="margin-top:10px">Gmail 通知使用的是默认优先级,因此它们的顺序通常低于来自即时通讯应用(例如环聊)的消息,但是在有新邮件送达时会临时占位。
+
+
+
+
+  </p>
+
+
+<h3>在锁定屏幕上</h3>
+
+<p>由于通知在锁定屏幕上可见,所以用户隐私是特别重要的考虑事项。
+
+通知通常包含敏感信息,并且不一定需要让所有拿起设备并打开显示屏的人看到。
+
+</p>
+
+<ul>
+  <li> 对于配置了安全锁定屏幕(PIN 码、图案或密码)的设备,界面分为公用和私人部分。
+公用界面可显示在安全锁定屏幕上,因此任何人都可看见。
+私人界面是锁定屏幕背后的内容,只有在用户登录设备后才会显示。
+</li>
+</ul>
+
+<h3>用户对显示在安全锁定屏幕上的信息的控制</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
+      <p class="img-caption">
+    位于锁定屏幕上的通知,具有用户解锁设备后可显示的内容。
+  </p>
+</div>
+
+<p>在设置安全锁定屏幕时,用户可以选择从安全锁定屏幕隐藏敏感的详细信息。
+在这种情况下,系统 UI 会考虑通知的<em>可见性级别</em>,从而确定哪些内容可以安全地显示出来。
+
+</p>
+<p> 要控制可见性级别,可调用 <code><a
+href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>,然后指定以下值之一:
+
+</p>
+
+<ul>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>。显示通知的完整内容。
+
+  在未指定可见性的情况下,此设置是系统的默认设置。</li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>。在锁定屏幕上,会显示通知的基本信息,包括其图标以及发布此通知的应用名称。
+
+剩下的通知详细信息不会显示。需要注意的一些有用建议如下:
+
+  <ul>
+    <li> 如果您希望为通知提供不同的公用版本,供系统显示在安全锁定屏幕上,可在 <code><a
+href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code> 字段中提供替换通知对象。
+
+
+
+    <li> 该设置可让您的应用有机会创建有用内容的删减版本,但是不会显示个人信息。
+可参考短信应用的示例,这种应用的通知包括短信的文本以及发信者的姓名和联系人图标。该通知应为 <code>VISIBILITY_PRIVATE</code>,但是 <code>publicVersion</code> 仍然可以包含“有 3 条新消息”这样的有用信息,而不会提供其他识别性详细信息。
+
+
+
+
+  </ul>
+  </li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>。仅显示最为精简的信息,甚至不包括通知图标。
+</li>
+</ul>
+<h2 style="clear:both" id="notifications_on_android_wear">Android Wear 上的通知
+</h2>
+
+<p>通知及其<em>操作</em>默认会和穿戴设备桥接。开发者可以控制哪些通知会从手机桥接至手表,反之亦然。
+
+
+开发者也可以控制哪些操作会进行桥接。如果您的应用包含无法通过单次点击完成的操作,则可以将这些操作隐藏在您的 Android Wear 设备通知中,或者考虑将它们连接至 Android Wear 设备应用,从而可让用户在其手表上完成操作。
+
+
+
+
+
+</p>
+
+<h4>桥接通知和操作</h4>
+
+<p>连接的设备,例如手机,可将通知桥接至 Android Wear 设备,从而将通知显示在此处。
+与此相似,您也可以桥接操作,从而让用户可在 Android Wear 设备上直接操作通知。
+</p>
+
+<p><strong>桥接</strong></p>
+
+<ul>
+  <li> 新的即时通讯</li>
+  <li> 单次点击操作,例如 +1、赞、收藏</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
+
+<p><strong>不要桥接</strong></p>
+
+<ul>
+  <li> 新收到的播客通知</li>
+  <li> 映射至手表上无法使用的功能的操作</li>
+</ul>
+
+
+
+<p><h4>为 Android Wear 设备定义的独特操作</h4></p>
+
+<p>有些操作只能在 Android Wear 上执行。包括以下情况:</p>
+
+<ul>
+  <li> 例如“马上回来”这样的预设回复快速列表</li>
+  <li> 在手机上打开</li>
+  <li> 调出语音输入屏幕的“评论”或“回复”操作</li>
+  <li> 启动 Android Wear 专用应用的操作</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/about.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/about.jd
new file mode 100644
index 0000000..bfdb210
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/about.jd
@@ -0,0 +1,367 @@
+page.title=Google Play 蕴藏的机会
+meta.tags="visibility, growth, distributing"
+page.tags="play, apps, distributing, publishing"
+page.metaDescription=每月数十亿下载并且不断增长。让您的应用呈现在所有 Google 用户面前。
+page.image=/distribute/images/about-play.jpg
+
+@jd:body
+
+    <div id="qv-wrapper">           
+  <div id="qv">
+  <h2>关于 Google Play</h2>
+    <ol style="list-style-type:none;">
+      <li><a href="#reach">全球影响力,快速增长</a></li>
+      <li><a href="#ratings-reviews">用户评级和评价</a></li>
+      <li><a href="#category-browsing">类别浏览</a></li>
+      <li><a href="#search">搜索</a></li>
+      <li><a href="#top-charts-and-lists">排行榜和列表</a></li>
+      <li><a href="#featured-staff-picks">精选应用、店员推荐、合集和徽章</a></li>
+      <li><a href="#product-detail-pages">商品详情页</a></li>
+      <li><a href="#related-resources">相关资源</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  Google Play 是分发 Android 应用的首要商店。当您在 Google Play 上发布应用时,您的应用将呈现在 Android 庞大的活跃客户面前,这些客户分布在全球 190 多个国家和地区。
+
+
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-about-0.jpg" alt="Google Play on an Android Tablet" style="width:480px;position:relative" />
+</div>
+
+<p>
+  Google Play 是 Android 体验的核心部分。新用户通过应用、游戏和其他 Google Play 内容将自己的设备个性化。
+
+  老用户则定期回来查看有什么最新趋势和新应用。下载新应用非常方便快捷&mdash; Google Play 通过网络即时将应用推送到用户的设备上。
+
+
+</p>
+
+<p>
+  Google Play 也是 Web 用户的首选目的地。任何人都可以使用浏览器在网页上浏览 Google Play。
+Android 用户甚至可以购买和安装所需的应用,Google Play 会将应用自动推送到其设备上,无需数据线。
+
+
+</p>
+
+<p>
+  访问 Google Play 网站非常方便,让您通过新的方式从许多来源为您的产品带来流量,例如在线广告、网页搜索和交叉链接。
+
+Google Play 的宗旨是把用户与优秀的应用和游戏连接起来。
+它提供了让您的应用受到关注并在市场上提升吸引力的关键渠道。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="ratings-reviews">
+    用户评级和评价
+  </h2>
+
+
+</div>
+
+<p>
+  潜在用户将评级和评论视为应用质量的关键标准。
+通过给应用评 1 星到 5 星并发表评价,Android 用户可表达他们对已下载的应用的看法。
+
+</p>
+
+<p>
+  <strong>应用的评级是影响其</strong>在 Google Play 列表和搜索结果中的排名的最重要因素之一。
+它也是编辑人员在策划在商店中推广应用和游戏时查看的关键指标之一。
+
+
+</p>
+
+<div class="img" style="padding: 1em auto;width:96%;">
+  <img src="{@docRoot}images/gp-rating-web.png" style="border:1px solid #ddd;">
+</div>
+
+<div class="headerLine">
+  <h2 id="category-browsing">
+    类别浏览
+  </h2>
+
+
+</div>
+
+<p>
+  当您在 Google Play 上发布应用时,选择您希望用户在哪个类别中查找您的应用。
+有 30 多个类别。在每个类别内,应用的排名基于评级、评价、下载量、国家/地区和其他因素的组合。
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="search">
+    搜索
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 上的“搜索”可让用户快速而准确地找到应用或游戏。搜索使用强大的启发式算法,在用户输入时建议搜索词,并且提供应用的直接链接作为建议。
+
+在结果中,用户会发现最相关、最热门的应用位于顶部。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="top-charts-and-lists">
+    排行榜和列表
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-top.jpg">
+</div>
+
+<p>
+  排行榜让用户直接从应用和游戏的首页上随时了解 Android 用户的热门应用和趋势。
+排行榜随时更新,根据最近的下载活动每天更新数次。
+随着评级和下载活动增加,应用在排行榜中的排名可能上升。
+
+</p>
+
+<p>
+  为使排行榜尽可能与全球各地的用户息息相关,在 Google Play 的最热门国家中,排行榜还针对具体国家列出。
+随着您的应用获得吸引力并积累下载量和评级,它们将登上一个或多个排行榜,并获得更多关注。
+
+
+</p>
+
+<table style="width:50%;">
+  <tr>
+    <td>
+      热门免费
+    </td>
+    <td>
+      免费应用和免费游戏列表
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      热门付费
+    </td>
+    <td>
+      收费应用和收费游戏列表
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      创收最高
+    </td>
+    <td>
+      免费或付费应用的总收入
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      热门免费新应用
+    </td>
+    <td>
+      30 天内发布的应用
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      热门付费新应用
+    </td>
+    <td>
+      30 天内发布的应用
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      上升最快
+    </td>
+    <td>
+      安装量快速增长的新应用
+    </td>
+  </tr>
+</table>
+
+<div class="headerLine">
+  <h2 id="featured-staff-picks">
+    精选应用、店员推荐、合集和徽章
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 编辑团队致力于让最佳的应用获得用户关注,并为整个商店的应用质量设定基调。
+
+  该团队不断审查整个 Google Play 上的应用,不仅发现最知名的应用和游戏,还找出他们希望更多人看到的“浑金璞玉”。
+
+该团队在
+ <em>精选应用</em>、<em>店员推荐</em>和其他合集中推广优秀的应用。
+</p>
+
+<p>
+  您不能提名自己的应用加入精选应用,但该团队随时都在监测 Google Play,从中发现优秀应用。
+如果您开发了用户喜爱并且在 Android 设备上表现很好的应用,编辑团队将会注意到。
+
+</p>
+
+<h3 id="featured-staff-picks2">
+  精选应用和店员推荐
+</h3>
+
+<p>
+  每周 Google Play 编辑人员都会选择一组新的应用,在深受欢迎的<em>精选应用</em>和<em>店员推荐</em>
+合集中加以推广。
+
+</p>
+
+<p>
+  <em>精选应用</em>合集重点介绍 Android 可用的最新、最优秀的应用及游戏名称。
+此列表还包括热门类别中的最佳和最热门的应用,这些应用也收入到精选应用中。
+<em>店员推荐</em>
+收集 Google Play 上最近推荐的所有应用和游戏。为了重视平板电脑用户,有一个专门的<em>店员推荐</em>合集重点介绍了适用于 Android 平板电脑的最佳应用。
+
+
+</p>
+
+<table style="text-align:center;margin:1.5em 0;">
+  <tr>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks1.jpg">
+      <p>
+        精选应用
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks2.jpg">
+      <p>
+        合集
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks3.jpg">
+      <p>
+        编辑精选
+      </p>
+    </td>
+  </tr>
+</table>
+
+<h3 id="collections">
+  应用合集
+</h3>
+
+<p>
+  编辑人员不时根据一个主题或季节性活动将一组应用和游戏放在一起。
+用户经常被及时更新的合集吸引,并使用这些列表来选择应用。
+
+</p>
+
+<p>
+  编辑人员选择在合集中推广的应用 &mdash;
+ 在手机和平板电脑上表现 Android 最佳效果的高质量应用。编辑人员还寻找可以为整个合集提供有趣或独特内容的应用。
+
+
+</p>
+
+<h3 id="editors-choice">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/editorschoice_ann.png">编辑精选
+</h3>
+
+<p>
+  <em>编辑精选</em>是一组精心策划的应用,重点介绍 Android 上提供的一些最佳应用。
+编辑在选择这些应用时,重点考虑质量和出色的用户界面、长期受欢迎程度以及对 Android 功能的创新使用。
+
+
+</p>
+
+<p>
+  入选<em>编辑精选</em>的应用还会得到一个徽章,将在 Google Play 上显示应用名称的任何位置显示此徽章。
+
+</p>
+
+<h3 id="top-developer">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/topdev_ann.png"> 热门开发者
+</h3>
+
+<p>
+  热门开发者是一个徽章,旨在表彰知名的、备受推崇的开发者不遗余力在 Android 上推出优质和创新应用。
+
+  Google Play 编辑人员根据开发者的累计成果不时授予热门开发者徽章。
+
+</p>
+
+<p>
+  热门开发者徽章将显示在 Google Play 上显示开发者名称的任何位置旁边。
+此徽章意味着对开发者开发的全部应用的长期认可。
+它象征着用户对此开发者的产品有着额外的信任和信心。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="product-detail-pages">
+    商品详情页
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-listing.jpg">
+</div>
+
+<p>
+  您的应用在 Google Play 上的店面就是<em>商品详情页</em>:一个丰富多彩的页面,让您宣传推广自己的应用、突出其评级和评价,以及显示应用的功能。
+
+
+</p>
+
+<p>
+  您的商品详情是用户查找有关您的应用的所有信息的地方。
+当用户在搜索结果、排行榜、类别列表和合集上看到您的应用时,点击一下就能直接进入您的商品详情。
+
+</p>
+
+<p>
+  使用任何网络浏览器通过 <a href="https://play.google.com/apps/publish/">Google Play 开发者控制台</a>
+来管理您的产品详情页面。登录以上传或更新品牌资料,以您所在市场使用的语言输入产品详情。
+
+</p>
+
+<p>
+  当您发布资料时,Google Play 将添加您的应用的评级、评价、您其他产品的链接等信息。
+它还确保商品详情页在手机、平板电脑和网络浏览器上看上去很不错。
+
+</p>
+
+<p>
+  您可以将 Web 用户从 Google Play 之外直接链接到您的产品详情页面,例如从您的网站、广告活动、测评、社交媒体帖子等地方链接过来。
+
+参考<a href="{@docRoot}distribute/tools/promote/linking.html">链接您的产品</a>以了解操作方法。
+
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="headerLine">
+<h2>相关资源</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="4"></div>
+    </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/auto.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/auto.jd
new file mode 100644
index 0000000..0fb9eec
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/auto.jd
@@ -0,0 +1,230 @@
+page.title=分发到 Android Auto
+page.image=/design/auto/images/auto-overview.png
+meta.tags="auto", "publish", "quality"
+page.tags="auto", "publish", "googleplay"
+page.metaDescription=将您的应用和内容分发到 Android Auto。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>参加办法</h2>
+<ol>
+<li><a href="#understand_guidelines">了解准则</a></li>
+<li><a href="#develop_app">开发优秀的汽车应用</a></li>
+<li><a href="#test_app">测试汽车应用的质量</a></li>
+<li><a href="#opt_in">同意条款</a></li>
+<li><a href="#track_review">跟踪审查进度</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用的质量</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  如果您有一款优秀的应用,Android Auto 和 Google Play 可以帮助您直接推送到用户的汽车上。
+您可以扩展您的新旧汽车应用,然后在 Google Play 上使用熟悉的工具和流程来发布应用。
+
+
+</p>
+
+<p>
+  首先,查看本文档各部分,了解如何通过 Google Play 将您的汽车应用分发给用户。
+一定要阅读
+<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用的质量</a>
+,了解有关您的应用应符合的可用性、质量和安全相关准则的信息。
+当您的应用准备就绪时,您可以在开发者控制台中接受条款,并上传您的 APK 供审查。
+
+</p>
+
+<h2 id="how_to_participate">
+  参加办法
+</h2>
+
+<p>
+  Google Play 让您交付在汽车中使用的应用。您可以使用现有的开发者控制台帐户和当前的分发及定价设置来开发和发布应用。
+参加方法很简单 — 以下几部分概述了整个流程。
+
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-auto-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1.了解准则和要求
+</h3>
+
+<p>
+  为了做好准备,以便在 Android Auto 上成功推出应用,首先要查阅在汽车上提供出色体验的准则。
+请参考 <a href="{@docRoot}design/auto/index.html">Android Auto 设计准则</a>,了解有关扩展汽车应用的建议,以及有关设计和可用性的详情。
+
+</p>
+
+<p>
+  开始设计汽车体验时,务必阅读并理解汽车应用的质量标准。
+仅在汽车上使用的应用才能在 Google Play 上被指定为汽车应用 &mdash; 如果您的应用符合一组基本的质量标准,则可以参加。
+
+参考
+<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用的质量</a>,了解详情。
+
+</p>
+
+<h3 id="develop_app">2.开发优秀的汽车应用</h3>
+
+<p>
+  出色的汽车应用专为汽车而设计,并充分利用 Android Auto 的功能。
+当用户在外出时,应用可提供高质量的体验,例如提供音频内容的播放或访问各种消息。
+
+</p>
+
+<p>
+  在考虑您的汽车应用时,请查看<a href="{@docRoot}training/auto/start/index.html">开发者文档</a>和可用性准则,并且尽可能支持这些准则。
+
+确保设计一种出色的体验,并遵守我们有关防止驾驶员分散注意力的准则。
+
+</p>
+
+<p>
+  您必须使用相同的程序包名称和商品详情,将您的汽车体验作为您针对手机、平板电脑和其他设备的现有应用的一部分来提交。
+
+</p>
+
+<h3 id="test_app">3.测试汽车应用的质量</h3>
+
+<p>
+  您的汽车应用应表现出色,在汽车上看起来很棒,并且提供尽可能最佳的用户体验。
+Google Play 将展示精选的优质汽车应用,以便用户能够在 Google Play 中轻松发现。
+以下说明了您如何加入平台,提交用户喜爱的 Android Auto 应用:
+
+</p>
+
+<ul>
+  <li>符合<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用质量</a>的准则
+
+    <ul>
+      <li>遵循我们的<a href="{@docRoot}training/auto/index.html">
+汽车应用开发</a>最佳做法</li>
+      <li>确保您的应用符合<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用质量</a>的所有标准</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4.同意 Android Auto 条款并发布</h3>
+
+<p>
+  在上传您的 APK 和发布应用供审查之前,开发者帐户所有者必须在开发者控制台的
+<strong>定价和分发</strong>部分同意
+ <a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html">Android Auto 条款</a>。
+
+同意这些条款即表示您希望将应用通过 Google Play 提供给 Android Auto 用户,并且您的应用符合<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用质量</a>准则。
+
+
+
+</p>
+
+<p>
+  只有在同意条款之后,才能上传您的汽车应用。下面说明了哪些应用被确定为汽车应用:
+
+</p>
+
+<ul>
+  <li>您的应用必须在清单文件中声明 <code>com.google.android.gms.car.application</code>
+ 元数据条目,说明此应用所使用的汽车功能。有关配置应用与 Android Auto 配合使用的更多信息,请参考
+<a href="{@docRoot}training/auto/start/index.html#auto-metadata">汽车应用入门</a>。
+
+  </li>
+</ul>
+
+<p>
+  当您已创建可供发布的 APK 并且已测试确保它符合所有
+<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用质量</a>准则后,将其上传到开发者控制台。
+在您的商品详情中更新任何额外的汽车功能信息,并按需设置分发选项。
+
+如果不熟悉如何准备在 Google Play 上发布,请参考<a href="{@docRoot}distribute/googleplay/publish/preparing.html">发布操作检查单。</a>
+
+
+</p>
+
+<p>
+  在同意条款并保存更改之后,就可以像平常一样上传和发布您的应用。
+  在将应用提供给 Android Auto 用户之前,Google Play 会提交您的应用并对照<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用质量</a>标准进行审查,然后将结果通知您。
+
+如果应用获得批准,Google Play 便将应用提供给 Android Auto 用户。
+参考下一部分以详细了解如何跟踪应用的审批状态。
+
+</p>
+
+<p>
+  注意,审查结果会影响您的应用在 Google Play 商店中对其他设备的可用性,&mdash;例如,手机和平板电脑上。
+
+  如果您的现有应用包括了对手机/平板电脑组件的更新,则 Android Auto 组件必须通过审查,才能在 Google Play 商店上提供更新后的应用。
+
+
+</p>
+
+<p>
+  以下是您在开发者控制台中同意 Android Auto 条款的步骤:
+</p>
+
+<ol>
+  <li>确保您的应用符合<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用质量</a>的所有标准
+  </li>
+
+  <li>在<strong>所有应用</strong>页面,单击您要发布的应用。
+  </li>
+
+  <li>在<strong>定价和分发</strong>下面,向下滚动找到 <em>Android Auto</em> 和条款的链接。
+
+  </li>
+
+  <li>单击<em>条款</em>链接。
+  </li>
+
+  <li>仔细阅读条款并点击<em>同意</em>。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png">
+  <p class="caption">
+    <strong>同意汽车应用的条款:</strong>在开发者控制台中同意条款,将您的应用包括在 Android Auto 中。
+
+  </p>
+</div>
+
+<h3 id="track_review">5.跟踪审查进度</h3>
+
+<p>
+  您的应用将接受审查,以确定它是否符合司机分散注意力准则以及上文所述的技术和质量标准。
+此详细审查过程所需的时间可能超过您在提交手机/平板电脑应用时已习惯的时间。
+
+  在应用得到批准之前,应用或应用更新不会发布到 Google Play 商店。
+  在成功通过审查之后,应用将被发布并在 Google Play商店中提供。
+
+</p>
+
+<p>如果应用未被接受,您的<strong>开发者帐户地址将收到电子邮件通知</strong>,概述您需要解决的问题区域。
+当您进行必要的调整后,可以将应用的新版本上传到开发者控制台。
+
+
+</p>
+
+<p>
+  注意:如果提交的应用是现有应用的更新并且更新后的应用不符合审查标准,则更新会被拒绝,但现有应用仍然发布在 Google Play 商店中。
+
+
+</p>
+
+<p>要了解如何评估您的应用,请参阅<a href="{@docRoot}distribute/essentials/quality/auto.html">汽车应用质量</a>文档。 </p>
+
+
+  <h3>相关资源</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:autolanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/developer-console.jd
new file mode 100644
index 0000000..7d0bd55
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/developer-console.jd
@@ -0,0 +1,584 @@
+page.title=开发者控制台
+page.metaDescription=了解开发者控制台,这是您在 Google Play 上发布应用的大本营。
+page.image=/distribute/images/developer-console.jpg
+Xnonavpage=true
+
+@jd:body
+    
+    <div id="qv-wrapper">           
+  <div id="qv">
+    <h2>发布功能</h2>
+    <ol>
+      <li><a href="#allapps">所有应用</a></li>
+      <li><a href="#account-details">您的帐户详情</a></li>
+      <li><a href="#merchant-account">关联您的商家帐户</a></li>
+      <li><a href="#multiple-user-accounts">多个用户帐户</a></li>
+      <li><a href="#alpha-beta">Alpha 和 Beta 测试</a></li>
+      <li><a href="#staged-rollouts">分阶段发布</a></li>
+      <li><a href="#multiple-apk">多 APK 支持</a></li>
+      <li><a href="#selling-pricing-your-products">销售和定价</a></li>
+      <li><a href="#in-app-products">应用内产品</a></li>
+      <li><a href="#distribution-controls">分发控制</a></li>
+      <li><a href="#reviews-reports">用户评价、崩溃报告</a></li>
+      <li><a href="#app-stats">应用统计</a></li>
+      <li><a href="#related-resources">相关资源</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  <a href="https://play.google.com/apps/publish/">Google Play 开发者控制台</a>是您执行发布操作和获取发布工具的大本营。
+
+</p>
+<!-- <img src="{@docRoot}images/gp-dc-startscreen.jpg" style="width:480px;" /> -->
+<img src="{@docRoot}images/gp-devconsole-home.png" style="width:480px;">
+<p>
+  上传应用,建立产品页面,配置价格和分发,然后发布。
+您可以在任何网络浏览器上通过开发者控制台来管理在 Google Play 上发布应用的所有阶段。
+
+</p>
+
+<p>
+  在您<a href="{@docRoot}distribute/googleplay/start.html">注册</a>并收到电子邮件确认之后,就可以登录 Google Play 开发者控制台。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="allapps">
+    所有应用
+  </h2>
+
+
+</div>
+
+<p>
+  “所有应用”部分让您能够快速浏览您的应用,您可以跳到统计信息、评价和产品详情页面,或者上传一个新应用。
+
+</p>
+
+<div style="padding:1em 0em 0em 0em;">
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine" style="margin-top:-6px">
+  <h2 id="account-details">
+    您的帐户详情
+  </h2>
+
+
+</div>
+
+<p>
+  在帐户详情页上指定有关您自己或贵公司的开发者基本资料信息。
+这让 Google Play 和您的客户能够识别您。
+您可以随时返回编辑此信息并更改您的设置。
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-profile.png" class="frame">
+</div>
+
+<p>
+  您的开发者资料包含:
+</p>
+
+<ul>
+  <li>
+    <p>
+      开发者名称 &mdash; 显示在您的商品详情页面上和 Google Play 的其他地方。
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      联系信息 &mdash; 仅供 Google 使用,您的客户看不到此信息。
+
+    </p>
+  </li>
+
+  <li>
+    <p>
+      网站 URL &mdash; 显示在您的商品详情页面上。
+    </p>
+  </li>
+</ul>
+
+<p>
+  在帐户详情页面上,您还可以为营销人员和其他团队添加受限的访问权限、注册一个商家帐户,或设置 Google Play 许可测试帐户。
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    关联您的商家帐户
+  </h2>
+
+
+</div>
+
+<p>
+  如果您想销售应用或应用内的产品,可将您的 Google 电子钱包商家帐户与开发者资料关联。
+Google Play 使用关联的商家帐户来进行财务和税务识别,以及每月的销售款支付。
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-user-accounts">
+    多个用户帐户
+  </h2>
+
+
+</div>
+
+<p>
+  为其他团队成员设置用户帐户,以访问开发者控制台的不同部分。
+
+</p>
+
+<div style="width:550px;">
+  <img src="{@docRoot}images/gp-dc-invite.png" class="frame">
+</div>
+
+<p>
+  第一个注册帐户为<em>帐户所有者</em>,可完全访问控制台的所有部分。
+所有者可以添加<em>用户帐户</em>并管理控制台访问权限。
+
+</p>
+
+<p>
+  例如,所有者可以给用户授予发布和配置应用的权限,但不授予访问财务报告的权限。
+现在来了解如何<a href="https://support.google.com/googleplay/android-developer/answer/2528691">设置多个帐户</a>。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="store-listing-details">
+    商品详情
+  </h2>
+
+
+</div>
+
+<p>
+  使用开发者控制台来设置<em>商品详情页面</em>。这是您的应用在 Google Play 中的大本营。
+这是用户在其手机上或在网页上看到并借此了解您的应用并下载应用的页面。
+
+</p>
+
+<p>
+  上传自定义品牌资料、屏幕截图和视频,突出您的应用所拥有的出色功能。
+提供本地化的说明,添加有关最新版本的备注等等。
+您可以随时更新商品详情。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-details.png" class="frame">
+</div>
+
+<div class="headerLine">
+  <h2 id="upload-instantly-publish">
+    上传和即时发布
+  </h2>
+
+
+</div>
+
+<p>
+  在开发者控制台中,可以快速上传和发布已准备好的 Android 应用程序包文件。
+在发布之前,应用处于<em>草稿</em>状态,发布后, Google Play 才将您的商品详情页面和应用提供给用户 &mdash; 您的应用将在几小时而不是数周内出现在商品详情页面上。
+
+
+
+</p>
+
+<p>
+  在发布应用之后,您可以随时进行更新:随时更改价格、配置和分发选项,无需更新应用的二进制文件。
+
+
+</p>
+
+<p>
+  当您添加功能或解决代码问题时,可以随时发布更新后的二进制文件。
+新版本几乎是立即上架,并且会通知现有客户,有更新可供他们下载。
+用户还可以接受应用的自动更新,在您发布更新时就立即推送和安装更新。
+
+您可以随时取消发布您的应用。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="alpha-beta">
+    Alpha 和 Beta 测试
+  </h2>
+
+
+</div>
+
+<p>
+  获得用户的真实反馈总是很有价值的,特别是在发布之前。
+Google Play 使您能够轻松地将发布前的应用版本分发给全球任何地方的 alpha 和 beta 测试组。
+
+</p>
+
+<p>
+  在 Google Play 开发者控制台的 <strong>APK</strong> 部分,您会发现 <strong>Alpha 测试</strong>和 <strong>Beta 测试</strong>选项卡。
+
+您可以在此上传应用各版本的 APK 文件,并将测试人员列表定义为 <a href="https://support.google.com/groups/answer/46601">Google 群组</a>或<a href="https://support.google.com/plus/topic/2888488">Google+ 社区</a>。
+在完成此操作后,您将收到一个可转发给测试人员的 URL,测试人员可通过此 URL 选择加入测试计划。
+
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-ab.png" class="frame">
+</div>
+
+<p>
+  测试人员选择加入之后,将转至应用的产品页面,当他们下载应用后,Google Play 将视情况给他们发送 alpha 或 beta 版本。
+
+顺便说一下,如果用户碰巧加入了您的两个测试组,则 Google Play 始终是向他们发送 alpha 测试版。
+
+</p>
+
+<p>
+  注意:用户不能对应用的 alpha 和 beta 版本提供反馈和评价。
+如要收集反馈,您可以使用<a href="https://support.google.com/groups/answer/46601">Google 群组</a>或<a href="https://support.google.com/plus/topic/2888488">Google+ 社区</a>,
+或者设置一个电子邮件地址,或使用您自己的网站。
+</p>
+
+<p>
+  您可以使用这些测试计划来<a href="{@docRoot}distribute/essentials/optimizing-your-app.html">优化您的应用</a>,帮助<a href="{@docRoot}distribute/users/expand-to-new-markets.html">发布到新市场</a>以及开始<a href="{@docRoot}distribute/users/build-community.html">建立您自己的社区</a>。
+
+
+在
+<a href="{@docRoot}distribute/tools/launch-checklist.html">发布
+检查单</a>和<a href="{@docRoot}distribute/tools/localization-checklist.html">本地化检查单</a>中,还提供了有关使用 beta 测试的更多信息。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="staged-rollouts">
+    分阶段发布
+  </h2>
+
+
+</div>
+
+<p>
+  您还可以在 Google Play 开发者控制台的 APK 部分中,使用“生产”选项卡来分阶段发布您的应用。
+您可以在此定义能够下载您的应用的用户的百分比。
+
+</p>
+
+<p>
+  分阶段发布有助于限制意外错误的影响或服务器负载,并使您能够通过公正的用户抽样来衡量用户反馈。
+
+  在分阶段发布期间,用户可以对您的应用评级和评价,因此,如果您犹豫不定,可以先发布给较小比例的用户。
+一定要关注任何负面评价并及时回应。
+
+</p>
+
+<p>
+  注意:由于 Android 平台的<a href="{@docRoot}tools/publishing/versioning.html">应用版本控制要求</a>,不支持回滚。
+如果需要回滚,可考虑使用新版本号发布之前的 APK。
+但是,这种做法只能作为不得已的最后手段,因为用户将不能访问新功能,并且旧版应用可能无法向前兼容您的服务器更改或数据格式,所以一定要对更新执行 <a href="#alpha-beta">alpha 和 beta 测试</a>。
+
+
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-apk">
+    多 APK 支持
+  </h2>
+
+
+</div>
+
+<p>
+  在大多数情况下,您只需要提供单个应用软件包 (APK),并且这通常是管理和维护应用的最简单方式。
+但是,如果需要为不同设备提供不同的 APK,Google Play 提供了实现方法。
+
+
+</p>
+
+<p>
+  <em>多 APK 支持</em>允许您创建多个应用软件包,使用相同的软件包名称,但 OpenGL 纹理压缩格式、屏幕大小支持或所支持的 Android 平台版本不同。
+
+只需在单个产品详情下上传所有 APK,Google Play 会根据用户设备的特性,选择最合适的文件提供给用户。
+
+
+
+</p>
+
+<p>
+  还可以使用 <em>APK 扩展文件</em>选项,为每个已发布的 APK(包括多 APK)上传最多两个辅助下载。
+每个扩展文件可达 2 GB 并且可以包含任何类型的代码或资产。
+
+  Google Play 免费托管这些文件,并将文件下载作为正常应用安装的一部分。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="selling-pricing-your-products">
+    产品销售和定价
+  </h2>
+
+
+</div>
+
+<div class="figure-right">
+  <img src="{@docRoot}images/gp-buyer-currency.png" class="frame">
+</div>
+
+<p>
+  为您提供了工具以设置应用和应用内产品的价格。您的应用可以免费下载,或付费下载,即需要付款才能下载。
+
+</p>
+
+<ul>
+  <li>如果发布为免费应用,则必须<strong>在该应用的生存期内始终免费</strong>。
+免费应用可供 Google Play 的所有用户下载。
+  </li>
+
+  <li>如果发布为付费应用,也可以在以后更改为免费。付费应用只能由已在 Google Play中注册付款方式的用户购买和下载。
+
+
+  </li>
+</ul>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <p>
+      请参考<a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294&amp;topic=2365624&amp;ctx=topic">
+支持分发应用的地区</a>,了解您可以分发或销售应用的国家或地区列表。
+
+    </p>
+  </div>
+</div>
+
+<p>
+  无论是免费还是付费应用,还可以在应用内提供产品和订阅。
+为付费应用、应用内的产品及订阅单独设置价格。
+
+</p>
+
+<p>
+  当用户浏览您的应用产品页面,或开始购买时,Google Play 以当地货币显示向他们收取的价格。
+
+</p>
+
+<p>
+  对于每个产品,您首先按自己的货币设置默认价格。如果您不再设置其他价格,Google Play 将根据美元价格,每月一次为您的应用自动设置当地价格。
+
+
+</p>
+
+<p>
+  但是,Google Play 让您能够完全控制您的产品在每个国家的定价方式。
+首先,您可以使用
+<strong>立即自动换算价格</strong>
+功能来手动设置与默认价格不同的固定本地价格。然后可以审查这些价格并为所需的任何国家设置新价格 &mdash; 每个国家的价格是独立的,因此可以调整一个价格,而不影响其他价格。
+
+对于大多数国家,您设置的价格是向用户收取的最终价格,包括税额。
+
+</p>
+
+<p>
+  有关应用定价的更多信息,请参阅<a href="{@docRoot}distribute/users/expand-to-new-markets.html#localize-your-google-play-listing">
+扩展到新市场</a>。
+</p>
+
+<div class="headerLine">
+  <h2 id="in-app-products">
+    应用内产品
+  </h2>
+
+
+</div>
+
+<p>
+  您可以使用 <a href="{@docRoot}google/play/billing/index.html">Google Play 的应用内结算</a>来销售应用内的产品和订阅,作为将应用货币化的一种方式。
+应用内产品是一次性购买,而订阅是每月或每年重复收费。
+
+</p>
+
+<p>
+  在特定的已发布或草稿 APK 的<strong>应用内产品</strong>部分,您可以:
+
+</p>
+
+<ul>
+  <li>创建应用内产品和订阅的产品详情。
+  </li>
+
+  <li>设置价格。
+  </li>
+
+  <li>和应用一起发布产品或撤消过时的产品。
+  </li>
+</ul>
+
+<p>
+  有关如何实现应用内结算的详情,请参考<a href="{@docRoot}google/play/billing/index.html">应用内结算</a>开发者文档。
+您可以按<a href="{@docRoot}distribute/monetize/premium.html">增值</a>、<a href="{@docRoot}distribute/monetize/freemium.html">免费增值</a>和<a href="{@docRoot}distribute/monetize/subscriptions.html">订阅</a>
+等盈利模式来充分利用应用内的产品
+</p>
+
+<div class="headerLine">
+  <h2 id="distribution-controls">
+    分发控制
+  </h2>
+
+
+</div>
+
+<p>
+  管理您的应用将分发到哪些国家和地区。对于一些国家,您可以选择您的目标运营商。
+还可以查看您的应用适合的设备列表,此列表基于其清单文件中声明的任何分发规则。
+
+
+</p>
+
+<h3 id="geotargeting">
+  设置地理目标
+</h3>
+
+<p>
+  您可以使用 Google Play 开发者控制台中的控件,轻松管理应用的地理区域分发,而无需更改应用的二进制文件。
+
+可以指定您希望分发到哪些国家和地区,甚至是哪些运营商(在某些国家)。
+
+</p>
+
+<p>
+  当用户访问商店时,Google Play 确保他们处于您的目标国家之一,才能下载您的应用。
+可以随时更改您的目标国家和运营商,只需在 Google Play 开发者控制台中保存更改。
+
+
+</p>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-supported-dev-requirements.png" class="frame">
+</div>
+
+<p>
+  为帮助您向全世界的用户营销,可以将<a href="{@docRoot}distribute/tools/launch-checklist.html#start-localization">您的商品详情本地化</a>,包括应用的详情和说明,宣传图形、屏幕截图等。
+
+
+</p>
+
+<h3 id="captargeting">
+  设置能力目标
+</h3>
+
+<p>
+  Google Play 还允许您根据应用所依赖的设备功能或能力来控制分发。
+应用可以在其清单文件中定义几种依赖条件,如硬件功能、OpenGL 纹理压缩格式、库、Android 平台的版本等。
+
+
+
+</p>
+
+<p>
+  当您上传应用后,Google Play 读取这些依赖条件,并设置任何必要的分发规则。
+如需有关声明依赖条件的技术信息,请阅读<a href="{@docRoot}google/play/filters.html"> Google Play 上的筛选条件</a>。
+
+
+</p>
+
+<p>
+  为了对分发进行精确控制,Google Play 允许您查看您的应用根据其依赖条件(若有)所适合的所有设备。
+在 Google Play 开发者控制台中,您可以列出受支持的设备,甚至可以排除特定的设备(若需要)。
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="reviews-reports">
+    用户评价和崩溃报告
+  </h2>
+
+
+</div>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-dc-reviews.png" class="frame">
+  <p class="img-caption">
+    用户评价部分能让您访问某一应用的用户评价。
+您可以用多种方式来筛选评价,以更轻松地找到问题和更有效地支持您的客户。
+
+  </p>
+</div>
+
+<p>
+  Google Play 使用户能够轻松提交对应用的评价,从而使其他用户受益。
+评价为您提供直接来自客户的可用性反馈、支持请求和重要功能问题的详情。
+
+
+</p>
+
+<p>
+  使用崩溃报告来调试和改进您的应用。您可以看到通过 Android 设备自动提交的、包含堆栈跟踪和其他数据的崩溃报告。
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="app-stats">
+    应用统计信息
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:500px">
+  <img src="{@docRoot}images/gp-dc-stats.png">
+  <p class="img-caption">
+    <b>应用统计信息页</b>:向您显示有关某一应用的安装性能的各种统计信息。
+
+  </p>
+</div>
+
+<p>
+  可获得您的应用安装性能的详细统计信息。
+</p>
+
+<p>
+  查看按独特用户和独特设备衡量的安装指标。
+查看主动安装量、总安装量、升级量、每日安装量和卸载量,以及有关评级的指标。
+
+</p>
+
+<p>
+  按各种指标详细了解安装数字,包括 Android 平台版本、设备、国家、语言、应用版本和运营商。
+在时间线图表上查看每个维度的安装数据。
+
+</p>
+
+<p>
+  这些图表突出说明您的应用的安装峰值和长期趋势。
+  可帮助您了解用户的采用行为、将统计信息与推广活动关联,了解应用改进的效果和其他因素。
+通过给时间线添加特定时点,以重点关注一个维度内的数据。
+
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="dynamic-grid">
+<div class="headerLine">
+<h2 id="related-resources">相关资源</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/developerconsole"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+  </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/families/about.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/about.jd
new file mode 100644
index 0000000..ca85edc
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/about.jd
@@ -0,0 +1,61 @@
+page.title=为家庭设计
+page.metaDescription=“为家庭设计”有助于使您的应用和游戏更容易被家庭发现。
+page.image=/distribute/images/about-dff-sm.jpg
+meta.tags="families, googleplay, distribution"
+page.tags="families"
+
+@jd:body
+
+<p>
+  在几个星期后,Google Play 上一种以家庭为中心的新体验将为用户提供新的方式来浏览、搜索和发现适合其家庭的优质应用和游戏。
+
+
+</p>
+
+<p>
+  为支持更适合家庭的商店,我们邀请开发者选择将以家庭为中心的应用和游戏加入新的“为家庭设计”计划。
+符合
+<a href="https://support.google.com/googleplay/android-developer/answer/6184502">该计划
+要求</a>的应用将展示在新的家庭体验中,以便家长们更轻松地找到合适、受信任的优质应用和游戏。
+
+</p>
+
+<img src="{@docRoot}distribute/images/about-dff-sm.jpg">
+
+<p>
+  立即使用您目前在开发者控制台中用于管理应用的工具和流程,选择将您的应用和游戏加入其中。
+加入该计划的应用,除了保持 Google Play 商店中其他位置的现有类别、排名和评价外,还能更容易被用户发现。
+
+
+
+</p>
+
+<h2 id="elibibility">资格</h2>
+
+<p>
+  Google Play 家庭友好体验中的应用更容易被家长和家庭发现,他们希望应用与孩子的年龄相称。
+
+“为家庭设计”计划旨在包括专为孩子设计的应用以及可由全家人使用的应用。
+
+为满足这些受众的需求,您的应用需要符合特定的准则和政策,这将在应用内容审查时进行评估。
+
+
+</p>
+
+<p>
+  请务必熟悉您的应用必须遵守的政策。
+这些政策包括<a href="http://play.google.com/about/developer-content-policy.html">内容政策</a>、<a href="http://play.google.com/about/developer-distribution-agreement.html">开发者分发协议</a>和<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">
+为家庭设计 DDA 附录</a>。
+
+
+</p>
+
+<p>
+  您的应用还必须符合 Google Play 开发者帮助中心列出的<a href="https://support.google.com/googleplay/android-developer/answer/6184502">“为家庭设计”计划的要求</a>。
+
+
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">下一步:选择加入</a>
+</div>
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/faq.jd
new file mode 100644
index 0000000..ea8bb61
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/faq.jd
@@ -0,0 +1,329 @@
+page.title=常见问题
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=“为家庭设计”计划的问答
+
+@jd:body
+
+    <style>
+  dt {
+    font-weight:bold;
+  }
+  </style>
+  
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>本文内容</h2>
+<ol>
+  <li><a href="#review">应用的审查和加入</a></li>
+  <li><a href="#monetization">盈利</a></li>
+  <li><a href="#other">其他问题</a></li>
+</ol>
+</div>
+
+<p>
+  以下部分提供了有关“为家庭设计”的更多信息并回答了您可能遇到的常见问题。
+
+</p>
+
+
+<h2 id="review">应用的审查和加入</h2>
+
+<dl>
+<dt>如何加入我的应用?</dt>
+
+<dl>
+  <dd>
+    可以在 Google Play 开发者控制台的“定价和分发”选项卡上,将您的应用加入“为家庭设计”计划。
+以下是 <a href="{@docRoot}distribute/googleplay/families/start.html">逐步操作过程</a>。
+
+  </dd>
+
+  <dt>
+    在何处披露我的应用的交互功能?你们为何收集此信息?
+
+  </dt>
+
+  <dd>
+    交互功能的披露是内容分级调查问卷的一部分。
+作为加入“为家庭设计”计划流程的一部分,您有机会审查您的披露信息。
+我们收集此信息是为了用户在评价您的应用时能够做出知情的选择。
+
+
+  </dd>
+
+  <dt>
+    什么是 COPPA?
+  </dt>
+
+  <dd>
+    COPPA 是联邦贸易委员会 (FTC) 的儿童在线隐私保护法的简称。
+详细信息请参考<a href="http://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions">
+ FTC 有关 COPPA 的常见问题</a>。注意:Google Play 无法向开发者提供有关如何遵守 COPPA 或其他儿童法规的法律指导。
+
+  </dd>
+
+  <dt>
+    我是否需要提供最新的隐私政策,在何处提供?
+  </dt>
+
+  <dd>
+    是的,您需要在应用的商品详情中提供一个永久性隐私政策的链接,并在开发者控制台中确认您遵守当地隐私法规。
+
+要添加或审查您的隐私政策,请在开发者控制台中选择您的应用,然后滚动到<strong>商品详情</strong>部分的底部。
+
+
+  </dd>
+
+  <dt>
+    可以选择多少个年龄组?
+  </dt>
+
+  <dd>
+    可以选择最多两个相邻的年龄组。年龄组有:5 岁及以下,6-8 岁、9-12 岁。
+但是,如果应用的目标受众包括儿童和年龄较大的受众,则必须选择<em>一般受众</em>类别。
+
+
+  </dd>
+
+  <dt>
+    在“为家庭设计”计划中可以选择多少个内容类别?
+
+  </dt>
+
+  <dd>
+    作为“为家庭设计”计划的一部分,可以选择一个类别,同时为一般的 Google Play 商店选择另一类别。
+
+  </dd>
+
+  <dt>
+    “为家庭设计”有哪些类别?
+  </dt>
+
+<ul>
+<li><strong>动作和冒险</strong>:这是动作类应用/游戏,并且包括赛车游戏、童话冒险等各种类型。
+
+  </li>
+
+  <li style="list-style: none"><strong>智力游戏</strong>:此类别包括激发用户思考的游戏,包括拼图、配对游戏和类似的游戏。
+
+
+  </li>
+
+  <li><strong>创造性</strong>:这是激发创造性的应用/游戏。
+  我们期望加入此类别的应用/游戏类型包括绘画、绘图和其他建造类游戏。
+
+  </li>
+
+  <li><strong>教育</strong>:这是具有教育价值的应用/游戏,包括数学、科学、学习字母表、学习数数以及更多类型的教育内容,例如地理和历史。
+
+
+  </li>
+
+  <li><strong>音频和视频</strong>:这是包含音乐元素或视频内容的应用/游戏,包括弹钢琴、看视频等各种应用/游戏。
+
+
+  </li>
+
+  <li><strong>角色扮演</strong>:这是可让人扮演角色的应用/游戏,例如扮演厨师或医生。
+
+  </li>
+</ul>
+
+<dl>
+  <dt>
+    如果我选择加入“为家庭设计”计划,发布应用的时间会更长吗?
+
+  </dt>
+
+  <dd>
+    当您加入“为家庭设计”计划时,Google Play 会审查您的应用以确认它是否适合家庭。
+假设您的应用符合该计划的所有要求,我们预计发布时间不会超过正常时间;但是,如果在“为家庭设计”审查时被拒绝,则应用的发布可能会延迟。
+
+
+ 
+  </dd>
+
+  <dt>
+    如果我的应用被“为家庭设计”计划拒绝,会怎样?
+  </dt>
+
+  <dd>
+    如果您的应用被“为家庭设计”计划拒绝,我们将在开发者控制台和详细的电子邮件中指出原因。
+您将有机会纠正问题,然后将您的应用重新提交到该计划,或更改您的加入回应。
+
+注意:如果是在 Google Play 上线的现有应用,则只有应用更新将被拒绝(您的应用将在 Play 商店上保持上线状态)。
+
+如果您将一个不符合要求的新应用提交到“为家庭设计”计划,则整个应用提交将被拒绝,该应用将不会发布在 Play 商店上。
+
+
+然后,您可以解决已确定的问题,并将应用重新提交到“为家庭设计”计划或退出该计划。
+
+  </dd>
+
+  <dt>
+    如果我的应用在发布之后被发现不符合“为家庭设计”计划的要求,会怎样?
+
+  </dt>
+
+  <dd>
+    您的应用不仅会从“为家庭设计”计划中删除,还可能会从 Google Play 商店中删除或暂停。
+被删除的应用可以采用与被拒绝应用相同的补救办法。
+暂停的应用则可以通过开发者申诉流程来申诉。
+
+  </dd>
+
+  <dt>
+    如果我加入“为家庭设计”计划,以后可以退出吗?
+  </dt>
+
+  <dd>
+    是的,可以随时退出该计划。请注意:退出后,您将失去在家庭友好型新体验中的位置,也不能再享受该计划的其他好处。
+
+
+  </dd>
+
+  <dt>
+    当我的应用被接受加入计划之后,我更新应用时会怎样?
+
+  </dt>
+
+  <dd>
+    作为“为家庭设计”计划一部分的应用需要始终符合资格要求。
+如果需要编辑与应用关联的“为家庭设计”元数据,请转到 Google Play 开发者控制台的“定价和分发”部分,以编辑此信息。
+
+
+如果应用更新导致您的目标受众改变,我们建议您提醒已安装该应用的用户。
+
+
+  </dd>
+
+  <dt>
+    使用 Google 登录或 Google Play 游戏服务的应用和游戏是否可以加入“为家庭设计”计划?
+
+  </dt>
+
+  <dd>
+    参加“为家庭设计”计划的、完全以儿童为中心的(即针对以下年龄组:5 岁及以下、6-8 岁或 9-12 岁)的应用<strong>不得</strong>使用 Google+ 登录或 Google Play 游戏服务作为其应用的登录方法。
+
+
+
+
+
+    <p>
+      参加“为家庭设计”计划的、针对儿童和年龄较大受众的应用可以使用 Google+ 登录或 Google Play 游戏服务作为一个
+<strong>可选</strong>功能。
+儿童用户必须在不登录 Google+ 或 Google Play 游戏服务的情况下,就能访问整个应用或游戏。
+
+    </p>
+  </dd>
+
+  <dt>
+    我的应用已加入 Google Play for Education 并且集成了 Google 登录,以便学生使用其学校帐号登录。
+是否需要更改 Google 登录在我的应用中执行的方式?
+
+   </dt>
+
+  <dd>
+    参加 Google Play for Education 的应用可以使用学生帐号的 Google 登录名,只要它不是该应用所有用户的阻止要求。
+
+  </dd>
+</dl>
+
+<h2 id="monetization">
+  “为家庭设计”计划的盈利
+</h2>
+
+<dl>
+  <dt>
+    能否为我提供有关“为家庭设计”计划广告政策的详细信息?
+
+  </dt>
+
+  <dd>
+    请阅读<a href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">
+“为家庭设计”的广告政策</a>。
+  </dd>
+
+  <dt>
+    我的应用可以投放插页式广告吗?
+  </dt>
+
+  <dd>
+    插页式广告可能适合于某些应用。但是,在显示任何广告之前,用户必须能导航到主要活动。
+
+  </dd>
+
+  <dt>
+    如何知道我的广告网络是否符合“为家庭设计”的广告政策?
+
+  </dt>
+
+  <dd>
+    请联系您的广告网络,询问他们的内容政策和广告做法。
+如果您使用 AdMob,请参阅 <a href="https://support.google.com/admob/answer/3248194">AdMob 帮助中心</a>,了解有关如何将您的应用或特定广告单元标记为面向儿童的详细信息。
+
+由开发者负责确保应用内广告的整个用户体验符合<a href="https://support.google.com/googleplay/android-developer/answer/6184502">“为家庭设计”计划的要求</a>。
+
+
+  </dd>
+
+  <dt>
+    我的应用中是否可以设置应用内购买?
+  </dt>
+
+  <dd>
+    在参加“为家庭设计”计划的应用中,除了符合<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">
+为家庭设计 DDA</a> 和其他适用的法律要求之外,没有与应用内购买 (IAP) 相关的特定限制,但 Play 商店有权拒绝广告策略过于激进的应用。
+
+
+
+Google Play 将对参加“为家庭设计”计划、主要针对儿童受众的所有应用执行 IAP 密码保护,以确保家长(不是儿童)批准购买。
+
+
+请注意:这种处理方法并不扩展到针对一般受众的应用。
+
+  </dd>
+</dl>
+
+<h2 id="other">
+  其他问题
+</h2>
+
+<dl>
+  <dt>
+    参加“为家庭设计”的应用的预期目标受众是哪些人?
+
+  </dt>
+
+  <dd>
+    我们的目标是在 Google Play 商店上提供一种出色的体验,让家长和监护人发现受信任的品牌和开发者专为孩子和家庭设计的令人愉快的应用。
+
+
+  </dd>
+
+  <dt>
+    “为家庭设计”计划是否只向某些国家的开发者提供?
+
+  </dt>
+
+  <dd>
+    “为家庭设计”是一项全球计划。
+  </dd>
+
+  <dt>
+    已在目前的“家庭游戏”类别中发布的应用会怎样?
+
+  </dt>
+
+  <dd>
+    目前的“家庭游戏”类别将在 2015 年 5 月废弃。目前在“家庭游戏”类别中的应用将必须在 Play 商店中选择一个不同的类别。
+
+没有选择另一个类别的应用将被分配到“休闲游戏”类别。
+
+  </dd>
+</dl>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="https://docs.google.com/forms/d/1EtvUWqlkxS6RxHJjeI-3-7uzdbIZx6n9Cocy2D369B8/viewform" class="next-class-link">下一步:保持联系</a>
+</div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/families/start.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/start.jd
new file mode 100644
index 0000000..aab4b5a
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/families/start.jd
@@ -0,0 +1,106 @@
+page.title=加入“为家庭设计”计划
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=加入“为家庭设计”计划只需几个简单步骤。
+
+@jd:body
+
+<p>
+  如果您正在开发一个针对孩子和家庭的应用,在准备加入“为家庭设计”计划<em>之前</em>,您需要做几件事情:
+
+
+</p>
+
+<ul>
+  <li>为您的应用填写内容分级问卷调查,并且要符合 ESRB 分级中的任何人或 10 岁以上任何人等级。
+
+  </li>
+
+  <li>给应用<strong>商品详情</strong>
+页面添加一个隐私政策链接。
+  </li>
+
+  <li>确保您的应用符合<a href="https://support.google.com/googleplay/android-developer/answer/6184502">“为家庭设计”计划的所有要求</a>。
+
+  </li>
+</ul>
+
+<p>
+  现在,您的应用已为发布做好准备,可以直接从<a href="https://play.google.com/apps/publish/">开发者控制台</a>中加入“为家庭设计”。
+加入即表示您希望此应用除了放入您在 Google Play 商店中选择的类别之外,还放入 Google Play 的家庭友好型新体验中。
+
+
+
+</p>
+
+<p>
+  加入也是确认您的应用符合 <a href="http://play.google.com/about/developer-content-policy.html">Google Play 开发者计划政策</a>和<a href="http://play.google.com/about/developer-distribution-agreement.html">开发者分发协议</a>,包括<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">为家庭设计 DDA 附录</a>。
+
+
+如果您不熟悉这些政策文件或附录,在加入之前请务必阅读这些资料。
+
+</p>
+
+<p>
+  在您准备好之后,以下说明了将某一应用加入“为家庭设计”计划的方式:
+</p>
+
+<ol>
+<li>在开发者控制台的<strong>所有应用</strong>页面中,点击您要加入的应用。
+在“定价和分发”下面,向下滚动找到 <strong>为家庭设计</strong>和“加入”复选框。<img src="/images/gp-dff-optin.png" style="border:2px solid #ddd;margin:1em 0;">
+
+  </li>
+
+  <li>开始加入流程,并确认您的应用符合资格要求。
+</li>
+  <li>如果您的应用内有广告,请确认它符合广告政策。
+<img src="/images/gp-dff-appinfo.png" style="border:2px solid #ddd;margin:1em 0;"></li>
+  <li>选择目标年龄组:5 岁及以下、6-8 岁、9-12 岁或一般受众(针对儿童和年龄较大受众的应用)。
+
+如果您的应用针对多个年龄组,则可以选择最多两个相邻的年龄组。
+ESRB 10+ 分级的应用只能选择一个目标年龄:9-12 岁或一般受众。
+
+  </li>
+
+  <li>针对 Google Play 上以家庭为中心的新体验,为您的应用选择一个类别。
+您的应用也将显示在它在 Google Play 中的现有类别中。
+</li>
+  <li>查看并同意链接的文档,然后点击
+<strong>加入</strong>。最后,在“定价和分发”页上点击<strong>提交更新</strong>以发布或更新您的应用。
+
+  </li>
+</ol>
+
+<p>
+  在加入您的应用之后,它将接受彻底审查,然后才能被“为家庭设计”计划接受。
+
+</p>
+
+<p class="note">
+  <strong>注意</strong>:在“为家庭设计”计划中发布的应用也可供
+ Google Play 上的所有用户使用。 
+</p>
+
+<p>
+  如果加入的应用是首次发布并且不符合“为家庭设计”计划的要求,则不会在 Google Play 上提供,<strong>直到</strong>您更新应用以符合计划的要求,<strong>或</strong>您取消选中“加入”框并通过 Google Play 的标准审查流程。
+
+
+
+
+</p>
+
+<p>
+  如果加入的应用已发布在 Google Play 上并且不符合该计划的要求,则它仍然可供所有用户使用,但不会添加到新的家庭体验中,直到您更新应用以符合该计划的要求。
+
+
+
+</p>
+
+<p>
+  如果是发布已加入“为家庭设计”计划的应用的更新,则应用更新需要通过“为家庭设计”审查,才能提供给 Google Play 的所有用户。
+
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">下一步:常见问题</a>
+</div>
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/guide.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/guide.jd
new file mode 100644
index 0000000..b70bcb5
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/guide.jd
@@ -0,0 +1,70 @@
+page.title=在 Google Play 上取得成功
+page.metaDescription=帮助您的应用或游戏业务在 Google Play 上取得成功的指南。
+meta.tags="distribute", "bestpractices"
+page.tags="google play", "business", "monetize", "engagement"
+page.image=distribute/images/play_dev_guide.png
+
+@jd:body
+
+<p>
+  我们编写了一份可下载的指南,以帮助您的应用或游戏业务在 Google Play 上取得成功。
+在该指南中,您将发现各种功能、技巧和最佳做法,以帮助您建立一种有效的策略。
+
+</p>
+
+<p>
+  该指南分为以下几个部分:
+</p>
+<ul>
+  <li>
+    <strong>在 Google Play 上发布</strong> &mdash;使用 Google Play
+ 的开发者控制台,将您的应用分发给全球超过 10 亿 
+Android 用户。
+  </li>
+
+  <li>
+    <strong>质量</strong> &mdash; 开发出色应用的基本原则以及对 Google Play 准则和政策的详细介绍。
+
+  </li>
+
+  <li>
+    <strong>可发现性和影响范围</strong> &mdash; 最大程度提高应用的可发现性,尽可能影响最广泛的受众。
+
+  </li>
+
+  <li>
+    <strong>参与和保留</strong> &mdash; 将安装量转化为活跃用户并提高用户保留率。
+
+  </li>
+
+  <li>
+    <strong>盈利</strong> &mdash; 可产生持续增长的收入流的货币化策略。
+
+  </li>
+
+  <li>
+    <strong>通过 Google Analytics 衡量</strong> &mdash; 了解您的用户并改善应用的体验、提高转化率和提升营销效果。
+
+  </li>
+
+  <li>
+    <strong>全球化</strong> &mdash; 在全球各地的当地市场中发布您的应用。
+
+  </li>
+</ul>
+
+<p>
+  要下载该指南,请点击下面的图片或<a href="http://goo.gl/DFjbrS">在 Google Play 下载</a>。
+</p>
+
+<p>
+  在未来几个月中,我们将发布该指南的更多语言版本。请定期回访本网站,因为我们会发布有关新功能和最佳做法的信息,以帮助您分发应用并从中盈利。
+
+
+</p>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:play_dev_guide"
+    data-cardSizes="9x6"
+    data-maxResults="1">
+  </div>
+
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/auto.jd
new file mode 100644
index 0000000..a590446
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/auto.jd
@@ -0,0 +1,488 @@
+
+page.title=汽车应用的质量
+page.metaDescription=汽车应用与车辆的输入控制和显示屏集成,并最大程度减少驾驶员分散注意力问题,以创造出色的体验。
+page.image=/distribute/images/gp-auto-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>质量标准</h2>
+  <ol>
+    <li><a href="#core">核心的应用质量</a></li>
+    <li><a href="#ux">视觉设计和交互</a></li>
+    <li><a href="#fn">功能</a></li>
+    <li><a href="#faq">常见问题</a></li>
+  </ol>
+
+  <h2>您还应阅读</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+核心的应用质量</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+优化您的应用</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">针对音频应用的 Android Auto 用户体验准则</a>
+</li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">针对消息应用的 Android Auto 用户体验准则</a>
+</li>
+  </ol>
+</div>
+</div>
+
+
+  <img src="{@docRoot}distribute/images/gp-auto-quality.png" style="width:480px;">
+
+
+<p>在应用中设计对 Android Auto 的支持时,避免驾驶员分散注意力高于一切。
+  采用汽车用户界面的应用应尽最大程度减少驾驶员所面临的注意力分散问题,可采用语音命令和非常简单的视觉设计等最佳做法。
+
+</p>
+
+<p>
+  优秀的汽车体验是可预料和预测的。支持 Android Auto 的应用仅在相关时向驾驶员显示及时信息,并且为常见任务采用简单、可预测的模式。
+
+
+</p>
+
+<p class="caution">
+  <strong>重要说明:</strong>本页列出的标准适用于应用在连接到 Android Auto 屏幕的设备上运行时,应用的用户界面和行为。
+应用必须符合标准,才能有资格在 Google Play 上作为 Android Auto 应用。
+
+</p>
+
+
+<div class="headerLine">
+  <h2 id="core">
+  核心的应用质量
+  </h2>
+
+<p>
+ 除了下面列出的汽车特有标准之外,汽车应用还应符合 Android 平台的所有相关核心应用质量标准,详情信息请参考
+<a href="{@docRoot}distribute/essentials/quality/core.html">核心应用质量</a>标准。
+对照这些标准测试您的应用,以确保应用符合有关导航和设计的 Android 标准。
+
+然后对照所有汽车特有标准来测试您的应用,记住,在连接到 Android 汽车的设备上运行时,应用必须符合本页列出的要求。
+
+
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  视觉设计和用户交互
+  </h2>
+
+</div>
+
+<p>
+  这些标准可确保您的应用遵循标准设计和交互模式,以确保在 Android Auto 上实现一致、直观和愉悦的用户体验。
+许多元素由系统设置和呈现,例如导航抽屉、卡背景、字体和图标颜色等。
+
+应用特有的设计元素必须符合以下标准。
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    类型
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="safety">
+    驾驶员注意力
+  </td>
+
+  <td id="AU-MV">
+    AU-MV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用不能在汽车屏幕上显示动画元素,例如动画图形、游戏、视频或进度条。
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VA">
+    AU-VA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用不能在汽车屏幕上显示任何形式的视觉或文字广告。只接受音频广告。
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-IM">
+    AU-IM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用元素不能在汽车屏幕上显示任何图像。例外情况:应用可显示单张静态图像作为活动屏幕背景中的内容关联,例如专辑封面,并且应用可以在内容导航抽屉中显示图标。
+
+
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-DS">
+    AU-DS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用不能包括任何分散驾驶员注意力的功能。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VI">
+    AU-VI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    当应用在 Android Auto 中运行时,应用不能在手机屏幕上显示任何形式的视觉信息,如通知、提醒、视频、图像、广告等。
+
+    </p>
+  </td>
+</tr>
+
+
+
+<tr>
+  <td rowspan="3" id="layout">
+    布局   
+  </td>
+
+  <td id="AU-SC">
+    AU-SC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用不能显示自动滚动文本。
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td id="AU-FT">
+    AU-FT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用使用两种批准大小的默认 Roboto 字体来显示所有字符串。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-ST">
+    AU-ST
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用不能显示任何超过 120 个字符的单个字符串。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="contrast">
+    视觉对比度
+  </td>
+
+  <td id="AU-DM">
+    AU-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用支持白天模式,在浅色背景上呈现深色文本和控件。
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NM">
+    AU-NM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用支持夜间模式,在深色背景上呈现浅色文本和控件。
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-WI">
+    AU-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用提供白色图标集,让系统进行着色以提供自动对比度补偿。
+
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-OC">
+    AU-OC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用提供系统可进行优化的颜色,以便在车内轻松阅读。
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="interaction">
+    交互
+  </td>
+
+  <td id="AU-VC">
+    AU-VC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用必须支持语音命令。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-AB">
+    AU-AB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用特有的按钮响应用户操作时,延迟不超过 2 秒。
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  遵循这些标准可确保您的应用进行正确配置,提供预期的功能行为。
+
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    类型
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="general">
+   一般
+  </td>
+
+  <td id="AU-LT">
+    AU-LT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用加载时间不超过 10 秒。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-FP">
+    AU-FP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     汽车应用的功能符合预期或符合应用在 Google Play 商品详情中的描述。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-RL">
+    AU-RL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     当应用从主屏幕重新启动时,应用会尽可能恢复为与之前状态
+最接近的状态。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SS">
+    AU-SS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     在应用中没有需要超过六个步骤才能完成的任务。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-GO">
+    AU-GO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     不起作用或禁用的任何应用按钮必须显示灰色。
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="media">
+    媒体
+  </td>
+
+
+  <td id="AU-PA">
+    AU-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用不能有超过四个主要操作按钮加一个可选的“更多”操作切换按钮(或五个,若不使用更多操作按钮)。
+
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SA">
+    AU-SA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用不能有超过四个可选的辅助操作按钮加一个“更多”操作切换按钮。
+     (<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="notifications">
+    通知
+  </td>
+
+  <td id="AU-NA">
+    AU-NA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用不能通过通知显示广告。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NT">
+    AU-NT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     应用只有在驾驶员需要时才显示通知。
+   </p>
+   <p>
+    示例:<br />
+    可取:通知用户已收到新消息。<br />
+    不好:通知用户有新专辑发布。
+    </p>
+  </td>
+</tr>
+
+</table>
+
+<!--
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+-->
+
+<div class="headerLine">
+  <h2 id="faq">
+  常见问题
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>在提交我的应用后,怎样发现应用是否符合 Android Auto 的所有要求?</strong>
+
+</p>
+<p>如果您打算为汽车开发应用,建议您现在开始启用相关功能并测试您的应用。
+但是,此时还不能发布汽车功能应用。加入
+<a href="http://g.co/AndroidAutoDev" class="external-link">汽车应用开发者 Google+ 社区</a>,获取有关何时能够提交汽车功能启用的更新信息。
+
+</p>
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>我的应用不仅仅针对 Android Auto。如果我的应用不符合汽车应用的要求,是否仍会在 Google Play 上向手机和平板电脑显示我的新应用或更新版本?</strong>
+
+
+</p>
+<p>
+  不会。当 Google 开始审批流程时,您的汽车应用将接受驾驶员安全审查,在应用获批准之前,不能进行分发。
+
+因为这是针对手机和平板电脑的同一 APK,针对这些设备的 Play 商店更新将不可用,直到汽车应用审批流程完成。
+
+
+</p>
+
+<p class="caution">
+  <strong>重要说明:</strong>由于此限制,请不要使用生产 APK 来进行汽车支持原型设计。
+
+</p>
+
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..0dae9e1
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/core.jd
@@ -0,0 +1,1148 @@
+page.title=核心的应用质量
+page.metaDescription=应用的质量直接影响您的应用是否能取得长期成功 — 这包括安装量、用户评级和评价、参与度以及用户保留率。
+page.image=/distribute/images/core-quality-guidelines.jpg
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>质量标准</h2>
+  <ol>
+    <li><a href="#ux">设计和交互</a></li>
+        <li><a href="#fn">功能</a></li>
+        <li><a href="#ps">性能和稳定性</a></li>
+        <li><a href="#listing">Google Play</a></li>
+
+  </ol>
+  
+  <h2>测试</h2>
+  <ol>
+    <li><a href="#test-environment">设置测试环境</a></li>
+        <li><a href="#tests">测试流程</a></li>
+        </ol>
+
+  <h2>您还应阅读</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">平板电脑应用的质量</a></li>
+        <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">优化您的应用</a></li>
+  </ol>
+  
+
+</div>
+</div>
+
+<div class="top-right-float">
+  <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;">
+</div>
+
+<p>
+  Android 用户期望获得高品质的应用。应用的质量直接影响您的应用是否能取得长期成功 — 这包括安装量、用户评级和评价、参与度以及用户保留率。
+
+
+</p>
+
+<p>
+  本文介绍一组简明的核心应用质量标准及相关的测试,旨在帮助您评估应用质量的基本方面。
+所有 Android 应用均应符合这些标准。
+
+</p>
+
+<p>
+  在发布应用之前,请根据这些标准对应用进行测试,确保应用能在多台设备上正常运行,符合 Android 的导航和设计标准,并为在 Google Play 商店开展推广做好准备。
+
+
+当然,您的测试范围远不止这里所介绍的内容,不过本文的目的是说明所有应用都应具备的基本质量特征,因此您可以在测试计划中纳入这些内容。
+
+
+</p>
+
+<p>
+  如果您要为平板电脑和/或 Google Play for Education 创建应用,还应考虑<a href="{@docRoot}distribute/essentials/quality/tablets.html">平板电脑应用的质量</a>
+准则和 <a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">Education 准则</a>
+中规定的其他质量标准。
+
+
+</p>
+
+<div class="headerLine">
+  <h2 id="ux">
+  视觉设计和用户交互
+  </h2>
+
+
+</div>
+
+<p>
+  遵循这些标准能够确保您的应用在适当的地方提供标准的 Android 视觉设计和交互模式,以实现始终如一的直观用户体验。
+
+
+</p>
+
+<table>
+  <tr>
+    <th style="width:2px;">
+      领域
+    </th>
+    <th style="width:54px;">
+      ID
+    </th>
+    
+
+    <th>
+      说明
+    </th>
+    <th style="width:54px;">
+      测试
+    </th>
+  </tr>
+  <tr id="UX-B1">
+  <td>标准设计</td>
+  <td>
+    UX-B1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用须遵循 <a href="{@docRoot}design/index.html">Android 设计</a>
+准则,采用常见的<a href="{@docRoot}design/patterns/index.html">用户界面模式和图标</a>:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>应用不能重新定义系统图标(例如“返回”按钮)的预期功能。
+
+    </li>
+
+    <li>如果系统图标触发的是标准界面行为,则应用不能使用完全不同的图标替换系统图标。
+
+    </li>
+
+    <li>如果应用提供标准系统图标的自定义版本,那么该图标要与系统图标十分相似并能够触发标准的系统行为。
+
+
+    </li>
+
+    <li>应用不能重新定义或滥用 Android 界面模式,以至于使图标或行为可能误导用户或令用户困惑。
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-全部</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td rowspan="3">
+    导航
+  </td>
+  <td id="UX-N1">
+    UX-N1
+  </td>
+  <td>
+    <p>
+    应用须支持标准的系统<a href="{@docRoot}design/patterns/navigation.html">“返回”按钮导航</a>,不能在屏幕上使用任何自定义的“返回按钮”提示。
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td id="UX-N2">
+    UX-N2
+  </td>
+  <td>
+    <p>
+    所有对话框均可以使用“返回”按钮关闭。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr id="UX-N3">
+  <td>
+    UX-N3
+  </td>
+  <td>
+    在任何位置按下“主屏幕”按钮即可转到设备的主屏幕。
+
+  </td>
+  <td>
+    <a href="#core">CR-1</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S1">
+  <td rowspan="2">
+    通知
+  </td>
+  <td>
+    UX-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    通知须遵循 Android 设计<a href="{@docRoot}design/patterns/notifications.html">准则</a>。尤其是:
+
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>如果可能,应将多个通知放入一个通知对象中。
+
+    </li>
+
+    <li>只有与进行中的活动(例如音乐播放或通话)相关时,通知才会持续保留。
+
+    </li>
+
+    <li>通知中不能包含广告或与应用核心功能无关的内容,除非用户选择接受这样的通知。
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S2">
+  <td>
+    UX-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用只为实现以下目的才能使用通知:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>说明与用户个人相关的上下文更改(例如收到消息),或者
+
+    </li>
+
+    <li>展示与进行中的活动(例如音乐播放或通话)相关的信息/控件。
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  遵循这些标准能够确保您的应用通过合适的权限级别,提供预期的功能行为。
+
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    领域
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    说明
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  </tr>
+
+  <tr id="FN-P1">
+  <td rowspan="2">
+    权限
+  </td>
+  <td>
+    FN-P1
+  </td>
+  <td>
+    应用只能请求为支持核心功能而需要的<em>绝对最低级别</em>权限。
+
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="FN-P2">
+  <td>
+    FN-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    除非与应用的核心功能相关,否则应用不能请求访问敏感数据(例如通讯录或系统日志)或访问用户付费服务(例如拨号器或短信)的权限。
+
+
+
+    </p>
+  </td>
+  </tr>
+
+  <tr id="FN-L1">
+  <td>
+    安装位置
+  </td>
+  <td>
+    FN-L1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用安装在 SD 卡上(如果应用支持)时应可以正常工作。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    建议大多数的大型应用(大于 10MB)支持安装到 SD 卡。
+请参阅<a href="{@docRoot}guide/topics/data/install-location.html">应用安装位置</a>开发者指南,了解哪些类型的应用应该支持安装到 SD 卡。
+
+
+    </p>
+  </td>
+  <td>
+    <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A1">
+  <td rowspan="4">
+    音频
+  </td>
+  <td>
+    FN-A1
+  </td>
+  <td>
+    音频不能在屏幕关闭时播放,除非这是应用的核心功能(例如应用是音乐播放器)。
+
+  </td>
+  <td>
+    <a href="#core">CR-7</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A2">
+  <td>
+    FN-A2
+  </td>
+  <td>
+    音频不能<a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">
+在锁定屏幕后播放</a>,除非这是应用的核心功能。
+  </td>
+  <td>
+    <a href="#core">CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A3">
+  <td>
+    FN-A3
+  </td>
+  <td>
+    音频不能在主屏幕上或其他应用运行时播放,除非这是应用的核心功能。
+
+  </td>
+  <td>
+    <a href="#core">CR-1,<br>
+ CR-2</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A4">
+  <td>
+    FN-A4
+  </td>
+  <td>
+    音频应在应用返回前台时恢复,或者提示用户播放已处于暂停状态。
+
+  </td>
+  <td>
+    <a href="#core">CR-1,CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U1">
+  <td rowspan="3">
+    用户界面和图形
+  </td>
+  <td>
+    FN-U1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用须同时支持横屏和竖屏方向(如果可能)。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    两种方向应展现大致相同的特征和操作,并保持同等功能。
+对内容或视图做出细微更改是可接受的。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U2">
+  <td>
+    FN-U2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用在两种显示方向下都占用整个屏幕,不能因为显示方向更改而出现黑边。
+
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    为补偿屏幕几何图形的细微差异而出现少许黑边是可接受的。
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U3">
+  <td>
+    FN-U3
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用须正确处理显示方向之间的快速转换,而不会出现呈现问题。
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S1">
+  <td rowspan="2">
+    用户/应用状态
+  </td>
+  <td>
+    FN-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用转入后台时,不应再有任何服务处于运行状态,除非该服务与应用核心功能相关。
+
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    例如,应用不得为了以下目的而让服务保持运行状态:为接收通知而保持网络连接、保持蓝牙连接或保持 GPS 开启。
+
+
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-6</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S2">
+  <td>
+    FN-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用须正确保留和恢复用户或应用的状态。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    应用在离开前台时须保留用户或应用的状态,并防止因返回导航和其他状态更改而意外导致数据丢失。
+
+返回前台时,应用必须恢复保留的状态和待处理的任何重要的状态性事务,例如对可编辑字段的更改、游戏进程、菜单、视频以及应用或游戏的其他部分。
+
+
+
+    </p>
+
+    <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+    <li>当应用从“最近使用的应用”切换器恢复时,它能够准确地让用户返回到上次使用的状态。
+
+    </li>
+
+    <li>当设备从休眠(锁定)状态中被唤醒后,在应用恢复时,应用须准确地让用户返回到上次使用的状态。
+
+
+    </li>
+
+    <li>当应用从主屏幕或“所有应用”重新启动时,应用会尽可能恢复为与之前状态最接近的状态。
+
+    </li>
+
+    <li>在按“返回”键时,应用须让用户选择是否保存会因返回导航而丢失的任何应用或用户状态。
+
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-1,CR-3,CR-5</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ps">
+  性能和稳定性
+  </h2>
+
+
+</div>
+
+<p>
+  遵循这些标准能够确保应用提供用户期望的性能、稳定性和响应速度。
+
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    领域
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    说明
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  </tr>
+
+  <tr id="PS-S1">
+  <td>
+    稳定性
+  </td>
+  <td>
+    PS-S1
+  </td>
+  <td>
+    应用不能在任何适配的设备上崩溃、强制关闭、冻结或出现其他功能异常。
+
+  </td>
+  <td>
+    <a href="#core">CR-全部</a>,<a href="#SD-1">SD-1</a>,<a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P1">
+  <td rowspan="2">
+    性能
+  </td>
+  <td>
+    PS-P1
+  </td>
+  <td>
+    应用须迅速加载,如果加载时间超过 2 秒,须在屏幕上向用户提供反馈(进度指示器或类似提示)。
+
+
+  </td>
+  <td>
+    <a href="#core">CR-全部</a>,<a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P2">
+  <td>
+    PS-P2
+  </td>
+  <td>
+    启用 StrictMode 之后(请参阅下文的 <a href="#strictmode">StrictMode 测试</a>),在应用运行期间(包括玩游戏、动画和界面转换期间以及应用的其他部分),指示灯不会呈红色闪烁(StrictMode 的性能警告)。
+
+
+
+  </td>
+  <td>
+    <a href="#PM-1">PM-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-M1">
+  <td>
+    媒体
+  </td>
+  <td>
+    PS-M1
+  </td>
+  <td>
+    在应用正常使用和加载期间,音乐和视频须播放流畅,没有中断、卡壳或其他异常声音。
+
+  </td>
+  <td>
+    <a href="#core">CR-全部</a>,<a href="#SD-1">SD-1</a>,<a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V1">
+  <td rowspan="2">
+    视觉质量
+  </td>
+  <td>
+    PS-V1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用显示的图形、文本、图片和其他界面元素须没有明显的失真、模糊或像素化。
+
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>应用须为所有适配的屏幕尺寸和机型提供高品质的图形,包括<a href="{@docRoot}distribute/essentials/quality/tablet.html">平板电脑等大屏幕设备</a>。
+
+
+    </li>
+
+    <li>菜单边缘、按钮和其他界面元素须没有明显的走样。
+
+    </li>
+    </ol>
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-全部</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V2">
+  <td>
+    PS-V2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用须以可接受的方式显示文本和文本块。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>构图在所有支持的机型上均可接受,包括平板电脑等大屏幕设备。
+
+    </li>
+
+    <li>没有明显的字母或词语丢失。
+    </li>
+
+    <li>按钮或图标中没有明显的不当文本换行。
+    </li>
+
+    <li>文本与周围元素之间有足够的间距。
+    </li>
+    </ol>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/performance" data-sortorder="-timestamp"
+data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="listing">
+  Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  遵循这些标准能够确保您的应用做好在 Google Play 上发布的准备。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    领域
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    说明
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  </tr>
+
+  <tr id="GP-P1">
+  <td rowspan="2">
+    政策
+  </td>
+  <td>
+    GP-P1
+  </td>
+  <td>
+    应用须严格遵守 <a href="http://play.google.com/about/developer-content-policy.html">Google Play 开发者内容政策</a>的条款,不能提供不当内容,不能使用其他方的知识产权或品牌等。
+
+
+  </td>
+  <td>
+    <a href="#gp">GP-全部</a>
+  </td>
+  </tr>
+
+  <tr id="GP-P2">
+  <td>
+    GP-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    根据<a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=188189">
+内容分级准则</a>合理设置应用的心智成熟度。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    尤其要注意,对于需要请求相应权限以使用设备位置的应用,其心智成熟度不能设置为“所有人”。
+
+    </p>
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D1">
+  <td rowspan="3">
+    应用&nbsp;详情页
+  </td>
+  <td>
+    GP-D1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    应用置顶大图须遵循<a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">
+此博文</a>中介绍的准则。请确保:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>应用商品详情包括高品质的置顶大图。
+    </li>
+
+    <li>置顶大图不能包含设备图片、屏幕截图,也不能包含缩小后以及在应用适配的最小尺寸屏幕上显示时难以辨认的小文字。  
+
+
+    </li>
+
+    <li>置顶大图不能看起来像广告。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#gp">GP-1,GP-2</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D2">
+  <td>
+    GP-D2
+  </td>
+  <td>
+    应用屏幕截图和视频不能显示或提及非 Android 设备。
+  </td>
+  <td rowspan="2">
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D3">
+  <td>
+    GP-D3
+  </td>
+  <td>
+    应用屏幕截图或视频不能以误导性方式展示应用的内容和体验。
+
+  </td>
+  </tr>
+
+  <tr id="GP-X1">
+  <td>
+    用户支持
+  </td>
+  <td>
+    GP-X1
+  </td>
+  <td>
+    对于 Google Play 页面的“评价”标签中常见的用户报告的错误,如果错误可重现而且在多种不同的设备上发生,则应予以解决。
+
+    如果错误只在少数设备上出现,但是这些设备十分受欢迎或者是新设备,则您仍须予以解决。
+
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/play" data-sortorder="-timestamp"
+data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-environment">
+  设置测试环境
+  </h2>
+
+
+</div>
+
+<p>
+  如要评估应用的质量,请设置合适的硬件或模拟器环境以进行测试。
+
+</p>
+
+<p>
+  理想的测试环境应包括少量实际硬件设备,并且这些设备能够代表目前消费者可用的主要机型和硬件/软件组合。
+
+您不需要测试市场上的<em>每种</em>设备 &mdash;,只需关注少量代表性的设备,甚至仅针对每种机型选用一两台设备即可。
+
+
+
+</p>
+
+<p>
+  如果您不能获得实际硬件设备来进行测试,则应该<a href="{@docRoot}tools/devices/index.html">设置模拟设备 (AVD) </a>以代表最常见的机型和硬件/软件组合。
+
+
+
+</p>
+
+<p>
+  如要进行基本测试以外的测试,则可以向测试环境中添加更多设备、更多机型,或新的硬件/软件组合。
+您也可以增加测试次数、提高复杂性和质量标准。
+
+</p>
+
+<div class="headerLine">
+  <h2 id="tests">
+  测试流程
+  </h2>
+
+
+</div>
+
+<p>
+  这些测试流程有助于您发现应用中的各类质量问题。
+您可以在测试计划中组合各项测试或综合运用各组测试。
+请参阅上述内容,了解将特定标准与特定测试相关联的参考资料。
+
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    类型
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  <th>
+    说明
+  </th>
+  </tr>
+
+  <tr>
+  <td rowspan="12" id="core">
+    核心套件
+  </td>
+  <td>
+    CR-0
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    导航到应用的所有部分 &mdash; 所有屏幕、对话框、设置和所有用户流程。
+
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>如果应用允许编辑或创建内容、玩游戏或播放媒体,请务必进入这些流程以创建或修改内容。
+
+
+    </li>
+
+    <li>在使用应用期间,让网络连接、电池功能、GPS 或位置可用性以及系统负载等方面发生短暂变化。
+
+
+    </li>
+    </ol>
+  </td>
+  </tr>
+
+  <tr id="tg2">
+  <td id="core2">
+    CR-1
+  </td>
+  <td>
+    在每个应用屏幕上,按下设备的“主屏幕”键,然后从“所有应用”屏幕重新启动应用。
+
+  </td>
+  </tr>
+
+  <tr id="CR-2">
+  <td>
+    CR-2
+  </td>
+  <td>
+    从每个应用屏幕,使用“最近使用的应用”切换器切换到其他正在运行的应用,然后返回正在测试的应用。
+
+  </td>
+  </tr>
+
+  <tr id="CR-3">
+  <td>
+    CR-3
+  </td>
+  <td>
+    从每个应用屏幕(和对话框),按下“返回”按钮。
+  </td>
+  </tr>
+
+  <tr id="CR-5">
+  <td>
+    CR-5
+  </td>
+  <td>
+    从每个应用屏幕,旋转设备,在横屏和竖屏方向之间切换至少三次。
+
+  </td>
+  </tr>
+
+  <tr id="CR-6">
+  <td>
+    CR-6
+  </td>
+  <td>
+    切换到其他应用,以将测试应用转至后台。转到“设置”,检查测试应用在后台时是否有服务在运行。
+
+在 Android 4.0 及更高版本中,转到“应用”屏幕并在“正在运行”标签中找到该应用。
+在早期版本中,使用“管理应用”查看运行中的服务。
+
+  </td>
+  </tr>
+
+  <tr id="CR-7">
+  <td>
+    CR-7
+  </td>
+  <td>
+    按下电源按钮,让设备进入休眠状态,然后再次按下电源按钮唤醒屏幕。
+
+  </td>
+  </tr>
+
+  <tr id="CR-8">
+  <td>
+    CR-8
+  </td>
+  <td>
+    将设备设置为按下电源按钮后锁定。按下电源按钮让设备进入休眠状态,然后再次按下电源按钮唤醒屏幕,然后解锁设备。
+
+
+  </td>
+  </tr>
+
+  <tr id="CR-9">
+  <!-- Hardware features -->
+
+  <td>
+    CR-9
+  </td>
+  <td>
+    对于带有滑动键盘的设备,将键盘滑进并滑出至少一次。
+对于带有键盘底座的设备,将设备连接到键盘底座。
+
+  </td>
+  </tr>
+
+  <tr id="CR-10">
+  <td>
+    CR-10
+  </td>
+  <td>
+    对于具有外部显示端口的设备,请插入外部显示器。
+
+  </td>
+  </tr>
+
+  <tr id="CR-11">
+  <td>
+    CR-11
+  </td>
+  <td>
+    在通知抽屉中触发并查看应用能够显示的所有通知类型。
+如果适用(Android 4.1 及更高版本)展开通知并点击提供的所有操作。
+
+  </td>
+  </tr>
+
+  <tr id="CR-12">
+  <td>
+    CR-12
+  </td>
+  <td>
+    转到“设置”&gt;“应用信息”检查应用请求的权限。
+
+  </td>
+  </tr>
+
+  <tr id="tg3">
+  <td>
+    安装在 SD 卡上
+  </td>
+  <td>
+    SD-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    对安装到<a href="{@docRoot}guide/topics/data/install-location.html">设备 SD 卡</a>的应用(如果应用支持的话)重复<em>核心套件</em>测试。
+
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    要将应用移动到 SD 卡,您可以使用“设置”&gt;“应用信息”&gt;“移动到 SD 卡”。
+
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg32">
+  <td>
+    硬件加速
+  </td>
+  <td>
+    HA-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    在启用硬件加速的情况下重复<em>核心套件</em>测试。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    要强制启动硬件加速(在设备支持的情况下),请将
+    <code>hardware-accelerated="true"</code>添加到应用清单文件中的<code>&lt;application&gt;</code>并重新编译。 
+
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg33">
+  <td>
+    性能监控
+  </td>
+  <td>
+    PM-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    在<a href="#strictmode">按如下所述</a>启用 StrictMode 分析的情况下重复<em>核心套件</em>测试。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    密切关注垃圾回收及其对用户体验的影响。
+
+    </p>
+  </td>
+  </tr>
+
+  <tr id="gp">
+  <td rowspan="3">
+    Google Play
+  </td>
+  <td>
+    GP-1
+  </td>
+  <td>
+    登录到<a href="https://play.google.com/apps/publish/">开发者控制台</a>查看您的开发者个人资料、应用说明、屏幕截图、置顶大图、心智成熟度设置以及用户反馈。
+
+
+  </td>
+  </tr>
+
+  <tr id="GP-2">
+  <td>
+    GP-2
+  </td>
+  <td>
+    下载置顶大图和屏幕截图,将其缩小以匹配您定位的设备和机型上的显示屏尺寸。
+
+
+  </td>
+  </tr>
+
+  <tr id="GP-3">
+  <td>
+    GP-3
+  </td>
+  <td>
+    查看所有图形资源、媒体、文本、代码库,以及应用内打包的其他内容或下载的扩展文件。
+
+  </td>
+  </tr>
+
+  <tr id="GP-4">
+  <td>
+    付款
+  </td>
+  <td>
+    GP-4
+  </td>
+  <td>
+    导航到应用的所有屏幕,并进入所有应用内购买流程。
+  </td>
+  </tr>
+</table>
+
+<h3 id="strictmode">
+  使用 StrictMode 进行测试
+</h3>
+
+<p>
+  对于性能测试,我们建议在应用内启用 {@link android.os.StrictMode}
+,通过它捕获主线程上和其他线程上可能影响性能、网络访问、文件读/写等的操作。
+
+
+</p>
+
+<p>
+  您可以使用 {@link
+  android.os.StrictMode.ThreadPolicy.Builder} 设置每个线程的监控策略,并使用 {@link
+  android.os.StrictMode.ThreadPolicy.Builder#detectAll()} 在 <code>ThreadPolicy</code> 中启用所有受支持的监控。
+
+</p>
+
+<p>
+  请务必使用  {@link
+  android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen()
+  penaltyFlashScreen()} 针对 <code>ThreadPolicy</code> 为违反策略的行为启用<strong>可视通知</strong>。
+
+</p>
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tablets.jd
new file mode 100644
index 0000000..1d9d620
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tablets.jd
@@ -0,0 +1,846 @@
+page.title=平板电脑应用的质量
+page.metaDescription=平板电脑是 Android 安装基数的一个快速增长部分,为您的应用提供了新的机会。
+page.image=/distribute/images/tablet-guidelines-color.jpg
+Xnonavpage=true
+
+@jd:body
+<div id="qv-wrapper"><div id="qv">
+<h2>检查单</h2>
+<ol>
+<li><a href="#core-app-quality">1. 测试平板电脑应用的基本质量</a></li>
+<li><a href="#optimize-layouts">2. 优化布局</a></li>
+<li><a href="#use-extra-space">3. 利用额外的屏幕区域</a></li>
+<li><a href="#use-tablet-icons">4. 使用专为平板电脑设计的资源</a></li>
+<li><a href="#adjust-font-sizes">5. 调整字体和触控目标</a></li>
+<li><a href="#adjust-widgets">6. 调整主屏幕小部件</a></li>
+<li><a href="#offer-full-feature-set">7. 提供完整的功能集</a></li>
+<li><a href="#android-versions">8. 正确适配 Android 版本</a></li>
+<li><a href="#hardware-requirements">9. 正确声明依赖条件</a></li>
+<li><a href="#support-screens">10. 声明对平板电脑屏幕的支持</a></li>
+<li><a href="#google-play">11. 展示您的平板电脑界面</a></li>
+<li><a href="#google-play-best-practices">12. 遵循在 Google Play 中发布应用的最佳做法</a></li>
+
+</ol>
+<h2>测试</h2>
+<ol>
+<li><a href="#test-environment">设置测试环境</a></li>
+</ol>
+</div></div>
+
+<div class="todp-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/tablet-guidelines-color.jpg" style="width:480px;">
+</div>
+
+<p>
+  平板电脑是 Android 安装基数的一个快速增长部分,提供了与<a href="{@docRoot}distribute/stories/tablets.html">用户互动和盈利</a>的新机会。
+
+本文档中的准则将帮助您通过引人入胜的功能、精心设计的直观界面满足平板电脑用户的期望。
+
+
+</p>
+
+<p>
+  虽然这些准则按照编号排列,但您从哪一项开始着手都没问题。对于每条准则,您都应根据您的应用酌情考虑是否采用其中的建议。不过,为了给客户提供最好的产品,建议您尽可能遵循这些准则。
+
+
+
+
+</p>
+
+<p>
+  本文档中提供了相关资源的链接,这些资源可帮助您了解文中给出的各条建议。  
+
+</p>
+
+<div class="headerLine"><h2 id="core-app-quality">1. 测试平板电脑应用的基本质量</h2></div>
+
+<p>为了打造上佳的平板电脑应用体验,首先要根据应用适配的所有设备和机型,确保您的应用满足相应的<em>应用核心质量标准</em>。
+
+有关完整信息,请参阅<a href="{@docRoot}distribute/essentials/quality/core.html">应用核心质量准则</a>。 
+</p>
+
+<p>
+在发布应用前,还应确保您的应用通过了基本的技术检查并符合相关发布标准,例如:
+</p>
+
+<ul>
+  <li><a href="#android-versions">适配相应的 Android 版本</a></li>
+  <li><a href="#hardware-requirements">正确指定硬件依赖条件</a></li>
+  <li><a href="#support-screens">声明对相应屏幕的支持</a></li>
+  <li><a href="#use-extra-space">利用可用的屏幕空间</a></li>
+  <li><a href="#google-play">上传屏幕截图到 Google Play</a></li>
+</ul>
+
+<p>如果您的应用已上传至 Google Play 开发者控制台,您可以浏览<a href="#google-play-optimization-tips">优化提示页</a>,了解以上各项检查的结果。
+
+
+</p>
+
+
+<div class="headerLine">
+<h2 id="optimize-layouts">2. 针对大屏幕优化布局</h2></div>
+
+<p>
+  借助 Android,可轻松开发在各种设备屏幕尺寸和机型上都能运行流畅的应用。
+这种广泛的兼容性对您极其有利,因为您只需设计一个可广泛分发到所有适配设备的应用即可。
+
+不过,要让用户在每种屏幕配置下 &mdash; 特别是在平板电脑上 &mdash; 都能获得最佳体验,您需要针对每种适配的屏幕配置,优化应用的布局及其他界面组件。
+
+
+在平板电脑上,优化界面可让您充分利用额外的可用屏幕空间,例如用来提供新功能、展示新内容或以其他方式增强体验,以改善与用户的互动。
+
+
+
+</p>
+
+<p>
+  如果您的应用是针对手机开发的,而现在您准备将其分发到平板电脑,则可以先对布局、字体和间距稍作调整。
+
+在某些情况下,例如,对于 7 英寸平板电脑或画面较大的游戏,您可能只需做这些调整就能让应用实现出色的视觉效果。
+
+而在另外一些情况下,例如对于更大的平板电脑,您就需要重新设计界面的各个部分,将拉伸变形的的界面替换为高效的多窗格界面、更便捷的导航控件以及其他内容。
+
+
+</p>
+
+
+<div style="width:500px;margin:1.5em;margin-top:-16px;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">舍弃拉伸变形的界面:在平板电脑上,单窗格布局会导致空白过多以及内容行过长。</span>
+请利用内边距来减少界面元素的宽度并考虑采用多窗格布局。
+</p>
+</div>
+
+<p>下面是一些建议:</p>
+
+
+<ul>
+  <li>根据需要,针对 <code>large</code> 和 
+<code>xlarge</code> 屏幕提供自定义布局。您还可以提供可根据屏幕的<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">最短尺寸</a>或<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">最小可用宽度和高度</a>加载的布局。
+
+
+
+  </li>
+
+  <li>至少要针对大屏幕自定义字体大小、外边距和间距等规格,以提高空间利用率和内容易读性。
+
+  </li>
+
+  <li>调整界面控件的位置,以便用户在手持平板电脑时能轻易触碰到这些控件,例如在横屏时将控件放于两侧。
+
+
+  </li>
+
+  <li>平板电脑上界面元素的内边距通常应比手机上的大一些。
+建议遵守 <a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm">
+48dp 定律</a>(以及 16dp 格栅)。
+  </li>
+
+  <li>为文本内容设置合理的内边距,使其不会直接沿屏幕边缘对齐。
+内容与屏幕边缘间至少保留 <code>16dp</code> 的内边距。
+
+  </li>
+</ul>
+
+<p>尤其需要注意的是,不要让您的布局在屏幕上出现拉伸变形的情况:
+</p>
+
+<ul>
+<li>文本行的长度不应过长 &mdash; 经过优化后,每行最多 100 个字符,最好在 50 至 75 个字符之间。
+</li>
+<li>列表视图和菜单不应使用全屏宽度。</li>
+<li>使用内边距处理屏幕上元素的宽度,或切换为适用于平板电脑的多窗格界面(参见下一节)。
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/optimize"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="use-extra-space">3. 利用额外的屏幕区域</h2></div>
+
+<div style="width:340px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">多窗格布局能在平板电脑屏幕上实现更好的视觉平衡效果,同时令实用性和可读性得到增强。</span>
+</p>
+</div>
+
+<p>平板电脑屏幕可为您的应用提供更多的屏幕空间(横向模式下更是如此)。
+尤其是 10 英寸的平板电脑多出来的区域更大,但即使是 7 英寸的平板电脑,也提供了更多空间供您展示内容、吸引用户。
+
+ </p>
+
+<p>为在平板电脑上运行的应用设计界面时,请确保能够充分利用平板电脑上额外的屏幕区域。
+下面是一些建议:
+</p>
+
+<ul>
+<li>看看是否有可能加入更多内容,或换种方式呈现现有内容。
+</li>
+<li>在平板电脑屏幕上使用<a href="{@docRoot}design/patterns/multi-pane-layouts.html">多窗格布局</a>,将单一视图合并成复合视图。
+这样一来,您可以更有效地利用额外的屏幕区域,让用户能更轻松地浏览您的应用。
+
+ </li>
+<li>计划在屏幕方向改变时如何重新排列复合视图的各个面板。
+</li>
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+<div style="">
+<img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
+<img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">复合视图将手机界面的多个单一视图<em>(如上图)</em>合并成适用于平板电脑的更高效、内容更丰富的界面</span><em>(如下图)</em>。
+
+ </p>
+</div>
+</div>
+
+<li>如果单屏是用 {@link android.app.Activity}
+ 子类实现的,请考虑用 {@link
+android.app.Fragment} 子类实现各个内容面板。这样一来,您可以在共用内容的不同机型和不同屏幕间最大程度地重复使用代码。
+
+</li>
+<li>确定要在哪些屏幕尺寸上使用多窗格界面,然后在相应的屏幕尺寸单元(例如 
+<code>large</code>/<code>xlarge</code>)中提供不同的布局,或最小屏幕宽度(例如 
+<code>sw600dp</code>/<code>sw720</code>)。
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/extrascreen"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="use-tablet-icons">4. 使用专为平板电脑屏幕设计的资源</h2></div>
+
+<div><img src="{@docRoot}design/media/devices_displays_density@2x.png"></div>
+
+<p>为确保应用呈现最佳的视觉效果,请根据平板电脑普遍支持的每种屏幕密度,提供相应图标和位图资源。
+具体而言,您应按<a href="{@docRoot}design/style/iconography.html">图标</a>准则为操作栏、通知和启动器设计图标,并提供多种密度的图标,这样这些图标在所有屏幕上都会以合适的尺寸显示,而不会出现模糊或缩放等情况。
+
+
+
+</p>
+
+<p class="table-caption"><strong>表 1</strong>.  不同图标类型的原始资源尺寸。<table>
+<tr>
+<th>密度</th>
+<th>启动器</th>
+<th>操作栏</th>
+<th>小图标/上下文图标</th>
+<th>通知</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48 像素</td>
+<td>32x32 像素</td>
+<td>16x16 像素</td>
+<td>24x24 像素</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72 像素</td>
+<td>48x48 像素</td>
+<td>24x24 像素</td>
+<td>36x36 像素</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(使用 hdpi)</em></td>
+<td><em>(使用 hdpi)</em></td>
+<td><em>(使用 hdpi)</em></td>
+<td><em>(使用 hdpi)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96 像素</td>
+<td>64x64 像素</td>
+<td>32x32 像素</td>
+<td>48x48 像素</td>
+</tr>
+<tr>
+<td><code>xxhdpi</code></td>
+<td>144x144 像素</td>
+<td>96x96 像素</td>
+<td>48x48 像素</td>
+<td>72x72 像素</td>
+</tr>
+
+</table>
+
+<p>
+  作为最低要求,针对以下常用的平板电脑屏幕密度中的<strong>至少一种</strong>密度,提供为其优化的图标和位图资源:
+
+
+</p>
+<ul>
+  <li><code>hdpi</code></li>
+  <li><code>xhdpi</code></li>
+  <li><code>xxhdpi</code></li>
+</ul>
+
+<p>其他提示:</p>
+
+<ul>
+<li>在设计图标时请使用矢量图形,这样图标在缩放时就不会损失细节或出现边缘模糊的情况。</li>
+<li>使用针对特定密度的<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+资源限定符</a>,以便能为各种屏幕密度加载适当的图标。</li>
+<li>平板电脑及其他大屏设备通常需要使用启动器图标,其密度比设备实际密度要大。因此,您提供的启用器图标应尽可能采用最高密度。
+
+例如,如果平板电脑的屏幕密度是 {@code xhdpi},
+那么需要使用 {@code xxhdpi} 版本的启动器图标。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/assets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-font-sizes">5. 
+调整字体大小和触控目标</h2></div>
+
+<p>要确保您的应用在平板电脑上易于使用,请花些时间针对您要适配的各种屏幕配置调整平板电脑界面中的字体大小和触控目标。
+
+您可以通过<a href="{@docRoot}guide/topics/ui/themes.html">可设置样式的属性</a>或<a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">尺寸资源</a>调整字体大小,也可以通过布局和位图绘制工具调整
+触控目标,如上所述。
+ </p>
+
+<p>下面是一些注意事项:</p>
+<ul>
+<li>对于各种平板电脑屏幕尺寸和密度,显示的文字不应过大或过小。
+请确保标签的尺寸与其对应的界面元素大小相宜,并且不得在标签、标题及其他元素中使用不恰当的换行符。
+
+</li>
+<li>建议将屏幕元素触控目标的尺寸设为 48dp(最小 32dp)&mdash;但可能需要对平板电脑的界面做一些调整。
+请参阅<a href="{@docRoot}design/style/metrics-grids.html">度量单位和网格
+</a>,了解适用于大多数用户的实施策略。
+为了满足部分用户对辅助功能的需求,可能需要使用较大的触控目标尺寸。
+
+ </li>
+<li>如果可能,对于较小的图标,请使用 {@link android.view.TouchDelegate}
+ 将可触控区域扩展到 48dp 以上,或将该图标放到透明按钮上居中。
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/fonts"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-widgets">6. 调整主屏幕小部件的尺寸</h2></div>
+
+<p>如果您的应用中包含主屏幕小部件,需要注意以下几点,以确保用户在平板电脑屏幕上获得良好体验:  
+ </p>
+
+<ul>
+<li>按照平板电脑的屏幕合理设置小部件的默认高度和宽度,以及最小和最大的伸缩高度和宽度。
+
+</li>
+<li>小部件应可拉伸到 420dp 或更高,占用主屏幕的 5 行或以上(如果是垂直或方形小部件),或者占用 5 列或以上(如果是水平或方形小部件)。
+
+ </li>
+<li>确保正确渲染 9-patch 图片。</li>
+<li>使用默认的系统边距。</li>
+<li>如果可能,将应用的 <code>targetSdkVersion</code> 设置为 14 或更高。
+</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/widgets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="offer-full-feature-set">7. 适用于平板电脑用户的完整功能集</h2></div>
+
+<div class="centered-full-image" style="width:600px;margin:1.5em"><img src="{@docRoot}images/gp-tablets-full-feature-set.png" alt="Tablet feature sets"></div>
+
+<p>让您的平板电脑用户能够体验应用的最佳功能。下面是一些建议:
+</p>
+
+<ul>
+  <li>在设计应用时,应至少确保其在平板电脑上的功能与在手机上的一样。
+
+  </li>
+
+  <li>在特殊情况下,如果大多数平板电脑的硬件或用例不支持,则可以去掉或替换应用在平板电脑上的某些功能。
+
+例如:
+    <ul>
+      <li>如果手机使用电话功能,但当前平板电脑没有电话功能,那么您可以去掉或替换相关功能。
+
+      </li>
+
+      <li>许多平板电脑都装有 GPS 传感器,但大多数用户在跑步时通常不会带着平板电脑。
+如果手机应用中提供的某项功能可让用户在跑步时通过手机记录 GPS 路线,就无需在平板电脑上也提供这项功能,因为此用例没有吸引力。
+
+
+
+      </li>
+    </ul>
+  </li>
+
+  <li>如果您要从平板电脑界面上去掉某功能,请确保用户无法通过其他方式使用这项功能;或确保该功能可以“优雅降级”,以便为用户提供替代功能(另请参见下面关于硬件功能的部分)。
+
+
+  </li>
+</ul>
+
+<div class="headerLine"><h2 id="android-versions">8. 正确适配 Android 版本</h2></div>
+
+<p>
+  为确保分发到尽可能多的平板电脑,务必让应用适配各种支持平板电脑的 Android 版本。
+对平板电脑的支持是从 <a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a>(API 级别 11)开始的。
+
+  对平板电脑、手机及其他设备的统一界面框架支持是从 <a href="{@docRoot}about/versions/android-4.0.html">Android 
+4.0</a> 开始的
+
+</p>
+
+<p>
+  您可以在清单文件的 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+ 元素中设置应用适配的 Android 版本范围。
+在大多数情况下,您只要将该元素的 <code>targetSdkVersion</code> 属性设置为可用的最高 API 级别,即可正确适配 Android 版本。
+
+
+</p>
+
+<p style="margin-bottom:.5em;">
+  作为最低要求,请检查 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+ 元素以确保:
+</p>
+
+<ol style="list-style-type:lower-alpha;margin-top:0em;">
+  <li>
+    使用 11 或更大值声明 <code>targetSdkVersion</code>(建议使用 14 或更高值);或
+
+  </li>
+
+  <li>
+    使用 11 或更大值声明 <code>minSdkVersion</code>。
+  </li>
+
+  <li>如果声明 <code>maxSdkVersion</code> 属性,其值必须为 11 或更大。
+请注意,一般情况下
+<em>不建议</em>使用 <code>maxSdkVersion</code>。
+  </li>
+</ol>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/versions"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="hardware-requirements">9. 正确声明硬件功能依赖条件</h2></div>
+
+<p>
+  通常情况下,手机和平板电脑对传感器、相机、电话及其他功能提供的硬件支持会稍有不同。
+例如,许多平板电脑可以在不支持电话的“Wi-Fi”配置下使用。
+
+</p>
+
+<p>
+  因此,您可以向您的所有手机和平板电脑用户分发一个 APK,但要确保您的应用不会要求调用平板电脑通常不提供的硬件功能。
+
+
+  否则,请在应用清单文件中将此硬件功能正确声明为<em>未要求</em>,如下所述。
+
+</p>
+
+<ul>
+<li>在应用清单文件中,找到所有 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+ 元素。尤其要注意的是,需要找到可能无法在某些平板电脑上使用的硬件功能,例如:
+
+
+<ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code>(指后置摄像头),或</li>
+<li><code>android.hardware.camera.front</code></li>
+</ul></li>
+
+<li>通过加入 <code>android:required=”false”</code>
+ 属性将 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+ 元素声明为<em>未要求</em>。
+
+<p>
+  例如,以下示例就正确声明了对 <code>android.hardware.telephony</code> 的依赖,这样您仍能广泛分发应用,甚至能分发到不提供电话功能的设备上:
+
+
+</p>
+
+<pre>&lt;uses-feature android:name="android.hardware.telephony" android:required="false" /&gt;</pre></li>
+
+<li>与此类似,还请检查清单文件,找出
+<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">表明硬件功能要求</a>不适用于平板电脑的 <a href="{@docRoot}guide/topics/manifest/permission-element.html"><code>&lt;permission&gt;</code></a> 元素。
+如果您找到这样的权限,请务必为功能明确声明对应的 
+<code>&lt;uses-feature&gt;</code> 元素并加入 
+<code>android:required=”false”</code> 属性。
+</li>
+</ul>
+
+
+<p>
+  将硬件功能声明为<em>未要求</em>后,请务必在各种设备上测试您的应用。
+即使应用所需的硬件功能无法使用,应用功能也应该正常运行;如果可以,应用应该提供“优雅降级”和替代功能。
+
+
+</p>
+
+<p>
+  例如,如果应用通常使用 GPS 设置地理位置,但设备不支持 GPS,那么此应用可以让用户手动设置地理位置。
+
+应用可以在运行时检查设备硬件功能并根据需要进行处理。
+
+</p>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/hardware"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="support-screens">10. 声明对平板电脑屏幕的支持</h2></div>
+
+<p>为确保能将应用分发到各种平板电脑上,您应在应用的清单文件中声明对各种平板电脑屏幕尺寸的支持,如下所示:
+</p>
+
+<ul>
+  <li>如果声明 
+<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+ 元素,就不要指定 <code>android:largeScreens="false"</code>
+ 或 <code>android:xlargeScreens="false"</code>。</li>
+  <li>如果应用适配的 <code>minSdkVersion</code> 值小于 13,必须使用 
+<code>android:largeScreens="true"</code> 和 <code>android:xlargeScreens="true"</code>
+ 声明 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>
+ 元素。</li>
+</ul>
+
+<p>如果应用在清单文件中声明了 
+<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>
+ 元素,该元素应包含相关属性,
+以列举应用支持的<em>平板电脑屏幕的所有尺寸和密度组合</em>。
+请注意,如果可能,您应避免在应用中使用 
+<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>
+ 元素。</p>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/tabletscreens"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="google-play">11. 在 Google Play 中展示您的平板电脑界面</h2></div>
+
+<p>
+  为您的平板电脑应用创建了经过优化、内容丰富的界面后,请务必告知您的客户!
+下面是一些重要方法,可帮助您向 Google Play 上的用户推广您的平板电脑应用。
+
+</p>
+
+<div><img class="border-img" src="{@docRoot}images/gp-tablet-quality-4.jpg"></div>
+
+
+<h4>
+  上传平板电脑界面的屏幕截图
+</h4>
+
+<p>
+  平板电脑用户需要了解您的应用在平板电脑设备上(而非手机上)的效果。
+如果您开发了一款平板电脑应用,请务必将平板电脑界面的屏幕截图上传至 Google Play 开发者控制台。
+下面是一些相关准则:
+  </p>
+
+<ul style="margin-top:0;">
+  <li>展示应用的核心功能,而不要展示启动或登录页面。
+用户会在应用的哪个位置花费最多时间,就在屏幕截图中展示这个位置。
+
+  </li>
+
+  <li>添加在 7 英寸和 10 英寸平板电脑上截取的屏幕截图。
+  </li>
+
+  <li>如果可能,添加横屏和竖屏截取的屏幕截图。  
+
+  </li>
+
+  <li>如果可能,使用屏幕截图功能。避免在屏幕截图中展示实际的设备硬件。
+</li>
+
+  <li>建议对横屏和竖屏截取的平板电脑屏幕截图都使用 <strong>1280 x 720</strong>
+ 或更高的分辨率。
+  </li>
+
+  <li>最好为 7 英寸的平板电脑界面上传 8 张屏幕截图,同时再为 10 英寸的平板电脑界面上传 8 张屏幕截图。
+
+  </li>
+</ul>
+
+<h4>
+  更新应用说明和版本说明
+</h4>
+
+<ul>
+  <li>在应用说明中,请务必着重介绍您的应用已针对平板电脑优化过界面,能为平板电脑用户提供卓越功能。
+添加一些详细信息,介绍平板电脑界面的工作方式以及受到用户喜爱的原因。
+
+  </li>
+
+  <li>在应用的版本说明和更新信息中加入有关平板电脑支持的信息。
+
+  </li>
+</ul>
+
+<h4>
+  更新您的推广视频
+</h4>
+
+<p>
+  许多用户通过观看推广视频来了解应用,确定自己是否喜欢此应用。
+您可以利用此兴趣特点,在推广视频中着重介绍应用的平板电脑界面,以吸引平板电脑用户。
+下面是一些相关提示和准则:
+
+</p>
+
+<ul>
+  <li>添加一张或多张您的应用在平板电脑上运行时的截图。为了最有效地吸引平板电脑用户,建议您将平板电脑界面与手机界面的推广事宜尽量等同视之。
+
+
+  </li>
+
+  <li>尽早在视频中展示您的平板电脑界面。不要想当然地以为平板电脑用户会耐心看完手机界面上的功能演示。
+
+  最好在前 10 秒内或者在介绍手机界面的同时就展示平板电脑界面,以立即吸引用户的注意力。
+
+  </li>
+
+  <li>为了让用户了解您是在展示平板电脑界面,请加入几张应用在手持平板电脑设备上运行时的截图。
+
+  </li>
+
+  <li>在视频的讲解或旁白中,着重介绍应用的平板电脑界面。
+  </li>
+</ul>
+
+<h4>
+  在推广活动中突显您的平板电脑界面
+</h4>
+
+<p>
+  确保平板电脑用户可以通过您的推广活动、网站、社交信息、广告及其他地方了解您的平板电脑界面。
+下面是一些建议:
+
+</p>
+
+<ul>
+  <li>安排营销或宣传活动,着重介绍您的应用在平板电脑上的使用情况。
+</li>
+
+  <li>在推广活动中展示您的平板电脑应用最突出的优势&mdash;使用 <a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator</a> 快速生成一张应用在 7 英寸或 10 英寸平板电脑上运行时的高品质推广图片,屏幕方向自定,有无下拉阴影和屏幕反光均可。
+
+
+这项操作非常简单,只需截图、拖放即可。
+  </li>
+
+  <li>进行在线推广时加入 Google Play 徽章,让用户可以直接转入商店查看应用的商品详情。
+您可以使用<a href="{@docRoot}distribute/tools/promote/badges.html">徽章生成器</a>生成各种语言的徽章。
+
+  </li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/showcase"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine">
+  <h2 id="google-play-best-practices">
+    12. 遵循在 Google Play 中发布应用的最佳做法
+  </h2>
+
+
+</div>
+
+<p>
+  下面是一些在 Google Play 上成功发布平板电脑应用的最佳做法。
+
+</p>
+
+<div>
+  <img class="border-img" src="{@docRoot}images/gp-tablet-quality-5.jpg" style="1px solid #ddd">
+</div>
+
+<h4 id="google-play-optimization-tips">
+  检查应用的优化提示
+</h4>
+
+<p>Google Play 开发者控制台现在提供“优化提示”页,可让您快速了解您的应用是否很好地遵循了有关平板电脑应用分发和质量的基本准则。
+
+要访问此页面,请登录到开发者控制台,通过“所有应用”加载该应用,然后点击左侧导航栏中的“优化提示”。
+
+</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>如何发送反馈意见</h2>
+
+<p>请使用下面的链接发送反馈意见或申请人工审核您的“优化提示”。
+</p>
+
+<p>在发送反馈意见之前,请务必阅读“平板电脑应用质量准则”的相关部分。
+</p>
+
+<p><strong><a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">平板电脑专用联系表单&raquo;</a></strong></p>
+</div>
+</div>
+
+<p>开发者控制台通过运行一系列检查来验证您的应用是否符合基本质量标准,然后为其创建“优化提示”页。
+
+如果发现任何问题,开发者控制台会在“优化提示”页上列出“待优化事项”来提醒您。
+</p>
+
+<p>如果您为应用开发了平板电脑版本,请务必访问“优化提示”页,了解您的应用的基本检查结果。
+
+如果此页中列出问题,建议您在应用中解决问题,并上传一个新的二进制文件以供分发(如果需要)。
+
+ </p>
+
+<p>如果您认为“优化提示”页列出的“待优化事项”不适用于您的应用或会影响其在平板电脑上的运行质量,请使用<a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">平板电脑专用联系表单 &raquo;</a> 通知我们。
+
+我们会审核您的应用并视情况更新您的“优化提示”页。
+
+</p>
+
+
+<h4>确认应用的筛选适配</h4>
+
+<p>
+  将应用上传至<a href="https://play.google.com/apps/publish/">开发者控制台</a>后,请检查 APK 的“受支持设备”列表,确保未遗漏您要适配的平板电脑设备。
+
+
+</p>
+
+<h4>用单个 APK 进行分发</h4>
+
+<p>
+  建议您针对所有屏幕尺寸(手机和平板电脑)用单个 APK 发布您的应用,并提供单个 Google Play 商品详情。
+这种做法有以下几大优点:
+
+</p>
+
+<ul style="margin-top:.25em;">
+  <li>便于用户通过搜索、浏览或推广信息找到您的应用
+  </li>
+
+  <li>便于用户在更换新设备后自动恢复您的应用。
+
+  </li>
+
+  <li>您的应用在所有设备上的评分和下载统计信息会得到汇总统计。
+  </li>
+
+  <li>再用一份商品详情发布平板电脑应用可能会降低您的品牌的评分。
+
+  </li>
+</ul>
+
+<p>
+  如果需要,您也可以选择使用<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支持</a>来提供您的应用,不过在大多数情况下,强烈建议您使用单个 APK 覆盖所有设备。
+
+
+</p>
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine">
+  <h2 id="test-environment">
+    为平板电脑设置测试环境
+  </h2>
+
+
+</div>
+
+<p>
+  评估您的应用在平板电脑上的质量(包括应用的核心质量和平板电脑应用质量)&mdash; 使用合适的硬件或模拟器环境进行测试。
+
+
+</p>
+
+<p>
+  与<a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">建议的测试环境</a>比较,对照应用的核心质量标准进行测试,加入中等大小的平板电脑以及具有更多或更少硬件/软件功能的平板电脑。
+
+
+
+</p>
+
+<p class="table-caption"><strong>表 1</strong>.典型的平板电脑测试环境可以包含下表中每行的一种或两种设备,采用所列的一种平台版本、屏幕配置和硬件功能配置。
+
+</p>
+
+<table>
+<tr>
+<th>类型</th>
+<th>尺寸</th>
+<th>密度</th>
+<th>版本</th>
+<th>AVD 主题</th>
+</tr>
+
+<tr>
+<td>7 英寸平板电脑</td>
+<td><span style="white-space:nowrap"><code>large</code> 或 </span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
+<td>Android 4.0 及更高版本(API 级别 14 及更高)</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">10 英寸平板电脑</span></td>
+<td><span style="white-space:nowrap"><code>xlarge</code> 或 </span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>,<br /><code>hdpi</code>,<br /><code>xhdpi</code></td>
+<td>Android 3.2 及更高版本(API 级别 13 及更高)</td>
+<td>WXGA800</td>
+</tr>
+</table>
+
+<div class="headerLine"><h2 id="related-resources">相关资源</h2></div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd
new file mode 100644
index 0000000..5eea293
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd
@@ -0,0 +1,509 @@
+page.title=电视应用的质量
+page.metaDescription=电视是 Android 设备不断增长的一部分,需要特别关注应用的设计和功能才能创造优秀的体验。
+page.image=/distribute/images/gp-tv-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>质量标准</h2>
+  <ol>
+    <li><a href="#ux">设计和交互</a></li>
+    <li><a href="#fn">功能</a></li>
+    <li><a href="#faq">常见问题</a></li>
+  </ol>
+
+  <h2>您还应阅读</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+核心的应用质量</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+优化您的应用</a></li>
+  </ol>
+</div>
+</div>
+
+<div class="top-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/gp-tv-quality.png" style="width:480px;">
+</div>
+
+<p>
+  与使用手机或平板电脑相比,用户在看电视时有一些不同的期望。
+  典型的电视用户坐在离屏幕约 10 英尺的位置,所以小细节没那么引起注意,小文本难以阅读。
+由于用户离电视较远,他们必须使用一种遥控装置来导航和进行选择,而不是触摸屏幕上的元素。
+这些差异大大改变了实现优秀电视用户体验的要求。
+
+</p>
+
+<p>
+  为电视用户创造优秀体验的第一步是查阅并遵循
+ <a href="{@docRoot}design/tv/index.html">Android TV 设计准则</a>,其中提供了关于如何为电视应用打造最佳用户体验的指导。
+您还应查看
+<a href="{@docRoot}training/tv/start/index.html">构建电视应用</a>培训,以了解电视应用的基本实现要求。
+
+</p>
+
+<p class="caution">
+  <strong>重要说明:</strong>为确保优秀的用户体验,电视设备的应用必须满足一些特定的可用性要求。
+只有符合下列质量标准的应用才能有资格在 Google Play 上作为 Android TV 应用。
+
+</p>
+
+<p class="note"><strong>注意:</strong>有关如何在 Google Play 中发布电视应用的信息,请参见<a href="{@docRoot}distribute/googleplay/tv.html">分发到 Android TV</a>。
+</p>
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  视觉设计和用户交互
+  </h2>
+
+
+</div>
+
+<p>
+  这些标准可确保您的应用遵循标准设计和交互模式,以确保在电视设备上实现一致、直观和愉悦的用户体验。
+
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    类型
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="4" id="launcher">
+    启动器
+  </td>
+
+  <td id="TV-LM">
+    TV-LM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用在安装后在 Android TV 启动器中显示一个启动器图标。
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LB">
+    TV-LB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用在 Android TV 启动器上显示 320px x 180px 的全尺寸横幅作为其启动器图标。
+      (<a href="{@docRoot}design/tv/patterns.html#banner">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-BN">
+    TV-BN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用的启动横幅包含应用的名称。
+      (<a href="{@docRoot}design/tv/patterns.html#banner">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LG">
+    TV-LG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用是一款游戏,则出现在 Android TV 启动器的游戏行中。<br>
+      (<a href="{@docRoot}training/tv/games/index.html#manifest">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="layout">
+    布局   
+  </td>
+
+  <td id="TV-LO">
+    TV-LO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      所有应用界面以横向方向显示。
+      (<a href="{@docRoot}training/tv/start/layouts.html#structure">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TC">
+    TV-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用以 16sp 或更大的字号显示核心文本。
+      (<a href="{@docRoot}design/tv/style.html#typography">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TA">
+    TV-TA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用以 12sp 或更大的字号显示所有文本。
+      (<a href="{@docRoot}design/tv/style.html#typography">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-OV">
+    TV-OV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用显示的任何文本或功能不会被屏幕边缘部分切断。
+
+      (<a href="{@docRoot}training/tv/start/layouts.html#overscan">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TR">
+    TV-TR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用不会部分遮住其他应用。应用填充整个屏幕并且采用非透明背景。
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="navigation">
+    导航
+  </td>
+
+  <td id="TV-DP">
+    TV-DP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用的功能可使用 5 向方向键来进行导航,除非此应用需要 <a href="#TV-GP">TV-GP</a> 中指定的手柄控制器。
+
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DK">
+    TV-DK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用需要 <a href="#TV-GP">TV-GP</a> 指定的游戏手柄,则所有功能均可使用标准的 Android 游戏手柄键来进行导航。
+
+      (<a href="{@docRoot}training/game-controllers/controller-input.html#button">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DM">
+    TV-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用不依赖有菜单按钮的遥控器来访问用户界面的控件。
+
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  遵循这些标准可确保您的应用进行正确配置,提供预期的功能行为。
+
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    类型
+  </th>
+  <th style="width:54px;">
+    测试
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="2" id="manifest">
+   清单文件
+  </td>
+
+  <td id="TV-ML">
+    TV-ML
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用的清单文件设置一个带有类别{@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER}的意图类型{@link android.content.Intent#ACTION_MAIN}。
+
+      (<a href="{@docRoot}training/tv/start/start.html#tv-activity">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+</tr>
+  <td id="TV-MT">
+    TV-MT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用的清单文件将硬件功能{@code android.hardware.touchscreen}设置为不需要。
+      (<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">了解方法</a>)
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="game-controllers">
+    游戏手柄
+  </td>
+
+  <td id="TV-GP">
+    TV-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用使用游戏手柄作为主要输入方法,则要通过
+<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>清单文件标记来声明相应的要求。
+      (<a href="{@docRoot}training/tv/games/index.html#gamepad">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-GC">
+    TV-GC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用提供了有关使用游戏手柄的可视说明,说明应没有品牌信息并显示兼容的按钮布局。
+
+      (<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="advertising">
+    广告
+  </td>
+
+  <td id="TV-AP">
+    TV-AP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用允许使用方向键与广告进行交互。
+      (<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AD">
+    TV-AD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      对于非视频全屏广告,应用允许用户立即用方向键忽略广告。
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AU">
+    TV-AU
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      对于可点击的非全屏、非视频广告,应用不允许将广告链接到网页 URL。
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AA">
+    TV-AA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      对于可点击的非全屏、非视频广告,应用不允许将广告链接到电视设备上不可用的另一个应用。
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="web">
+    Web 内容
+  </td>
+
+  <td id="TV-WB">
+    TV-WB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      对于 Web 内容,应用使用{@link android.webkit.WebView}组件,并且不要尝试启动网络浏览器应用。
+
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="media-playback">
+    媒体播放
+  </td>
+
+  <td id="TV-NP">
+    TV-NP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用在用户离开后继续播放声音,则要在主屏幕建议行上提供<em>正在播放</em>卡,以便用户返回该应用来控制播放。
+
+
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PA">
+    TV-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用提供<em>正在播放</em>卡,则选择此卡可让用户进入一个允许暂停播放的屏幕。
+
+      (<a href="{@docRoot}training/tv/playback/now-playing.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PP">
+    TV-PP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用播放视频或音乐内容,当播放期间发送了播放或暂停键事件时,应用在媒体播放和暂停之间切换。
+<br>
+      (<a href="{@docRoot}reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE">了解方法</a>)
+
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+<div class="headerLine">
+  <h2 id="faq">
+  常见问题
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>在提交我的应用后,怎样发现应用是否符合电视设备的所有要求?</strong>
+
+</p>
+<p>
+  如果您的应用不符合本页所述的可用性要求,Play 商店团队将通过与应用关联的 <a href="https://play.google.com/apps/publish/">Google Play 开发者控制台</a>主帐户中指定的电子邮件地址与您联系。
+
+
+</p>
+<p class="caution">
+  <strong>注意:</strong>确保您的应用包括电视设备<a href="{@docRoot}preview/tv/start/index.html#tv-activity">所需的清单条目</a>,否则应用不会被视为电视应用,并且不会审查电视可用性要求。
+
+
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>我的应用不仅仅针对电视设备。如果我的应用不符合电视设备的要求,是否仍会在 Google Play 上向手机和平板电脑显示我的新应用或更新版本?</strong>
+
+
+</p>
+<p>
+  是。上述要求只限制向电视设备 Google Play 商店分发应用。
+不影响向其他设备类型分发应用,如手机、平板电脑和其他设备。
+
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>如果我的应用符合这些发布要求,何时才能出现在电视设备的 Google Play 商店上?</strong>
+
+</p>
+
+<p>
+  符合电视要求的应用将在官方发布 Android 5.0 <em>之后</em>出现在电视设备的 Google Play 商店上。
+
+</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/wear.jd
new file mode 100644
index 0000000..99483ec
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/wear.jd
@@ -0,0 +1,452 @@
+page.title=可穿戴设备应用的质量
+page.tags="wear","wearables","quality","guidelines"
+page.metaDescription=可穿戴设备较小,要便于扫视,并且需要独特的应用在正确的时间提供正确的信息。
+page.image=/distribute/images/gp-wear-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>质量标准</h2>
+  <ol>
+    <li><a href="#ux">设计和交互</a></li>
+    <li><a href="#fn">功能</a></li>
+    <li><a href="#faq">常见问题</a></li>
+  </ol>
+
+  <h2>您还应阅读</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">
+核心的应用质量</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">
+优化您的应用</a></li>
+    <li><a href="{@docRoot}design/patterns/notifications.html">
+通知</a></li>
+  </ol>
+</div>
+</div>
+
+<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;">
+
+<p>
+  Android Wear 的目的是在正确的时间为用户提供正确的信息。优秀的 Android Wear 体验应自动启动、便于查看,并且不需要或很少需要用户交互。
+
+设计可穿戴设备的应用与设计手机或平板电脑的应用截然不同。
+要考虑不同的强项和弱点、不同的用例和不同的人体工学。
+
+</p>
+
+<p>
+  为可穿戴设备用户创造优秀体验的第一步是阅读
+ <a href="{@docRoot}design/wear/index.html">Android Wear 设计准则</a>,其中提供了关于如何为可穿戴设备应用打造最佳用户体验的指导。
+您还应查看
+<a href="{@docRoot}training/building-wearables.html">构建可穿戴设备应用</a>培训,以了解可穿戴设备应用的基本实现要求。
+
+</p>
+
+<p class="caution">
+  <strong>重要说明:</strong>为确保优秀的用户体验,可穿戴设备的应用必须满足特定的可用性要求。
+只有符合下列质量标准的应用才能有资格在 Google Play 上作为 Android Wear 应用。
+若有资格作为可穿戴设备应用, Android Wear 用户更容易在 Google Play 上发现您的应用。
+
+</p>
+
+<p class="note">
+ <strong>注意:</strong>有关如何在 Google Play 中发布可穿戴设备应用的信息,请参见<a href="{@docRoot}distribute/googleplay/wear.html">分发到 Android Wear</a>。
+</p>
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  遵循这些标准可确保您的应用进行正确配置,提供预期的功能行为。
+
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    类型
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="general">
+   一般
+  </td>
+
+  <td id="WR-GL">
+    WR-GL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      手持类应用包括具有可穿戴设备特有功能的通知或直接在穿戴设备上运行的可穿戴类应用。
+ 
+      (<a href="{@docRoot}training/building-wearables.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-VF">
+    WR-VF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用具有用户可看到的穿戴设备功能。
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-BF">
+    WR-BF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      穿戴设备的功能符合预期或符合应用在 Google Play 商品详情中的描述。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="packaging">
+   打包
+  </td>
+
+  <td id="WR-PK">
+    WR-PK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      将依赖手持类应用来提供功能的可穿戴设备应用打包在该手持类应用内。
+
+      (<a href="{@docRoot}training/wearables/apps/packaging.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="functional-notifications">
+    通知
+  </td>
+
+  <td id="WR-FW">
+    WR-FW
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      可穿戴设备特有功能的通知使用{@code RemoteInput} 或
+{@code WearableExtender}。
+      (<a href="{@docRoot}training/wearables/notifications/index.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FR">
+    WR-FR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      消息应用的通知允许用户通过语音输入或快速响应来回复。
+      (<a href="{@docRoot}training/wearables/notifications/voice-input.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FG">
+    WR-FG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      将相似的通知组合在一个堆栈中。
+      (<a href="{@docRoot}training/wearables/notifications/stacks.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="gestures">
+    手势
+  </td>
+
+  <td id="WR-GP">
+    WR-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      在全屏活动中使用长按仅用于提示退出。
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/exit.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-GD">
+    WR-GD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      如果应用在全屏活动中禁用滑动消除手势,则在此活动中响应长按消除手势。
+
+      (<a href="{@docRoot}training/wearables/ui/exit.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="watchface">
+    表盘
+  </td>
+
+  <td id="WR-WF">
+    WR-WF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      包括表盘的应用使用官方的表盘 API。
+      (<a href="{@docRoot}training/wearables/watch-faces/index.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ux">
+  视觉设计和用户交互
+  </h2>
+
+
+</div>
+
+<p>
+  这些标准可确保您的应用遵循标准设计和交互模式,以在可穿戴设备上提供一致、直观和愉悦的用户体验。
+
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    类型
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="layout">
+    布局
+  </td>
+
+  <td id="WR-LS">
+    WR-LS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用的用户界面针对方形显示屏进行适当格式化。应用的内容适合放在物理显示区域内,没有文本或控件被屏幕边缘切断。
+
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-LR">
+    WR-LR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用的用户界面针对圆形显示屏进行适当格式化,包括屏幕底部有插边(或“下巴”)的设备。
+应用的内容适合放在物理显示区域内,没有文本或控件被屏幕边缘切断。
+
+      <br/>
+      (<a href="{@docRoot}training/wearables/ui/layouts.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-TC">
+    WR-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用文本较大并且便于查看,建议的最小大小为 16sp。
+      (<a href="{@docRoot}design/wear/style.html#Typography">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="launcher">
+    启动器
+  </td>
+
+  <td id="WR-LN">
+    WR-LN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用启动器字符串是应用的名称,而非命令短语。
+      (<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="notifications">
+    通知
+  </td>
+
+  <td id="WR-NC">
+    WR-NC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用在合适时显示确认动画。
+      (<a href="{@docRoot}design/wear/patterns.html#Countdown">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-NR">
+    WR-NR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知卡在右上边缘提供可见的应用图标。有个例外,如果通知卡具有单次操作控件,例如媒体播放卡。
+
+      <br/>
+      (<a href="{@docRoot}design/wear/style.html#Assets">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-WI">
+    WR-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知操作采用白色的图标、操作标题以及透明的背景。
+      <br/>
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PB">
+    WR-PB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知照片背景仅用于传达信息,而不是在卡上标注品牌。
+      (<a href="{@docRoot}design/wear/style.html#Branding">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PR">
+    WR-PR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知照片背景具有至少 400x400 的分辨率。
+      (<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="googleplay">
+    Google Play
+  </td>
+
+  <td id="WR-GS">
+    WR-GS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      应用在其 Play 商店详情中包括至少一张穿戴设备截图。
+      (<a href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">了解方法</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相关资源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="faq">
+  常见问题
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>在提交我的应用供 Android Wear 审查之后,怎样发现应用是否符合穿戴设备的所有要求?</strong>
+
+</p>
+<p>
+  如果您的应用不符合本页所述的可用性要求,Play 商店团队将通过与应用关联的 <a href="https://play.google.com/apps/publish/">Google Play 开发者控制台</a>帐户中指定的电子邮件地址与您联系。
+
+
+</p>
+<p class="caution">
+  <strong>注意:</strong>确保您的应用符合<a href="#fn">这些功能要求</a>,否则应用不会被视为穿戴设备应用,并且不会审查其穿戴设备<a href="#ux">设计和交互</a>。
+
+
+</p>
+<p class="note">
+ <strong>注意:</strong>有关如何在 Google Play 中发布可穿戴设备应用的信息,请参见<a href="{@docRoot}distribute/googleplay/wear.html">分发到 Android Wear</a>。
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>如果我的应用不符合穿戴设备的要求,是否仍会在 Google Play 
+上向手机和平板电脑显示我的新应用或更新版本并且仍可在可穿戴设备上安装?</strong>
+</p>
+<p>
+  是的。上述要求仅确定应用是否在 Google Play 上被标识为 Android Wear 应用,从而让 Android Wear 用户更容易发现。
+如果您的应用未被接受为穿戴设备应用,它仍可用于其他设备类型,如手机和平板电脑,并且仍可安装在穿戴设备上。
+
+
+</p>
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/start.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/start.jd
new file mode 100644
index 0000000..8d3dd25
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/start.jd
@@ -0,0 +1,156 @@
+page.title=开始发布
+page.metaDescription=注册开发者帐户,几分钟内即可在 Google Play 上开始发布。
+meta.tags="publishing"
+page.tags="google play", "publishing", "register", "signup"
+page.image=/distribute/images/getting-started.jpg
+
+@jd:body
+
+<div class="top-right-float" style="margin-right:24px;margin-top:-18px">
+  <a href="https://play.google.com/apps/publish/"><img src="{@docRoot}images/gp-start-button.png"></a>
+</div>
+
+<p>
+  完成以下步骤,几分钟内即可在 Google Play 上开始发布:
+</p>
+
+<ul>
+  <li>注册 Google Play 发布者帐户
+  </li>
+
+  <li>如果您要销售应用或应用内的产品,则设置 Google 电子钱包商家帐户。
+
+  </li>
+
+  <li>探索 <a href="https://play.google.com/apps/publish/">Google Play
+ 开发者控制台</a>和发布工具。
+  </li>
+</ul>
+
+<p>
+  当您做好准备时,点击“开始”按钮以转到开发者控制台。
+</p>
+
+<div class="headerLine">
+  <h2>
+    注册发布者帐户
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      提示
+    </h2>
+
+    <ul>
+      <li>需要 Google 帐户才能注册。可以在此过程中创建一个帐户。
+
+      </li>
+
+      <li>如果您是一家组织,请考虑注册新的 Google 帐户,而不是使用个人帐户。
+
+      </li>
+
+      <li>查看您可以分发和销售应用的<a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294">
+开发者国家/地区</a>和<a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">
+商家国家/地区</a>。
+      </li>
+    </ul>
+  </div>
+</div>
+
+<ol>
+  <li>访问 <a href="https://play.google.com/apps/publish/">Google Play 开发者控制台</a>。
+
+  </li>
+
+  <li>输入您的<strong>开发者身份</strong>
+的基本信息 &mdash; 名称、电子邮件地址等。以后可以修改此信息。
+
+  </li>
+
+  <li>阅读并接受针对您所在国家或地区的<strong>开发者分发协议</strong>。
+注意,您在 Google Play 上发布的应用和商店详情必须遵守开发者计划政策和美国出口法律。
+
+
+  </li>
+
+  <li>使用 Google 电子钱包支付 <strong>25 美元注册费</strong>。如果没有 Google 电子钱包帐户,则可以在此过程中快速设置一个。
+
+
+  </li>
+
+  <li>当您的注册获得验证时,将通过您在注册时输入的电子邮件地址通知您。
+
+  </li>
+</ol>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    设置 Google 电子钱包商家帐户
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:200px;">
+  <img src="{@docRoot}images/gp-start-wallet-icon.png">
+</div>
+
+<p>
+  如果您想销售付费应用、应用内的产品或订阅,则需要用Google 电子钱包商家帐户。
+您可以随时设置该帐户,但首先请查看<a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">
+商家国家/地区</a>名单。
+<br>
+  <br>
+  设置 Google 电子钱包商家帐户<br>
+  <br>
+</p>
+
+<ol>
+  <li>
+    <strong>登录</strong> Google Play 开发者控制台 <a href="https://play.google.com/apps/publish/" target="_blank">https://play.google.com/apps/publish/</a>。
+  </li>
+
+  <li>打开侧边导航栏上的<strong>财务报告</strong> <img src="{@docRoot}images/distribute/console-reports.png">。
+  </li>
+
+  <li>点击<strong>立即设置商家帐户</strong>。
+  </li>
+</ol>
+
+<p>
+  您将转到 Google 电子钱包网站;需要提供您或贵企业的信息来完成此步骤。
+
+</p>
+
+<div class="headerLine">
+  <h2>
+    探索开发者控制台
+  </h2>
+
+
+</div>
+
+<p>
+  在您的注册获得验证后,您就可以登录开发者控制台,这是您在 Google Play 上执行应用发布操作和使用工具的大本营。
+
+
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine">
+<h2 id="related-resources">相关资源</h2><hr />
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/gettingstarted"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/tv.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/tv.jd
new file mode 100644
index 0000000..e557024
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/tv.jd
@@ -0,0 +1,305 @@
+page.title=分发到 Android TV
+page.image=/design/tv/images/atv-home.jpg
+meta.tags="tv", "publish", "quality"
+page.tags="tv", "publish", "googleplay"
+page.metaDescription=将您的应用、游戏和内容分发到 Android TV。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>参加办法</h2>
+<ol>
+<li><a href="#understand_guidelines">了解准则</a></li>
+<li><a href="#develop_app">开发优秀的电视应用</a></li>
+<li><a href="#test_app">测试电视应用的质量</a></li>
+<li><a href="#opt_in">选择加入</a></li>
+<li><a href="#track_review">跟踪审查进度</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用的质量</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">核心的应用质量</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  如果您有一款优秀的应用或游戏,Android TV 和 Google Play 可以帮助您直接推送到用户的客厅中。
+您将能够在为电视优化的店面体验中提供您的应用和游戏。
+您可以针对电视扩展您的新旧应用,然后在 Google Play 上使用熟悉的工具和流程来发布应用。
+
+
+</p>
+
+<p>
+  首先,查看本文档各部分,了解如何通过 Google Play 将您的电视应用分发给用户。
+一定要阅读
+<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用的质量</a>
+,了解有关您的应用应符合的可用性和质量标准的信息。
+当您的应用准备就绪时,可以在开发者控制台选择加入 Android TV 店面发布。
+
+</p>
+
+<h2 id="how_to_participate">
+  参加办法
+</h2>
+
+<p>
+  Google Play 让您能将电视应用推送到新用户群体的客厅中。
+您可以使用现有的开发者控制台帐户和当前的分发及定价设置来开发和发布应用。
+参加方法很简单 — 以下几部分概述了整个流程。
+
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-tv-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1.了解准则和要求
+</h3>
+
+<p>
+  为了做好准备,以便在 Android TV 上成功推出应用,首先要查阅在电视上提供出色应用体验的准则。
+请参考 <a href="{@docRoot}design/tv/index.html">Android TV 设计准则</a>,了解有关针对电视扩展应用的建议,以及有关设计和可用性的详情。
+
+</p>
+
+<p>
+  开始设计电视体验时,务必阅读并理解电视应用的质量标准。
+Android TV 的 Google Play 体验仅<strong>展示可在电视上使用的应用。</strong>
+ &mdash; 如果您的应用符合一组基本的质量标准,则可以参加。
+
+参考<a href="{@docRoot}distribute/essentials/quality/tv.html">电视
+应用的质量</a>,了解详情。
+</p>
+
+<h3 id="develop_app">2.开发优秀的电视应用</h3>
+
+<p>
+  出色的电视应用专为客厅使用而设计,并充分利用 Android TV 和相关输入配件(如游戏手柄、方向键和遥控器)的功能。
+
+应用经优化后,应在大屏幕上提供美观、高品质的体验,并为用户提供一组吸引人的功能。
+
+
+</p>
+
+<p>
+  在考虑您的电视应用时,请查看<a href="{@docRoot}training/tv/start/index.html">开发者文档</a>和可用性准则,并且尽可能支持这些准则。
+
+确保为用户设计一种出色 Leanback 观看体验,并使用 SDK 中随附的 
+Leanback 库来打造这种体验。您想针对电视用例优化应用的其他部分,最好在开发过程的早期确定这些部分。
+
+
+</p>
+
+<p>
+  大多数情况下,我们建议您使用相同的程序包名称和商品详情,将您的电视体验作为您针对手机、平板电脑和其他设备的现有应用的一部分来提交。
+
+这种方法可让用户无缝升级到您的电视体验,也可让您充分利用您在手机和平板电脑应用中获得的评价和评分。
+
+
+</p>
+
+<p>
+  可以将电视意图、Leanback 库、电视特有代码和资源捆绑在一起,作为针对所有受支持设备的单个 APK 解决方案的一部分。
+必要时,可以使用<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK
+ 支持</a>,在您用于手机和平板电脑的同一程序包名称和商店详情下,为 Android TV 设备提供一个自定义二进制文件。
+
+
+</p>
+
+<p>
+  在整个设计和开发中,务必使用合适的设备来进行原型设计并测试您的用户体验。
+您应该购买一个或多个 Android TV 设备或模拟器,并尽早设置您的测试环境。
+
+在 Android TV 环境下测试的推荐硬件设备是 Nexus Player,可从<a href="http://www.google.com/intl/all/nexus/player/">Google Play</a>
+和其他商店中购买此设备,您还应购买游戏手柄和其他电视输入设备。
+
+
+</p>
+
+<h3 id="test_app">3.测试电视应用的质量</h3>
+
+<p>
+  您的电视应用应表现出色,在 Android TV 上看起来引人入胜,并且提供尽可能最佳的用户体验。
+Google Play 将展示优质应用,以便用户能够在 Google Play 中轻松发现。
+以下说明了您如何加入平台,提交用户喜爱的 Android TV 应用:
+
+</p>
+
+<ul>
+  <li>符合核心应用质量的准则
+    <ul>
+      <li>遵循 <a href="{@docRoot}design/index.html">Android 设计准则</a>。
+特别注意在应用中使用<a href="http://www.google.com/design/spec/material-design/introduction.html">素材设计</a>。
+
+      </li>
+
+      <li>按照<a href="{@docRoot}distribute/essentials/quality/core.html">核心应用质量的准则</a>来测试您的应用。
+
+      </li>
+    </ul>
+  </li>
+  <li>符合<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用的质量</a>准则
+
+    <ul>
+      <li>遵循我们的<a href="{@docRoot}training/tv/index.html">
+电视应用开发</a>最佳做法</li>
+      <li>确保您的应用符合<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用质量</a>的所有标准</li>
+    </ul>
+  </li>
+  <li>争取简洁性和最佳的可用性</li>
+</ul>
+
+<h3 id="opt_in">4.选择加入 Android TV 并发布</h3>
+
+<p>
+  当您已创建可供发布的 APK 并且已通过测试确保它符合
+<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用质量</a>准则后,将其上传到开发者控制台。
+在您的商品详情中更新电视屏幕截图和电视横幅,并按需设置分发选项。
+
+如果不熟悉如何准备在 Google Play 上发布,请参考<a href="{@docRoot}distribute/googleplay/publish/preparing.html">发布操作检查单。</a>
+
+
+</p>
+
+<p>
+  在向 Android TV 用户发布之前,您需要从开发者控制台的<strong>定价和分发</strong>部分加入 Android TV。
+
+选择加入即表示您希望将应用通过 Google Play 提供给 Android TV 用户,并且您的应用符合<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用质量</a>准则。
+
+
+
+</p>
+
+<p>
+  只有在您的应用符合两个初步的质量标准时才能选择加入,在上传 APK 时将按这些标准自动检查:
+
+</p>
+
+<ul>
+  <li>应用的清单文件必须包括一个带有类别<a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER">
+ <code>CATEGORY_LEANBACK_LAUNCHER</code></a>的意图类型<a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a>
+。<a href="{@docRoot}training/tv/start/start.html#tv-activity">在此</a>了解详情。
+  </li>
+
+  <li>您的应用必须声明它不需要触摸屏。清单文件必须通过<code>android:required="false”</code>声明
+ <code>android.hardware.touchscreen</code>硬件。
+<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">在此</a>了解详情。
+  </li>
+</ul>
+
+<p>
+  如果应用符合初步标准,您将看到如下所示的 Android TV
+ 加入复选框。如果选择加入复选框未启用,请审查 APK,以确保它符合初步标准。
+
+</p>
+
+<p>
+  在选择加入并保存更改之后,就可以像平常一样发布您的应用。
+  在将应用提供给 Android TV 用户之前,Google Play 会提交您的应用并对照<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用质量</a>标准进行审查,然后将结果通知您。
+
+参考下一部分以详细了解如何跟踪应用的审批状态。
+
+</p>
+
+<p>
+  如果应用符合<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用质量</a>标准,Google Play 便将应用提供给 Android TV 用户。
+
+您的应用还可以加入应用合集和推广,获得更高的知名度。
+为了让每个地方的用户都知道您的应用是为 Android TV 设计的,Google Play 使用电视徽章来装饰应用的商店详情。
+
+
+</p>
+
+<p>
+  注意,选择加入和审查并不影响您的应用在 Google Play 商店中对其他设备的可用性 &mdash; 例如,手机和平板电脑上,应用在发布之后就立即可用。
+
+
+</p>
+
+<p>
+  以下是您在开发者控制台中加入 Android TV 的步骤:
+</p>
+
+<ol>
+  <li>确保您的应用符合<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用质量</a>的所有标准
+  </li>
+
+  <li>将电视屏幕截图和横幅图片添加到应用的商店详情中
+  </li>
+
+  <li>在<strong>所有应用</strong>页面,点击您要加入的应用。
+  </li>
+
+  <li>在<strong>定价和分发</strong>下面,向下滚动找到<em>Android TV</em>和加入复选框。
+
+  </li>
+
+  <li>点击<em>将应用分发到 Android TV</em>旁边的复选框。
+  </li>
+
+  <li>点击<strong>保存</strong>以保存更改。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-tv-opt-in.png">
+  <p class="caption">
+    <strong>选择加入电视:</strong>在开发者控制台中加入,将您的应用包括在 Android TV 平台中。
+
+  </p>
+</div>
+
+<h3 id="track_review">5.跟踪审查和批准进度</h3>
+
+<p>
+  如果应用符合 Android TV 的上述技术和质量标准,则该应用将可供用户在 Android TV 上使用。
+如果应用不符合这些标准,您的<strong>开发者帐户地址将收到电子邮件通知</strong>,概述您需要解决的问题区域。
+
+当您进行必要的调整后,就可以将应用的新版本上传到开发者控制台。
+
+ 
+</p>
+
+<p>
+  您随时可以在开发者控制台中该应用的<strong>定价和分发</strong>
+页的 <em>Android TV </em>下面,检查应用的审查和批准状态。
+
+</p>
+
+<p>
+  有三种审批状态:
+</p>
+
+<ul>
+  <li>
+    <em>待定</em> — 您的应用已发送供审查并且审查尚未完成。
+
+  </li>
+
+  <li>
+    <em>已批准</em> — 您的应用已被审查并获得批准。该应用将直接提供给 Android TV 用户。
+ 
+  </li>
+
+  <li>
+    <em>未批准</em> — 您的应用已被审查但未获得批准。请查看通知电子邮件,了解有关应用未被批准的原因的信息。
+您可以解决存在的问题,然后重新加入和发布,以启动另一次审查。
+
+
+  </li>
+</ul>
+
+<p>要了解如何评估您的应用,请参阅<a href="{@docRoot}distribute/essentials/quality/tv.html">电视应用质量</a>文档。 </p>
+
+
+  <h3>相关资源</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:tvlanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div>
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/wear.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/wear.jd
new file mode 100644
index 0000000..182abdf
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/wear.jd
@@ -0,0 +1,262 @@
+page.title=分发到 Android Wear
+page.image=/design/media/wear/ContextualExample.008_2x.png
+meta.tags="wear", "publish", "quality"
+page.tags="wear", "publish", "googleplay"
+page.metaDescription=将您的应用、游戏和内容分发到 Android Wear。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>参加办法</h2>
+<ol>
+<li><a href="#understand_guidelines">了解准则</a></li>
+<li><a href="#develop_app">开发优秀的穿戴设备应用</a></li>
+<li><a href="#test_app">测试穿戴设备应用的质量</a></li>
+<li><a href="#opt_in">选择加入</a></li>
+<li><a href="#track_review">跟踪审查进度</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用的质量</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">核心的应用质量</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  如果您有一款优秀的应用,Android Wear 和 Google Play 可以帮助您推送给用户。虽然所有应用都能向 Android Wear 设备发送基本通知,但您可以更进一步。
+
+  扩展您的应用以支持自定义的穿戴设备交互,并在所有穿戴设备上提供优化的互动式用户体验。
+如果您的应用符合手持设备的核心应用质量准则,并为 Android Wear 设备提供优质体验,则 Google Play 将展示您的应用以便用户轻松发现。
+
+
+</p>
+
+<p>
+  首先,查看本文档各部分,了解如何通过 Google Play 将您的穿戴设备应用分发给用户。
+一定要阅读<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用的质量</a>,了解有关您的应用应符合的可用性和质量标准的信息。
+当您的应用准备就绪时,可以在开发者控制台中加入此计划,以便指定为 Android Wear 应用。
+
+</p>
+
+<h2 id="how_to_participate">
+  参加办法
+</h2>
+
+<p>
+  Google Play 可使您的穿戴设备应用更容易被穿戴设备用户发现。您可以使用现有的开发者控制台帐户和当前的分发及定价设置来开发和发布应用。
+
+参加方法很简单 — 以下几部分概述了整个流程。
+</p>
+
+<h3 id="understand_guidelines">
+  1.了解准则和要求
+</h3>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-wear-process.png">
+</div>
+
+<p>
+  为了做好准备,以便在 Android Wear 上成功推出应用,首先要查阅在穿戴设备上提供出色应用体验的准则。
+请参考 <a href="{@docRoot}design/wear/index.html">Android 
+Wear 设计准则</a>,了解有关针对穿戴设备扩展应用的建议,以及有关设计和可用性的详情。
+
+</p>
+
+<p>
+  开始设计穿戴设备体验时,务必阅读并理解穿戴设备应用的质量标准。
+仅在穿戴设备上可使用的应用才能在 Google Play 上被指定为穿戴设备应用 — 如果您的应用符合一组基本的质量标准,则可以参加。
+参考<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用的质量</a>,了解详情。
+</p>
+
+<h3 id="develop_app">2.开发优秀的穿戴设备应用</h3>
+
+<p>
+在阅读了准则之后,下一步是开发您的应用。以下部分描述如何开始为穿戴设备打造优秀的应用体验。
+
+</p>
+
+<h4>设计第一</h4>
+
+<p>
+  Android Wear 的目的是在正确的时间为用户提供正确的信息。优秀的 Android Wear 体验应自动启动、便于查看,并且不需要或很少需要用户交互。
+
+虽然所有应用都无需修改即可向穿戴设备发送基本通知,但为穿戴设备打造的优秀应用是经优化的,可提供美观和优质的体验,在不同屏幕布局上运行,并为用户提供一组吸引人的功能。
+
+
+
+</p>
+
+<p>
+  在考虑您的穿戴设备应用时,请查看<a href="{@docRoot}training/building-wearables.html">开发者文档</a>和<a href="{@docRoot}design/wear/index.html">可用性准则</a>,并且尽可能利用这些准则。
+您可以通过 SDK 中提供的 API
+ 和支持库为用户设计一种出色的通知体验。您也可以选择构建一个直接在可穿戴设备上运行的应用。
+
+</p>
+
+<h4>将应用打包</h4>
+
+<p>
+  我们建议您使用相同的程序包名称和商品详情,将您的穿戴设备体验作为您针对手机、平板电脑和其他设备的现有应用的一部分来提交。
+这样让用户无缝升级到您的穿戴设备体验,也让您充分利用您在手机和平板电脑应用中获得的评价和评分。
+
+对于依赖某款应用来提供功能的可穿戴设备应用,始终应将其打包在该依赖应用内。
+要了解方法,请阅读<a href="{@docRoot}training/wearables/apps/packaging.html">将可穿戴设备应用打包</a>。
+</p>
+
+<h4>在各种设备上测试</h4>
+
+<p>
+  在整个设计和开发中,务必使用合适的设备来进行原型设计和测试您的用户体验。
+强烈建议您购买一个或多个 Android Wear 设备,或使用不同的模拟器配置进行开发,并尽早设置您的测试环境。
+
+务必同时针对方形和圆形布局来优化您的设计。
+</p>
+
+<h3 id="test_app">3.测试穿戴设备应用的质量</h3>
+
+<p>
+  您的穿戴设备应用应表现出色,在 Android Wear 上看起来引人入胜,并且提供尽可能最佳的用户体验。
+Google Play 将展示精选的优质穿戴设备应用,以便用户轻松发现。
+以下说明了您如何加入平台,提交用户喜爱的 
+Android Wear 应用:
+</p>
+
+<ul>
+  <li>符合核心应用质量的准则
+    <ul>
+      <li>遵循 <a href="{@docRoot}design/index.html">Android 设计准则</a>。
+特别注意在应用中使用<a href="http://www.google.com/design/spec/material-design/introduction.html">素材设计</a>。
+
+      </li>
+
+      <li>按照<a href="{@docRoot}distribute/essentials/quality/core.html">核心应用质量的准则</a>来测试您的应用。
+
+      </li>
+    </ul>
+  </li>
+  <li>符合<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用的质量</a>标准
+
+    <ul>
+      <li>遵循我们的<a href="{@docRoot}training/building-wearables.html">
+穿戴设备应用开发</a>最佳做法</li>
+      <li>确保您的应用符合<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用质量</a>的所有标准</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4.选择加入 Android Wear 并发布</h3>
+
+<p>
+  当您已创建可供发布的 APK 并且已测试确保它符合<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用质量</a>标准后,将其上传到开发者控制台。
+在您的商品详情中更新穿戴设备屏幕截图,并按需设置分发选项。
+如果不熟悉如何准备在 Google Play 上发布,请参考
+<a href="{@docRoot}distribute/googleplay/publish/preparing.html">发布操作检查单。</a>
+</p>
+
+<p>
+  在向用户发布之前,您可以在开发者控制台的<strong>定价和分发</strong>部分中加入 Android Wear。
+选择加入即表示您希望让 Android Wear 用户更容易通过 Google Play 发现该应用,并且您的应用符合<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用质量</a>标准。
+
+</p>
+
+<p>
+  在选择加入并保存更改之后,就可以像平常一样发布您的应用。此外,Google Play 会提交您的应用并对照<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用质量</a>标准进行审查,然后将结果通知您。
+
+参考下一部分以详细了解如何跟踪应用的审批状态。
+
+</p>
+
+<p>
+  如果应用符合所有<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用质量</a>标准,Google Play 使其更容易被 Android Wear 用户发现。
+您的应用还可以加入应用合集和推广,获得更高的知名度。
+
+</p>
+
+<p>
+  注意,选择加入和审查并不影响您的应用在 Google Play 商店中的可用性。
+&mdash; 应用在发布之后就立即可用。
+</p>
+
+<p>
+  以下是您在开发者控制台中加入 Android Wear 的步骤:
+</p>
+
+<ol>
+  <li>确保您的应用符合<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用质量</a>的所有标准
+  </li>
+
+  <li>将穿戴设备屏幕截图添加到应用的商店详情中
+  </li>
+
+  <li>在<strong>所有应用</strong>页面,点击您要加入的应用。
+  </li>
+
+  <li>在<strong>定价和分发</strong>下面,向下滚动找到 <em>Android Wear</em>
+ 和加入复选框。
+  </li>
+
+  <li>点击<em>将应用分发到 Android Wear</em> 旁边的复选框。
+  </li>
+
+  <li>点击<strong>保存</strong>以保存您对“定价和分发”的更改。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-wear-opt-in.png">
+  <p class="caption">
+    <strong>选择加入穿戴设备:</strong>在开发者控制台中加入,将您的应用包括在 Android Wear 平台中。
+
+  </p>
+</div>
+
+<h3 id="track_review">5.跟踪审查和批准进度</h3>
+
+<p>
+  如果应用符合 Android Wear 的上述技术和质量标准,则该应用更容易被 Android Wear 上的用户发现。
+如果应用不符合这些标准,您的<strong>开发者帐户地址将收到电子邮件通知</strong>,概述您需要解决的问题区域。
+
+当您进行必要的调整后,
+就可以将应用的新版本上传到开发者控制台。
+</p>
+
+<p>
+  您随时可以在开发者控制台该应用的<strong>定价和分发</strong>
+页的 <em>Android Wear</em> 下面,检查应用的审查和批准状态。
+
+</p>
+
+<p>
+  有三种审批状态:
+</p>
+
+<ul>
+  <li>
+    <em>待定</em> — 您的应用已发送供审查并且审查尚未完成。
+  </li>
+
+  <li>
+    <em>已批准</em> — 您的应用已被审查并获得批准。该应用将更容易被 Android Wear 用户发现。
+
+  </li>
+
+  <li>
+    <em>未批准</em> — 您的应用已被审查但未获得批准。请查看通知电子邮件了解有关应用未被批准的原因的信息。
+您可以解决存在的问题,然后重新加入和发布,以启动另一次审查。
+
+  </li>
+</ul>
+
+<p>要了解如何评估您的应用,请参阅<a href="{@docRoot}distribute/essentials/quality/wear.html">穿戴设备应用质量</a>文档。 </p>
+
+
+  <h3>相关资源</h3>
+
+  <div class="resource-widget resource-flow-layout col-13"
+    data-query="collection:wearlanding"
+    data-cardSizes="6x2"
+    data-maxResults="3">
+  </div>
diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd
index f641dbe..19a25c5 100644
--- a/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd
+++ b/docs/html-intl/intl/zh-cn/distribute/tools/launch-checklist.jd
@@ -1,16 +1,18 @@
-page.title=发布检查清单 
-page.metaDescription=向用户发布应用的完整过程的基本概述。在开发的早期阅读这份清单将有助于你做出规划并在Google Play成功发布应用。
+page.title=发布检查单
+page.metaDescription=向用户发布应用的完整过程的基本概述。在开发的早期阅读本检查单将有助于您做出规划并在 Google Play 成功发布应用。
+meta.tags="localizing, publishing, disttools"
+page.tags="launch, publishing, Google Play"
 page.image=/distribute/images/launch-checklist.jpg
 
 @jd:body
 
-    <div id="qv-wrapper">
+<div id="qv-wrapper">
   <div id="qv" style="width:280px">
-    <h2>检查清单</h2>
+    <h2>检查单</h2>
     <ol>
       <li><a href="#understand-publishing">1. 了解发布流程</a></li>
       <li><a href="#understand-policies">2. 了解 Google Play 政策</a></li>
-      <li><a href="#test-quality">3. 测试应用的核心质量</a></li>
+      <li><a href="#test-quality">3. 测试核心的应用质量</a></li>
       <li><a href="#determine-rating">4. 确定内容分级</a></li>
       <li><a href="#determine-country">5. 确定分发国家/地区</a></li>
       <li><a href="#confirm-size">6. 确认总大小</a></li>
@@ -30,22 +32,32 @@
   </div>
 </div>
 
-<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg" /></div>
+<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg"></div>
 
 <p>
-  在 Google Play 上发布应用以将其分发给用户之前,你需要准备好要发布的应用、进行测试并准备相关宣传材料。
+  在 Google Play 上发布应用并将其分发给用户之前,您需要准备好要发布的应用、进行测试并准备相关宣传材料。
+
+
 </p>
 
 <p>
-  本页面旨在帮助你了解发布流程,以及在 Google Play 上成功发布商品所需的准备工作,另外还总结了一些需要你在通过 Google Play 发布应用之前完成的任务,例如创建已签名的发布版应用包 (APK)、了解应用的要求以及为各个应用创建商品页和图形资源。
+  本页面旨在帮助您了解发布流程,以及在 Google Play 上成功发布产品所需的准备工作。
+另外还总结了一些需要您在 Google Play 上发布应用之前完成的任务,例如创建已签名的发布版应用包 (APK)、了解应用的要求以及为各个应用创建产品页和图形资源。
+
+
+
+
 </p>
 
 <p>
-  准备和发布任务已按先后顺序列出,这是为了让你对任务执行顺序有个大致了解。不过,你可以按适合自己的顺序来执行这些任务,也可以根据具体情况跳过某些步骤。
+  各项准备和发布任务已进行编号,让您对顺序有大致了解。
+不过,您可以按适合自己的顺序来处理这些任务,或视情况跳过某些步骤。
+
 </p>
 
 <p>
-  在完成发布之前的各项工作时,你可以使用各种支持资源。每一步中都提供了相关链接。
+  在准备发布时,您可以使用各种支持资源。
+每一步中都提供了相关链接。
 </p>
 
 <div class="headerLine">
@@ -57,16 +69,27 @@
 </div>
 
 <p>
-  在开始执行此检查清单中的各个步骤之前,你应抽时间查看和了解整个发布工作流程,并熟悉该流程的工作原理。特别要注意的是,你或你的开发小组需要按照所有 Android 应用通用的流程准备应用以进行发布。<a href="/tools/publishing/publishing_overview.html">发布工作流程文档</a>中详细说明了发布的工作原理以及如何准备 APK 以进行发布。
+  在开始此检查单的步骤之前,您应抽时间阅读和了解整个发布工作流程,并熟悉该流程的工作方式。
+
+特别是,您或您的开发团队需要采用所有 Android 应用通用的流程来准备要发布的应用。
+
+  <a href="{@docRoot}tools/publishing/publishing_overview.html">发布工作流程</a>文档中详细说明了发布的方式以及如何准备 APK 供发布。
+
+
 </p>
 
 <p>
-  当你基本熟悉发布流程后,请继续阅读以了解在 Google Play 上发布应用时应注意哪些问题。
+  当您基本熟悉发布流程后,请继续阅读以了解在 
+Google Play 上发布应用时应考虑哪些问题。  
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/understanding/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/understanding"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -78,12 +101,17 @@
 </div>
 
 <p>
-  请务必了解并遵守你在注册时接受的 Google Play 计划政策。Google Play 要求强制执行这些政策,违反任何一条都可能导致你的应用被暂停。如果屡次违规,你的开发者帐户将被终止。
+  请务必了解并遵守您在注册时接受的 Google Play 计划政策。
+Google Play 要求强制执行这些政策,任何违反行为都可能导致您的应用被暂停,如果屡次违规,您的开发者帐户将被终止。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/policies/zhcn" data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/policies" data-sortorder=
+"-timestamp" data-cardsizes="6x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -95,20 +123,34 @@
 </div>
 
 <p>
-  在 Google Play 上发布应用之前,请务必确保这些应用在所有目标设备上都符合适用于所有 Android 应用的基本质量要求。你可以设置测试环境,然后测试应用是否符合一系列<strong>适用于所有应用的质量标准</strong>,以此来检查应用的质量。有关完整信息,请参阅<a href="/distribute/essentials/quality/core.html">应用核心质量指南</a>。
+  在 Google Play 上发布应用之前,请务必确保这些应用在所有目标设备上都符合适用于所有 Android 应用的基本质量要求。
+
+您可以设置测试环境,并按照一小组<strong>适用于所有应用的质量标准</strong>来测试应用,以检查应用的质量。
+
+有关完整信息,请参阅<a href="{@docRoot}distribute/essentials/quality/core.html">核心的应用质量</a>
+准则。
+
 </p>
 
 <p>
-  如果你的应用适用于平板电脑,请确保其能为你的平板电脑用户提供引人入胜的丰富体验。请参阅<a href="/distribute/essentials/quality/tablets.html">平板电脑应用的质量</a>指南,了解如何针对平板电脑优化应用的相关建议。
+  如果您的应用针对的是平板电脑,请确保应用能为您的平板电脑用户提供引人入胜的丰富体验。
+请参阅<a href="{@docRoot}distribute/essentials/quality/tablets.html">平板电脑应用的质量</a>
+准则,了解如何针对平板电脑优化应用的建议。
 </p>
 
 <p>
-  如果你要将应用发布到 Google Play for Education,则需确保这些应用适合中小学课堂且能提供非凡的教育价值。请参阅<a href="/distribute/essentials/gpfe-guidelines.html">教育指南</a>,了解教育类应用应具备哪些特征。
+  如果您要将应用发布到 Google Play for Education,则需确保这些应用适合中小学课堂且能提供非凡的教育价值。
+
+请参阅<a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">教育准则</a>,了解教育类应用应具备哪些特征。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/quality/zhcn" data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/quality" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -120,34 +162,51 @@
 </div>
 
 <p>
-  Google Play 要求你为应用设置内容分级,以便 Google Play 用户了解应用的心智成熟度级别。发布应用之前,你应先确认自己要使用哪一分级。有以下四种内容分级可供选择:
+  Google Play 要求您为应用设置内容分级,以便 Google Play 用户了解应用的心智成熟度级别。
+  发布应用之前,您应先确认自己要使用哪一分级。
+有以下四种内容分级可供选择:
+
 </p>
 
 <ul>
   <li>
-    <p>所有人</p>
+    <p>
+      所有人
+    </p>
   </li>
 
   <li>
-    <p>心智成熟度-低</p>
+    <p>
+      心智成熟度-低
+    </p>
   </li>
 
   <li>
-    <p>心智成熟度-中</p>
+    <p>
+      心智成熟度-中
+    </p>
   </li>
 
   <li>
-    <p>心智成熟度-高</p>
+    <p>
+      心智成熟度-高
+    </p>
   </li>
 </ul>
 
 <p>
-  Android 用户可以在其 Android 设备上设置要浏览的心智成熟度级别,Google Play 会根据该设置对应用进行过滤。因此,你选择的内容分级会影响应用对用户的分发情况。你可以在开发者控制台中为应用指定(或更改)内容分级,无需在应用二进制文件中进行任何更改。
+  Android 用户可以在其 Android 设备上设置要浏览的心智成熟度级别。
+Google Play 会根据该设置来筛选应用,因此您选择的内容分级可能会影响应用对用户的分发情况。
+您可以在开发者控制台中为应用指定(或更改)内容分级,无需更改应用的二进制文件。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/rating/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/rating" data-sortorder=
+"-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -159,46 +218,60 @@
 </div>
 
 <p>
-  借助 Google Play,你可以控制将应用分发到哪些国家和地区。为了尽可能扩大覆盖面和潜在客户群,你通常会希望将应用分发到所有适用的国家和地区。不过,由于业务需求、应用要求或发布时的依赖关系,你可能需要从分发范围中排除一个或多个国家/地区。
+  Google Play 使您能够控制将应用分发到哪些国家和地区。
+为了尽可能扩大覆盖面和潜在客户群,您通常会希望将应用分发到所有适用的国家和地区。
+
+  不过,由于业务需求、应用要求或发布时的依赖关系,您可能需要从分发范围中排除一个或多个国家/地区。
+
 </p>
 
 <p>
-  请务必尽早确定目标国家/地区,因为这可能会影响:
+  请务必尽早准确地确定分发国家/地区,因为这可能会影响:
+
 </p>
 
 <ul>
   <li>
-    <p>是否需要对应用中的资源进行本地化。
+    <p>
+      应用中的资源是否需要本地化。
     </p>
   </li>
 
   <li>
-    <p>是否需要对开发者控制台中的应用说明进行本地化。
+    <p>
+      开发者控制台中的应用说明是否需要本地化。
     </p>
   </li>
 
   <li>
-    <p>某些国家/地区是否对应用有相应的法律要求。
+    <p>
+      某些国家/地区对应用的特定法律要求。
     </p>
   </li>
 
   <li>
-    <p>时区支持、本地价格等。
+    <p>
+      时区支持、本地价格等。
     </p>
   </li>
 </ul>
 
 <p>
-  确定目标国家/地区后,你应该评估应用及其 Google Play 商品详情是否需要本地化,然后在预订的发布日期之前就开始本地化工作。
+  确定目标国家/地区后,您应该评估应用及其 Google Play 商品详情是否需要本地化,然后在预定的发布日期之前提前开始本地化工作。
+
+
 </p>
 
 <p>
-  请参阅<a href="/distribute/tools/localization-checklist.html">本地化检查清单</a>,了解本地化流程中的关键步骤和注意事项。
+  请参阅<a href="{@docRoot}distribute/tools/localization-checklist.html">本地化检查单</a>,了解本地化流程中的关键步骤和注意事项。
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/country/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/country" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -210,32 +283,46 @@
 </div>
 
 <p>
-  应用的总大小会对应用的设计以及在 Google Play 上的发布产生影响。目前,在 Google Play 上发布的 APK 最大不得超过 <strong>50MB</strong>。如果你的应用超过该上限或要提供辅助下载,则可以使用 <a href="/google/play/expansion-files.html">APK 扩展文件</a>。Google Play 会将扩展文件免费托管在其服务器基础架构上,并自动处理这些文件下载到设备的过程。
+  应用的总大小可能影响其设计以及在 Google Play 上发布的方式。
+目前,在 Google Play 上发布的 APK 最大不得超过 <strong>50MB</strong>。
+如果您的应用超过上限或要提供辅助下载,则可以使用 <a href="{@docRoot}google/play/expansion-files.html">APK 扩展文件</a>,Google Play 会将扩展文件免费托管在其服务器基础结构上,并自动处理下载到设备的过程。
+
+
+
 </p>
 
 <ul>
   <li>
-    <p>在 Google Play 上发布的 APK 最大不得超过 50MB。
+    <p>
+      在 Google Play 上发布的 APK 最大不得超过 50MB。
     </p>
   </li>
 
   <li>
-    <p>对于每个 APK,你最多可以使用两 (2) 个 APK 扩展文件,每个都不得超过 2GB。
+    <p>
+      对于每个 APK,您最多可以使用两 (2) 个 APK 扩展文件,每个扩展文件都不得超过 2GB。
+
     </p>
   </li>
 </ul>
 
 <p>
-  在分发大型应用时,使用 APK 扩展文件是一种经济高效的简便方法。不过,使用 APK 扩展文件需要你在应用二进制文件中稍作更改,因此你需要在创建发布版 APK 之前完成这些更改。
+  在分发大型应用时,使用 APK 扩展文件是一种经济高效的简便方法。
+不过,使用 APK 扩展文件需要您在应用二进制文件中稍作更改,因此您需要在创建发布版 APK 之前完成这些更改。
+
+
 </p>
 
 <p>
-  为了尽可能精简应用的二进制文件,请务必在构建发布版 APK 时运行 <a href="/tools/help/proguard.html">Proguard</a> 工具或类似的代码混淆工具。
+  为了尽可能精简应用的二进制文件,请务必在构建发布版 APK 时运行 <a href="{@docRoot}tools/help/proguard.html">Proguard</a> 工具或类似的代码混淆工具。
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/size/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/size" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -246,65 +333,99 @@
 
 </div>
 
-<p>发布应用之前,请务必确保你的应用可在目标 Android 平台版本和设备屏幕尺寸上正常运行。
+<p>
+  发布应用之前,请务必确保您的应用可在目标 Android 平台版本和设备屏幕尺寸上正常运行。  
+
+
 </p>
 
 <p>
-  从应用兼容性角度来看,Android 平台版本由 <a href="/guide/topics/manifest/uses-sdk-element.html#ApiLevels">API 级别</a>定义。你应该使用 <a href="/guide/topics/manifest/uses-sdk-element.html">&lt;minSdkVersion&gt;</a> 确认你的应用兼容的最低版本,因为这将影响已发布的应用在 Android 设备上的分发情况。
+  从应用兼容性角度来看,Android 平台版本由 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API
+ 级别</a>定义。
+您应该使用 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;minSdkVersion&gt;</a> 确认您的应用兼容的最低版本,因为这将影响应用发布后在 Android 设备上的分发情况。
+
+
 </p>
 
 <p>
-  对于屏幕尺寸,你应该确认应用可在支持的各种屏幕尺寸和像素密度上正常运行且拥有精美外观。你还应按照<a href="/guide/practices/screens_support.html">支持跨屏</a>中给出的建议,为多种屏幕尺寸提供相应的支持。如果你无法提供跨屏支持,请使用 <a href="/guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a> 声明应用支持的最小屏幕尺寸。Google Play 会据此对你的应用做出限制,只将其提供给屏幕尺寸大于或等于已声明尺寸的设备。
+  对于屏幕尺寸,您应该确认应用可在支持的各种屏幕尺寸和像素密度上正常运行且外观赏心悦目。
+
+您还应按照<a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a>中给出的建议,为多种屏幕尺寸提供缩放支持。
+但是,如果您无法做到,请使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a> 来声明应用支持的最小屏幕尺寸。
+
+
+  Google Play 会据此对您的应用做出限制,只将其提供给所声明屏幕尺寸或更大的设备。
+
 </p>
 
 <p>
-  要更好地了解目前 Android 平台版本和屏幕尺寸在所有 Android 设备上的普及情况,请参阅<a href="/about/dashboards/index.html">设备信息中心</a>图表。
+  要更好地了解目前 Android 平台版本和屏幕尺寸在所有 Android 设备上的普及情况,请参阅<a href="{@docRoot}about/dashboards/index.html">设备信息中心</a>图表。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/platform" data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/platform" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
   <h2 id="decide-price">
-    8. 决定你的应用是免费还是付费
+    8. 决定您的应用是免费还是付费
   </h2>
 
 
 </div>
 
 <div class="figure">
-  <img src="{@docRoot}images/gp-launch-checklist-1.png" />
+  <img src="{@docRoot}images/gp-launch-checklist-1.png">
 </div>
 
 <p>
-  在 Google Play 上,你可以发布免费下载的应用和付费下载的应用。免费应用可供 Google Play 中的所有 Android 用户下载。付费应用仅供其所在国家/地区支持付费下载且已在 Google Play 中注册了付款方式(例如信用卡或运营商直接代扣)的用户下载。
+  在 Google Play 上,您可以发布免费下载的应用或付费应用。免费应用可供 Google Play 中的所有 Android 用户下载。
+付费应用仅供其所在国家/地区支持付费下载且已在 Google Play 中注册了付款方式(例如信用卡或运营商直接代扣)的用户下载。
+
+
+
 </p>
 
 <p>
-  决定你的应用是否免费非常重要,因为在 Google Play 上,<strong>免费应用必须始终免费</strong>。
+  决定您的应用是否免费非常重要,因为在
+ Google Play 上,<strong>免费应用必须始终免费</strong>。
 </p>
 
 <ul>
   <li>
-    <p>将应用发布为免费应用后,你无法再将其改成付费应用。不过,你仍能通过 Google Play 的<a href="/google/play/billing/index.html">应用内结算</a>服务销售<a href="/google/play/billing/billing_overview.html#products">应用内商品</a>和<a href="/google/play/billing/billing_subscriptions.html">订阅</a>。
+    <p>
+      将应用发布为免费应用后,您无法再将其改成付费应用。
+不过,您仍能通过 Google Play 
+的<a href="{@docRoot}google/play/billing/index.html">应用内结算</a>服务销售<a href="{@docRoot}google/play/billing/billing_overview.html#products">应用内商品</a>
+和<a href="{@docRoot}google/play/billing/billing_subscriptions.html">订阅</a>。
     </p>
   </li>
 
   <li>
-    <p>如果你将应用发布为付费应用,则可以随时将其改成免费应用(<strong>但之后无法再将其改回为付费应用</strong>)。<em></em>你也可以销售应用内商品和订阅。
+    <p>
+      如果您将应用发布为付费应用,则<em>可以</em>随时将其改成免费应用(<strong>但之后无法再将其改回为付费应用</strong>)。
+
+您也可以销售应用内商品和订阅。
     </p>
   </li>
 </ul>
 
 <p>
-  如果你的应用是付费应用或者你要销售应用内商品,你需要先<a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">设置 Google 电子钱包商家帐户</a>,然后才能发布应用。
+  如果您的应用是付费应用或者您要销售应用内商品,您需要先<a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">
+设置 Google 电子钱包商家帐户</a>,然后才能发布应用。
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/price/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/price" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -316,16 +437,29 @@
 </div>
 
 <p>
-  借助 Google Play <a href="/google/play/billing/index.html">应用内结算</a>,你可以在应用中销售数字内容。你可以使用该服务销售众多内容,包括可下载内容(例如媒体文件或照片)和虚拟内容(例如游戏关卡或魔药)。借助应用内结算服务,你可以在应用内销售一次性购买的商品,还可以销售订阅。这有助于你在应用安装后的整个生命周期内都能获利。
+  借助 Google Play <a href="{@docRoot}google/play/billing/index.html">应用内结算</a>,您可以在应用中销售数字内容。
+您可以使用该服务来销售众多内容,包括可下载内容(例如媒体文件或照片)和虚拟内容(例如游戏关卡或魔药)。
+
+
+借助应用内结算服务,您可以在应用内销售一次性购买的商品以及订阅产品。
+这有助于您在应用安装后的整个生命周期内都能从中获利。
+
 </p>
 
 <p>
-  如果你希望找到更多方法以通过应用获利并建立与用户的互动,则应考虑使用“应用内结算”或“Instant Buy”服务。这些服务深受用户和开发者的欢迎。要使用“应用内结算”和“Instant Buy”,你需要对应用的二进制文件进行更改。因此,你需要先完成更改并测试实施情况,然后才能创建发布版 APK。
+  如果您希望找到更多方法通过应用获利并建立与用户的互动,则应考虑使用“应用内结算”或“即时购买”。
+这些服务深受用户和开发者的欢迎。
+要使用“应用内结算”或“即时购买”,您需要对应用的二进制文件进行更改,因此,您需要先完成更改并测试实现方法,然后才能创建发布版 APK。 
+
+ 
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/purchasemethod/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/purchasemethod"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -337,16 +471,24 @@
 </div>
 
 <p>
-  如果你的应用是付费应用或者你要销售应用内商品或实体商品,Google Play 可让你针对全球市场的用户为商品设置以不同货币为单位的价格。你可以分别使用不同货币设置价格,以便根据市场情况和汇率灵活调整你的价格。
+  如果您的应用是付费应用或者您要销售应用内商品或实体商品,Google Play 可让您针对全球市场的用户以各种货币为产品设置价格。
+
+您可以分别使用不同货币设置价格,以便根据市场情况和汇率灵活调整您的价格。
+
+
 </p>
 
 <p>
-  发布应用之前,请想好如何为你的商品定价及以不同货币为单位的价格各是多少。之后,你可以通过开发者控制台设置以所有可用货币为单位的各种价格。
+  发布应用之前,请想好如何为您的商品定价及按各种货币计算的价格各是多少。
+之后,您可以通过开发者控制台设置以所有可用货币为单位的各种价格。
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/setprice/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/setprice" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -358,49 +500,75 @@
 </div>
 
 <p>
-  确定目标国家/地区后,你最好评估一下你的本地化需求,确保你的应用已国际化,并在预订的发布日期之前就开始本地化工作。
+  确定目标国家/地区后,您最好评估一下您的本地化需求,确保您的应用已国际化,并在预定的发布日期之前提前开始本地化工作。
+
+
 </p>
 
 <p>
-  除了应用设计外,你至少还应考虑本地化工作中的三个方面:
+  除了应用设计外,您至少还应考虑本地化工作中的三个方面:
+
 </p>
 
 <ul>
   <li>
-    <p>本地化应用中的字符串、图片及其他资源。
+    <p>
+      将应用中的字符串、图片及其他资源本地化。
     </p>
   </li>
 
   <li>
-    <p>本地化应用在 Google Play 商店中的商品详情。
+    <p>
+      将应用在 Google Play 上的商品详情本地化。
     </p>
   </li>
 
   <li>
-    <p>本地化应用的商品详情中随附的图形资源、屏幕截图和视频。
+    <p>
+      将应用的商品详情中随附的图形资源、屏幕截图和视频本地化。
+
     </p>
   </li>
 </ul>
 
 <p>
-  请参阅<a href="/distribute/tools/localization-checklist.html">本地化检查清单</a>,了解本地化流程中的关键步骤和注意事项。
+  请参阅<a href="{@docRoot}distribute/tools/localization-checklist.html">本地化检查单</a>,了解本地化流程中的关键步骤和注意事项。
+
 </p>
 
 <p>
-  要本地化你的商品详情,请先创建并完成应用标题、说明和宣传文字。将所有这些信息收集起来,然后发送给相关人员进行本地化。在应用更新时,你也可以选择翻译“最近更改”的文本。之后,你可以在开发者控制台中添加本地化的商品详情,或者选择让 Google Play 将你的商品详情自动翻译成你支持的语言。
+  要本地化您的商品详情,请先创建并最终确定应用标题、说明和宣传文字。
+收集所有资料并发送给相关人员进行本地化。
+在应用更新时,您也可以选择翻译“最近更改”的文本。
+之后,您可以在开发者控制台中添加本地化的商品详情,或者选择让 Google Play 将您的商品详情自动翻译成您支持的语言。
+
+
 </p>
 
 <p>
-  要让你的应用详情吸引全球的用户,关键是创建本地化版本的宣传图片、屏幕截图和视频。例如,应用的置顶大图中可能包含文字,这些文字应翻译成相应语言以获得最佳效果。你可以为每种目标语言创建相应版本的宣传图片,并将它们上传到开发者控制台。如果你提供宣传视频,则可以创建本地化版本的视频,然后添加指向各目标语言版本的视频的链接。
+  要让您的应用详情吸引全球的用户,关键是创建本地化版本的宣传图片、屏幕截图和视频。
+
+例如,应用的置顶大图中可能包含文字,这些文字应翻译成相应语言以获得最佳效果。
+您可以为每种目标语言创建相应版本的宣传图片,并将它们上传到开发者控制台。
+
+如果您提供宣传视频,则可以创建本地化版本的视频,然后添加指向各目标语言版本的视频的链接。
+
+
 </p>
 
 <p>
-  完成翻译后,根据需要将翻译放入应用的资源中并测试能否正常加载。在上传资源和配置商品详情时,请保存应用的翻译版商品详情以供日后使用。
+  完成翻译后,根据需要将译文放入应用的资源中并测试能否正常加载。
+在上传资源和配置商品详情时,请保存应用的商品详情译文以供日后使用。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/localization/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/localization"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -412,28 +580,52 @@
 </div>
 
 <p>
-  在 Google Play 上发布应用时,你可以提供各种高品质的图形资源,用来宣传你的应用或品牌。应用发布后,这些资源将显示在你的商品详情页、搜索结果及其他位置上。这些图形资源是商品详情页成功与否的关键,它们能吸引用户的注意力并让用户参与互动。因此,你应考虑聘请专业人士为你制作这些资源。屏幕截图和视频也相当重要,因为它们将展示应用的外观、使用或操作方式及其独特之处。
+  在 Google Play 上发布应用时,您可以提供各种高品质的图形资源,用来宣传您的应用或品牌。
+应用发布后,这些资源将显示在您的商品详情页、搜索结果及其他位置上。
+这些图形资源是商品详情页成功与否的关键,它们能吸引用户的注意力并让用户参与互动,因此,您应考虑聘请专业人士为您制作这些资源。
+
+
+屏幕截图和视频也相当重要,因为它们将展示应用的外观、使用或操作方式及其独特之处。
+
 </p>
 
 <p>
-  所有的图形资源均应精心设计以便足够醒目,并以多彩、有趣的方式突显你的应用或品牌。这些资源应该采用相同的徽标和图标,以便用户在下载应用后可以在“所有应用”启动器中找到你的应用。你的图形资源还应与你发布的所有应用的图形资源(也会显示在商品详情页上供用户查看)相互配套。
+  所有的图形资源均应精心设计以便足够醒目,并以多彩、有趣的方式突显您的应用或品牌。
+这些资源应该采用相同的徽标和图标,以便用户在下载应用后可以在“所有应用”启动器中找到您的应用。
+
+您的图形资源还应与您发布的所有应用的图形资源(也会显示在商品详情页上供用户查看)相互配套。
+
+
 </p>
 
 <p>
-  为了帮你将应用更有效地推广给全球用户,Google Play 允许你创建本地化版本的宣传图片、屏幕截图和视频并上传到开发者控制台中。当用户访问你应用的商品详情时,Google Play 会向其展示你针对该用户所用语言提供的宣传图片、屏幕截图和视频。
+  为了帮您将应用更有效地推广给全球用户,Google Play 允许您创建本地化版本的宣传图片、屏幕截图和视频并上传到开发者控制台中。
+
+当用户访问您应用的商品详情时,Google Play 会向其展示您针对该用户所用语言提供的宣传图片、屏幕截图和视频。
+
+
 </p>
 
 <p>
-  要本地化你的宣传图片,你可以翻译所有嵌入的文本、使用不同的图像或展示方式,或者改变你的营销方式,以尽可能满足使用特定语言的用户的需求。例如,如果你的置顶大图或宣传图片中包含嵌入的商品名称或宣传口号,则可以将名称或口号翻译成相应语言,然后添加到本地化版本的宣传图片中。
+  要本地化您的宣传图片,您可以翻译所有嵌入的文本、使用不同的图像或展示方式,或者改变您的营销方式,以尽可能满足使用特定语言的用户的需求。
+
+例如,如果您的置顶大图或宣传图片中包含嵌入的商品名称或宣传口号,则可以将名称或口号翻译成相应语言,然后添加到本地化版本的宣传图片中。
+
+
+
 </p>
 
 <p>
-  由于本地化的图形资源和视频非常重要,因此你应在预订的发布日期之前就开始创建并进行本地化。
+  由于本地化的图形资源和视频非常重要,因此您应在预定的发布日期之前提前开始创建并进行本地化。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/graphics/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/graphics" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -445,23 +637,37 @@
 </div>
 
 <p>
-  当确定你的应用符合界面、兼容性和质量要求后,你可以构建应用的发布版本。之后,你可以将发布版 APK 上传到开发者控制台并分发给用户。
+  当确定您的应用符合界面、兼容性和质量要求后,您可以构建应用的发布版本。
+
+  之后,您可以将发布版 APK 上传到开发者控制台并分发给用户。
+
 </p>
 
 <p>
-  所有应用的发布版 APK 准备流程都一样,无论应用采用哪种分发方式。一般情况下,该流程包括基本的代码清理和优化、构建和使用发布密钥签名以及最后的测试这几部分。
+  所有应用的发布版 APK 准备流程都一样,无论应用采用哪种分发方式。
+一般情况下,该流程包括基本
+的代码清理和优化、构建和使用发布密钥签名以及最终测试。
+
 </p>
 
 <p>
-  如需了解如何创建发布版应用的完整详情,请参阅<a href="/tools/publishing/preparing.html">准备发布</a>。
+  如需了解如何创建发布版应用的完整详情,请参阅<a href="{@docRoot}tools/publishing/preparing.html">准备发布</a>。
+
+
 </p>
 
 <p>
-  准备好发布版 APK 后,你可以将其上传到开发者控制台。如果需要,你可以在发布之前将 APK 替换为较新的版本。
+  准备好发布版 APK 后,您可以将其上传到开发者控制台。
+如有必要,您可以在发布之前将 APK 替换为较新的版本。
+
 </p>
 <!--<h3 class="rel-resources clearfloat">Related resources</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/build/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6"></div>-->
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/build"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>-->
 
 <div class="headerLine">
   <h2 id="plan-beta">
@@ -471,29 +677,43 @@
 
 </div>
 
-<div class="sidebox-wrapper" style="float:right">
+<div class="sidebox-wrapper" style="float:right;">
   <div class="sidebox">
     <h2>
       简单的 Beta 测试
     </h2>
 
     <p>
-      Google Play 允许你在世界范围内设立 Alpha 版和 Beta 版测试者小组。下次登录到开发者控制台时请别忘记了解这一强大的功能。
+      Google Play 允许您在世界范围内成立 Alpha 和 Beta 测试者小组。
+下次登录到开发者控制台时,请查看这项强大的功能。
+
     </p>
   </div>
 </div>
 
 <p>
-  在发布应用之前收集用户的真实反馈是很有必要的,特别是发布新应用时,应该收集更多反馈。我们强烈建议你向主要目标市场的用户分发应用的预览版本,并让这些用户能够方便地向你提供反馈和报告错误。
+  在发布应用之前收集用户的真实反馈是很有价值的 &mdash; 在发布新应用时更应该收集反馈。
+我们强烈建议您向主要目标市场的用户分发应用的预览版本,并让这些用户能够方便地向您提供反馈并报告错误。
+
+
+
 </p>
 
 <p>
-  Google Play 可以帮助你为应用设置 Beta 测试计划。登录到开发者控制台并上传你的 APK 之后,你可以设立用户小组,以便进行应用的 Alpha 版和 Beta 版测试。你可以先进行小范围的 Alpha 版测试,然后推进到更大范围的 Beta 版测试。用户被添加到小组之后,他们可以访问你应用的商品详情并安装应用。
-  <strong>Alpha 或 Beta 版本的用户不能留下评论或评分</strong>,因此你在 Google Play 上的<strong>评分不会受到不利影响</strong>。你需要安排具体途径以便用户提供测试反馈,例如 Google 论坛或 Google+。
+  Google Play 可以帮助您为应用设置 Beta 测试计划。登录到开发者控制台并上传您的 APK 之后,您可以成立用户小组,以便进行应用的 Alpha 和 Beta 测试。
+
+您可以先进行小范围的 Alpha 版测试,然后进行更大范围的 Beta 版测试。
+用户被添加到小组之后,他们可以访问您应用的商品详情并安装应用。
+
+  <strong>Alpha 或 Beta 版本的用户不能留下评价或评级</strong>,因此您在 Google Play 上的<strong>评分不会受到不利影响</strong>。
+
+您需要设置一种机制以便用户提供测试反馈,例如 Google 论坛或 Google+。
+
 </p>
 
 <p>
-  收到的反馈可以帮助你调整界面、翻译和商品详情,以确保为用户提供优质体验。
+  收到的反馈可以帮助您调整界面、译文和商品详情,以确保为用户提供优质体验。
+
 </p>
 <!-- Related resources
 
@@ -514,31 +734,53 @@
 
 <p>
   在 Google Play 上,应用的商品信息会在用户的 Android 设备或网络上的以下页面中显示给用户:应用的商品详情页;用户为详细了解应用而访问的页面;用户决定购买或下载应用的页面上。
+
+
+
 </p>
 
 <p>
-  为了让你宣传应用以及在商品详情页上与用户互动,Google Play 提供了许多方式,包括多彩的图片、屏幕截图和视频,本地化的说明、发布详情以及指向你其他应用的链接。当你准备发布应用时,请确保充分利用商品详情页提供的所有资源,让你的应用尽可能地引人入胜。
+  Google Play 提供了各种方式让您宣传应用以及在商品详情页上与用户互动,包括多彩的图片、屏幕截图和视频,本地化的说明、发布详情以及指向您的其他应用的链接。
+
+
+当您准备发布应用时,请确保充分利用商品详情页提供的所有资源,让您的应用尽可能地引人入胜。
+
+
 </p>
 
 <p>
-  你应在预订的发布日期之前就开始规划商品页,准备本地化的说明以及高品质的图形资源、屏幕截图和视频等。
+  您应在预定的发布日期之前提前开始规划产品页,准备本地化的说明以及高品质的图形资源、屏幕截图和视频等。
+
+
 </p>
 
 <p>
-  当临近预订的发布日期时,你应该熟悉开发者控制台中与商品详情配置页相关的所有字段、选项和资源。收集此页面上的信息和资源时,请将它们输入或上传到开发者控制台中,直到完成该页面,可以进行发布。
+  当临近预定的发布日期时,您应该熟悉开发者控制台中与商品详情配置页相关的所有字段、选项和资源。
+
+收集此页面上的信息和资源时,请确保您可以将它们输入或上传到开发者控制台中,直到完成该页面,可以进行发布为止。
+
+
 </p>
 
 <p>
   在开发者控制台中为应用设置地理位置定位后,请记得针对所有支持的目标语言添加本地化的商品详情、宣传图片等。
+
+
 </p>
 
 <p>
-  如果你的应用适用于平板电脑,请确保至少加入一张应用在平板电脑上运行时的屏幕截图,并在应用说明、版本备注、宣传活动及其他位置注重介绍你的应用支持平板电脑。
+  如果您的应用适用于平板电脑,请确保至少加入一张应用在平板电脑上运行时的屏幕截图,并在应用说明、版本备注、宣传活动及其他位置重点介绍您的应用支持平板电脑。
+
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/productdetails/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/productdetails"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -550,27 +792,41 @@
 </div>
 
 <p>
-  Google Play 徽章是官方品牌标识,你可以使用该徽章向 Android 用户推广你的应用。使用 <a href="/distribute/tools/promote/badges.html">Google Play 徽章生成器</a>可快速创建徽章,让用户从网页、广告、评论等链接到你的商品。你还可以使用特殊的<a href="/distribute/tools/promote/linking.html">链接格式</a>,将用户直接链接到你的商品详情页、商品列表或搜索结果页。
+  Google Play 徽章是官方品牌标识,您可以使用徽章向 Android 用户推广您的应用。
+使用 <a href="{@docRoot}distribute/tools/promote/badges.html">Google Play 徽章生成器</a>可快速创建徽章,让用户从网页、广告、评论等链接到您的商品。
+
+您还可以使用特殊的<a href="{@docRoot}distribute/tools/promote/linking.html">链接格式</a>,将用户直接链接到您的商品详情页、商品列表或搜索结果页。
+
+
 </p>
 
 <p>
-  为了帮你的应用在发布后获得用户关注,强烈建议你通过宣传活动来支持应用的发布,这些宣传活动应通过尽可能多的渠道、向尽可能多的国家/地区介绍你的商品。例如,你可以通过广告展示、社交网络或博客、视频及其他媒体、采访和评论,或者任何其他可用渠道推广应用的发布。
+  为了帮助您的应用在发布后获得用户关注,强烈建议您通过宣传活动来支持应用的发布,这些宣传活动应通过尽可能多的渠道、向尽可能多的国家/地区介绍您的商品。
+
+例如,您可以通过广告投放、社交网络或博客文章、视频及其他媒体、采访和评论,或者任何其他可用渠道推广应用的发布。
+
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/badges/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/badges" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
   <h2 id="final-checks">
-    17. 最终检查和发布</h2>
+    17. 最终检查和发布
+  </h2>
 
 
 </div>
 
 <p>
-  如果你认为已做好发布准备,请登录到开发者控制台,花些时间做最后几项检查。
+  如果您认为已做好发布准备,请登录到开发者控制台,花些时间做最后几项检查。
+
 </p>
 
 <p>
@@ -579,66 +835,89 @@
 
 <ul>
   <li>
-    <p>你的开发者资料准确无误且已与相应的 Google 电子钱包商家帐户相关联(如果你要销售商品)。
+    <p>
+      您的开发者资料准确无误且已与相应的 Google 电子钱包商家帐户相关联(如果您要销售商品)。
+
     </p>
   </li>
 
   <li>
-    <p>你上传的应用版本准确无误。
+    <p>
+      您上传的应用版本准确无误。
     </p>
   </li>
 
   <li>
-    <p>商品详情的各个方面都已准备完善,包括所有图形资源、屏幕截图、视频、本地化的说明等。
+    <p>
+      商品详情的各个方面都已准备完善,包括所有图形资源、屏幕截图、视频、本地化的说明等。
+
     </p>
   </li>
 
   <li>
-    <p>你已将应用设置为免费应用或付费应用。
+    <p>
+      您已将应用设置为免费应用或付费应用。
     </p>
   </li>
 
   <li>
-    <p>你已设置目标国家/地区(以及运营商),并已确定以买家货币为单位的商品价格(如果适用)
+    <p>
+      您已设置目标国家/地区(以及运营商),并已设置以买家货币为单位的商品价格(如果适用)。
+
     </p>
   </li>
 
   <li>
-    <p>“兼容设备”显示你的应用当前覆盖的是你要定位的设备。如果不是,你应与开发小组联系以了解应用的要求和过滤规则。
+    <p>
+      “兼容设备”显示您的应用当前覆盖的是您的目标设备。
+如果不是,您应与开发团队联系以了解应用的要求和过滤规则。
+
     </p>
   </li>
 
   <li>
-    <p>你已提供指向你网站的正确链接以及正确的支持电子邮件地址。
+    <p>
+      您已提供指向您网站的正确链接以及正确的支持电子邮件地址。
+
     </p>
   </li>
 
   <li>
-    <p>你的应用未违反任何内容政策指南。
+    <p>
+      您的应用未违反任何内容政策准则。
     </p>
   </li>
 
   <li>
-    <p>你已确认你的应用符合 Google Play 上的 Android 内容指南及美国出口法。
+    <p>
+      您已确认您的应用符合 Google Play 上的 Android 内容准则及美国出口法。
+
     </p>
   </li>
 </ul>
 
 <p>
-  你的应用现在随时可以发布了!
+  您的应用现在可以发布了!
 </p>
 
 <p>
-  如果你要发布更新,请务必阅读<a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=zh-CN&amp;answer=113476&amp;topic=2365760&amp;ctx=topic">发布更新的相关要求</a>。
+  如果您要发布更新,请务必阅读<a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=113476&amp;topic=2365760&amp;ctx=topic">
+发布更新的相关要求</a>。
 </p>
 
 <p>
-  当一切就绪后,请点击开发者控制台中的<strong>发布</strong>按钮。几个小时内,你的应用就会提供给广大用户,你的商品页将显示在 Google Play 上,供用户浏览、搜索或从宣传资料中链接到该页面。
+  当一切就绪后,请点击开发者控制台中的<strong>发布</strong>按钮。
+几个小时内,您的应用就会提供给广大用户,您的产品页将显示在 Google Play 上,供用户浏览、搜索或从宣传资料中链接到该页面。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/finalchecks/zhcn" data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/finalchecks"
+data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
 </div>
 
 <div class="headerLine">
@@ -650,60 +929,95 @@
 </div>
 
 <p>
-  发布应用或应用更新后,请务必为你的客户提供相关支持。及时周到的支持可让用户获得更好的体验,你的商品也就能获得更高的评分和更多的好评。如果你积极响应用户的需求和反馈,他们可能会与你的应用进行更多互动,还会向其他人推荐你的应用。如果你运用多种方式开展宣传活动,这种效果在应用发布后会更加明显。
+  发布应用或应用更新后,请务必为您的客户提供相关支持。
+及时周到的支持可让用户获得更好的体验,您的产品也就能获得更高的评分和更多的好评。
+
+如果您积极响应用户的需求和反馈,他们可能会与您的应用进行更多互动,还会向其他人推荐您的应用。
+如果您运用多种方式开展宣传活动,这种效果在应用发布后会更加明显。
+
 </p>
 
 <p>
-  你可以通过多种方式与用户保持联系并为其提供支持。其中最常见的就是在商品详情页上提供你的支持电子邮件地址。<em></em>除此之外,你还可以提供其他支持方式,例如论坛、邮寄名单或 Google+ 信息页。Google Play 小组会为用户提供下载、安装和付款方面的支持,但其他方面的问题则由你自行解决。由你向用户提供支持的示例包括:功能请求、应用的使用问题以及兼容性设置问题。
+  您可以通过多种方式与用户保持联系并为其提供支持。
+其中最基本的就是在商品详情页上提供您的<em>支持电子邮件地址</em>。
+除此之外,您还可以提供其他支持方式,例如论坛、邮件列表或 Google+ 页面。
+
+Google Play 团队会为用户提供下载、安装和付款方面的支持,但其他方面的问题则由您自行解决。
+
+由您向用户提供支持的示例包括:功能请求、应用的使用问题以及兼容性设置问题。
+
 </p>
 
 <p>
-  发布应用后,你应:
+  发布应用后,您应:
 </p>
 
 <ul>
   <li>
-    <p>经常查看你应用的商品详情页上的评分和评论。注意反复出现的主题,这可能表示存在错误或其他问题。
+    <p>
+      经常查看您应用的商品详情页上的评分和评论。  
+注意反复出现的主题,这可能表示存在错误或其他问题。
     </p>
   </li>
 
   <li>
-    <p>关注新发布的 Android 平台版本,因为你应用的兼容性设置可能需要更新。
+    <p>
+      关注新发布的 Android 平台版本,因为您的应用的兼容性设置可能需要更新。
+
     </p>
   </li>
 
   <li>
-    <p>在你的网站上放置一个指向支持资源的链接,并设置其他支持方式,例如论坛。
+    <p>
+      在您的网站上放置一个指向支持资源的链接,并设置其他支持方式,例如论坛。
+
     </p>
   </li>
 
   <li>
-    <p>在商品详情页上提供相应的支持电子邮件地址并回复用户发来的电子邮件。
+    <p>
+      在商品详情页上提供相应的支持电子邮件地址并回复用户花了时间发来的电子邮件。
+
     </p>
   </li>
 
   <li>
-    <p>除了 Google Play 提供的自动退款窗口外,请诚心制定你的退款政策,因为满意的用户将来更有可能购买你的商品。
+    <p>
+      除了 Google Play 提供的自动退款窗口外,请宽松地制定您的退款政策,因为满意的用户将来更有可能购买您的商品。
+
+
     </p>
   </li>
 
   <li>
-    <p>确认并解决你应用中出现的问题。保持公开透明并主动在商品详情页上列出已知问题是明智有益之举。
+    <p>
+      确认并修正您应用中出现的问题。保持公开透明并主动在商品详情页上列出已知问题是有益之举。 
+
     </p>
   </li>
 
   <li>
-    <p>尽可能经常发布更新,但不要牺牲质量,也不能过于频繁以免干扰用户。
+    <p>
+      尽可能经常发布更新,但不要牺牲质量,也不能过于频繁以免干扰用户。
+
     </p>
   </li>
 
   <li>
-    <p>每次更新时,请务必总结一下变更内容。你可以在开发者控制台中输入此信息。用户会查看这些信息并认为你是在努力提高应用的质量。
+    <p>
+      每次更新时,请务必提供变更内容的概况。您可以在开发者控制台中输入此信息。
+用户会阅读这些信息并认为您是在努力提高应用的质量。
+
+
     </p>
   </li>
 </ul>
-
+</ul>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
-<div class="resource-widget resource-flow-layout col-13" data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch/zhcn" data-sortorder="-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6"></div>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd
index b2ba2ff..522b7f5 100644
--- a/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd
+++ b/docs/html-intl/intl/zh-cn/distribute/tools/localization-checklist.jd
@@ -1,17 +1,18 @@
-page.title=本地化检查清单
-page.metaDescription=把握 Android 和 Google Play 所提供的全世界观众的优势。阅读此清单以获得如何将产品送到世界各地的市场的概述。
+page.title=本地化检查单
+page.metaDescription=充分利用 Android 和 Google Play 提供的全球受众。阅读此检查单以获得如何向世界各地市场提供产品的概述。
+meta.tags="localizing, publishing, disttools"
+page.tags="local, l10n, translation, language"
 page.image=/distribute/images/localization-checklist.jpg
-page.type="배포"
 
 @jd:body
 
-    <div id="qv-wrapper">
+<div id="qv-wrapper">
   <div id="qv" style="width:280px">
-    <h2>检查清单</h2>
+    <h2>检查单</h2>
     <ol>
       <li><a href="#identify-languages">1. 确定目标语言和语言区域</a></li>
       <li><a href="#design">2. 本地化设计</a></li>
-      <li><a href="#manage-strings">3. 管理字符串本地化</a></li>
+      <li><a href="#manage-strings">3. 管理本地化字符串</a></li>
       <li><a href="#translate-strings">4. 翻译界面字符串和其他资源</a></li>
       <li><a href="#test">5. 测试已本地化的应用</a></li>
       <li><a href="#prepare-launch">6. 准备国际化发布</a></li>
@@ -23,16 +24,24 @@
 <div class="top-right-float" style="width:194px">
   <img src="{@docRoot}distribute/images/localization-checklist.jpg">
 </div>
+
 <p>
-  Android 和 Google Play 让你可以面向全球的用户提供应用,其中日本、韩国、印度、巴西和俄罗斯等国家/地区的目标用户群正在迅速扩展。有鉴于此,我们强烈建议你本地化你的应用,因为这样可以最大程度地增加应用的分发范围,获得全球各地用户的评分。
+  Android 和 Google Play 让您可以向全球的用户提供应用,其中日本、韩国、印度、巴西和俄罗斯等国家/地区的目标用户群正在迅速扩展。
+
+我们强烈建议您进行本地化,因为这样可以最大程度地增加应用的分发范围,获得全球各地用户的评分。
+
+
 </p>
 
 <p>
-  本地化涉及到很多任务,贯穿应用开发的整个周期,因此务必要提前做出规划。本文旨在帮助你了解本地化的主要方面,以便你做好准备,通过 Google Play 向全球成功发布自己的应用。
+  本地化涉及到很多任务,贯穿应用开发的整个周期,因此务必要提前做出规划。
+本文旨在帮助您了解本地化的主要方面,以便您做好准备,通过 Google Play 向全球成功发布自己的应用。
+
+
 </p>
 
 <div class="headerLine">
-  <h2 id="identify-languages" style="margin-bottom:0px">
+  <h2 id="identify-languages">
     1. 确定目标语言和语言区域
   </h2>
 
@@ -40,42 +49,62 @@
 </div>
 
 <p>
-  确定要向哪些国家/地区发布你的应用并了解这些国家/地区所用的语言,是准备本地化的过程中基本且重要的一步。对于具有巨大市场商机、但英语或其他国际性语言并不普及的国家/地区来讲,将应用本地化尤为重要。
-</p>
+  确定要向哪些国家/地区发布您的应用并了解这些国家/地区所用的语言,是准备本地化的过程中基本且重要的一步。
 
-<p>
-    对于国际用户,你可以从以下这三个主要方面来管理自己的应用:国家/地区、语言区域和语言。其中,语言是本地化的主要考虑因素(语言区域也很重要,因为日期的格式、时间、货币及其他类似信息也都存在差异)。用户可以控制其 Android 设备上使用的语言和语言区域,反过来这些因素也会影响应用的显示方式。
+  对于具有巨大市场商机、但英语或其他国际性语言并不普及的国家/地区来讲,将应用本地化尤为重要。
+
 
 </p>
 
 <p>
-  通常来说,你首先要根据整体市场规模和商机、应用类别、竞争格局、本地定价和金融状况等因素来确定要定位的国家/地区,然后再基于你的国家/地区定位,确定应用要支持的语言。
+  对于国际用户,您可以从以下这三个主要方面来管理自己的应用:国家/地区、语言区域和语言。
+其中,语言是本地化的主要考虑因素(语言区域也很重要,因为日期的格式、时间、货币及其他类似信息也都存在差异)。
+
+用户可以控制其 Android 设备上使用的语言和语言区域,反过来这些因素也会影响应用的显示方式。
+
+  
 </p>
 
 <p>
-  随后,你可以决定是针对目标国家/地区的部分语言还是全部语言进行本地化。合理的做法是,先针对一种主要的地区性语言进行本地化,然后随着用户群的扩大增添更多语言。
+  一般来说,您首先要根据整体市场规模和商机、应用类别、竞争格局、本地定价和金融状况等因素来确定要定位的国家/地区,
+
+然后再基于您的国家/地区定位,确定应用要支持的语言。
+
+
 </p>
 
 <p>
-  确定目标语言之后,你就可以安排开发、翻译、测试和市场营销工作重点围绕这些市场展开。
+  随后,您可以决定是针对目标国家/地区的部分语言还是全部语言进行本地化。
+合理的做法是,先针对一种主要的地区性语言进行本地化,然后随着用户群的扩大增添更多语言。
+
+</p>
+
+<p>
+  确定目标语言之后,您就可以安排开发、翻译、测试和市场营销工作重点围绕这些市场展开。
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
 <div class="resource-widget resource-flow-layout col-13" data-query=
-"collection:distribute/toolsreference/localizationchecklist/identifylocales/zhcn"
+"collection:distribute/toolsreference/localizationchecklist/identifylocales"
 data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6">
 </div>
 
 <div class="headerLine">
-  <h2 id="design" style="margin-bottom:0px">
+  <h2 id="design">
     2. 本地化设计
   </h2>
 
 
 </div>
 
-<p>  确定本地化的目标语言之后,请评估在应用中支持这些语言需要完成哪些工作并提早做出规划。要考虑的事项包括每种语言的词汇扩展、脚本要求、字符间距、换行限制、支持文字“从左到右”和“从右到左”,以及其他可能遇到的问题。
+<p>
+  确定本地化的目标语言之后,请评估在应用中支持这些语言需要完成哪些工作并提前做出规划。
+
+  要考虑的事项包括每种语言的词汇扩展、脚本要求、字符间距、换行限制、支持文字“从左到右”和“从右到左”,以及其他可能遇到的问题。
+
+
 </p>
 
 <h4>
@@ -83,15 +112,22 @@
 </h4>
 
 <p>
-  在创建布局时,确保包含文字的界面元素拥有充足的空间。最好在满足你的语言的基础上多出部分空间(通常留出 30% 的空间)以适应其他语言。
+  在创建布局时,确保包含文字的界面元素拥有充足的空间。
+最好在满足您的语言的基础上多出部分空间(通常留出 30% 的空间)以适应其他语言。
+
 </p>
 
 <p>
-  另外,元素应能够横向或纵向扩展,以便可以适应不同宽度和高度的界面字符串或输入文本。任何目标语言的字符串都不应与边框或屏幕边缘重叠。
+  另外,元素应能够横向或纵向扩展,以便可以适应不同宽度和高度的界面字符串或输入文本。
+
+  任何目标语言的文本字符串都不应与边框或屏幕边缘重叠。
+
 </p>
 
 <p>
-  如果界面设计得当,通常你就可以针对所有支持的语言使用一套布局。有关详情,请参阅<a href="{@docRoot}training/basics/fragments/fragment-ui.html">构建灵活的界面</a>。
+  如果界面设计得当,通常您就可以针对所有支持的语言使用一套布局。
+有关详情,请参阅<a href="{@docRoot}training/basics/fragments/fragment-ui.html">构建灵活的界面</a>。
+
 </p>
 
 <h4>
@@ -99,7 +135,14 @@
 </h4>
 
 <p>
-  如果你的界面不能很好地适应某种目标语言,那么你可以单独为该语言创建一套<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">备用布局</a>。Android 可让你很轻松地针对特定语言、语言区域、屏幕尺寸等,声明要加载的多种布局和其他资源,只需使用相应的资源限定符做出标记即可。虽然备用布局可提供相应的灵活性,但使用它会导致随着时间推移,应用的维护难度增加。因此一般来说,建议你最好使用一套更灵活的布局。
+  如果您的界面不能很好地适应某种目标语言中的文本,那么您可以单独为该语言创建一套<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+备用布局</a>。
+Android 可让您很轻松地针对特定语言、语言区域、屏幕尺寸等,声明要加载的多种布局和其他资源,只需使用相应的资源限定符做出标记即可。
+
+
+虽然备用布局可提供相应的灵活性,但使用它会导致随着时间推移,应用的维护难度增加。
+一般来说,最好使用一套更灵活的布局。
+
 </p>
 
 <h4>
@@ -107,31 +150,50 @@
 </h4>
 
 <p>
-  如果你要发布应用的国家/地区使用从右到左 (RTL) 的文字阅读方向,则你应该考虑尽可能地支持 RTL 布局以及相应的文本显示和编辑。
+  如果您要发布应用的国家/地区使用从右到左 (RTL) 的文字阅读方向,则您应该考虑尽可能地支持 RTL 布局以及相应的文本显示和编辑。
+
+
 </p>
 
 <p>
-  Android 4.1 引入了对双向文字的有限支持,支持应用以从左到右 (LTR) 和从右到左 (RTL) 的方向显示和编辑文本。Android 4.2 增加了<a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">对 RTL 布局的完整原生支持</a>(包括布局镜像),因此你可以为所有用户提供一致的优质体验。
+  Android 4.1 引入了对双向文本的有限支持,支持应用以从左到右 (LTR) 和从右到左 (RTL) 的方向显示和编辑文本。
+
+Android 4.2 增加了对 <a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">
+RTL 布局的完整原生支持</a>(包括布局镜像),因此您可以为所有用户提供一致的优质体验。
+
 </p>
 
 <p>
   Android 4.2 用户至少可以轻松添加基本的 RTL 布局镜像,这对满足 RTL 用户需求大有帮助。
+
 </p>
 
 <h4>
   <strong>针对日期、时间、数字和货币采用系统提供的格式</strong>
+
 </h4>
 
 <p>
-  如果你的应用需要指定因语言区域不同而不同的日期、时间、数字、货币和其他实体,请务必使用系统提供的格式,而不要使用应用专有的格式。请注意,并非所有的语言区域都使用相同的千位分隔符、小数点或百分比符号。
+  如果您的应用需要可能指定因语言区域不同而不同的日期、时间、数字、货币和其他实体,请务必使用系统提供的格式,而不要使用应用专有的格式。
+
+请注意,并非所有的语言区域都使用相同的千位分隔符、小数点或百分比符号。
+
 </p>
 
 <p>
-  Android 提供了多种实用工具,用于在不同的语言区域中设置格式、进行转换:例如适用于日期的 <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> 和 <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a>;适用于数字和货币的 <a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String, java.lang.Object...)">String.format()</a> 或 <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a>;适用于电话号码的 <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a> 等。
+  Android 提供了多种实用工具,用于在不同的语言区域中设置格式和进行转换:例如适用于日期的 <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> 和 <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a>;
+适用于数字和货币的 <a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)">
+String.format()</a> 或 <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a>;
+适用于电话号码的 <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a>
+等。
+
+
 </p>
 
 <p>
-  假定用户的语言区域并据此强制设置格式,会导致在用户更改语言区域时引发问题。强烈建议你使用系统提供的格式和各种实用工具。
+  假定用户的语言区域并据此强制设置格式,会导致在用户更改语言区域时引发问题。
+强烈建议您使用系统提供的格式和各种实用工具。
+
 </p>
 
 <h4>
@@ -139,11 +201,18 @@
 </h4>
 
 <p>
-  提供一整套默认资源可以确保无论是何种语言或语言区域,你的应用都能正常运行。应用的默认资源是指没有使用任何语言或语言区域限定符标记的资源,例如 res/drawable/ 和 res/values/ 中存储的资源。<em></em>如果你的应用试图加载目前的语言或默认资源集中没有的资源,则会崩溃。
+  提供一整套默认资源可以确保无论是何种语言或语言区域,您的应用都能正常运行。
+应用的默认资源是指<em>没有标记</em>任何语言或语言区域限定符的资源,例如 res/drawable/ 和 res/values/ 中存储的资源。
+
+如果您的应用试图加载目前的语言或默认资源集中没有的资源,则会崩溃。
+
+
 </p>
 
 <p>
-  无论你在应用中使用的默认语言是什么,请务必在默认的资源目录中存储相关的布局、图形内容和字符串,且不使用语言或语言区域限定符。
+  无论您在应用中使用的默认语言是什么,请务必在默认的资源目录中存储相关的布局、图形内容和字符串,且不使用语言或语言区域限定符。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
@@ -154,14 +223,16 @@
 </div>
 
 <div class="headerLine">
-  <h2 id="manage-strings" style="margin-bottom:0px">
-    3. 管理字符串的本地化</h2>
+  <h2 id="manage-strings">
+    3. 管理本地化字符串
+  </h2>
 
 
 </div>
 
 <p>
-  妥善管理应用的界面字符串非常重要,这样你才能为用户提供优质的体验,并让本地化工作事半功倍。
+  妥善管理应用的界面字符串非常重要,这样您才能为用户提供优质的体验,并让本地化工作事半功倍。
+
 </p>
 
 <h4>
@@ -169,43 +240,63 @@
 </h4>
 
 <p>
-  在构建应用时,请注意不要硬编码任何字符串,而是在默认的 strings.xml 文件中将所有字符串声明为资源,这样便于更新和进行本地化。<em></em>strings.xml 文件中的字符串可以抽取出来、进行翻译,然后再集成回应用(使用相应的限定符),无需对编译后的代码进行任何更改。
+  在构建应用时,请注意不要硬编码任何字符串。而是在默认的 strings.xml 文件中将<em>所有</em>字符串声明为资源,这样便于更新和进行本地化。
+
+Strings.xml 文件中的字符串可以抽取出来、进行翻译,然后再集成回应用(使用相应的限定符),无需对编译后的代码进行任何更改。
+
+
 </p>
 
 <p>
-  如果你生成带有文字的图片,也请将这些字符串放入 strings.xml,并在翻译之后重新生成图片。
+  如果您生成带有文本的图片,也请将这些字符串放入 strings.xml,并在翻译之后重新生成图片。
+
 </p>
 
 <h4>
-  <strong>遵循针对界面字符串的 Android 指南</strong>
+  <strong>遵循 Android 的界面字符串准则</strong>
 </h4>
 
 <p>
-  在设计和开发界面时,请务必密切注意你与用户交流的方式。<em></em>一般而言,使用友好而不失简洁、<a href="{@docRoot}design/style/writing.html">简明而且精炼的风格</a>,并且整个界面应采用一致的风格。</p>
+  在设计和开发界面时,请务必密切注意您与用户交流的<em>方式</em>。
+一般而言,使用友好而不失简洁、<a href="{@docRoot}design/style/writing.html">简明而且精炼的风格</a>,并且整个界面应采用一致的风格。
 
-<p>
-  请务必阅读并遵循<a href="{@docRoot}design/style/writing.html">写作风格和字词选择</a>方面的 Android 设计建议。这样做能够让你的应用更加美观,并且有助于用户快速理解你的界面。
 </p>
 
 <p>
-  另外,请尽可能使用 Android 标准术语,例如对于界面元素,使用“操作栏”、“选项菜单”、“系统栏”、“通知”等。确保 Android 术语的正确性和一致性可让翻译工作更容易进行,从而为用户带来更好的最终产品。
+  请务必阅读并遵循<a href="{@docRoot}design/style/writing.html">写作风格和字词选择</a>方面的 Android 设计建议。
+
+这样做能够让您的应用更加美观,并且有助于用户更快理解您的界面。
+
+</p>
+
+<p>
+  另外,请尽可能使用 Android 标准术语 &mdash; 例如对于界面元素,使用“操作栏”、“选项菜单”、“系统栏”、“通知”等。
+
+确保 Android 术语的正确性和一致性可让翻译工作更容易进行,从而为用户带来更好的最终产品。
+
 </p>
 
 <h4>
-  <strong>为声明的字符串提供充分的上下文</strong>
+  <strong>为声明的字符串提供充足的上下文</strong>
 </h4>
 
 <p>
-  在 strings.xml 文件中声明字符串时,确保清楚说明使用该字符串的上下文。此信息对翻译人员来说十分重要,有助于提高翻译质量,也有助于你始终有效地管理字符串。
+  在 strings.xml 文件中声明字符串时,确保清楚说明使用该字符串的上下文。
+此信息对翻译人员来说十分重要,有助于提高翻译质量,也有助于您始终有效地管理字符串。
+
+
 </p>
 
 <p>
   下面是一个例子:
 </p>
 
-<pre class="prettyprint"><span class="com">&lt;!-- 用于提交表单的操作。此文本显示在可容纳 30 个字符的按钮上--&gt;</span><span class="pln"><br /></span><span class="tag">&lt;string</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"login_submit_button"</span><span class="tag">&gt;</span><span class="pln">Sign in</span><span class="tag">&lt;/string&gt;</span></pre>
+<pre class="prettyprint">
+&lt;!-- The action for submitting a form. This text is on a button that can fit 30 chars --&gt;
+&lt;string name="login_submit_button"&gt;Sign in&lt;/string&gt;
+</pre>
 <p>
-  你需要提供的上下文信息包括:
+  您需要提供的上下文信息包括:
 </p>
 
 <ul>
@@ -217,36 +308,50 @@
 
   <li>
     <p>
-      它在布局中的什么位置?例如,如果它是按钮,那么翻译的灵活性就不如文本框。
+      它处于布局中的什么位置?例如,如果它是按钮,那么翻译的灵活性就不如文本框。
+
     </p>
   </li>
 </ul>
 
 <h4>
-  <strong>标记不应翻译的信息部分</strong>
+  <strong>标记不应翻译的消息部分</strong>
 </h4>
 
 <p>
-  有时候字符串中包含不应被翻译为其他语言的文本。常见的示例包括代码、某个值的占位符、特殊符号或名称。在准备翻译字符串时,请查找并标记应该保留原样而不用翻译的文本,这样翻译人员就不会更改这些内容。
+  有时候字符串中包含不应被翻译为其他语言的文本。
+常见的示例包括代码、某个值的占位符、特殊符号或名称。
+在准备翻译字符串时,请查找并标记应该保留原样而不需要翻译的文本,这样翻译人员就不会更改这些内容。
+
+
 </p>
 
 <p>
-  要标记不应翻译的文本,请使用 <code>&lt;xliff:g&gt;</code> 占位符标记。以下示例标记可确保文本“%1$s”在翻译过程中不会被更改(否则这条消息会被破坏):
+  要标记不应翻译的文本,请使用
+ <code>&lt;xliff:g&gt;</code> 占位符标记。以下示例标记可确保文本“%1$s”在翻译过程中不会被更改(否则这条消息会被破坏):
+
+
 </p>
 
-<pre class="prettyprint"><span class="tag">&lt;string</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"countdown"</span><span class="tag">&gt;</span><span class="pln"><br />    </span><span class="tag">&lt;xliff:g</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"time"</span><span class="pln"> </span><span class="atn">example</span><span class="pun">=</span><span class="atv">"5 days&gt;</span><span class="pln">%1$s</span><span class="tag">&lt;/xliff:g&gt;</span><span class="pln">until holiday<br /></span><span class="tag">&lt;/string&gt;</span></pre>
+<pre class="prettyprint">
+&lt;string name="countdown"&gt;
+    &lt;xliff:g id="time" example="5 days&gt;%1$s&lt;/xliff:g&gt;until holiday
+&lt;/string&gt;
+</pre>
 <p>
-  在声明占位符标记时,请务必添加说明此占位符用途的 ID 属性。如果你的应用稍后会替换占位符值,请务必提供示例属性来说明预期用途。
+  在声明占位符标记时,请务必添加说明此占位符用途的 ID 属性。
+如果您的应用稍后会替换占位符值,请务必提供示例属性来说明预期用途。
+
 </p>
 
 <p>
-  以下是其他一些占位符标记的示例;
+  以下是其他一些占位符标记的示例:
 </p>
 
 <pre>
 &lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
 
-&lt;!-- 特殊 Unicode 符号的占位符示例 --&gt;
+&lt;!-- Example placeholder for a special unicode symbol --&gt;
 
 &lt;string name="star_rating"&gt;Check out our 5
 
@@ -254,7 +359,7 @@
 
 &lt;/string&gt;
 
-&lt;!-- 网址的占位符示例 --&gt;
+&lt;!-- Example placeholder for a for a URL --&gt;
 
 &lt;string name="app_homeurl"&gt;
 
@@ -262,7 +367,7 @@
 
 &lt;/string&gt;
 
-&lt;!-- 名称的占位符示例 --&gt;
+&lt;!-- Example placeholder for a name --&gt;
 
 &lt;string name="prod_name"&gt;
 
@@ -270,7 +375,7 @@
 
 &lt;/string&gt;
 
-&lt;!-- 实值的占位符示例 --&gt;
+&lt;!-- Example placeholder for a literal --&gt;
 
 &lt;string name="promo_message"&gt;
 
@@ -282,17 +387,15 @@
 
 &lt;/resources&gt;
 </pre>
-
-
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
 <div class="resource-widget resource-flow-layout col-13" data-query=
-"collection:distribute/toolsreference/localizationchecklist/managestrings/zhcn"
+"collection:distribute/toolsreference/localizationchecklist/managestrings"
 data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
 </div>
 
 <div class="headerLine">
-  <h2 id="translate-strings" style="margin-bottom:0px">
+  <h2 id="translate-strings">
     4. 翻译界面字符串和其他资源
   </h2>
 
@@ -301,10 +404,14 @@
 
 <p>
   将应用的界面字符串和资源翻译为目标语言是本地化过程中的关键阶段,需要给予最多关注并做出规划。
+
+
 </p>
 
 <p>
-  我们建议你与专业翻译人员合作(请参阅<a href="{@docRoot}distribute/tools/localization-checklist.html#gp-trans">聘请专业翻译公司</a>),以确保获得高品质的翻译,提升应用的价值。你也可以选择机器翻译,但用户体验不如人工翻译。
+  我们建议您与专业翻译人员合作(请参阅<a href="#gp-trans">聘请专业翻译公司</a>),以确保获得高品质的翻译,提升应用的价值。
+您也可以选择机器翻译,但用户体验不如人工翻译。
+
 </p>
 
 <h4>
@@ -312,7 +419,9 @@
 </h4>
 
 <p>
-  翻译工作的质量在一定程度上取决于你为翻译提供的源资料,因此请确保你的 strings.xml 文件条理清晰、注释完善,而且完全准确。
+  翻译工作的质量在一定程度上取决于您的源资料,因此请确保您的 strings.xml 文件条理清晰、注释完善,而且完全准确。
+
+
 </p>
 
 <p>
@@ -328,43 +437,50 @@
 
   <li>
     <p>
-      遵循上文<a href="{@docRoot}distribute/tools/localization-checklist.html#manage-strings">管理字符串的本地化</a>中列出的有关字符串的建议。
+      遵循上文<a href="#manage-strings">管理本地化字符串</a>中列出的有关字符串的建议。
     </p>
   </li>
 
   <li>
     <p>
-       清理 strings.xml 文件,删除不用的字符串。
+      清理 strings.xml 文件,删除不用的字符串。
     </p>
   </li>
 
   <li>
     <p>
       在文件中加入注释,以标识所有者、来源和文件版本,以及针对翻译人员的特别说明。
+
     </p>
   </li>
 
   <li>
     <p>
-      提供现有翻译(如果有的话),用 zip 文件或其他文件包发送给翻译人员。
+      提供现有译文(如果有的话),用 zip 文件或其他文件包发送给翻译人员。
+
     </p>
   </li>
 
   <li>
     <p>
-      标识需要翻译的图形内容或其他资源,并将它们加入给翻译人员的文件包中。
+      标识需要翻译的图形内容或其他资源,并将它们加入到翻译人员的文件包中。
+
     </p>
   </li>
 
   <li>
     <p>
-      此外,考虑翻译你的应用在 Google Play 商店的商品详情(应用标题和说明、发行说明等)以及其他国际化营销资料。
+      此外,考虑翻译您的应用的商品详情
+ &mdash;应用标题和说明、发行说明等 &mdash; 以及其他国际化营销资料。
+
     </p>
   </li>
 
   <li>
     <p>
-      创建术语表,用来解释你的产品、市场或所用重要技术中出现的关键术语的含义和用途。将列表添加到给翻译人员的文件包中。
+      创建术语表,用来解释您的产品、市场或所用重要技术中出现的关键术语的含义和用途。
+将列表添加到给翻译人员的文件包中。
+
     </p>
   </li>
 </ul>
@@ -374,19 +490,28 @@
 </h4>
 
 <p>
-  在开发阶段的初期,你就可以与专业的翻译供应商联系,商定费用和周转时间,而且你的费用应该包含多次反复工作的费用。你可以寻找在线翻译供应商或直接使用 Google Play 开发者控制台提供的翻译服务(请参阅<a href="{@docRoot}distribute/tools/localization-checklist.html#gp-trans">聘请专业翻译公司</a>)。
+  在开发阶段的初期,您就可以与专业的翻译供应商联系,商定费用和周转时间。
+确保包含多次反复工作的费用。
+您可以寻找在线翻译供应商或直接使用 Google Play 开发者控制台提供的翻译服务(请参阅<a href="#gp-trans">聘请专业翻译公司</a>)。
+
+
 </p>
 
 <p>
-  翻译完成后,请进行初步检查。查看所有文件是否均已翻译,是否存在潜在编码问题,并确保声明格式未被破坏。
+  翻译完成后,请进行初步检查。
+查看所有文件是否均已翻译,是否存在潜在编码问题,并确保声明格式未被破坏。
+
 </p>
 
 <p>
-  如果一切正常,请小心地将已本地化的目录和文件移回应用的资源中。请务必使用正确的语言和语言区域限定符标记目录,以便以后能够正确加载这些目录。
+  如果一切正常,请小心地将已本地化的目录和文件移回应用的资源中。
+请务必使用正确的语言和语言区域限定符标记目录,以便以后能够正确加载这些目录。
+
+
 </p>
 
 <p>
-  在将翻译合并到你的应用之后,请开始<a href="{@docRoot}distribute/tools/localization-checklist.html#test">测试已本地化的应用</a>。
+  在将译文合并到您的应用之后,请开始<a href="#test">测试已本地化的应用</a>。
 </p>
 
 <h4 id="gp-trans">
@@ -394,11 +519,19 @@
 </h4>
 
 <p>
-  Google Play 应用翻译服务可以帮助你为应用快速寻找和购买翻译服务。在开发者控制台中,你可以浏览已由 Google 认证的第三方供应商列表,这些供应商能够以有竞争力的价格为你提供高品质的翻译。你可以上传要翻译的字符串,选择翻译的目标语言,并根据时间和价格选择翻译供应商。
+  Google Play 应用翻译服务可以帮助您为应用快速寻找和购买翻译服务。
+在开发者控制台中,您可以浏览已由 Google 认证的第三方供应商列表,这些供应商能够以有竞争力的价格为您提供高品质的翻译。
+
+您可以上传要翻译的字符串,选择翻译的目标语言,并根据时间和价格选择翻译供应商。
+
+
 </p>
 
 <p>
-  购买翻译之后,你会收到来自供应商的电子邮件。这是你与供应商之间的直接业务往来,你需要直接与供应商合作,管理翻译流程并解决所有支持问题。
+  购买翻译之后,您会收到来自供应商的电子邮件。
+  翻译是您与供应商之间的直接业务往来,您需要直接与供应商合作,管理翻译流程和交付,并解决任何支持问题。
+
+
 </p>
 
 <div>
@@ -413,7 +546,7 @@
 </div>
 
 <div class="headerLine">
-  <h2 id="test" style="margin-bottom:0px">
+  <h2 id="test">
     5. 测试已本地化的应用
   </h2>
 
@@ -421,11 +554,15 @@
 </div>
 
 <p>
-  收到翻译的字符串和资源并放入应用之后,你需要对应用进行测试,确保应用能够向国际用户发布。
+  收到翻译的字符串和资源并放入应用之后,您需要对应用进行测试,确保应用能够向国际用户发布。
+
+
 </p>
 
 <p>
-  人工测试可以帮助你发现布局和字符串中的本地化问题,这些问题可能影响用户满意度,最终影响应用的用户评分。
+  人工测试可以帮助您发现布局和字符串中的本地化问题,这些问题可能影响用户满意度,最终影响应用的用户评分。
+
+
 </p>
 
 <h4>
@@ -433,7 +570,11 @@
 </h4>
 
 <p>
-  要测试已本地化的应用,你需要根据你的目标市场和适配设备,设置包含多种设备(或虚拟设备)和屏幕尺寸的测试环境。请注意,不同地区可用的设备可能不同。如果可能,请将你的测试设备设置为用户能够使用的实际设备。
+  要测试已本地化的应用,您需要根据您的目标市场和适配机型,设置包含多种设备(或虚拟设备)和屏幕尺寸的环境。
+
+请注意,特定地区的设备种类可能不同。
+如果可能,请将您的测试设备设置为用户能够使用的实际设备。
+
 </p>
 
 <h4>
@@ -441,7 +582,9 @@
 </h4>
 
 <p>
-  在每台测试设备上,在“设置”中设定语言或语言区域。安装并启动应用,然后浏览所有界面流程、对话框和用户互动。在需要输入内容的部分输入文本。要查找的内容包括:
+  在每台测试设备上的“设置”中设定语言或语言区域。安装并启动应用,然后浏览所有界面流程、对话框和用户互动。
+
+在输入框中输入文本。要查找的问题包括:
 </p>
 
 <ul>
@@ -459,31 +602,37 @@
 
   <li>
     <p>
-      错误的字词中断或标点符号错误
+      错误的断句或标点
     </p>
   </li>
 
   <li>
     <p>
-      错误的字母顺序排序
+      错误的字母排序
     </p>
   </li>
 
   <li>
     <p>
-      错误的布局方向或文字方向
+      错误的布局方向或文本方向
     </p>
   </li>
 
   <li>
     <p>
-      未翻译的文本。如果显示的是默认字符串而不是翻译过的字符串,那么你可能忽略了这些字符串的翻译或是使用了错误的语言限定符标记了资源目录。
+      未翻译的文本 &mdash; 如果显示的是默认字符串而不是翻译过的字符串,那么您可能忽略了这些字符串的翻译或是使用了错误的语言限定符标记了资源目录。
+
+
+
     </p>
   </li>
 </ul>
 
 <p>
-  如果翻译后的字符串变得过于臃肿,不能适应布局,建议你尝试简化默认文本、简化译文文本或调整默认布局。如果问题仍然不能解决,请为该语言创建自定义布局。
+  如果翻译后的字符串变得过于臃肿,不能适应布局,建议您尝试简化默认文本、简化译文文本或调整默认布局。
+
+如果问题仍然不能解决,请为该语言创建自定义布局。
+
 </p>
 
 <h4>
@@ -491,7 +640,11 @@
 </h4>
 
 <p>
-  使用所有目标语言和语言区域测试应用之后,请务必使用不支持的语言和语言区域再次测试。<em></em>这有助于确保你的应用包括完整的默认字符串和资源,可供所有用户使用,不论用户设置了哪种首选语言。
+  使用您支持的所有语言和语言区域测试应用之后,请务必使用<em>不支持的语言</em>和语言区域再次测试。
+
+  这有助于确保您的应用包括一整套默认字符串和资源,可供所有用户使用,不论用户设置了哪种首选语言。
+
+
 </p>
 
 <h4>
@@ -499,11 +652,21 @@
 </h4>
 
 <p>
-  在测试过程中或之后,建议你邀请相应的母语使用者对本地化的应用进行复查。一种方法是让目标地区的用户进行 Beta 版测试,Google Play 可以帮助你开展这项工作。<!-- --></p>
+  在测试过程中或之后,建议您邀请相应的母语使用者对本地化的应用进行复查。
+一种方法是让目标地区的用户进行 Beta 版测试 &mdash; Google Play 可以帮助您开展这项工作。
+ <!-- </p>
 
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/test"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> -->
+</p>
 
 <div class="headerLine">
-  <h2 id="prepare-launch" style="margin-bottom:0px">
+  <h2 id="prepare-launch">
     6. 准备国际化发布
   </h2>
 
@@ -511,21 +674,28 @@
 </div>
 
 <p>
-  翻译应用是本地化过程中的关键部分,但是要让你的产品吸引用户、获得关注,你应该做好在目标国家/地区发布应用的准备,并针对国际用户制定更广泛的发布和营销计划。
+  翻译应用是本地化过程中的关键部分,但是要让您的产品吸引用户、获得关注,您应该做好在目标国家/地区发布应用的准备,并针对国际用户制定更广泛的发布和营销计划。
+
+
+
 </p>
 
 <h4>
-  <strong>本地化你的 Google Play 商品详情</strong>
+  <strong>将 Google Play 商品详情本地化</strong>
 </h4>
 
-<div class="sidebox-wrapper" style="float:right">
+<div class="sidebox-wrapper" style="float:right;">
   <div class="sidebox">
     <h2>
-      本地化你的 Google Play 商品详情
+      将 Google Play 商品详情本地化
     </h2>
 
     <p>
-      Google Play 商店的商品详情是国际用户对你应用的第一印象。你应该向所有用户重点介绍应用的优势!在开发者控制台中本地化商品详情时,需要本地化的内容包括:</p>
+      Google Play 的商品详情是国际用户对应用的第一印象。
+您应该向所有用户重点介绍应用的优势!
+将开发者控制台中的商品详情本地化,包括:
+
+    </p>
 
     <ul>
       <li>应用标题和说明
@@ -534,70 +704,104 @@
       <li>应用在手机和平板电脑上的屏幕截图
       </li>
 
-      <li>宣传图片和视频
+      <li>宣传图片和视频。
       </li>
     </ul>
   </div>
 </div>
 
 <p>
-  如果你想让应用在国际市场中取得成功,则务必要本地化你的 Google Play 商品详情。你可以在开发者控制台中管理已本地化的商品详情。
+  如果您想让应用在国际市场上取得成功,则务必将您的 Google Play 商品详情本地化。
+您可以在开发者控制台中管理已本地化的商品详情。
+
 </p>
 
 <p>
-  在发布之前,请决定你的应用标题、说明、宣传文字、营销主题和计划以及其他文字和图片。请提早发送你的商品详情文字和图片进行翻译,确保这些内容在 Beta 版测试开始时就准备就绪。收到译文后,你可以通过开发者控制台添加译文。
+  在发布之前,请决定您的应用标题、说明、宣传文字、营销主题和计划以及其他文字和图片。
+请提前发送您的商品详情文字和图片进行翻译,确保这些内容在 Beta 版测试开始时就准备就绪。
+
+收到译文后,您可以通过开发者控制台添加译文。
+
 </p>
 
-<div class="sidebox-wrapper" style="float:right">
+<div class="sidebox-wrapper" style="float:right;">
   <div class="sidebox">
     <h2>
       Google Play 中的商品详情翻译
     </h2>
 
     <p>
-      你可以使用 Google Play 上的应用翻译服务翻译你的商品详情。准备包含商品详情信息的 XML 文件,并像上传 strings.xml 文件一样上传此文件(请参阅<a href="{@docRoot}distribute/tools/localization-checklist.html#gp-trans">聘请专业翻译公司</a>)
+      您可以使用 Google Play 上的应用翻译服务来翻译您的商品详情。
+准备包含商品详情信息的 XML 文件,并像上传 strings.xml 文件一样上传此文件(请参阅<a href="#gp-trans">聘请专业翻译公司</a>)
+
     </p>
   </div>
 </div>
 
 <p>
-  另外,你已经创建了优秀的本地化应用,那么就应该让用户知晓。截取各个语言版本的界面在手机和平板电脑(7 英寸和 10 英寸)上的截图。你可以将所有目标语言版本的屏幕截图上传到开发者控制台。这对于使用其他语言浏览你的应用商品详情的用户来说有很重要的参考价值。
+  另外,您已经创建了优秀的本地化应用,那么就应该让用户知晓。
+截取各个语言版本的界面在手机和平板电脑(7 英寸和 10 英寸)上的截图。
+您可以将所有目标语言版本的屏幕截图上传到开发者控制台。
+对于使用其他语言浏览您的应用详情的用户来说,这有很重要的参考价值。
+
 </p>
 
 <p>
-  你还有必要准备本地化版本的宣传图片和视频。例如,你应用的置顶大图可能包括应该翻译的文字,翻译之后能达到最佳效果,或者你可能希望在某个国家/地区呈现与众不同的视觉效果。你可以为每种目标语言创建相应版本的宣传图片,并将它们上传到开发者控制台。如果你提供宣传视频,则可以创建本地化版本的视频,然后添加指向各目标语言版本的视频的链接。
+  您还有必要准备本地化版本的宣传图片和视频。
+例如,应用的置顶大图可能包括应该翻译的文本,翻译之后能达到最佳效果,或者您可能希望在某个国家/地区呈现与众不同的视觉效果。
+
+您可以为每种目标语言创建相应版本的宣传图片,并将它们上传到开发者控制台。
+
+如果您提供宣传视频,则可以创建本地化版本的视频,然后添加指向各目标语言版本的视频的链接。
+
+
 </p>
 
 <h4>
   <strong>在主要国家/地区计划 Beta 版的发布</strong>
 </h4>
 
-<div class="sidebox-wrapper" style="float:right">
+<div class="sidebox-wrapper" style="float:right;">
   <div class="sidebox">
     <h2>
       简单的 Beta 测试
     </h2>
 
     <p>
-      现在,Google Play 允许你在世界范围内设立 Alpha 版和 Beta 版测试者小组。下次登录到开发者控制台时请别忘记了解这一强大的功能。
+      现在,Google Play 允许您在世界范围内成立 Alpha 版和 Beta 版测试者小组。
+下次登录到开发者控制台时请查看这项强大的功能。
+
     </p>
   </div>
 </div>
 
 <p>
-  在发布应用之前收集用户的真实反馈是很有必要的做法,特别是使用新的语言、在新的国家或地区发布应用时,应该收集更多反馈。在这种情况下,我们强烈建议你向主要目标市场的用户发布应用的预览版本,以便这些用户能够方便地向你提供反馈和报告错误。
+  在发布应用之前收集用户的真实反馈是很有价值的, &mdash; 以新的语言、在新的国家或地区发布应用时,更应该收集反馈。
+
+在这种情况下,我们强烈建议您向主要目标市场的用户发布应用的预览版本,以便这些用户能够方便地向您提供反馈和报告错误。
+
+
+
 </p>
 
 <p>
-  Google Play 可以帮助你为应用设置 Beta 测试计划。登录到开发者控制台并上传你的 APK 之后,你可以设立用户小组,以便进行应用的 Alpha 版和 Beta 版测试。你可以先进行小范围的 Alpha 版测试,然后推进到更大范围的 Beta 版测试。
+  Google Play 可以帮助您为应用设置 Beta 测试计划。登录到开发者控制台并上传您的 APK 之后,您可以成立用户小组,以便进行应用的 Alpha 和 Beta 测试。
+
+您可以先进行小范围的 Alpha 版测试,然后进行更大范围的 Beta 版测试。
+
 </p>
 
 <p>
-  用户被添加到小组之后,他们可以访问你应用的商品详情并安装应用。<strong>Alpha 或 Beta 版本的用户不能留下评论或评分</strong>,因此你在 Google Play 上的<strong>评分不会受到不利影响</strong>,不过这意味着你需要为测试者设置一种机制以便他们提供反馈:不妨创建一个 <a href="http://www.google.com/+/business/">Google+</a> 页面或 <a href="https://groups.google.com/forum/#!overview">Google 网上论坛</a>。
+  用户被添加到小组之后,他们可以访问您应用的商品详情并安装应用。
+<strong>Alpha 或 Beta 版本的用户不能留下评论或评分</strong>,因此您在 Google Play 上的<strong>评分不会受到不利影响</strong>,不过这意味着您需要为测试者设置一种机制以便他们提供反馈:考虑创建一个 <a href="http://www.google.com/+/business/">Google+</a> 页面或 <a href="https://groups.google.com/forum/#!overview">Google 网上论坛</a>。
+
+
+
 </p>
 
 <p>
-  收到的反馈可以帮助你调整界面、翻译和商品详情,以确保为用户提供优质体验。
+  收到的反馈可以帮助您调整界面、译文和商品详情,以确保为用户提供优质体验。
+
 </p>
 
 <h4>
@@ -605,7 +809,10 @@
 </h4>
 
 <p>
-  为了在更多国家/地区获得最高的关注度,请考虑制定国际化营销或广告计划。计划的覆盖范围取决于你能支持的预算,但一般来说,在发布时和发布后针对特定国家/地区开展营销是经济、高效的措施。
+  为了在各国家/地区获得最高的关注度,请考虑开展国际化营销或广告活动。
+活动的覆盖范围取决于您的预算,但一般来说,在发布时和发布后针对特定国家/地区开展营销是经济、高效的措施。
+
+
 </p>
 
 <h4>
@@ -613,86 +820,118 @@
 </h4>
 
 <p>
-  如果你正在准备国际化营销,请务必加入<a href="{@docRoot}distribute/tools/promote/badges.html">本地化的 Google Play 徽章</a>,让用户知道你是在 Google Play 上发布应用的。你可以使用徽章生成器快速构建本地化的徽章,然后用到你的网站或营销材料中。你还可以获得高分辨率的资源。
+  如果您正在准备国际化营销,请务必加入<a href="{@docRoot}distribute/tools/promote/badges.html">本地化的 Google Play 
+徽章</a>,让用户知道您是在 Google Play 上发布应用的。您可以使用徽章生成器快速构建本地化的徽章,然后用到您的网站或营销材料中。
+
+您还可以获得高分辨率的资源。
 </p>
 
 <h4>
-  <strong>创建本地化的 Device Art</strong>
+  <strong>创建本地化的设备原画</strong>
 </h4>
 
 <p>
-  如果你有应用在 Android 设备上运行的产品截图,请确保这些截图拥有精美外观,能够反映应用在 Android 设备上的最新状态。为帮助你准备高品质的营销材料,请使用 <a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator</a>,只需拖放即可快速获得在 Nexus 设备上的屏幕截图。
+  如果您有应用在 Android 设备上运行的产品截图,请确保这些截图拥有精美外观,能够反映应用在 Android 设备上的最新状态。
+
+  为帮助您准备高品质的营销材料,请使用<a href="{@docRoot}distribute/tools/promote/device-art.html">设备原画生成器</a>,只需拖放即可快速获得在 Nexus 设备上的屏幕截图。
+
+
 </p>
 
 <h4>
-  <strong>查看你的优化提示</strong>
+  <strong>查看您的优化提示</strong>
 </h4>
 
 <p>
-  在准备发布时,请务必登录到开发者控制台,查看为你的应用提供的“优化提示”。通过优化提示,你可以了解本地化的商品详情是否有所遗漏,还可以获得其他有用的提示,帮助你实现成功的本地化发布。
+  在准备发布时,请务必登录到开发者控制台,查看为您的应用提供的“优化提示”。
+通过优化提示,您可以了解本地化的商品详情是否有所遗漏,还可以获得其他有用的提示,帮助您实现成功的本地化发布。
+
+
 </p>
 
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
 <div class="resource-widget resource-flow-layout col-13" data-query=
-"collection:distribute/toolsreference/localizationchecklist/preplaunch/zhcn"
+"collection:distribute/toolsreference/localizationchecklist/preplaunch"
 data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
 data-maxresults="6">
 </div>
 
 <div class="headerLine">
-  <h2 id="support-users" style="margin-bottom:0px">
-    7. 在发布后为国际用户提供支持
+  <h2 id="support-users">
+    7. 在发布之后为国际用户提供支持
   </h2>
 
 
 </div>
 
 <p>
-  在国际范围内发布应用之后,你应该准备好为各种语言和时区的用户提供支持。能为国际用户提供什么样的支持取决于你的预算,不过你至少要在发布后认真查看应用获得的评分、评论和下载统计信息。
+  在国际范围内发布应用之后,您应该准备好为各种语言和时区的用户提供支持。
+能为国际用户提供什么样的支持取决于您的预算,不过您至少要在发布后认真查看应用获得的评分、评论和下载统计信息。
+
+
+
 </p>
 
 <p>
-  以下是一些建议:
+  下面是一些建议:
 </p>
 
 <ul>
   <li>
     <p>
-      使用开发者控制台中的应用统计信息比较不同语言和国家/地区的下载量、安装量、卸载量和评分。如果某些语言或国家/地区的下载量和评分相对落后,请考虑采取一些措施来改善你的产品或改变营销方法。
+      使用开发者控制台中的应用统计信息比较不同语言和国家/地区的下载量、安装量、卸载量和评分&mdash;
+
+如果某些语言或国家/地区的下载量或评分相对落后,请考虑采取一些措施来改善您的产品或改变营销方法。
+
+
     </p>
   </li>
 
   <li>
     <p>
-      定期查看评论。Google Play 会为你翻译所有用户评论,因此你可以及时了解国际用户对应用的评价,以及用户喜欢的功能和困扰他们的问题。通过查看评论,你可以发现可能影响特定国家/地区用户的技术问题,然后进行修正并更新你的应用。
+      定期查看评论&mdash;Google Play 会为您翻译所有用户评论,因此您可以及时了解国际用户对应用的评价,以及用户喜欢的功能和困扰他们的问题。
+
+通过查看评论,您可以发现可能影响特定国家/地区用户的技术问题,然后进行修正并更新您的应用。
+
+
     </p>
   </li>
 
   <li>
     <p>
-      尽可能回复评论。使用用户的语言或通用语言与用户互动是一种很好的做法。如果不可行,你可以尝试使用翻译工具,不过效果可能会打折扣。如果你应用的某种语言版本十分受欢迎,请考虑由该语言的母语使用者帮助你为用户提供支持。
+      尽可能回复评论&mdash;使用用户的语言或通用语言(若适用)与国际用户互动是一种很好的做法。
+
+      如果不可行,您可以尝试使用翻译工具,不过效果可能不可预测。
+如果您应用的某种语言版本十分受欢迎,请考虑由该语言的母语使用者帮助您为用户提供支持。
+
     </p>
   </li>
 
   <li>
     <p>
-      确保提供链接,让用户能够转到你网站上的所有支持资源。考虑建立按语言分组的用户小组、Google+ 社区或其他支持论坛。
+      确保提供链接,让用户能够转到您网站上的所有支持资源。
+      考虑成立按语言分组的用户小组、Google+ 社区或其他支持论坛。
+
     </p>
   </li>
 </ul>
 
 <p>
-  按照这里介绍的做法本地化你的应用、向国际用户宣传和营销你的应用,并为用户提供持续的支持,你的应用就能吸引很多新用户并始终赢得他们的青睐。
+  按照这些做法将应用本地化、向国际用户宣传和营销,并提供持续的支持,您的应用就能吸引很多新用户并始终赢得他们的青睐。
+
+
 </p>
 
 <p>
-  请务必阅读<a href="{@docRoot}distribute/tools/launch-checklist.html">发布检查清单</a>,以详细了解如何在 Google Play 上计划、构建和发布你的应用。
+  请务必阅读<a href="{@docRoot}distribute/tools/launch-checklist.html">发布检查单</a>,以详细了解如何在 Google Play 上计划、构建和发布您的应用。
+
 </p>
 <h3 class="rel-resources clearfloat">相关资源</h3>
 
 <div class="resource-widget resource-flow-layout col-13"
-  data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch/zhcn"
+  data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
   data-sortOrder="-timestamp"
   data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
   data-maxResults="6"></div>
+
diff --git a/docs/html-intl/intl/zh-cn/google/play/filters.jd b/docs/html-intl/intl/zh-cn/google/play/filters.jd
new file mode 100644
index 0000000..70f8d9b
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/google/play/filters.jd
@@ -0,0 +1,439 @@
+page.title=Google Play 上的筛选器
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>内容快览</h2>
+<ul>
+<li>Google Play 使用筛选器来控制哪些 Android 设备可以从商店中下载您的应用。
+</li>
+<li>筛选可确保您的应用仅供其设备符合应用兼容性要求的用户使用。
+<li>筛选是由您在应用清单文件中声明的配置要求以及其他因素决定的。
+</li>
+</ul>
+
+<h2>本文内容</h2>
+
+<ol>
+  <li><a href="#how-filters-work">Google Play 上的筛选器工作方式</a></li>
+  <li><a href="#manifest-filters">根据清单文件的元素进行筛选</a>
+  </li>
+  <li><a href="#other-filters">其他筛选器</a></li>
+  <li><a href="#MultiApks">发布多个采用不同筛选器的 APK</a></li>
+</ol>
+
+<h2>另请参阅</h2>
+ <ol>
+<li><a href="{@docRoot}guide/practices/compatibility.html">Android 兼容性</a></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
+</ol>
+
+</div>
+</div>
+
+<p>当用户在 Google Play 上搜索或浏览应用以下载时,会根据哪些应用与其设备兼容来筛选搜索结果。
+
+例如,如果应用需要摄像头,Google Play 不会在没有摄像头的设备上显示该应用。
+这种<em>筛选</em>帮助开发者管理其应用的分发,并且有助于确保为用户提供最佳的体验。
+
+</p>
+
+<p>Google Play 中的筛选基于多种类型的应用元数据和配置设置,包括清单文件声明、所需的库、架构依赖关系以及 Google
+Play 开发者控制台中设置的分发控制,例如地理区域定向、定价等。
+
+</p>
+
+<p>Google Play 筛选在某种程度上基于清单文件声明和
+ Android 框架的其他方面,但实际筛选行为与该框架不同,并且不限于特定的 API 级别。
+本文说明了 Google Play 目前使用的筛选规则。
+</p>
+
+
+<h2 id="how-filters-work">Google Play 上的筛选器工作方式</h2>
+
+<p>Google Play 使用下述筛选限制来确定是否将您的应用显示给正在 Google Play 应用中浏览和搜索应用的用户。
+
+</p>
+
+<p>在确定是否显示您的应用时,Google Play 检查设备的硬件和软件要求,以及其运营商、地点和其他特性。
+
+然后将这些条件与应用的清单文件和发布详情中说明的限制和依赖条件比较。
+
+ </p>
+
+<p>如果根据筛选规则该应用与设备兼容,则 Google Play 向用户显示该应用。
+否则,Google Play从搜索结果和类别浏览中隐藏您的应用,即使用户在 Google Play 内点击直接指向该应用 ID 的深层链接,明确请求该应用,该应用也不会显示。
+
+
+</p>
+
+<p>可以为您的应用使用各种可用筛选器的任意组合。例如,您可以在应用中设置<code>"4"</code>的
+<code>minSdkVersion</code>要求,并设置<code>smallScreens="false"</code>,然后在将应用上传到 Google Play 时,您可以只针对欧洲国家(运营商)。
+
+因此。Google Play 的筛选器能够防止不符合所有这三项要求的任何设备使用该应用。
+ </p>
+
+<p>所有筛选限制均与一个应用的版本关联,并且可在各版本之间更改。
+例如,如果用户已安装您的应用,而您发布了使应用对该用户不可见的更新,则用户不会看到有更新可用。
+
+</p>
+
+<h4>Google Play 网站上的筛选</h4>
+
+<p>当用户浏览 <a href="http://play.google.com/apps">Google Play 网站
+</a>时,他们可以看到所有已发布的应用。Google Play 网站将各项应用要求与用户的每个注册设备相比较以了解兼容性,并且只有在应用与用户的设备兼容时,才允许用户安装该应用。
+
+
+</p>
+
+<h2 id="manifest-filters">根据应用清单文件进行筛选</h2>
+
+<p>大多数筛选器由应用清单文件 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
+内的元素触发(尽管并非清单文件中的所有元素均可以触发筛选)。
+
+表 1 列出了您应用于触发筛选的清单文件元素,并解释了每个元素的筛选工作方式。
+</p>
+
+<p id="table1" class="table-caption"><strong>表 1.</strong>在 Google Play 上触发筛选的清单文件元素。
+</p>
+<table>
+  <tr>
+    <th>清单文件元素</th>
+    <th>筛选器名称</th>
+    <th>工作方式</th>
+  </tr>
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">屏幕尺寸</td>
+    <td valign="top">
+
+<p>应用通过设置 <code>&lt;supports-screens&gt;</code> 元素的属性来指明它能够支持的屏幕尺寸。
+当应用发布时,Google Play 使用这些属性,根据用户设备的屏幕尺寸来确定是否向用户显示该应用。
+
+
+ </p>
+
+<p>作为一般规则,Google Play 假定设备上的平台可以让较小的布局适应较大的屏幕,但不能让较大布局适应较小的屏幕。
+
+因此,如果应用只声明支持“正常”屏幕尺寸,Google Play 则使该应用可用于正常屏幕和大屏幕设备,但将对该应用进行筛选,使其不可用于小屏幕设备。
+
+
+</p>
+
+<p>如果应用未声明
+<code>&lt;supports-screens&gt;</code>属性,则 Google Play 使用这些属性的默认值,默认值因 API 级别而异。
+具体而言: </p>
+
+<ul>
+<li><p>对于 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> 或 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> 设置为 3 或更小的应用,<code>&lt;supports-screens&gt;</code> 元素本身未定义,并且无属性可用。
+在这种情况下,Google Play 假定应用是为正常尺寸屏幕设计的,并且向正常或更大屏幕的设备显示该应用。
+
+ </p>
+
+<li>当 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> 或 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> 设置为 4 或更大时,所有属性的默认值均为
+<code>"true"</code>。这样,应用被视为默认支持所有屏幕尺寸。
+</li>
+</ul>
+
+    <p><strong>示例 1</strong><br />
+    清单文件声明 <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>
+并且不包括 <code>&lt;supports-screens&gt;</code> 元素。
+    <strong>结果</strong>:Google Play 不会向小屏幕设备的用户显示该应用,但会向正常屏幕和大屏幕设备的用户显示,除非还有其他筛选器。
+
+ </p>
+    <p><strong>示例 2<br />
+    </strong>清单文件声明 <code>&lt;uses-sdk android:minSdkVersion="3"
+    android:targetSdkVersion="4"&gt;</code> 并且不包括 
+<code>&lt;supports-screens&gt;</code> 元素。
+    <strong>结果</strong>:Google Play 将向所有设备的用户显示该应用,除非还有其他筛选器。
+ </p>
+    <p><strong>示例 3<br />
+    </strong>清单文件声明 <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code>
+并且不包括 <code>&lt;supports-screens&gt;</code> 元素。
+    <strong>结果</strong>:Google Play 将向所有用户显示该应用,除非还有其他筛选器。
+ </p>
+    <p>有关如何在应用中声明屏幕尺寸支持参数的更多信息,请参考<code><a
+    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+和<a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a>。
+
+</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
+      <!-- ##api level 3## --></td>
+    <td valign="top">设备配置:
+ <br />
+    键盘、导航、触摸屏</td>
+    <td valign="top"><p>应用可以请求某些硬件功能,Google Play 将只在具备所需硬件的设备上显示该应用。
+</p>
+      <p><strong>示例 1<br />
+      </strong>清单文件包括 <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>,而用户在没有五向导航控制键的设备上搜索应用。<strong>结果</strong>:Google Play 不会向用户显示该应用。 </p>
+      <p><strong>示例 2<br />
+      </strong>清单文件不包括 <code>&lt;uses-configuration&gt;</code> 元素。<strong>结果</strong>:Google Play 将向所有用户显示该应用,除非还有其他筛选器。</p>
+<p>有关更多详情,请参阅<a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>。</p></td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">设备功能<br />
+      (<code>name</code>)</td>
+    <td valign="top"><p>应用可以要求设备具有某些功能。
+Android 2.0(API 级别 5)中引入了此功能。
+</p>
+      <p><strong>示例 1<br />
+      </strong>清单文件包括 <code>&lt;uses-feature
+android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>,而用户在没有光线传感器的设备上搜索应用。
+
+<strong>结果</strong>:Google Play 不会向用户显示该应用。 </p>
+      <p><strong>示例 2<br />
+      </strong>清单文件不包括 <code>&lt;uses-feature&gt;</code>
+ 元素。<strong>结果</strong>:Google Play 将向所有用户显示该应用,除非还有其他筛选器。
+</p>
+      <p>有关完整信息,请参阅<code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>。</p>
+      <p><em>根据隐含功能进行筛选:</em>在某些情况下,Google
+Play 将通过
+<code>&lt;uses-permission&gt;</code>元素请求的权限解释为与 <code>&lt;uses-feature&gt;</code> 元素所声明要求等效的功能要求。
+请参阅下面的<a href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>
+。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top">OpenGL-ES
+版本<br />
+(<code>openGlEsVersion</code>)</td>
+    <td valign="top"><p>应用可以使用<code>&lt;uses-feature
+        android:openGlEsVersion=&quot;int&quot;&gt;</code>属性,以要求设备支持特定的 OpenGL-ES 版本。
+</p>
+      <p><strong>示例 1<br />
+      </strong>应用通过在清单文件中多次指定<code>openGlEsVersion</code>,以要求多个 OpenGL-ES 版本。
+
+<strong>结果</strong>:Google Play 假定该应用需要所指明的最高版本。</p>
+<p><strong>示例 2<br />
+</strong>应用请求 OpenGL-ES 版本 1.1,而用户在支持 OpenGL-ES 版本 2.0 的设备上搜索应用。
+<strong>结果</strong>:Google Play 将向用户显示该应用,除非还有其他筛选器。如果设备报告它支持 OpenGL-ES 版本 <em>X</em>,Google Play 假定它也支持比 <em>X</em> 更早的任何版本。
+
+
+</p>
+<p><strong>示例 3<br />
+</strong>用户在没有报告 OpenGL-ES 版本的设备(例如,运行 Android 1.5 或更早版本的设备)上搜索应用。
+<strong>结果</strong>:Google Play 假定该设备仅支持 OpenGL-ES 1.0。
+Google Play 将只向该用户显示没有指定 <code>openGlEsVersion</code> 的应用,或者没有指定 OpenGL-ES 1.0 以上版本的应用。 </p>
+      <p><strong>示例 4<br />
+      </strong>清单文件没有指定 <code>openGlEsVersion</code>。<strong>结果</strong>:Google Play 将向所有用户显示该应用,除非还有其他筛选器。 </p>
+<p>有关更多详情,请参阅<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>。</p></td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
+    <td valign="top">软件库</td>
+    <td valign="top"><p>应用可以要求设备上具有特定的共享库。
+ </p>
+      <p><strong>示例 1<br />
+      </strong>应用需要 <code>com.google.android.maps</code> 库,而用户在没有 <code>com.google.android.maps</code> 库的设备上搜索应用。<strong>结果</strong>:Google Play 不会向用户显示该应用。 </p>
+      <p><strong>示例 2</strong><br />
+        清单文件不包括 <code>&lt;uses-library&gt;</code> 元素。<strong>结果</strong>:Google Play 将向所有用户显示该应用,除非还有其他筛选器。</p>
+<p>有关更多详情,请参阅<a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>。</p></td>
+  </tr>
+  <tr id="uses-permission-filtering">
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
+    <td valign="top">&nbsp;</td>
+    <td valign="top">严格地说,Google Play 不根据
+<code>&lt;uses-permission&gt;</code>元素来进行筛选。但是,它会读取这些元素来确定应用是否具有
+<code>&lt;uses-feature&gt;</code>
+元素中可能没有正确声明的硬件功能要求。
+例如,如果应用请求<code>CAMERA</code>
+权限,但没有针对<code>android.hardware.camera</code>声明<code>&lt;uses-feature&gt;</code>元素,
+Google Play 认为该应用需要摄像头,并且不应向没有摄像头的设备用户显示。
+
+</p>
+    <p>通常,如果应用请求硬件相关权限,Google Play 假定该应用需要基础的硬件功能,即使可能没有对应
+<code>&lt;uses-feature&gt;</code> 声明。
+
+Google Play 然后根据
+ <code>&lt;uses-feature&gt;</code>
+声明暗示的功能来设置筛选。</p>
+    <p>有关暗示硬件功能的权限列表,请参见
+ <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a>
+元素的文档。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
+    <td valign="top">最低框架版本 (<code>minSdkVersion</code>)</td>
+    <td valign="top"><p>应用可以要求最低 API 级别。  </p>
+      <p><strong>示例 1</strong><br />
+        清单文件包括 <code>&lt;uses-sdk
+      android:minSdkVersion=&quot;3&quot;&gt;</code>,而应用使用 API 级别 3 中引入的 API。用户在采用 API 级别 2 的设备上搜索应用。<strong>结果</strong>:Google Play 不会向用户显示该应用。 </p>
+      <p><strong>示例 2</strong><br />
+      清单文件不包括 <code>minSdkVersion</code>,而应用使用 API 级别 3 中引入的 API。用户在采用 API 级别 2 的设备上搜索应用。<strong>结果</strong>:Google Play 假定 <code>minSdkVersion</code> 为“1”并假定该应用与所有 Android 版本兼容。Google Play 向用户显示该应用并允许用户下载该应用。应用在运行时崩溃。 </p>
+    <p>由于您希望避免第二种情况,我们建议您始终声明 <code>minSdkVersion</code>。有关详情,请参阅 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>。</p></td>
+  </tr>
+  <tr>
+    <td valign="top">最高框架版本 (<code>maxSdkVersion</code>)</td>
+    <td valign="top"><p><em>已弃用。</em>Android
+ 2.1 和更新版本不检查、不执行 <code>maxSdkVersion</code> 属性,并且如果应用的清单文件中设置了 <code>maxSdkVersion</code>,SDK 将不会编译。
+对于已通过
+ <code>maxSdkVersion</code> 编译的设备,Google Play 将予以考虑并使用它
+来进行筛选。</p>
+<p> <em>不</em>建议声明<code>maxSdkVersion</code>。有关详情,请参阅 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>。</p></td>
+  </tr>
+</table>
+
+
+
+<h3 id="advanced-filters">高级清单文件筛选器</h3>
+
+<p>除了<a href="#table1">表 1</a> 中的清单文件元素之外,Google Play 还可以根据表 2 中的高级清单文件元素来筛选应用。
+</p>
+
+<p>这些清单文件元素及其触发的筛选仅针对例外的用例。
+这些元素针对某些类型的高性能游戏,以及需要严格控制应用分发的类似应用。
+<strong>大多数应用永远都不会使用这些筛选器</strong>。
+</p>
+
+<p id="table2" class="table-caption"><strong>表 2.</strong>用于 Google Play 筛选的高级清单文件元素。
+</p>
+<table>
+  <tr><th>清单文件元素</th><th>摘要</th></tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a></nobr></td>
+    <td>
+      <p>如果设备屏幕尺寸和密度不符合
+ {@code
+&lt;compatible-screens&gt;} 元素中的任何屏幕配置(由{@code &lt;screen&gt;} 元素声明),则 Google Play 会将该应用筛选掉。</p>
+      <p class="caution"><strong>注意:</strong>正常情况下,<strong>不能使用此清单文件元素</strong>。
+使用此元素可能会显著减少应用的潜在用户群,因为排除了您未列出的所有屏幕尺寸和密度组合。
+
+应当改用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> 清单文件元素(上面<a href="#table1">表
+1</a> 所述),通过替代资源为您没有考虑的屏幕配置启用屏幕兼容模式。
+</p>
+    </td>
+  </tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a></nobr></td>
+    <td>
+      <p>除非应用所支持的一种或多种 GL 纹理压缩格式也受到设备支持,否则 Google Play 将应用筛选掉。
+ </p>
+    </td>
+  </tr>
+</table>
+
+
+
+<h2 id="other-filters">其他筛选器</h2>
+
+<p>Google Play 使用其他应用特性来决定向指定设备上的特定用户显示应用还是隐藏应用,如下表所述。 </p>
+
+<p id="table3" class="table-caption"><strong>表 3.</strong>影响 Google Play 筛选结果的应用和发布特性。
+</p>
+<table> <tr>
+    <th>筛选器名称</th> <th>工作方式</th> </tr>
+
+  <tr>
+    <td valign="top">发布状态</td> <td valign="top"><p>Google Play 内的搜索和浏览操作将只出现已发布的应用。
+</p> <p>即使应用被取消发布,如果用户在其下载区域的已购买、已安装或最近卸载应用中看到此应用,也可安装。
+
+</p> <p>如果应用被暂停,即使应用在用户的“下载”中出现,用户也不能重新安装或更新此应用。
+</p> </td></tr>
+  <tr>
+  <td valign="top">定价状态
+</td> <td valign="top"><p>并非所有用户均可看到付费应用。要显示付费应用,设备必须有 SIM 卡并运行 Android 1.1 或更新版本,并且必须处于可使用付费应用的国家(由 SIM 运营商决定)。
+
+</p></td>
+</tr> <tr>
+  <td valign="top">确定目标国家</td> <td valign="top"> <p>当您将应用上传到 Google Play 时,可以在<strong>定价和分发</strong>下面选择在哪些国家分发应用。
+
+然后该应用将只对您所选国家的用户可用。
+</p>
+</td> </tr> <tr>
+  <td valign="top" style="white-space:nowrap;">CPU 架构 (ABI)</td>
+  <td valign="top"><p>如果应用包括针对特定 CPU 架构(例如 ARM EABI v7 或 x86)的原生库,则它只在支持该架构的设备上可见。
+
+有关 NDK 和使用原生库的详情,请参考<a href="{@docRoot}tools/sdk/ndk/index.html#overview">什么是
+ Android NDK?</a>
+</p> </tr> <tr>
+  <td valign="top">有复制保护的应用</td> <td valign="top"><p class="caution">Google
+  Play 在开发者控制台中不再支持复制保护功能,并且不再根据此条件来筛选应用。
+要保护您的应用,请改用<a href="{@docRoot}google/play/licensing/index.html">
+应用程序许可</a>。参考<a href="{@docRoot}google/play/licensing/overview.html#CopyProtection">
+复制保护的替代方法</a>了解详情。</p></td> </tr> </table>
+
+<h2 id="MultiApks">发布多个采用不同筛选器的 APK</h2>
+
+<p>Google Play 某些特定筛选器允许您为同一应用发布多个 APK,以便向不同的设备配置提供不同 APK。
+例如,如果您在创建一款使用高清图形资源的视频游戏,您可能想创建两个 APK,每个 APK 支持不同的纹理压缩格式。
+
+这样,您可以只包括每种设备配置所需的纹理,从而减小
+APK 文件的大小。
+根据每个设备是否支持您的纹理压缩格式,Google Play 
+将向其提供您已声明支持该设备的 APK。</p>
+
+<p>目前,只有在每个 APK 根据以下配置提供不同筛选时,Google Play 
+才允许您为同一应用发布多个 APK:</p>
+<ul>
+  <li>OpenGL 纹理压缩格式
+    <p>使用 <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a> 元素。</p>
+  </li>
+  <li>屏幕尺寸(以及可选的屏幕密度)
+    <p>使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> 或 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a> 元素。</p>
+  </li>
+  <li>API 级别
+    <p>使用 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
+&lt;uses-sdk&gt;}</a> 元素。</p>
+  </li>
+  <li>CPU 架构 (ABI)
+    <p>包括针对特定 CPU 架构(例如 ARM EABI v7 或 x86)的、通过 <a href="{@docRoot}tools/sdk/ndk/index.html">Android
+ NDK</a> 构建的原生库。</p>
+  </li>
+</ul>
+
+<p>所有其他筛选器仍像平常一样工作,但只有这四个筛选器能够在
+ Google Play 的同一应用详情内使一个 APK 与另一个区分。例如,如果 APK 仅在设备是否有摄像头这一条件上不同,则<em>无法</em>为同一应用发布多个 APK。
+
+</p>
+
+<p class="caution"><strong>注意:</strong>为同一应用发布多个 APK 被视为高级功能,<strong>大多数应用只应发布一个支持各种设备配置的
+APK</strong>。
+发布多个 APK要求您遵循筛选器内的具体规则,并且要特别注意每个 APK 的版本代码,以确保每个配置有正确的更新路径。
+
+</p>
+
+<p>如果需要有关如何在 Google Play 上发布多个 APK 的更多信息,请阅读<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支持</a>。</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/features/runtime-permissions.jd b/docs/html-intl/intl/zh-cn/preview/features/runtime-permissions.jd
index 94a6212..8e361fb6 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/runtime-permissions.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/runtime-permissions.jd
@@ -1,6 +1,6 @@
 page.title=权限
-page.tags=预览资源, androidm
-page.keywords=权限, 运行时, 预览
+page.tags=previewresources, androidm
+page.keywords=permissions, runtime, preview
 page.image={@docRoot}preview/features/images/permissions_check.png
 @jd:body
 
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-cn/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/index.jd
new file mode 100644
index 0000000..dad2208
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/index.jd
@@ -0,0 +1,72 @@
+page.title=管理Activity生命周期
+page.tags=Activity生命周期
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<h2>依赖项和先决条件</h2>
+<ul>
+  <li>如何创建 Android 项目(请参阅<a href="{@docRoot}training/basics/firstapp/creating-project.html">创建 Android项目</a>)
+</li>
+</ul>
+
+
+<h2>您还应阅读</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/activities.html">Activity</a></li>
+</ul>
+
+
+<h2>试一试</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下载演示</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>当用户导航、退出和返回您的应用时,应用中的 {@link android.app.Activity} 实例将在其生命周期中转换不同状态。
+
+例如,当您的Activity初次开始时,它将出现在系统前台并接收用户焦点。
+
+在这个过程中,Android 系统会对Activity调用一系列生命周期方法,通过这些方法,您可以设置用户界面和其他组件。
+如果用户执行开始另一Activity或切换至另一应用的操作,当其进入后台(在其中Activity不再可见,但实例及其状态完整保留),系统会对您的Activity调用另外一系列生命周期方法。
+
+
+</p>
+
+<p>在生命周期回调方法内,您可以声明
+用户离开和再次进入Activity时的Activity行为。比如,如果您正构建流视频播放器,当用户切换至另一应用时,您可能要暂停视频或终止网络连接。当用户返回时,您可以重新连接网络并允许用户从同一位置继续播放视频。
+
+
+</p>
+
+<p>本课讲述每个 {@link
+android.app.Activity} 实例接收的重要生命周期回调方法以及您如何使用这些方法以使您的Activity按照用户预期进行并且当您的Activity不需要它们时不会消耗系统资源。
+</p>
+
+<h2>课程</h2>
+ 
+<dl>
+  <dt><b><a href="starting.html">开始Activity</a></b></dt>
+  <dd>学习有关Activity生命周期、用户如何启动您的应用以及如何执行基本Activity创建操作的基础知识。
+</dd>
+  <dt><b><a href="pausing.html">暂停和继续Activity</a></b></dt>
+  <dd>学习Activity暂停时(部分隐藏)和继续时的情况以及您应在这些状态变化期间执行的操作。
+</dd>
+  <dt><b><a href="stopping.html">停止和重新开始Activity</a></b></dt>
+  <dd>学习用户完全离开您的Activity并返回到该Activity时发生的情况。</dd>
+  <dt><b><a href="recreating.html">重新创建Activity</a></b></dt>
+  <dd>学习您的Activity被销毁时的情况以及您如何能够根据需要重新构建Activity。
+</dd>
+</dl> 
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd
new file mode 100644
index 0000000..ef5b0d5
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd
@@ -0,0 +1,147 @@
+page.title=暂停和继续Activity
+page.tags=Activity生命周期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本课程将向您展示如何</h2>
+    <ol>
+      <li><a href="#Pause">暂停Activity</a></li>
+      <li><a href="#Resume">继续Activity</a></li>
+    </ol>
+    
+    <h2>您还应阅读</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Activity</a>
+      </li>
+    </ul>
+
+<h2>试一试</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下载演示</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>在正常使用应用的过程中,前台Activity有时会被其他导致Activity<em>暂停的可视组件阻挡</em>。
+例如,当半透明Activity打开时(比如对话框样式中的Activity),上一个Activity会暂停。
+只要Activity仍然部分可见但目前又未处于焦点之中,它会一直暂停。
+</p>
+
+<p>但是,一旦Activity完全被阻挡并且不可见,它便<em>停止</em>(将在下一堂课中讨论)。
+</p>
+
+<p>当您的Activity进入暂停状态时,系统会对您的 {@link android.app.Activity} 调用 {@link
+android.app.Activity#onPause onPause()} 方法,通过该方法,您可以停止不应在暂停时继续的进行之中的操作(比如视频)或保留任何应该永久保存的信息,以防用户坚持离开应用。如果用户从暂停状态返回到您的Activity,系统会重新开始该Activity并调用
+{@link android.app.Activity#onResume onResume()} 方法。
+
+
+</p>
+
+<p class="note"><strong>注意:</strong>当您的Activity收到对 {@link
+android.app.Activity#onPause()} 的调用时,可能意味着Activity将暂停
+一会,并且用户可能从焦点返回到您的Activity。但这通常意味着用户即将离开您的Activity。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
+<p class="img-caption"><strong>图 1.</strong>当半透明Activity阻挡您的Activity时,系统会调用 {@link android.app.Activity#onPause onPause()} 并且Activity会在“暂停”状态下等待 (1)。
+
+如果用户在Activity仍然处于暂停状态时返回Activity,则系统会调用 {@link android.app.Activity#onResume onResume()} (2)。
+</p>
+
+
+<h2 id="Pause">暂停Activity</h2>
+      
+<p>当系统为您的Activity调用 {@link android.app.Activity#onPause()} 时,它从技术角度看意味着您的Activity仍然处于部分可见状态,但往往说明用户即将离开Activity并且它很快就要进入“停止”状态。
+
+您通常应使用
+ {@link android.app.Activity#onPause()} 回调:</p>
+
+<ul>
+  <li>停止动画或其他可能消耗 CPU 的进行之中的操作。</li>
+  <li>提交未保存的更改,但仅当用户离开时希望永久性保存此类更改(比如电子邮件草稿)。
+</li>
+  <li>释放系统资源,比如广播接收器、传感器手柄(比如 GPS) 或当您的Activity暂停且用户不需要它们时仍然可能影响电池寿命的任何其他资源。
+
+</li>
+</ul>
+
+<p>例如,如果您的应用使用 {@link android.hardware.Camera},
+{@link android.app.Activity#onPause()} 方法是释放它的好位置。</p>
+
+<pre>
+&#64;Override
+public void onPause() {
+    super.onPause();  // Always call the superclass method first
+
+    // Release the Camera because we don't need it when paused
+    // and other activities might need to use it.
+    if (mCamera != null) {
+        mCamera.release()
+        mCamera = null;
+    }
+}
+</pre>
+
+<p>一般情况下,您<strong>不得</strong>使用 {@link android.app.Activity#onPause()} 永久性存储用户更改(比如输入表格的个人信息)。
+只有在您确定用户希望自动保存这些更改的情况(比如,电子邮件草稿)下,才能在 {@link android.app.Activity#onPause()}中永久性存储用户更改。但您应避免在 {@link
+android.app.Activity#onPause()} 期间执行 CPU 密集型工作,比如向数据库写入信息,因为这会拖慢向下一Activity过渡的过程(您应改为在
+{@link android.app.Activity#onStop onStop()}期间执行高负载关机操作。
+
+
+
+</p>
+
+<p>您应通过相对简单的方式在 {@link android.app.Activity#onPause
+onPause()} 方法中完成大量操作,这样才能加快在您的Activity确实停止的情况下用户向下一个目标过渡的速度。
+</p>
+
+<p class="note"><strong>注意:</strong>当您的Activity暂停时,{@link
+android.app.Activity} 实例将驻留在内存中并且在Activity继续时被再次调用。您无需重新初始化在执行任何导致进入“继续”状态的回调方法期间创建的组件。
+
+</p>
+
+
+
+<h2 id="Resume">继续Activity</h2>
+
+<p>当用户从“暂停”状态继续您的Activity时,系统会调用 {@link
+android.app.Activity#onResume()} 方法。</p>
+
+<p>请注意,每当您的Activity进入前台时系统便会调用此方法,包括它初次创建之时。
+同样地,您应实现{@link
+android.app.Activity#onResume()} 初始化您在 {@link
+android.app.Activity#onPause()} 期间释放的组件并且执行每当Activity进入“继续”状态时必须进行的任何其他初始化操作(比如开始动画和初始化只在Activity具有用户焦点时使用的组件)。
+
+</p>
+
+<p>{@link android.app.Activity#onResume()} 的以下示例对应于以上的
+ {@link android.app.Activity#onPause()} 示例,因此它初始化Activity暂停时释放的照相机。
+</p>
+
+<pre>
+&#64;Override
+public void onResume() {
+    super.onResume();  // Always call the superclass method first
+
+    // Get the Camera instance as the activity achieves full user focus
+    if (mCamera == null) {
+        initializeCamera(); // Local method to handle camera init
+    }
+}
+</pre>
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd
new file mode 100644
index 0000000..a7971d8
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd
@@ -0,0 +1,178 @@
+page.title=重新创建Activity
+page.tags=Activity生命周期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本课程将向您展示如何</h2>
+    <ol>
+      <li><a href="#SaveState">保存Activity状态</a></li>
+      <li><a href="#RestoreState">恢复Activity状态</a></li>
+    </ol>
+    
+    <h2>您还应阅读</h2>
+    <ul>
+      <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">支持不同屏幕</a>
+</li>
+      <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时更改</a></li>
+      <li><a href="{@docRoot}guide/components/activities.html">Activity</a>
+      </li>
+    </ul>
+
+  </div>
+</div>
+
+<p>在有些情况下,您的Activity会因正常应用行为而销毁,比如当用户按 <em>返回</em>按钮或您的Activity通过调用
+ {@link android.app.Activity#finish()}示意自己的销毁。
+如果Activity当前被停止或长期未使用,或者前台Activity需要更多资源以致系统必须关闭后台进程恢复内存,系统也可能会销毁Activity。
+
+</p>
+
+<p>当您的Activity因用户按了<em>返回</em> 或Activity自行完成而被销毁时,系统的 {@link android.app.Activity} 实例概念将永久消失,因为行为指示不再需要Activity。
+
+但是,如果系统因系统局限性(而非正常应用行为)而销毁Activity,尽管
+{@link android.app.Activity} 实际实例已不在,系统会记住其存在,这样,如果用户导航回实例,系统会使用描述Activity被销毁时状态的一组已保存数据创建Activity的新实例。
+
+
+系统用于恢复先前状态的已保存数据被称为“实例状态”,并且是
+ {@link android.os.Bundle} 对象中存储的键值对集合。
+</p>
+
+<p class="caution"><strong>注意:</strong>每次用户旋转屏幕时,您的Activity将被销毁并重新创建。
+当屏幕方向变化时,系统会销毁并重新创建前台Activity,因为屏幕配置已更改并且您的Activity可能需要加载备用资源(比如布局)。
+
+</p>
+
+<p>默认情况下,系统会使用 {@link android.os.Bundle} 实例状态保存您的Activity布局(比如,输入到 {@link android.widget.EditText} 对象中的文本值)中有关每个 {@link android.view.View} 对象的信息。
+
+这样,如果您的Activity实例被销毁并重新创建,布局状态便恢复为其先前的状态,且您无需代码。
+
+但是,您的Activity可能具有您要恢复的更多状态信息,比如跟踪用户在Activity中进度的成员变量。
+
+</p>
+
+<p class="note"><strong>注意:</strong>为了 Android 系统恢复Activity中视图的状态,<strong>每个视图必须具有</strong>
+<a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
+android:id}</a> 属性提供的唯一 ID。
+</p>
+
+<p>要保存有关Activity状态的其他数据,您必须替代
+ {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 回调方法。当用户要离开Activity并在Activity意外销毁时向其传递将保存的 {@link android.os.Bundle} 对象时,系统会调用此方法。
+
+
+如果系统必须稍后重新创建Activity实例,它会将相同的 {@link
+android.os.Bundle} 对象同时传递给 {@link android.app.Activity#onRestoreInstanceState
+onRestoreInstanceState()} 和 {@link android.app.Activity#onCreate onCreate()}
+方法。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
+<p class="img-caption"><strong>图 2.</strong>当系统开始停止您的Activity时,它会
+调用 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} (1),因此,您可以指定您希望在 {@link android.app.Activity} 实例必须重新创建时保存的额外状态数据。如果Activity被销毁且必须重新创建相同的实例,系统将在 (1) 中定义的状态数据同时传递给 {@link android.app.Activity#onCreate onCreate()} 方法(2) 和 {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 方法(3)。
+
+
+
+
+
+</p>
+
+
+
+<h2 id="SaveState">保存Activity状态</h2>
+
+<p>当您的Activity开始停止时,系统会调用 {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()} 以便您的Activity可以保存带有键值对集合的状态信息。
+此方法的默认实现保存有关Activity视图层次的状态信息,例如 {@link android.widget.EditText} 小工具中的文本或{@link android.widget.ListView} 的滚动位置。
+
+</p>
+
+<p>要保存Activity的更多状态信息,您必须实现 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 并将键值对添加至 {@link android.os.Bundle} 对象。
+
+例如:</p>
+
+<pre>
+static final String STATE_SCORE = "playerScore";
+static final String STATE_LEVEL = "playerLevel";
+...
+
+&#64;Override
+public void onSaveInstanceState(Bundle savedInstanceState) {
+    // Save the user's current game state
+    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
+    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
+    
+    // Always call the superclass so it can save the view hierarchy state
+    super.onSaveInstanceState(savedInstanceState);
+}
+</pre>
+
+<p class="caution"><strong>注意:</strong>始终调用 {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} 的超类实现,以便默认实现可以保存视图层次的状态。
+</p>
+
+
+
+<h2 id="RestoreState">恢复Activity状态</h2>
+
+<p>当您的Activity在先前销毁之后重新创建时,您可以从系统向Activity传递的
+{@link android.os.Bundle}
+恢复已保存的状态。{@link android.app.Activity#onCreate onCreate()} 和 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 回调方法均接收包含实例状态信息的相同 {@link android.os.Bundle}。
+</p>
+
+<p>因为无论系统正在创建Activity的新实例还是重新创建先前的实例,都会调用 {@link android.app.Activity#onCreate onCreate()} 方法,因此您必须在尝试读取它之前检查状态 {@link android.os.Bundle} 是否为 null。
+
+如果为 null,则系统将创建Activity的新实例,而不是恢复已销毁的先前实例。
+
+</p>
+
+<p>例如,此处显示您如何可以在 {@link android.app.Activity#onCreate
+onCreate()} 中恢复一些状态数据:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState); // Always call the superclass first
+   
+    // Check whether we're recreating a previously destroyed instance
+    if (savedInstanceState != null) {
+        // Restore value of members from saved state
+        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+    } else {
+        // Probably initialize members with default values for a new instance
+    }
+    ...
+}
+</pre>
+
+<p>您可以选择实现系统在 {@link android.app.Activity#onStart()} 方法之后调用的 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} ,而不是在{@link android.app.Activity#onCreate onCreate()} 期间恢复状态。
+
+系统只在存在要恢复的已保存状态时调用 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}
+,因此您无需检查 {@link android.os.Bundle} 是否为 null:</p>
+        
+<pre>
+public void onRestoreInstanceState(Bundle savedInstanceState) {
+    // Always call the superclass so it can restore the view hierarchy
+    super.onRestoreInstanceState(savedInstanceState);
+   
+    // Restore state members from saved instance
+    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+}
+</pre>
+
+<p class="caution"><strong>注意:</strong>始终调用 {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} 的超类实现,以便默认实现可以恢复视图层次的状态。
+</p>
+
+<p>要了解更多有关因运行时重启事件(例如屏幕旋转时)而重新创建Activity的信息,请阅读<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时更改</a>。
+</p>
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd
new file mode 100644
index 0000000..05f9728
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd
@@ -0,0 +1,285 @@
+page.title=开始Activity
+page.tags=Activity生命周期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本课程将向您展示如何</h2>
+<ol>
+  <li><a href="#lifecycle-states">了解生命周期回调</a></li>
+  <li><a href="#launching-activity">指定您的应用的启动器Activity</a></li>
+  <li><a href="#Create">创建一个新实例</a></li>
+  <li><a href="#Destroy">销毁Activity</a></li>
+</ol>
+    
+    <h2>您还应阅读</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Activity</a></li>
+    </ul>
+
+<h2>试一试</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下载演示</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>不同于使用 {@code main()} 方法启动应用的其他编程范例,Android 系统会通过调用对应于其生命周期中特定阶段的特定回调方法在 {@link android.app.Activity} 实例中启动代码。
+
+
+有一系列可启动Activity的回调方法,以及一系列可分解Activity的回调方法。
+</p>
+
+<p>本课程概述了最重要的生命周期方法,并向您展示如何处理创建Activity新实例的第一个生命周期回调。
+</p>
+
+
+
+<h2 id="lifecycle-states">了解生命周期回调</h2>
+
+<p>在Activity的生命周期中,系统会按类似于阶梯金字塔的顺序调用一组核心的生命周期方法。
+也就是说,Activity生命周期的每个阶段就是金字塔上的一阶。
+当系统创建新Activity实例时,每个回调方法会将Activity状态向顶端移动一阶。
+金字塔的顶端是Activity在前台运行并且用户可以与其交互的时间点。
+</p>
+
+<p>当用户开始离开Activity时,系统会调用其他方法在金字塔中将Activity状态下移,从而销毁Activity。
+在有些情况下,Activity将只在金字塔中部分下移并等待(比如,当用户切换到其他应用时),Activity可从该点开始移回顶端(如果用户返回到该Activity),并在用户停止的位置继续。
+
+
+</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle.png" />
+<p class="img-caption"><strong>图 1.</strong>简化的Activity生命周期图示,以阶梯金字塔表示。
+此图示显示,对于用于将Activity朝顶端的“继续”状态移动一阶的每个回调,有一种将Activity下移一阶的回调方法。
+
+Activity还可以从“暂停”和“停止”状态回到继续状态。
+</p>
+
+
+<p>根据Activity的复杂程度,您可能不需要实现所有生命周期方法。
+但是,了解每个方法并实现确保您的应用按照用户期望的方式运行的方法非常重要。
+正确实现您的Activity生命周期方法可确保您的应用按照以下几种方式良好运行,包括:
+</p>
+<ul>
+  <li>如果用户在使用您的应用时接听来电或切换到另一个应用,它不会崩溃。
+</li>
+  <li>在用户未主动使用它时不会消耗宝贵的系统资源。
+</li>
+  <li>如果用户离开您的应用并稍后返回,不会丢失用户的进度。
+</li>
+  <li>当屏幕在横向和纵向之间旋转时,不会崩溃或丢失用户的进度。
+</li>
+</ul>
+
+<!--
+<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 
+methods.</p>
+<table>
+  <tr>
+    <th scope="col">Lifecycle State</th>
+    <th scope="col">Startup Method</th>
+    <th scope="col">Teardown Method</th>
+  </tr>
+  <tr>
+    <td>Created / Destroyed</td>
+    <td>{@link android.app.Activity#onCreate onCreate()}</td>
+    <td>{@link android.app.Activity#onDestroy()}</td>
+  </tr>
+  <tr>
+    <td>Started / Stopped</td>
+    <td>{@link android.app.Activity#onStart()}</td>
+    <td>{@link android.app.Activity#onStop()}</td>
+  </tr>
+  <tr>
+    <td>Resumed / Resumed</td>
+    <td>{@link android.app.Activity#onResume()}</td>
+    <td>{@link android.app.Activity#onPause()}</td>
+  </tr>
+</table>
+-->
+
+<p>正如您将要在以下课程中要学习的,有Activity会在图 1 所示不同状态之间过渡的几种情况。
+但是,这些状态中只有三种可以是静态。
+也就是说,Activity只能在三种状态之一下存在很长时间。
+</p>
+<dl>
+  <dt>继续</dt>
+    <dd>在这种状态下,Activity处于前台,且用户可以与其交互。(有时也称为“运行”状态。)
+</dd>
+  <dt>暂停</dt>
+    <dd>在这种状态下,Activity被在前台中处于半透明状态或者未覆盖整个屏幕的另一个Activity&mdash;部分阻挡。
+暂停的Activity不会接收用户输入并且无法执行任何代码。
+
+  <dt>停止</dt>
+    <dd>在这种状态下,Activity被完全隐藏并且对用户不可见;它被视为处于后台。
+停止时,Activity实例及其诸如成员变量等所有状态信息将保留,但它无法执行任何代码。
+</dd>
+</dl>
+
+<p>其他状态(“创建”和“开始”)是瞬态,系统会通过调用下一个生命周期回调方法从这些状态快速移到下一个状态。
+也就是说,在系统调用 
+{@link android.app.Activity#onCreate onCreate()} 之后,它会快速调用 {@link
+android.app.Activity#onStart()},紧接着快速调用 {@link
+android.app.Activity#onResume()}。</p>
+
+<p>基本生命周期部分到此为止。现在,您将开始学习特定生命周期行为的一些知识。
+</p>
+
+
+
+<h2 id="launching-activity">指定您的应用的启动器Activity</h2> 
+
+<p>当用户从主屏幕选择您的应用图标时,系统会为您已声明为“启动器”( 或“主要”)Activity的应用中的 {@link android.app.Activity} 调用 {@link
+android.app.Activity#onCreate onCreate()} 方法。
+这是作为
+您的应用的用户界面主入口的Activity。</p>
+
+<p>您可以在 Android 宣示说明文件中 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a> 定义哪个Activity用作主Activity,该说明文件位于您项目目录的根目录中。
+</p>
+
+<p>您的应用的主Activity必须使用 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a>(包括 {@link
+android.content.Intent#ACTION_MAIN MAIN} 操作和
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 类别)在宣示说明中声明。例如:</p> 
+
+<pre>
+&lt;activity android:name=".MainActivity" android:label="&#64;string/app_name">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.MAIN" />
+        &lt;category android:name="android.intent.category.LAUNCHER" />
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>注意:</strong>当您使用 Android SDK工具创建新 Android 项目时,默认的项目文件包括使用过滤器在宣示说明中声明的 {@link android.app.Activity} 类。
+
+</p>
+
+<p>如果未对您的Activity之一声明 {@link android.content.Intent#ACTION_MAIN MAIN} 操作或
+{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 类别,那么您的应用图标将不会出现在应用的主屏幕列表中。
+</p>
+
+
+
+<h2 id="Create">创建一个新实例</h2>
+
+<p>大多数应用包含若干个不同的Activity,用户可通过这些Activity执行不同的操作。无论Activity是用户单击您的应用图标时创建的主Activity还是您的应用在响应用户操作时开始的其他Activity,系统都会通过调用其 {@link
+android.app.Activity#onCreate onCreate()} 方法创建 {@link android.app.Activity} 的每个新实例。
+
+
+</p>
+
+<p>您必须实现 {@link android.app.Activity#onCreate onCreate()} 方法执行只应在Activity整个生命周期出现一次的基本
+应用启动逻辑。例如,您的 {@link android.app.Activity#onCreate onCreate()} 的实现应定义用户界面并且可能实例化某些类范围变量。
+
+</p>
+
+<p>例如,{@link android.app.Activity#onCreate onCreate()}
+方法的以下示例显示执行Activity某些基本设置的一些代码,比如声明用户界面(在 XML 布局文件中定义)、定义成员变量,以及配置某些 UI。
+
+</p>
+
+<pre>
+TextView mTextView; // Member variable for text view in the layout
+
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    // Set the user interface layout for this Activity
+    // The layout file is defined in the project res/layout/main_activity.xml file
+    setContentView(R.layout.main_activity);
+    
+    // Initialize member TextView so we can manipulate it later
+    mTextView = (TextView) findViewById(R.id.text_message);
+    
+    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+        // For the main activity, make sure the app icon in the action bar
+        // does not behave as a button
+        ActionBar actionBar = getActionBar();
+        actionBar.setHomeButtonEnabled(false);
+    }
+}
+</pre>
+
+<p class="caution"><strong>注意:</strong>使用 {@link android.os.Build.VERSION#SDK_INT} 
+可防止旧版系统以这种方式仅在 Android 2.0 (API 级别5)和更高级别执行新 API 工作。
+较旧版本会遇到运行时异常。</p>
+
+<p>一旦 {@link android.app.Activity#onCreate onCreate()} 完成执行操作,系统会相继调用 {@link android.app.Activity#onStart()} 和 {@link android.app.Activity#onResume()} 方法。
+
+您的Activity从不会驻留在“已创建”或“已开始”状态。在技术上,Activity会在 {@link android.app.Activity#onStart()} 被调用时变得可见,但紧接着是
+{@link android.app.Activity#onResume()},且Activity保持“继续”状态,直到有事情发生使其发生变化,比如当接听来电时,用户导航至另一个Activity,或设备屏幕关闭。
+
+
+</p>
+
+<p>在接下来的其他课程中,您将看到其他Activity如何启动方法,当用于从“暂停”或“停止”状态继续Activity时,{@link
+android.app.Activity#onStart()} 和 {@link android.app.Activity#onResume()} 在您的Activity生命周期中特别有用。
+</p>
+
+<p class="note"><strong>注意:</strong>{@link android.app.Activity#onCreate onCreate()}
+方法包括一个称为 <code>savedInstanceState</code> 的参数,将在有关<a href="recreating.html">重新创建Activity</a>的后续课程中讨论该参数。
+</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" />
+<p class="img-caption"><strong>图 2.</strong>Activity生命周期结构的另一个图示,其重点放在
+创建Activity的新实例时系统依次调用的三大回调上:{@link android.app.Activity#onCreate onCreate()}、{@link
+android.app.Activity#onStart()} 和 {@link android.app.Activity#onResume()}。
+一旦这一系列回调完成,Activity就进入“继续”状态,此时用户可与Activity进行交互,直至用户切换到其他Activity。
+
+</p>
+
+
+
+
+
+
+
+<h2 id="Destroy">销毁Activity</h2>
+
+<p>当Activity的第一个生命周期回调是 {@link android.app.Activity#onCreate
+onCreate()} 时,它最近的回调是 {@link android.app.Activity#onDestroy}。系统会对您的Activity调用此方法,作为您的Activity实例完全从系统内存删除的最终信号。
+
+</p>
+
+<p>大多数应用不需要实现此方法,因为本地类引用与Activity一同销毁,并且您的Activity应在 {@link
+android.app.Activity#onPause} 和 {@link android.app.Activity#onStop} 期间执行大多数清理操作。
+但是,如果您的Activity包含您在 {@link
+android.app.Activity#onCreate onCreate()} 期间创建的后台线程或其他如若未正确关闭可能导致内存泄露的长期运行资源,您应在  {@link
+android.app.Activity#onDestroy} 期间终止它们。
+
+</p>
+
+<pre>
+&#64;Override
+public void onDestroy() {
+    super.onDestroy();  // Always call the superclass
+    
+    // Stop method tracing that the activity started during onCreate()
+    android.os.Debug.stopMethodTracing();
+}
+</pre>
+
+<p class="note"><strong>注意:</strong>在所有情况下,系统在调用 {@link android.app.Activity#onPause} 和 {@link
+android.app.Activity#onStop} 之后都会调用 {@link android.app.Activity#onDestroy}
+,只有一个例外:当您从 {@link android.app.Activity#onCreate onCreate()}
+ 方法内调用 {@link
+android.app.Activity#finish()} 时。在有些情况下,比如当您的Activity作为临时决策工具运行以启动另一个Activity时,您可从 {@link
+android.app.Activity#onCreate onCreate()} 内调用 {@link android.app.Activity#finish()} 来销毁Activity。
+在这种情况下,系统会立刻调用 {@link android.app.Activity#onDestroy},而不调用任何其他 生命周期方法。
+
+</p>
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd
new file mode 100644
index 0000000..630817c
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd
@@ -0,0 +1,187 @@
+page.title=停止并重新开始Activity
+page.tags=Activity生命周期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本课程将向您展示如何</h2>
+    <ol>
+      <li><a href="#Stop">停止Activity</a></li>
+      <li><a href="#Start">开始/重新开始Activity</a></li>
+    </ol>
+    
+    <h2>您还应阅读</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">Activity</a>
+      </li>
+    </ul>
+
+<h2>试一试</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下载演示</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>正确停止和重新开始Activity是Activity生命周期中的重要过程,其可确保您的用户知晓应用始终保持Activity状态并且不会丢失进度。有几种Activity停止和重新开始的关键场景:
+
+</p>
+
+<ul>
+  <li>用户打开“最近应用”窗口并从您的应用切换到另一个应用。当前位于前台的您的应用中的Activity将停止。
+如果用户从主屏幕启动器图标或“最近应用”窗口返回到您的应用,Activity会重新开始。
+</li>
+  <li>用户在您的应用中执行开始新Activity的操作。当第二个Activity创建好后,当前Activity便停止。
+如果用户之后按了<em>返回</em>按钮,第一个Activity会重新开始。
+</li>
+  <li>用户在其手机上使用您的应用的同时接听来电。</li>
+</ul>
+
+<p>{@link android.app.Activity} 课程提供两种生命周期方法:{@link
+android.app.Activity#onStop()} 和 {@link android.app.Activity#onRestart()},这些方法允许您专门处理正在停止和重新开始的Activity。
+不同于识别部分 UI 阻挡的暂停状态,停止状态保证 UI 不再可见,且用户的焦点在另外的Activity(或完全独立的应用)中。
+
+</p>
+
+<p class="note"><strong>注意:</strong>因为系统在停止时会将您的 {@link android.app.Activity}
+实例保留在系统内存中,您根本无需实现
+{@link android.app.Activity#onStop()} 和 {@link android.app.Activity#onRestart()}或甚至{@link
+android.app.Activity#onStart()} 方法。对于大多数相对简单的Activity而言, Activity将停止并重新开始,并且您可能只需使用 {@link
+android.app.Activity#onPause()} 暂停正在进行的操作,并从系统资源断开连接。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-stopped.png" />
+<p class="img-caption"><strong>图 1.</strong>用户离开Activity时,系统会调用 {@link android.app.Activity#onStop onStop()} 停止Activity(1)。
+如果用户在Activity停止时返回,系统会调用 {@link android.app.Activity#onRestart onRestart()}
+(2),紧接着调用 {@link android.app.Activity#onStart onStart()} (3) 和 {@link
+android.app.Activity#onResume()} (4)。
+注意:无论什么场景导致Activity停止,系统始终会在调用 {@link
+android.app.Activity#onStop onStop()} 之前调用 {@link android.app.Activity#onPause onPause()}。
+</p>
+
+
+
+<h2 id="Stop">停止Activity</h2>
+
+<p>当您的Activity收到 {@link android.app.Activity#onStop()} 方法的调用时,它不再可见,并且应释放几乎所有用户不使用时不需要的资源。
+
+一旦您的Activity停止,如果需要恢复系统内存,系统可能会销毁该实例。
+在极端情况下,系统可能会仅终止应用进程,而不会调用Activity的最终 {@link android.app.Activity#onDestroy()} 回调,因此您使用 {@link android.app.Activity#onStop()} 释放可能泄露内存的资源非常重要。
+
+</p>
+
+<p>尽管 {@link android.app.Activity#onPause onPause()} 方法在
+{@link android.app.Activity#onStop()}之前调用,您应使用 {@link android.app.Activity#onStop onStop()}
+执行更大、占用更多 CPU 的关闭操作,比如向数据库写入信息。
+</p>
+
+<p>例如,此处是将草稿笔记内容保存在永久存储中的 {@link android.app.Activity#onStop onStop()} 的实现:
+</p>
+
+<!-- TODO: Find a better example for onStop, because this kind of thing should probably use a
+separate thread but that's too complicated to show here. -->
+<pre>
+&#64;Override
+protected void onStop() {
+    super.onStop();  // Always call the superclass method first
+
+    // Save the note's current draft, because the activity is stopping
+    // and we want to be sure the current note progress isn't lost.
+    ContentValues values = new ContentValues();
+    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
+    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
+
+    getContentResolver().update(
+            mUri,    // The URI for the note to update.
+            values,  // The map of column names and new values to apply to them.
+            null,    // No SELECT criteria are used.
+            null     // No WHERE columns are used.
+            );
+}
+</pre>
+
+<p>当您的Activity停止时, {@link android.app.Activity} 对象将驻留在内存中并在Activity继续时被再次调用。
+您无需重新初始化在任何导致进入“继续”状态的回调方法过程中创建的组件。
+系统还会在布局中跟踪每个 {@link android.view.View} 的当前状态,如果用户在 {@link android.widget.EditText} 小工具中输入文本,该内容会保留,因此您无需保存即可恢复它。
+
+
+</p>
+
+<p class="note"><strong>注意:</strong>即使系统在Activity停止时销毁了Activity,它仍会保留 {@link android.os.Bundle}(键值对的二进制大对象)中的 {@link android.view.View} 对象(比如 {@link
+android.widget.EditText} 中的文本),并在用户导航回Activity的相同实例时恢复它们 (<a href="recreating.html">下一堂课</a> 讲述更多有关在您的Activity被销毁且重新创建的情况下使用 {@link android.os.Bundle} 保存其他数据状态的知识)。
+
+
+</p>
+
+
+
+<h2 id="Start">开始/重新开始Activity</h2>
+
+<p>当您的Activity从停止状态返回前台时,它会接收对
+{@link android.app.Activity#onRestart()} 的调用。系统还会在每次您的Activity变为可见时调用 {@link
+android.app.Activity#onStart()} 方法(无论是正重新开始还是初次创建)。
+但是,只会在Activity从停止状态继续时调用 {@link
+android.app.Activity#onRestart()} 方法,因此您可以使用它执行只有在Activity之前停止但未销毁的情况下可能必须执行的特殊恢复工作。
+
+</p>
+
+<p>应用需要使用 {@link android.app.Activity#onRestart()} 恢复Activity状态的情况并不常见,因此没有适用于一般应用群体的任何方法指导原则。
+
+但是,因为您的 {@link android.app.Activity#onStop()}
+方法应基本清理所有Activity的资源,您将需要在Activity重新开始时重新实例化它们。
+但是,您还需要在您的Activity初次创建时重新实例化它们(没有Activity的现有实例)。
+出于此原因,您应经常使用 {@link android.app.Activity#onStart()} 回调方法作为
+ {@link android.app.Activity#onStop()} 方法的对应部分,因为系统会在它创建您的Activity以及从停止状态重新开始Activity时调用 {@link
+android.app.Activity#onStart()} 。
+
+</p>
+
+<p>例如,因为用户可能在回到它之前已离开应用很长时间, {@link android.app.Activity#onStart()} 方法是确认所需系统功能已启动的理想选择:
+
+</p>
+
+<pre>
+&#64;Override
+protected void onStart() {
+    super.onStart();  // Always call the superclass method first
+    
+    // The activity is either being restarted or started for the first time
+    // so this is where we should make sure that GPS is enabled
+    LocationManager locationManager = 
+            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+    boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+    
+    if (!gpsEnabled) {
+        // Create a dialog here that requests the user to enable GPS, and use an intent
+        // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
+        // to take the user to the Settings screen to enable GPS when they click "OK"
+    }
+}
+
+&#64;Override
+protected void onRestart() {
+    super.onRestart();  // Always call the superclass method first
+    
+    // Activity being restarted from stopped state    
+}
+</pre>
+
+
+
+
+<p>当系统销毁您的Activity时,它会调用您的 {@link android.app.Activity} 的 {@link android.app.Activity#onDestroy()}
+方法。因为您通常应已使用 {@link android.app.Activity#onStop()} 释放大多数您的资源,到您接收对 {@link
+android.app.Activity#onDestroy()} 的调用时,大多数应用无需做太多操作。
+此方法是您清理可导致内存泄露的资源的最后一种方法,因此您应确保其他线程被销毁且其他长期运行的操作(比如方法跟踪)也会停止。
+
+
+</p>
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/data-storage/databases.jd b/docs/html-intl/intl/zh-cn/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..a6c9193
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/data-storage/databases.jd
@@ -0,0 +1,317 @@
+page.title=在 SQL 数据库中保存数据
+page.tags=数据存储
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本课程将向您展示如何</h2>
+<ol>
+  <li><a href="#DefineContract">定义架构和契约</a></li>
+  <li><a href="#DbHelper">使用 SQL 辅助工具创建数据库</a></li>
+  <li><a href="#WriteDbRow">将信息输入到数据库</a></li>
+  <li><a href="#ReadDbRow">从数据库读取信息</a></li>
+  <li><a href="#DeleteDbRow">从数据库删除信息</a></li>
+  <li><a href="#UpdateDbRow">更新数据库</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">使用数据库</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+  <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>将数据保存到数据库对于重复或结构化数据(比如契约信息)
+而言是理想之选。本课程假定您基本熟悉 SQL 数据库并且可帮助您开始在 Android 中使用 SQLite 数据库。
+
+您在 Android 中使用数据库所需的 API 在 {@link android.database.sqlite} 软件包中提供。
+</p>
+
+
+<h2 id="DefineContract">定义架构和契约</h2>
+
+<p>SQL 数据库的主要原则之一是架构:数据库如何组织的正式声明。
+架构体现于您用于创建数据库的 SQL
+语句。您会发现它有助于创建伴随类,即<em>契约</em> 类,其以一种系统性、自记录的方式明确指定您的架构布局。
+
+</p>
+
+<p>契约类是用于定义 URI、表格和列名称的常数的容器。
+契约类允许您跨同一软件包中的所有其他类使用相同的常数。
+您可以在一个位置更改列名称并使其在您整个代码中传播。
+</p>
+
+<p>组织契约类的一种良好方法是将对于您的整个数据库而言是全局性的定义放入类的根级别。
+然后为枚举其列的每个表格创建内部类。
+</p>
+
+<p class="note"><strong>注意:</strong>通过实现 {@link
+android.provider.BaseColumns} 接口,您的内部类可继承调用的主键字段{@code _ID} ,某些 Android 类(比如光标适配器)将需要内部类拥有该字段。
+
+这并非必需项,但可帮助您的数据库与 Android 框架协调工作。
+</p>
+
+<p>例如,该代码段定义了单个表格的表格名称和列名称:
+</p>
+
+
+<pre>
+public final class FeedReaderContract {
+    // To prevent someone from accidentally instantiating the contract class,
+    // give it an empty constructor.
+    public FeedReaderContract() {}
+
+    /* Inner class that defines the table contents */
+    public static abstract class FeedEntry implements BaseColumns {
+        public static final String TABLE_NAME = &quot;entry&quot;;
+        public static final String COLUMN_NAME_ENTRY_ID = &quot;entryid&quot;;
+        public static final String COLUMN_NAME_TITLE = &quot;title&quot;;
+        public static final String COLUMN_NAME_SUBTITLE = &quot;subtitle&quot;;
+        ...
+    }
+}
+</pre>
+
+
+
+<h2 id="DbHelper">使用 SQL 辅助工具创建数据库</h2>
+
+<p>在您定义了数据库的外观后,您应实现创建和维护数据库和表格的方法。
+这里有一些典型的表格创建和删除语句:
+</P>
+
+<pre>
+private static final String TEXT_TYPE = &quot; TEXT&quot;;
+private static final String COMMA_SEP = &quot;,&quot;;
+private static final String SQL_CREATE_ENTRIES =
+    &quot;CREATE TABLE &quot; + FeedEntry.TABLE_NAME + &quot; (&quot; +
+    FeedEntry._ID + &quot; INTEGER PRIMARY KEY,&quot; +
+    FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+    FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+    ... // Any other options for the CREATE command
+    &quot; )&quot;;
+
+private static final String SQL_DELETE_ENTRIES =
+    &quot;DROP TABLE IF EXISTS &quot; + FeedEntry.TABLE_NAME;
+</pre>
+
+<p>就像您在设备的<a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">内部存储</a>中保存文件那样,Android 将您的数据库保存在私人磁盘空间,即关联的应用。
+
+您的数据是安全的,因为在默认情况下,其他应用无法访问此区域。
+</p>
+
+<p>{@link
+android.database.sqlite.SQLiteOpenHelper} 类中有一组有用的 API。当您使用此类获取对您数据库的引用时,系统将只在需要之时而不是 <em>应用启动</em>过程中执行可能长期运行的操作:创建和更新数据库。
+
+
+
+您只需调用
+{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 或
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}。</p>
+
+<p class="note"><strong>注意:</strong>由于它们可能长期运行,因此请确保您在后台线程中调用 {@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 或 {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} ,
+比如使用 {@link android.os.AsyncTask} 或 {@link android.app.IntentService}。
+</p>
+
+<p>要使用 {@link android.database.sqlite.SQLiteOpenHelper},请创建一个
+替代 {@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}、{@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} 和 {@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()} 回调方法的子类。您可能还希望实现 {@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()},
+但这并非必需操作。
+</p>
+
+<p>例如,这里有一个使用如上所示一些命令的 {@link
+android.database.sqlite.SQLiteOpenHelper} 的实现:</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+    // If you change the database schema, you must increment the database version.
+    public static final int DATABASE_VERSION = 1;
+    public static final String DATABASE_NAME = &quot;FeedReader.db&quot;;
+
+    public FeedReaderDbHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+    public void onCreate(SQLiteDatabase db) {
+        db.execSQL(SQL_CREATE_ENTRIES);
+    }
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        // This database is only a cache for online data, so its upgrade policy is
+        // to simply to discard the data and start over
+        db.execSQL(SQL_DELETE_ENTRIES);
+        onCreate(db);
+    }
+    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        onUpgrade(db, oldVersion, newVersion);
+    }
+}
+</pre>
+
+<p>要访问您的数据库,请实例化 {@link
+android.database.sqlite.SQLiteOpenHelper} 的子类:</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">将信息输入到数据库</h2>
+
+<p>通过将一个 {@link android.content.ContentValues}
+对象传递至 {@link android.database.sqlite.SQLiteDatabase#insert insert()} 方法将数据插入数据库:</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+         FeedEntry.TABLE_NAME,
+         FeedEntry.COLUMN_NAME_NULLABLE,
+         values);
+</pre>
+
+<p>{@link android.database.sqlite.SQLiteDatabase#insert insert()}
+的第一个参数即为表格名称。第二个参数指定在 
+{@link android.content.ContentValues} 为空的情况下框架可在其中插入 NULL 的列的名称(如果您将其设置为 {@code "null"},
+那么框架将不会在没有值时插入行。)
+</p>
+
+
+
+
+<h2 id="ReadDbRow">从数据库读取信息</h2>
+
+<p>要从数据库中读取信息,请使用 {@link android.database.sqlite.SQLiteDatabase#query query()}
+方法,将其传递至选择条件和所需列。该方法结合 {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+和 {@link android.database.sqlite.SQLiteDatabase#update update()} 的元素,除非列列表定义了您希望获取的数据,而不是希望插入的数据。
+
+查询的结果将在
+ {@link android.database.Cursor} 对象中返回给您。</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+    FeedEntry._ID,
+    FeedEntry.COLUMN_NAME_TITLE,
+    FeedEntry.COLUMN_NAME_UPDATED,
+    ...
+    };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+    FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+    FeedEntry.TABLE_NAME,  // The table to query
+    projection,                               // The columns to return
+    selection,                                // The columns for the WHERE clause
+    selectionArgs,                            // The values for the WHERE clause
+    null,                                     // don't group the rows
+    null,                                     // don't filter by row groups
+    sortOrder                                 // The sort order
+    );
+</pre>
+
+<p>要查看游标中的某一行,请使用 {@link android.database.Cursor} 移动方法之一,您必须在开始读取值之前始终调用这些方法。
+一般情况下,您应通过调用 {@link android.database.Cursor#moveToFirst} 开始,其将“读取位置”置于结果中的第一个条目中。
+
+对于每一行,您可以通过调用
+{@link android.database.Cursor} 获取方法之一读取列的值,比如 {@link android.database.Cursor#getString
+getString()} 或 {@link android.database.Cursor#getLong getLong()}。对于每种获取方法,您必须传递所需列的索引位置,您可以通过调用
+{@link android.database.Cursor#getColumnIndex getColumnIndex()} 或
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()} 获取。例如:
+
+</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+    cursor.getColumnIndexOrThrow(FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">从数据库删除信息</h2>
+
+<p>要从表格中删除行,您需要提供识别行的选择条件。
+数据库 API 提供了一种机制,用于创建防止 SQL 注入的选择条件。
+该机制将选择规范划分为选择子句和选择参数。
+该子句定义要查看的列,还允许您合并列测试。
+
+参数是根据捆绑到子句的项进行测试的值。由于结果并未按照与常规 SQL 语句相同的方式进行处理,它不受 SQL 注入的影响。
+
+</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+// Specify arguments in placeholder order.
+String[] selectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, selection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">更新数据库</h2>
+
+<p>当您需要修改数据库值的子集时,请使用 {@link
+android.database.sqlite.SQLiteDatabase#update update()} 方法。</p>
+
+<p>更新表格可将{@link
+android.database.sqlite.SQLiteDatabase#insert insert()} 的内容值句法与
+ {@link android.database.sqlite.SQLiteDatabase#delete delete()} 的 {@code where} 句法相结合。</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+String[] selectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+    values,
+    selection,
+    selectionArgs);
+</pre>
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/data-storage/files.jd b/docs/html-intl/intl/zh-cn/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..1442275
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/data-storage/files.jd
@@ -0,0 +1,379 @@
+page.title=保存文件
+page.tags=数据存储
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本课程将向您展示如何</h2>
+<ol>
+  <li><a href="#InternalVsExternalStorage">选择内部或外部存储</a></li>
+  <li><a href="#GetWritePermission">获取外部存储的权限</a></li>
+  <li><a href="#WriteInternalStorage">将文件保存在内部存储中</a></li>
+  <li><a href="#WriteExternalStorage">将文件保存在外部存储中</a></li>
+  <li><a href="#GetFreeSpace">查询可用空间</a></li>
+  <li><a href="#DeleteFile">删除文件</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">使用内部存储</a>
+</li>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">使用外部存储</a>
+</li>
+</ul>
+
+</div>
+</div>
+
+<p>Android 使用与其他平台上基于磁盘的文件系统类似的文件系统。
+本课程讲述如何使用 Android 文件系统通过 {@link java.io.File}
+API 读取和写入文件。
+</p>
+
+<p>{@link java.io.File} 对象适合按照从开始到结束的顺序不跳过地读取或写入大量数据。
+例如,它适合于图像文件或通过网络交换的任何内容。
+</p>
+
+<p>本课程展示如何在您的应用中执行基本的文件相关任务。本课程假定您熟悉 Linux 文件系统的基础知识和 {@link java.io} 中的标准文件输入/输出 API。
+
+</p>
+
+
+<h2 id="InternalVsExternalStorage">选择内部或外部存储</h2>
+
+<p>所有 Android 设备都有两个文件存储区域:“内部”和“外部”存储。这些名称在 Android 早期产生,当时大多数设备都提供内置的非易失性内存(内部存储),以及移动存储介质,比如微型 SD 卡(外部存储)。一些设备将永久性存储空间划分为“内部”和“外部”分区,即便没有移动存储介质,也始终有两个存储空间,并且无论外部存储设备是否可移动,API 的行为均一致。以下列表汇总了关于各个存储空间的实际信息。
+
+
+
+
+
+</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>内部存储:</b></p>
+<ul>
+<li>它始终可用。</li>
+<li>默认情况下只有您的应用可以访问此处保存的文件。</li>
+<li>当用户卸载您的应用时,系统会从内部存储中删除您的应用的所有文件。
+</li>
+</ul>
+<p>当您希望确保用户或其他应用均无法访问您的文件时,内部存储是最佳选择。
+</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>外部存储:</b></p>
+<ul>
+<li>它并非始终可用,因为用户可采用 USB 存储的形式装载外部存储,并在某些情况下会从设备中将其删除。
+</li>
+<li>它是全局可读的,因此此处保存的文件可能不受您控制地被读取。
+</li>
+<li>当用户卸载您的应用时,只有在您通过 {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} 将您的应用的文件保存在目录中时,系统才会从此处删除您的应用的文件。
+</li>
+</ul>
+<p>对于无需访问限制以及您希望与其他应用共享或允许用户使用电脑访问的文件,外部存储是最佳位置。
+
+</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>提示</strong>:尽管应用默认安装在内部存储中,但您可在您的宣示说明中指定 <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> 属性,这样您的应用便可安装在在外部存储中。
+
+当 APK 非常大且它们的外部存储空间大于内部存储时,用户更青睐这个选择。
+如需了解详细信息,请参阅<a href="{@docRoot}guide/topics/data/install-location.html">应用安装位置</a>。
+</p>
+
+
+<h2 id="GetWritePermission">获取外部存储的权限</h2>
+
+<p>要向外部存储写入信息,您必须在您的<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">宣示说明文件</a>中请求
+ {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 权限。</p>
+
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+
+<div class="caution"><p><strong>注意:</strong>
+目前,所有应用都可以读取外部存储,而无需特别的权限。
+但这在将来版本中会进行更改。如果您的应用需要读取外部存储(但不向其写入信息),那么您将需要声明 {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE} 权限。
+要确保您的应用继续正常工作,您应在更改生效前声明此权限。
+</p>
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+<p>但是,如果您的应用使用 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
+权限,那么它也隐含读取外部存储的权限。</p>
+</div>
+
+<p>您无需任何权限,即可在内部存储中保存文件。
+您的应用始终具有在其内部存储目录中进行读写的权限。
+</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">将文件保存在内部存储中</h2>
+
+<p>在内部存储中保存文件时,您可以通过调用以下两种方法之一获取作为
+{@link java.io.File} 的相应目录:</p>
+
+<dl>
+  <dt>{@link android.content.Context#getFilesDir}</dt>
+  <dd>返回表示您的应用的内部目录的 {@link java.io.File} 。</dd>
+  <dt>{@link android.content.Context#getCacheDir}</dt>
+  <dd>返回表示您的应用临时缓存文件的内部目录的 {@link java.io.File} 。
+务必删除所有不再需要的文件并对在指定时间您使用的内存量实现合理大小限制,比如,1MB。
+
+如果在系统即将耗尽存储,它会在不进行警告的情况下删除您的缓存文件。
+</dd>
+</dl>
+
+<p>要在这些目录之一中新建文件,您可以使用 {@link
+java.io.File#File(File,String) File()} 构造函数,传递指定您的内部存储目录的上述方法之一所提供的 {@link java.io.File}
+。例如:</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>或者,您可以调用 {@link
+android.content.Context#openFileOutput openFileOutput()} 获取写入到内部目录中的文件的 {@link java.io.FileOutputStream}
+。例如,此处显示如何向文件写入一些文本:
+</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+  outputStream.write(string.getBytes());
+  outputStream.close();
+} catch (Exception e) {
+  e.printStackTrace();
+}
+</pre>
+
+<p>或者,如果您需要缓存某些文件,您应改用 {@link
+java.io.File#createTempFile createTempFile()}。例如,以下方法从 {@link java.net.URL} 提取文件名并在您的应用的内部缓存目录中以该名称创建文件:
+
+</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+    File file;
+    try {
+        String fileName = Uri.parse(url).getLastPathSegment();
+        file = File.createTempFile(fileName, null, context.getCacheDir());
+    catch (IOException e) {
+        // Error while creating file
+    }
+    return file;
+}
+</pre>
+
+<p class="note"><strong>注意:</strong>
+您的应用的内部存储设备目录由您的应用在Android 文件系统特定位置中的软件包名称指定。在技术上,如果您将文件模式设置为可读,另一个应用可以读取您的内部文件。
+
+
+但是,另一个应用也需要知道您的应用的软件包名称和文件名。
+其他应用无法浏览您的内部目录并且没有读写权限,除非您明确将文件设置为可读或可写。
+只要您为内部存储上的文件使用 {@link android.content.Context#MODE_PRIVATE},
+其他应用便从不会访问它们。
+</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">将文件保存在外部存储中</h2>
+
+<p>由于外部存储可能不可用&mdash;比如,当用户已将存储装载到电脑或已移除提供外部存储的 SD 卡时&mdash;因此,在访问它之前,您应始终确认其容量。
+
+您可以通过调用 {@link android.os.Environment#getExternalStorageState} 查询外部存储状态。
+如果返回的状态为 {@link android.os.Environment#MEDIA_MOUNTED},那么您可以对您的文件进行读写。
+
+例如,以下方法对于确定存储可用性非常有用:
+</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state)) {
+        return true;
+    }
+    return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state) ||
+        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+        return true;
+    }
+    return false;
+}
+</pre>
+
+<p>尽管外部存储可被用户和其他应用进行修改,但您可在此处保存两类文件:
+</p>
+
+<dl>
+  <dt>公共文件</dt>
+  <dd>应供其他应用和用户自由使用的文件。
+当用户卸载您的应用时,用户应仍可以使用这些文件。
+
+  <p>例如,您的应用拍摄的照片或其他已下载的文件。</p>
+  </dd>
+  <dt>私有文件</dt>
+  <dd>本属于您的应用且应在用户卸载您的应用时删除的文件。尽管这些文件在技术上可被用户和其他应用访问(因为它们在外部存储上),它们是实际上不向您的应用之外的用户提供值的文件。当用户卸载您的应用时,系统会删除应用外部专用目录中的所有文件。
+
+
+
+ 
+  <p>例如,您的应用下载的其他资源或临时介质文件。</p>
+  </dd>
+</dl>
+
+<p>如果您要使用外部存储上的公共文件,请使用
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} 方法获取表示外部存储上相应目录的 {@link java.io.File}
+。该方法使用指定
+您想要保存以便它们可以与其他公共文件在逻辑上组织在一起的文件类型的参数,比如 {@link android.os.Environment#DIRECTORY_MUSIC} 或 {@link
+android.os.Environment#DIRECTORY_PICTURES}。
+例如:</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+    // Get the directory for the user's public pictures directory. 
+    File file = new File(Environment.getExternalStoragePublicDirectory(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+
+<p>如果您要保存您的应用专用文件,您可以通过调用 {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} 获取相应的目录并向其传递指示您想要的目录类型的名称。
+
+通过这种方法创建的各个目录将添加至封装您的应用的所有外部存储文件的父目录,当用户卸载您的应用时,系统会删除这些文件。
+
+</p>
+
+<p>例如,您可以使用以下方法来创建个人相册的目录:</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+    // Get the directory for the app's private pictures directory. 
+    File file = new File(context.getExternalFilesDir(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+<p>如果没有适合您文件的预定义子目录名称,您可以改为调用 {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} 并传递 {@code null}。这将返回外部存储上您的应用的专用目录
+的根目录。</p>
+
+<p>切记,{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+在用户卸载您的应用时删除的目录内创建目录。如果您正保存的文件应在用户卸载您的应用后仍然可用&mdash;比如,当您的应用是照相机并且用户要保留照片时&mdash;您应改用 {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}。
+
+
+</p>
+
+
+<p>无论您对于共享的文件使用 {@link
+android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} 还是对您的应用专用文件使用 
+{@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} ,您使用诸如
+{@link android.os.Environment#DIRECTORY_PICTURES} 的 API 常数提供的目录名称非常重要。
+这些目录名称可确保系统正确处理文件。
+例如,保存在 {@link
+android.os.Environment#DIRECTORY_RINGTONES} 中的文件由系统介质扫描程序归类为铃声,而不是音乐。
+</p>
+
+
+
+
+<h2 id="GetFreeSpace">查询可用空间</h2>
+
+<p>如果您事先知道您将保存的数据量,您可以查出是否有足够的可用空间,而无需调用 {@link java.io.File#getFreeSpace} 或 {@link
+java.io.File#getTotalSpace} 引起 {@link
+java.io.IOException} 。
+这些方法分别提供目前的可用空间和存储卷中的总空间。
+此信息也可用来避免填充存储卷以致超出特定阈值。
+</p>
+
+<p>但是,系统并不保证您可以写入与 {@link java.io.File#getFreeSpace} 
+指示的一样多的字节。如果返回的数字比您要保存的数据大小大出几 MB,或如果文件系统所占空间不到 90%,则可安全继续操作。否则,您可能不应写入存储。
+
+
+</p>
+
+<p class="note"><strong>注意:</strong>保存您的文件之前,您无需检查可用空间量。
+您可以尝试立刻写入文件,然后在 {@link java.io.IOException} 出现时将其捕获。
+如果您不知道所需的确切空间量,您可能需要这样做。
+例如,如果在保存文件之前通过将 PNG 图像转换成JPEG 更改了文件的编码,您事先将不知道文件的大小。
+
+</p>
+
+
+
+
+<h2 id="DeleteFile">删除文件</h2>
+
+<p>您应始终删除不再需要的文件。删除文件最直接的方法是让打开的文件参考自行调用 {@link java.io.File#delete}。
+</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>如果文件保存在内部存储中,您还可以请求 {@link android.content.Context} 通过调用 {@link android.content.Context#deleteFile deleteFile()} 来定位和删除文件:
+</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>注意:</strong>当用户卸载您的应用时,Android 系统会删除以下各项:
+</p> 
+<ul>
+<li>您保存在内部存储中的所有文件</li>
+<li>您使用 {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} 保存在外部存储中的所有文件。</li>
+</ul>
+<p>但是,您应手动删除使用
+{@link android.content.Context#getCacheDir()} 定期创建的所有缓存文件并且定期删除不再需要的其他文件。
+</p>
+</div>
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/data-storage/index.jd b/docs/html-intl/intl/zh-cn/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..6918227
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/data-storage/index.jd
@@ -0,0 +1,57 @@
+page.title=保存数据
+page.tags=数据存储、文件、SQL、数据库、首选项
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>依赖项和先决条件</h2>
+<ul>
+  <li>Android 1.6(API 级别 4)或更高</li>
+  <li>熟悉地图键值集合</li>
+  <li>熟悉 Java 文件 I/O API</li>
+  <li>熟悉 SQL 数据库</li>
+</ul>
+
+<h2>您还应阅读</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html">存储选项</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>大多数 Android 应用需要保存数据,即使仅保存在 {@link android.app.Activity#onPause onPause()} 过程中与应用状态有关的信息,以便用户进度不会丢失 。
+大多数非平凡应用也需要保存用户设置,并且有些应用必须在文件和数据库中管理大量的信息。
+
+本课向您介绍 Android 中的主要数据存储选项,包括:
+</p>
+
+<ul>
+    <li>在共享的首选项文件中保存简单数据类型的键值对
+</li>
+    <li>在 Android 的文件系统中保存任意文件</li>
+    <li>使用 SQLite 管理的数据库</li>
+</ul>
+
+
+<h2>课程</h2>
+
+<dl>
+  <dt><b><a href="shared-preferences.html">保存键值集</a></b></dt>
+    <dd>学习使用在键值对中存储少量信息的共享首选项文件。
+</dd>
+
+  <dt><b><a href="files.html">保存文件</a></b></dt>
+    <dd>学习保存基本文件,比如存储一般按顺序读取的较长数据序列 。
+</dd>
+
+ <dt><b><a href="databases.html">在 SQL 数据库中保存数据</a></b></dt>
+   <dd>学习使用 SQLite 数据库读写结构化数据。</dd>
+
+</dl>
diff --git a/docs/html-intl/intl/zh-cn/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/zh-cn/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..c10ece8
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,120 @@
+page.title=保存键值集
+page.tags=数据存储
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本课程将向您展示如何</h2>
+<ol>
+  <li><a href="#GetSharedPreferences">获取共享首选项的句柄</a></li>
+  <li><a href="#WriteSharedPreference">写入共享首选项</a></li>
+  <li><a href="#ReadSharedPreference">从共享首选项读取信息</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">使用共享首选项</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>如果您有想要保存的相对较小键值集合,您应使用 {@link android.content.SharedPreferences} API。
+{@link android.content.SharedPreferences} 对象指向包含键值对的文件并提供读写这些文件的简单方法。
+
+每个
+{@link android.content.SharedPreferences} 文件由框架进行管理并且可以专用或共享。
+</p>
+
+<p>本课向您展示如何使用 {@link android.content.SharedPreferences} API 存储和检索简单的值。
+</p>
+
+<p class="note"><strong>注意:</strong>{@link android.content.SharedPreferences} API 仅用于读写键值对,您不得将其与
+{@link android.preference.Preference} API 混淆,后者帮助您为您的应用设置构建用户界面(尽管它们使用 {@link android.content.SharedPreferences} 作为其实现以保存应用设置)。
+
+
+有关使用 {@link
+android.preference.Preference} API 的信息,请参阅<a href="{@docRoot}guide/topics/ui/settings.html">设置</a>指南。</p>
+
+<h2 id="GetSharedPreferences">获取共享首选项的句柄</h2>
+
+<p>您可以通过调用以下两种方法之一创建新的共享首选项文件或访问现有的文件:
+</p>
+<ul>
+  <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} &mdash; 如果您需要按照您用第一个参数指定的名称识别的多个共享首选项文件,请使用此方法。
+您可以从您的应用中的任何
+{@link android.content.Context} 调用此方法。</li>
+  <li>{@link android.app.Activity#getPreferences(int) getPreferences()} &mdash; 如果您只需使用Activity的一个共享首选项,请从
+{@link android.app.Activity} 中使用此方法。
+因为此方法会检索属于该Activity的默认共享首选项文件,您无需提供名称。
+</li>
+</ul>
+
+<p>例如,以下代码在 {@link android.app.Fragment} 内执行。它访问通过资源字符串
+ {@code R.string.preference_file_key} 识别的共享首选项文件并且使用专用模式打开它,从而仅允许您的应用访问文件。
+
+</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>命名您的共享首选项文件时,您应使用对于您的应用而言唯一可识别的名称,比如 {@code "com.example.myapp.PREFERENCE_FILE_KEY"}
+</p>
+
+<p>或者,如果您只需Activity的一个共享首选项文件,您可以使用
+{@link android.app.Activity#getPreferences(int) getPreferences()} 方法:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>注意:</strong>如果您创建带 {@link android.content.Context#MODE_WORLD_READABLE} 或 {@link
+android.content.Context#MODE_WORLD_WRITEABLE} 的共享首选项文件,那么知道文件标识符
+的任何其他应用都可以访问您的数据。
+</p>
+
+
+<h2 id="WriteSharedPreference">写入共享首选项</h2>
+
+<p>要写入共享首选项文件, 请通过对您的 {@link android.content.SharedPreferences} 调用 {@link
+android.content.SharedPreferences#edit} 来创建一个 {@link
+android.content.SharedPreferences.Editor}。</p>
+
+<p>传递您想要使用诸如 {@link
+android.content.SharedPreferences.Editor#putInt putInt()} 和 {@link
+android.content.SharedPreferences.Editor#putString putString()} 方法写入的键和值。然后调用 {@link
+android.content.SharedPreferences.Editor#commit} 以保存更改。例如:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">从共享首选项读取信息</h2>
+
+<p>要从共享首选项文件中检索值,请调用诸如 {@link
+android.content.SharedPreferences#getInt getInt()} 和 {@link
+android.content.SharedPreferences#getString getString()} 等方法,为您想要的值提供键,并根据需要提供要在键不存在的情况下返回的默认值。
+
+例如:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
+</pre>
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
new file mode 100644
index 0000000..4bcbdf9
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
@@ -0,0 +1,236 @@
+page.title=允许其他应用开始您的Activity
+page.tags=意向
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>本课程将向您展示如何</h2>
+<ol>
+  <li><a href="#AddIntentFilter">添加意向过滤器</a></li>
+  <li><a href="#HandleIntent">处理您的Activity中的意向</a></li>
+  <li><a href="#ReturnResult">返回结果</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共享简单数据</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">共享文件</a>
+</ul>
+  </div>
+</div>
+
+<p>前两课重点讲述一方面:从您的应用开始另一个应用的Activity。但如果您的应用可以执行对另一个应用可能有用的操作,您的应用应准备好响应来自其他应用的操作请求。
+
+例如,如果您构建一款可与用户的好友分享消息或照片的社交应用,您最关注的是支持 {@link android.content.Intent#ACTION_SEND} 意向以便用户可以从另一应用发起
+“共享”操作并且启动您的应用执行该操作。
+
+</p>
+
+<p>要允许其他应用开始您的Activity,您需要 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a>
+在相应元素的宣示说明文件中添加一个 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> 元素。</p>
+
+<p>当您的应用安装在设备上时,系统会识别您的意向过滤器并添加信息至所有已安装应用支持的意向内部目录。当应用通过隐含意向调用 {@link android.app.Activity#startActivity
+startActivity()} 或 {@link android.app.Activity#startActivityForResult startActivityForResult()} 时,系统会找到可以响应该意向的Activity。
+
+
+
+</p>
+
+
+
+<h2 id="AddIntentFilter">添加意向过滤器</h2>
+
+<p>为了正确定义您的Activity可处理的意向,您添加的每个意向过滤器在操作类型和Activity接受的数据方面应尽可能具体。
+
+</p>
+
+<p>如果Activity具有满足以下 {@link android.content.Intent} 对象条件的意向过滤器,系统可能向Activity发送给定的 {@link android.content.Intent}:
+</p>
+
+<dl>
+  <dt>操作</dt>
+    <dd>对要执行的操作命名的字符串。通常是平台定义的值之一,比如
+ {@link android.content.Intent#ACTION_SEND} 或 {@link android.content.Intent#ACTION_VIEW}。
+    <p>使用 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code &lt;action&gt;}</a> 元素在您的意向过滤器中指定此值。您在此元素中指定的值必须是操作的完整字符串名称,而不是 API 常数(请参阅以下示例)。
+
+</p></dd>
+
+  <dt>数据</dt>
+    <dd>与意向关联的数据描述。
+    <p>用 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code &lt;data&gt;}</a> 元素在您的意向过滤器中指定此内容。使用此元素中的一个或多个属性,您可以只指定 MIME 类型、URI 前缀、URI 架构或这些的组合以及其他指示所接受数据类型的项。
+
+
+</p>
+    <p class="note"><strong>注意:</strong>如果您无需声明关于数据的具体信息
+{@link android.net.Uri}(比如,您的Activity处理其他类型的“额外”数据而不是 URI 的时间),您应只指定 {@code android:mimeType} 属性声明您的Activity处理的数据类型,比如 {@code text/plain} 或 {@code image/jpeg}。
+
+</p>
+</dd>
+  <dt>类别</dt>
+    <dd>提供另外一种表征处理意向的Activity的方法,通常与用户手势或Activity开始的位置有关。
+系统支持多种不同的类别,但大多数都很少使用。
+但是,所有隐含意向默认使用
+{@link android.content.Intent#CATEGORY_DEFAULT} 进行定义。
+    <p>用 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code &lt;category&gt;}</a>
+ 元素在您的意向过滤器中指定此内容。</p></dd>
+</dl>
+
+<p>在您的意向过滤器中,您可以通过声明嵌套在 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a>
+元素中的具有相应 XML 元素的各项,来声明您的Activity接受的条件。
+</p>
+
+<p>例如,此处有一个在数据类型为文本或图像时处理 {@link
+android.content.Intent#ACTION_SEND} 意向的意向过滤器:</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="text/plain"/>
+        &lt;data android:mimeType="image/*"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p>每个入站意向仅指定一项操作和一个数据类型,但可以在每个
+<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"> {@code
+&lt;intent-filter&gt;}</a> 中声明
+ <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a> 和 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+&lt;data&gt;}</a> 元素的多个实例。</p>
+
+<p>如果任何两对操作和数据的行为相斥,您应创建单独的意向过滤器指定与哪种数据类型配对时哪些操作可接受。
+
+</p>
+
+<p>比如,假定您的Activity同时处理 {@link
+android.content.Intent#ACTION_SEND} 和 {@link
+android.content.Intent#ACTION_SENDTO} 意向的文本和图像。在这种情况下,您必须为两个操作定义两种不同的意向过滤器,因为 {@link
+android.content.Intent#ACTION_SENDTO} 意向必须使用数据 {@link android.net.Uri} 指定使用 {@code send} 或 {@code sendto} URI 架构的收件人地址。
+
+例如:</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SENDTO"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:scheme="sms" />
+        &lt;data android:scheme="smsto" />
+    &lt;/intent-filter>
+    &lt;!-- filter for sending text or images; accepts SEND action and text or image data -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="image/*"/>
+        &lt;data android:mimeType="text/plain"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>注意:</strong>为了接收隐含意向,您必须在意向过滤器中包含
+{@link android.content.Intent#CATEGORY_DEFAULT} 类别。方法 {@link
+android.app.Activity#startActivity startActivity()} 和 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 就像声明 {@link android.content.Intent#CATEGORY_DEFAULT} 类别那样处理所有意向。
+如果您不在意向过滤器中声明它,则没有隐含意向分解为您的Activity。
+</p>
+
+<p>如需了解有关发送和接收 {@link android.content.Intent#ACTION_SEND}
+执行社交共享行为的意向的详细信息,请参阅有关<a href="{@docRoot}training/sharing/receive.html">从其他应用接收简单数据</a>的课程。</p>
+
+
+<h2 id="HandleIntent">处理您的Activity中的意向</h2>
+
+<p>为了决定在您的Activity执行哪种操作,您可读取用于开始Activity的 {@link
+android.content.Intent}。</p>
+
+<p>当您的Activity开始时,调用 {@link android.app.Activity#getIntent()} 检索开始Activity的
+{@link android.content.Intent}。您可以在Activity生命周期的任何时间执行此操作,但您通常应在早期回调时(比如,
+{@link android.app.Activity#onCreate onCreate()} 或 {@link android.app.Activity#onStart()})执行。
+</p>
+
+<p>例如:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    setContentView(R.layout.main);
+
+    // Get the intent that started this activity
+    Intent intent = getIntent();
+    Uri data = intent.getData();
+
+    // Figure out what to do based on the intent type
+    if (intent.getType().indexOf("image/") != -1) {
+        // Handle intents with image data ...
+    } else if (intent.getType().equals("text/plain")) {
+        // Handle intents with text ...
+    }
+}
+</pre>
+
+
+<h2 id="ReturnResult">返回结果</h2>
+
+<p>如果您想要向调用您的Activity的Activity返回结果,只需调用 {@link
+android.app.Activity#setResult(int,Intent) setResult()} 指定结果代码和结果 {@link
+android.content.Intent}。当您的操作完成且用户应返回原始Activity时,调用 {@link android.app.Activity#finish()} 关闭(和销毁)您的Activity。
+例如:
+</p>
+
+<pre>
+// Create intent to deliver some kind of result data
+Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
+setResult(Activity.RESULT_OK, result);
+finish();
+</pre>
+
+<p>您必须始终为结果指定结果代码。通常,它为 {@link
+android.app.Activity#RESULT_OK} 或 {@link android.app.Activity#RESULT_CANCELED}。您之后可以根据需要为
+ {@link android.content.Intent} 提供额外的数据。</p>
+
+<p class="note"><strong>注意:</strong>结果默认设置为 {@link
+android.app.Activity#RESULT_CANCELED}。因此,如果用户在完成操作动作或设置结果之前按了<em>返回</em>按钮,原始Activity会收到“已取消”的结果。
+
+</p>
+
+<p>如果您只需返回指示若干结果选项之一的整数,您可以将结果代码设置为大于 0 的任何值。
+如果您使用结果代码传递整数,并且您无需包含 {@link android.content.Intent},您可以调用 {@link
+android.app.Activity#setResult(int) setResult()} 并且仅传递结果代码。
+例如:</p>
+
+<pre>
+setResult(RESULT_COLOR_RED);
+finish();
+</pre>
+
+<p>在这种情况下,只有几个可能的结果,因此结果代码是一个本地定义的整数(大于 0)。
+当您向自己应用中的Activity返回结果时,这将非常有效,因为接收结果的Activity可引用公共常数来确定结果代码的值。
+
+</p>
+
+<p class="note"><strong>注意:</strong>无需检查您的Activity是使用
+ {@link
+android.app.Activity#startActivity startActivity()} 还是 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 开始的。如果开始您的Activity的意向可能需要结果,只需调用 {@link
+android.app.Activity#setResult(int,Intent) setResult()}。
+如果原始Activity已调用 {@link
+android.app.Activity#startActivityForResult startActivityForResult()},则系统将向其传递您提供给 {@link android.app.Activity#setResult(int,Intent) setResult()} 的结果;否则,会忽略结果。
+
+</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/index.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/index.jd
new file mode 100644
index 0000000..3c27581
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/intents/index.jd
@@ -0,0 +1,62 @@
+page.title=与其他应用交互
+page.tags=意向、Activity
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>依赖项和先决条件</h2>
+<ul>
+  <li>Activity生命周期基础知识(请参阅<a href="{@docRoot}training/basics/activity-lifecycle/index.html">管理Activity生命周期</a>)
+</li>
+</ul>
+
+
+<h2>您还应阅读</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共享简单数据</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">共享文件</a>
+  <li><a href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">
+将应用与意向集成(博客文章)</a></li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">意向和意向过滤器</a>
+</li>
+</ul>
+
+</div>
+</div>
+
+<p>Android 应用一般具有若干个<a href="{@docRoot}guide/components/activities.html">Activity</a>。每个Activity显示一个用户界面,用户可通过该界面执行特定任务(比如,查看地图或拍照)。要将用户从一个Activity转至另一Activity,您的应用必须使用 {@link
+android.content.Intent} 定义您的应用做某事的“意向”。
+
+当您使用诸如
+{@link
+android.app.Activity#startActivity startActivity()} 的方法将 {@link android.content.Intent} 传递至系统时,系统会使用 {@link
+android.content.Intent} 识别和启动相应的应用组件。使用意向甚至可以让您的应用开始另一个应用中包含的Activity。
+</p>
+
+<p>{@link android.content.Intent} 可以为 <em>显式</em> 以便启动特定组件(特定的 {@link android.app.Activity} 实例)或<em>隐式</em> 以便启动处理意向操作(比如“拍摄照片”)的任何组件。
+
+</p>
+
+<p>本课程您向展示如何使用 {@link android.content.Intent} 执行与其他应用的一些基本交互操作,比如启动另一个应用、接收来自该应用的结果以及使您的应用能够响应来自其他应用的意向。
+
+</p>
+
+<h2>课程</h2>
+
+<dl>
+  <dt><b><a href="sending.html">向另一个应用发送用户</a></b></dt>
+  <dd>显示您如何创建可执行操作的其他应用的隐含意向。
+</dd>
+  <dt><b><a href="result.html">获取Activity的结果</a></b></dt>
+  <dd>显示如何开始另一Activity并接收该Activity的结果。</dd>
+  <dt><b><a href="filters.html">允许其他应用开始您的Activity</a></b></dt>
+  <dd>显示如何通过定义声明您的应用接受的隐含意向的意向过滤器使您的应用中的Activity可供其他应用使用。
+</dd>
+</dl>
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/result.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/result.jd
new file mode 100644
index 0000000..35b2673
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/intents/result.jd
@@ -0,0 +1,178 @@
+page.title=获取Activity的结果
+page.tags=意向
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>本课程将向您展示如何</h2>
+<ol>
+  <li><a href="#StartActivity">开始Activity</a></li>
+  <li><a href="#ReceiveResult">接收结果</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共享简单数据</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">共享文件</a>
+</ul>
+
+  </div>
+</div>
+
+<p>开始并不一定是单向的另一个Activity。您还可以开始另一个Activity并
+接收返回的结果。要接收结果,请调用 {@link android.app.Activity#startActivityForResult
+startActivityForResult()}(而不是 {@link android.app.Activity#startActivity
+startActivity()})。</p>
+
+<p>例如,您的应用可启动照相机应用并接收拍摄的照片作为结果。或者,您可以启动“联系人”应用以便用户选择联系人,并且您将接收联系人详细信息作为结果。
+
+</p>
+
+<p>当然,响应的Activity必须设计为返回结果。当它这样做时,它会作为另一
+ {@link android.content.Intent} 对象发送结果。您的Activity在
+{@link android.app.Activity#onActivityResult onActivityResult()} 回调中接收它。</p>
+
+<p class="note"><strong>注意:</strong>当您调用
+{@link android.app.Activity#startActivityForResult startActivityForResult()} 时,您可以使用明确或隐含意向。当开始您自己的Activity以接收结果时,您应使用明确意向确保您可收到预期结果。
+
+</p>
+
+
+<h2 id="StartActivity">开始Activity</h2>
+
+<p> 开始针对结果的Activity时,您所使用的 {@link android.content.Intent} 对象并没有什么特别之处,但您需要向 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 方法传递额外的整数参数。
+</p>
+
+<p>该整数参数是识别您的请求的“请求代码”。当您收到结果{@link android.content.Intent} 时,回调提供相同的请求代码,以便您的应用可以正确识别结果并确定如何处理它。
+
+</p>
+
+<p>例如,此处显示如何开始允许用户选择联系人的Activity:</p>
+
+<pre>
+static final int PICK_CONTACT_REQUEST = 1;  // The request code
+...
+private void pickContact() {
+    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
+    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
+    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
+}
+</pre>
+
+
+<h2 id="ReceiveResult">接收结果</h2>
+
+<p>当用户完成后续Activity并且返回时,系统会调用您的Activity
+{@link android.app.Activity#onActivityResult onActivityResult()} 的方法。此方法包括三个参数:
+</p>
+
+<ul>
+  <li>您向 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 传递的请求代码。</li>
+  <li>第二个Activity指定的结果代码。如果操作成功,这是 {@link
+android.app.Activity#RESULT_OK};如果用户退出或操作出于某种原因失败,则是 {@link
+android.app.Activity#RESULT_CANCELED}。
+</li>
+  <li>传送结果数据的 {@link android.content.Intent}。</li>
+</ul>
+
+<p>本例说明您可以如何处理“选择联系人”意向的结果。</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // The user picked a contact.
+            // The Intent's data Uri identifies which contact was selected.
+
+            // Do something with the contact here (bigger example below)
+        }
+    }
+}
+</pre>
+
+<p>在本例中, Android 的“联系人”应用返回的结果 {@link android.content.Intent} 提供识别用户所选联系人的内容 {@link android.net.Uri}。
+
+</p>
+
+<p>为了成功处理结果,您必须了解结果的
+{@link android.content.Intent} 的格式。当返回结果的Activity是您自己的Activity之一时,这便非常容易。
+Andriod 平台附带的应用提供它们自己的 API,您可用这些 API 获取特定结果数据。
+例如,“联系人” 应用(在一些较旧的版本中是 Contacts 应用)始终返回带内容 URI(识别所选联系人)的结果,并且“照相机” 应用在 {@code "data"} 额外项中返回 {@link android.graphics.Bitmap}(请参阅有关
+<a href="{@docRoot}training/camera/index.html">拍摄照片</a>的课程)。
+
+</p>
+
+
+<h4>奖励:接收联系人数据</h4>
+
+<p>显示如何从“联系人”应用获取结果的代码不会详细说明如何实际从结果读取数据,但它需要对<a href="{@docRoot}guide/topics/providers/content-providers.html">内容提供商</a>进行更深入的探讨。
+
+
+但是,如果您很好奇,此处提供了更多的代码向您展示如何查询结果数据,从所选联系人获取电话号码:
+</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request it is that we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // Get the URI that points to the selected contact
+            Uri contactUri = data.getData();
+            // We only need the NUMBER column, because there will be only one row in the result
+            String[] projection = {Phone.NUMBER};
+
+            // Perform the query on the contact to get the NUMBER column
+            // We don't need a selection or sort order (there's only one result for the given URI)
+            // CAUTION: The query() method should be called from a separate thread to avoid blocking
+            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
+            // Consider using {@link android.content.CursorLoader} to perform the query.
+            Cursor cursor = getContentResolver()
+                    .query(contactUri, projection, null, null, null);
+            cursor.moveToFirst();
+
+            // Retrieve the phone number from the NUMBER column
+            int column = cursor.getColumnIndex(Phone.NUMBER);
+            String number = cursor.getString(column);
+
+            // Do something with the phone number...
+        }
+    }
+}
+</pre>
+
+<p class="note"><strong>注意:</strong>在 Android 2.3(API 级别 9)之前, 在 {@link android.provider.ContactsContract.Contacts Contacts Provider} 上执行查询(如以上所示)需要您的应用声明 {@link
+android.Manifest.permission#READ_CONTACTS} 权限(请参阅<a href="{@docRoot}guide/topics/security/security.html">安全与权限</a>)。
+
+但是,自 Android 2.3 版本开始,“联系人”应用授予您的应用在联系人提供商向您返回结果时从联系人提供商临时读取信息的权限。
+
+该临时权限仅适用于所请求的特定联系人,因此您只能查询意向的 {@link android.net.Uri} 指定的联系人,除非您声明 {@link
+android.Manifest.permission#READ_CONTACTS} 权限。
+
+</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/sending.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/sending.jd
new file mode 100644
index 0000000..f5b9c47
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/intents/sending.jd
@@ -0,0 +1,256 @@
+page.title=向另一个应用发送用户
+page.tags=意向
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>本课程将向您展示如何</h2>
+<ol>
+  <li><a href="#Build">构建隐含意向</a></li>
+  <li><a href="#Verify">确认是否存在接收意向的应用</a></li>
+  <li><a href="#StartActivity">开始具有意向的Activity</a></li>
+  <li><a href="#AppChooser">显示应用选择器</a></li>
+</ol>
+
+<h2>您还应阅读</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共享简单数据</a></li>
+</ul>
+
+  </div>
+</div>
+
+<p>Android 最重要的功能之一是应用能够基于它要执行的“操作”向另一个应用发送用户。
+例如,如果您的应用有您要在地图上显示的公司地址,您无需在显示地图的应用中构建Activity。
+
+而是可以创建使用
+ {@link android.content.Intent} 查看地址的请求。Android 系统之后启动可以在地图上显示该地址的应用。
+</p>
+
+<p>正如第一堂课<a href="{@docRoot}training/basics/firstapp/index.html">构建您的第一个应用</a>中所讲述的,您必须使用意向在自己应用中的Activity之间进行导航。您通常使用<em>明确意向</em>执行此操作,该意向定义您希望启动的组件的确切类名称。
+
+
+但是,当您希望另一应用执行操作时,比如“查看地图”,您必须使用<em>隐含意向</em>。
+</p>
+
+<p>本课程向您展示如何针对特定操作创建隐含意向,以及如何使用该意向开始在另一个应用中执行操作的Activity。
+</p>
+
+
+
+<h2 id="Build">构建隐含意向</h2>
+
+<p>隐含意向不声明要启动的组件的类名称,而是声明要执行的操作。
+该操作指定您要执行的操作,比如<em>查看</em>、<em>编辑</em>、<em>发送</em>或 <em>获取</em> 某项。
+意向通常还包含与操作关联的数据,比如您要查看的地址或您要发送的电子邮件消息。根据要创建的意向,数据可能是 {@link android.net.Uri}、多种其他数据类型之一,或意向可能根本就不需要数据。
+
+
+</p>
+
+<p>如果您的数据是 {@link android.net.Uri},有一个简单的  {@link
+android.content.Intent#Intent(String,Uri) Intent()} 构造函数,您可用来定义操作和数据。
+</p>
+
+<p>例如,此处显示如何使用指定电话号码的 {@link
+android.net.Uri} 数据创建发起电话呼叫的意向:</p>
+
+<pre>
+Uri number = Uri.parse("tel:5551234");
+Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
+</pre>
+
+<p>当您的应用通过调用 {@link android.app.Activity#startActivity
+startActivity()} 调用此意向时,“电话”应用会发起向指定电话号码的呼叫。</p>
+
+<p>这里有一些其他意向及其操作和 {@link android.net.Uri} 数据对:
+</p>
+
+<ul>
+  <li>查看地图:
+<pre>
+// Map point based on address
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+// Or map point based on latitude/longitude
+// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+</pre>
+  </li>
+  <li>查看网页:
+<pre>
+Uri webpage = Uri.parse("http://www.android.com");
+Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
+</pre>
+  </li>
+</ul>
+
+<p>其他类型的隐含意向需要提供不同数据类型(比如,字符串)的“额外”数据。
+您可以使用各种 {@link
+android.content.Intent#putExtra(String,String) putExtra()} 方法添加一条或多条额外数据。</p>
+
+<p>默认情况下,系统基于所包含的
+{@link android.net.Uri} 数据确定意向需要的相应 MIME 类型。如果您未在意向中包含 {@link android.net.Uri},您通常应使用 {@link android.content.Intent#setType setType()} 指定与意向关联的数据的类型。
+
+设置 MIME 类型可进一步指定哪些类型的Activity应接收意向。
+</p>
+
+<p>此处有更多添加额外数据以指定所需操作的意向:</p>
+
+<ul>
+  <li>发送带附件的电子邮件:
+<pre>
+Intent emailIntent = new Intent(Intent.ACTION_SEND);
+// The intent does not have a URI, so declare the "text/plain" MIME type
+emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
+emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
+emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
+emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
+emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
+// You can also attach multiple items by passing an ArrayList of Uris
+</pre>
+  </li>
+  <li>创建日历事件:
+<pre>
+Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
+Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
+Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
+calendarIntent.putExtra(Events.TITLE, "Ninja class");
+calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
+</pre>
+<p class="note"><strong>注意:</strong>只有 API 级别 14 或更高级别支持此日历事件意向。
+</p>
+  </li>
+</ul>
+
+<p class="note"><strong>注意:</strong>尽可能具体地定义您的 {@link
+android.content.Intent} 非常重要。例如,如果您想要使用 {@link android.content.Intent#ACTION_VIEW} 意向显示图像,您应指定
+{@code image/*}的 MIME 类型。
+这可防止可“查看”数据的其他类型的应用(比如地图应用)被意向触发。
+</p>
+
+
+
+<h2 id="Verify">确认是否存在接收意向的应用</h2>
+
+<p>尽管 Android 平台保证某些意向可以分解为内置应用之一(比如,“电话”、“电子邮件”或“日历”应用),您应在调用意向之前始终包含确认步骤。
+
+</p>
+
+<p class="caution"><strong>注意:</strong>如果您调用了意向,但设备上没有可用于处理意向的应用,您的应用将崩溃。
+</p>
+
+<p>要确认是否存在可响应意向的可用Activity,请调用 {@link
+android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} 来获取能够处理您的{@link android.content.Intent} 的Activity列表。
+如果返回的 {@link
+java.util.List} 不为空,您可以安全地使用该意向。例如:</p>
+
+<pre>
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
+        PackageManager.MATCH_DEFAULT_ONLY);
+boolean isIntentSafe = activities.size() > 0;
+</pre>
+
+<p>如果 <code>isIntentSafe</code> 是 <code>true</code>,则至少有一个应用将响应该意向。
+如果它是 <code>false</code>,则没有任何应用处理该意向。</p>
+
+<p class="note"><strong>注意:</strong>在您需要在用户尝试使用它之前禁用使用该意向的功能时,您应在Activity初次开始时执行此检查。
+
+如果您了解可处理意向的特定应用,您还可以为用户提供下载该应用的链接(请参阅如何<a href="{@docRoot}distribute/tools/promote/linking.html">在 Google
+Play</a> 链接到您的产品)。
+</p>
+
+
+<h2 id="StartActivity">开始具有意向的Activity</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intents-choice.png" alt="" />
+  <p class="img-caption"><strong>图 1.</strong>当多个应用可处理意向时显示的选择对话框示例。
+</p>
+</div>
+
+<p>一旦您已创建您的 {@link android.content.Intent} 并设置附加信息,调用 {@link
+android.app.Activity#startActivity startActivity()} 将其发送给系统 。如果系统识别可处理意向的多个Activity,它会为用户显示对话框供其选择要使用的应用,如图 1 所示。
+
+如果只有一个Activity处理意向,系统会立即开始这个Activity。
+</p>
+
+<pre>
+startActivity(intent);
+</pre>
+
+<p>此处显示完整的示例:如何创建查看地图的意向,确认是否存在处理意向的应用,然后启动它:
+</p>
+
+<pre>
+// Build the intent
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+
+// Verify it resolves
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List&lt;ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
+boolean isIntentSafe = activities.size() > 0;
+
+// Start an activity if it's safe
+if (isIntentSafe) {
+    startActivity(mapIntent);
+}
+</pre>
+
+
+
+<h2 id="AppChooser">显示应用选择器</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="" />
+  <p class="img-caption"><strong>图 2.</strong>选择器的对话框。</p>
+</div>
+
+<p>注意,当您通过将您的 {@link android.content.Intent} 传递至 {@link
+android.app.Activity#startActivity startActivity()} 而开始Activity时,有多个应用响应意向,用户可以选择默认使用哪个应用(通过选中对话框底部的复选框;见图 1)。
+
+当执行用户通常希望每次使用相同应用进行的操作时,比如当打开网页(用户可能只使用一个网页浏览器)或拍照(用户可能习惯使用一个照相机)时,这非常有用。
+
+</p>
+
+<p>但是,如果要执行的操作可由多个应用处理并且用户可能习惯于每次选择不同的应用,&mdash;比如“共享”操作,用户有多个应用分享项目&mdash;,您应明确显示选择器对话框,如图 2 所示。
+
+
+选择器对话框强制用户选择用于每次操作的应用(用户不能对此操作选择默认的应用)。
+
+</p>
+
+<p>要显示选择器,使用 {@link
+android.content.Intent#createChooser createChooser()} 创建{@link android.content.Intent} 并将其传递至 {@link
+android.app.Activity#startActivity startActivity()}。例如:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+...
+
+// Always use string resources for UI text.
+// This says something like "Share this photo with"
+String title = getResources().getString(R.string.chooser_title);
+// Create intent to show chooser
+Intent chooser = Intent.createChooser(intent, title);
+
+// Verify the intent will resolve to at least one activity
+if (intent.resolveActivity(getPackageManager()) != null) {
+    startActivity(chooser);
+}
+</pre>
+
+<p>这将显示一个对话框,其中有响应传递给 {@link
+android.content.Intent#createChooser createChooser()} 方法的意向的应用列表,并且将提供的文本用作
+对话框标题。</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/design/get-started/principles.jd b/docs/html-intl/intl/zh-tw/design/get-started/principles.jd
new file mode 100644
index 0000000..27cce81
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Android 設計原則
+@jd:body
+
+<p>這些設計原則是由 Android 使用者體驗團隊開發,並針對 Android 使用者體驗團隊的需求所開發,以使用者的最大利益為出發點。對於 Android 開發者和設計者而言,針對不同類型的裝置,這些原則仍持續是更詳細設計方針的基礎。
+
+
+
+</p>
+
+<p>
+當您套用您本身的創意與設計思維時,請考慮這些原則。
+偏離一般做法要帶有目的。
+</p>
+
+<h2 id="enchant-me">使人著迷</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="delight-me">以出乎意外的方式取悅人</h4>
+<p>漂亮的外觀、精心設置的動畫,或時機恰到好處的音效,都是令人感到喜悅的體驗。
+微妙的效果有助於產生毫不費力及強大力量就在手邊的感覺。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_delight.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="real-objects-more-fun">真實的物件比按鈕和功能表更有趣</h4>
+<p>讓人們可以在您應用程式中直接輕觸和操縱物件,這可減少執行某項工作所需的認知過程,同時在情緒上更令人感到滿足。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_real_objects.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-it-mine">提供個人設定</h4>
+<p>人們喜歡加上個人風格,因為這有助於他們感到自在並握有主控權。提供能令人感受及美觀的預設設定,但也可以考慮使用不會阻礙主要工作卻又好玩的可選用性自訂項目。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="get-to-know-me">設法了解使用者</h4>
+<p>隨著時間而學習使用者的偏好。讓人們易於取得之前的選擇,而不是一再詢問他們會做出相同選擇的問題。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+  </div>
+</div>
+
+<h2 id="simplify-my-life">簡化生活</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="keep-it-brief">保持簡潔</h4>
+<p>以簡單單字組成簡短語句。人們傾向於略過冗長的句子。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="pictures-faster-than-words">圖片的傳達效果更勝於言語</h4>
+<p>請考慮使用圖片來解釋想法。圖片能吸引人們的注意力,並比言語更有效率。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_pictures.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="decide-for-me">幫使用者決定,但使用者擁有最終決定權</h4>
+<p>做出最好的猜測,先行動,而非先詢問。太多的選擇和決定會讓人們不高興。
+為防止錯誤,務必允許復原。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="only-show-when-i-need-it">必要時僅顯示使用者需要的東西</h4>
+<p>人們無法承受一次看到太多東西。將工作和資訊細分成小型、易消化的區塊。
+隱藏當下不重要的選項,但在人們需要選擇時要明確指導。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="always-know-where-i-am">使用者應該總是清楚所在位置</h4>
+<p>給人們信心,知道自己沒有迷路。讓您應用程式中的各處看起來都有獨特性,並使用轉換來顯示畫面之間的關係。
+針對進行中的工作提供回饋。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_navigation.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="never-lose-my-stuff">別弄丟使用者的東西</h4>
+<p>儲存使用者花時間所建立的資訊,並且讓使用者可從任何地方存取。跨手機、平板電腦和電腦記住設定、個人風格和建立的資訊。
+這會讓升級變得很簡單。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="looks-same-should-act-same">如果看起來一樣,就應該有相同的動作</h4>
+<p>讓功能看起來就不一樣,而非變化微妙,這可以協助人們辨別功能差異。在相同輸入環境下,因為模式看起來很類似但卻有不同的動作,請盡量避免使用。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_looks_same.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="interrupt-only-if-important">重要時才打斷</h4>
+<p>就像一位好的私人助理,讓人們免於無關緊要的枝微末節。人們總想集中注意力,除非很重要且具時效性,不然貿然中斷會令人感到費力且沮喪。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+  </div>
+</div>
+
+<h2 id="make-me-amazing">讓使用者驚艷</h2>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="give-me-tricks">提供使用者各處通用的訣竅</h4>
+<p>當人們能自行弄清楚來龍去脈時是很棒的體驗。運用來自其他 Android 應用程式的視覺模式和肌肉記憶效應,讓使用者更易於學會您的應用程式。
+例如,擺動手勢可能是很好的導覽捷徑。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_tricks.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="its-not-my-fault">不是使用者的錯</h4>
+<p>提示人們更正時要溫和。人們使用您的應用程式時,會想要感受到自已非常明智。如果有什麼不對,請提供明確的復原指示,但不需要使用者明瞭技術細節。如果可以,請盡量在幕後修正。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_error.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="sprinkle-encouragement">分段鼓勵</h4>
+<p>將複雜工作細分成更小的步驟,讓使用者可以輕鬆完成。對動作給予回饋,即使只是個微光效果。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="do-heavy-lifting-for-me">為使用者處理繁重的工作</h4>
+<p>讓新手也能做出以前從未想像過可以辦到的事情,讓使用者有專家的感覺。例如,組合多個相片效果的捷徑,只要幾個步驟,即可讓業餘照片令人驚艷。
+
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+  </div>
+</div>
+
+<div class="vspace size-2">&nbsp;</div>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-7">
+
+<h4 id="make-important-things-fast">快速找到重要的功能</h4>
+<p>並非所有的動作都一視同仁。決定應用程式中最重要的部分,並讓使用者易於找到並可迅速使用,例如相機的快門按鈕或音樂播放器的暫停按鈕。
+</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+
+    <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/zh-tw/design/material/index.jd b/docs/html-intl/intl/zh-tw/design/material/index.jd
new file mode 100644
index 0000000..620ee6e
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=材料設計
+page.tags=Material, design
+page.type=設計
+page.image=design/material/images/MaterialLight.png
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+  <div>
+    <h3>開發人員文件</h3>
+    <p>使用材料設計建立應用程式</p>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+    <h3>影片</h3>
+    <p>材料設計簡介</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+    <h3>影片</h3>
+    <p>紙張和墨水:重要的材料</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+    <h3>影片</h3>
+    <p>Google I/O 應用程式中的材料設計</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">材料設計是一份內容廣泛的綜合性指南,引導您跨平台、跨裝置進行視覺、動態和互動的設計。
+Android 現已納入對材料設計應用程式的支援。
+如果要在 Android 應用程式中使用材料設計,請依照<a href="http://www.google.com/design/spec">材料設計規格</a>中定義的指示,並使用
+Android
+5.0 (API 層級 21) 或後續版本中的新元件和新功能。</p>
+
+<p>Android 提供下列元素,供您打造材料設計應用程式:</p>
+
+<ul>
+  <li>一個新的設計風格</li>
+  <li>用於複雜檢視的小工具</li>
+  <li>自訂陰影和動畫的新 API</li>
+</ul>
+
+<p>如需取得如何在 Android 上實作材料設計的詳細資訊,請詳見<a href="{@docRoot}training/material/index.html">使用材料設計建立應用程式</a>。
+</p>
+
+
+<h3>材料設計風格</h3>
+
+<p>材料設計風格提供您應用程式使用的新樣式、可以讓您設定色板的系統小工具,並針對輕觸回饋與操作行為轉換提供預設動畫。
+</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">深色材料設計風格</p>
+  </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+  <div style="width:140px;margin:0 auto">
+  <p style="margin-top:8px">淺色材料設計風格</p>
+  </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/theme.html">使用材料設計風格</a>。
+</p>
+
+
+<h3>清單和卡片</h3>
+
+<p>Android 提供兩個新的小工具,搭配材料設計樣式與動畫,可用來顯示清單和卡片:
+</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+  <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+  <p>新的 <code>RecyclerView</code> 小工具是 <code>ListView</code>
+更容易插入的版本,支援不同的版面配置類型,並提供效能改善。</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+  <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+  <p>新的 <code>CardView</code> 小工具讓您可以顯示卡片內的重要資訊,並且該資訊都能擁有一致的外觀與風格。
+</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/lists-cards.html">建立清單和卡片</a>。
+</p>
+
+
+<h3>檢視陰影</h3>
+
+<p>除了 X 和 Y 屬性外,Android 中的檢視現在也有 Z 屬性。
+這個新屬性代表檢視的高度,這會決定:</p>
+
+<ul>
+<li>陰影大小:帶有較高 Z 值的檢視會投射更大的陰影。</li>
+<li>繪製順序:具有較高 Z 值的檢視會顯示在其他檢視之上。</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+  <div class="framed-nexus5-port-span-5">
+  <video class="play-on-hover" autoplay>
+    <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+    <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+  </video>
+  </div>
+  <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+    如要重播影片,請按一下裝置螢幕<em></em>
+  </div>
+</div>
+
+<p>如需取得詳細資訊,請參閱<a href="{@docRoot}training/material/shadows-clipping.html">定義陰影和裁剪檢視</a>。
+</p>
+
+
+<h3>動畫</h3>
+
+<p>新的動畫 API 可針對 UI 控制項的輕觸回饋、檢視狀態中的變更,以及行為轉換,讓您建立自訂動畫。
+</p>
+
+<p>這些 API 讓您可以:</p>
+
+<ul>
+<li style="margin-bottom:15px">
+回應您檢視中有<strong>輕觸回饋</strong>動畫的輕觸事件。
+</li>
+<li style="margin-bottom:15px">
+隱藏和顯示有<strong>循環顯示</strong>動畫的檢視。
+</li>
+<li style="margin-bottom:15px">
+在有自訂<strong>行為轉換</strong>動畫的行為間切換。
+</li>
+<li style="margin-bottom:15px">
+使用<strong>曲線動作</strong>建立更自然的動畫。
+</li>
+<li style="margin-bottom:15px">
+在帶有<strong>檢視狀態變更</strong>動畫的一個或多個檢視屬性中變更動畫。
+</li>
+<li style="margin-bottom:15px">
+在檢視狀態變更間,顯示<strong>狀態清單可繪項目</strong>中的動畫。
+</li>
+</ul>
+
+<p>輕觸回饋動畫會內建於數個標準檢視中,例如按鈕等。新 API 可讓您自訂這些動畫,並將其新增至您的自訂檢視中。
+</p>
+
+<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/animations.html">定義自訂動畫</a>。
+</p>
+
+
+<h3>可繪項目</h3>
+
+<p>可繪項目的這些新功能可以幫助您實作材料設計應用程式:</p>
+
+<ul>
+<li><strong>矢量可繪項目</strong>可以調整大小,但又不會喪失定義,最適合於應用程式中的單色圖示。
+</li>
+<li><strong>可繪項目著色</strong>可讓您在執行階段將點陣圖定義為 Alpha 遮罩,並以一個顏色進行著色。
+</li>
+<li><strong>顏色提取</strong>可讓您自動從點陣圖影像中提取顯著顏色。
+</li>
+</ul>
+
+<p>如需詳細資訊,請參閱<a href="{@docRoot}training/material/drawables.html">使用可繪項目</a>。
+</p>
diff --git a/docs/html-intl/intl/zh-tw/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/zh-tw/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..ac8975f
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=確認及確認完成
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>在某些情況下,當使用者在您應用程式中呼叫一個動作時,最好是透過文字來「確認」(confirm) <em></em>或「確認完成」<em></em>(acknowledge)。</p>
+
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+    <p><strong>確認</strong>是要求使用者確認真的要進行剛剛呼叫的動作。在某些情況下,確認訊息出現時會伴隨警告或需要使用者考量是否採取動作的相關重要資訊。</p>
+  </div>
+  <div class="layout-content-col span-6">
+    <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+    <p><strong>確認完成</strong>是顯示文字,讓使用者知道已經完成剛剛呼叫的動作。這會排除系統正在採取之隱式作業的不確定性。在某些情況下,確認完成出現時會伴隨復原動作的選項。</p>
+  </div>
+</div>
+
+<p>使用這種方式和使用者溝通有助於降低已發生或將發生事情的不確定性。確認或確認完成也可以防止使用者誤犯可能會後悔的錯誤。</p>
+
+<h2>確認或確認完成使用者動作的時機</h2>
+<p>並非所有的動作都能保證會執行確認或確認完成。使用此流程圖可以指引您的設計決策。</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>確認</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>範例:Google Play 書籍</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+    <p>在此範例中,使用者已要求從其 Google Play 媒體庫中刪除一本書籍。顯示<a href="{@docRoot}design/building-blocks/dialogs.html#alerts">警示</a>來確認此動作,因為使用者必須了解將不再針對任何裝置提供這本書籍。</p>
+    <p>設計一個確認的對話方塊時,要讓標題具有意義就必須回應要求的動作。</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>範例:Android Beam</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+    <p>確認不一定要以具有兩個按鈕的警示來呈現。在啟動 Android Beam 之後,會提示使用者輕觸要共用的內容 (在此範例中是一張照片)。如果他們決定不進行,只要移開他們的電話即可。</p>
+  </div>
+</div>
+
+<h2>確認完成</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>範例:已儲存放棄的 Gmail 草稿</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+    <p>在此範例中,如果使用者從 Gmail 撰寫畫面返回,可能會發生預期外的狀況:會自動儲存目前的草稿。以快顯通知 (toast) 形式出現的確認完成,會讓使用者明瞭此情況。確認完成會在幾秒鐘後淡出。</p>
+    <p>在此並不合適使用復原功能,因為儲存動作是由應用程式發起,而非使用者。瀏覽至草稿清單,就可以方便且快速地繼續撰寫。</p>
+
+  </div>
+  <div class="layout-content-col span-6">
+    <h4>範例:已刪除 Gmail 會話群組</h4>
+    <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+    <p>使用者從 Gmail 清單中刪除一個會話群組後,會出現確認完成訊息,並提供一個復原選項。確認完成會持續出現,直到使用者採取不相關的動作,例如捲動清單。</p>
+  </div>
+</div>
+
+<h2>無「確認」或「確認完成」</h2>
+<div class="layout-content-row">
+  <div class="layout-content-col span-6">
+    <h4>範例:+1 中</h4>
+    <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+    <p><strong>確認並非必要</strong>。如果使用者不小心按了 + 1 按鈕,這並不是什麼大問題。他們可以再次輕觸按鈕,復原此動作。</p>
+    <p><strong>確認完成並非必要</strong>。使用者將會看到 +1 彈起並變成紅色。這是個非常明確的訊號。</p>
+  </div>
+  <div class="layout-content-col span-7">
+    <h4>範例:從主螢幕移除應用程式</h4>
+    <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+    <p><strong>確認並非必要</strong>。這是特意設計的動作:使用者必須拖曳項目放到相對較大且隔離的目標上。因此極不可能發生意外狀況。但如果使用者後悔所做的決定,只需幾秒鐘,就可以恢復原狀。</p>
+    <p><strong>確認完成並非必要</strong>。使用者會知道應用程式從主螢幕消失,因為是他們將應用程式拖曳離開,所以才會消失。</p>
+
+  </div>
+</div>
diff --git a/docs/html-intl/intl/zh-tw/design/patterns/navigation.jd b/docs/html-intl/intl/zh-tw/design/patterns/navigation.jd
new file mode 100644
index 0000000..db160c2
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=使用 [返回] 及 [上一層] 導覽
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+  <div>
+    <h3>開發人員文件</h3>
+    <p>實作有效的導覽</p>
+  </div>
+</a>
+
+<p itemprop="description">一致的導覽是整體使用者體驗的必備組成。基本導覽的行為若不一致又令人意外,是最令使用者感到更沮喪的狀況。
+Android 3.0 已將重大變更導入全域的導覽行為中。
+完全遵循 [返回] 及 [上一層] 的方針,會讓使用者感到您的應用程式導覽既可靠又符合預期。
+</p>
+<p>Android 2.3 和更早版本依賴系統 [返回]
+<em></em>按鈕,以支援應用程式內的導覽。在 Android 3.0 導入動作列之後,出現第二個導覽機制:[上一層]
+<em></em>按鈕,由應用程式圖示和左指符號組成。</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">[上一層] vs.[返回]</h2>
+
+<p>[上一層] 按鈕用於在畫面間有階層關係的應用程式中導覽。
+例如,如果畫面 A
+顯示項目清單,然後選擇其中一個項目導致進入畫面 B (更詳細呈現該項目),那麼畫面 B 應該提供 [上一層] 按鈕,以便返回畫面 A。
+</p>
+<p>如果畫面是在應用程式中的最頂端 (亦即應用程式的首頁),則不應該會有 [上一層]按鈕。
+</p>
+
+<p>系統 [返回] 按鈕用於逆時間順序導覽,透過歷程記錄,可以經歷使用者最近使用過的畫面。
+[返回] 通常基於畫面之間的暫時關係,而非應用程式的階層。
+</p>
+
+<p>當先前檢視的畫面也是目前畫面的階層父項時,按下
+[返回] 按鈕和按下 [上一層] 按鈕效果相同 &mdash; 這是常見的狀況。
+然而,與 [上一層] 按鈕不同的是 (該按鈕可以確保使用者仍停留在您的應用程式內):[返回]
+按鈕可以讓使用者返回主畫面,或甚至是不同的應用程式。</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>[返回] 按鈕還支援幾個間接關聯畫面對畫面導覽的行為:
+</p>
+<ul>
+<li>關閉浮動視窗 (對話、快顯)</li>
+<li>關閉內容相關的動作列,並從選取項目移除醒目顯示</li>
+<li>隱藏畫面鍵盤 (IME)</li>
+</ul>
+<h2 id="within-app">在應用程式內導覽</h2>
+
+<h4>導覽至具有多重入口的畫面</h4>
+<p>有時候,一個畫面在應用程式的階層中並沒有嚴謹的位置,而且可以從多個入口存取 &mdash; 例如可以從您應用程式中任何其他畫面存取的設定畫面。在這種情況下,[上一層]
+按鈕應該選擇返回導引至此畫面的前一畫面,這個行為與 [返回] 相同。
+
+</p>
+<h4>在畫面內變更檢視</h4>
+<p>變更畫面的檢視選項並不會變更 [上一層] 或 [返回] 的行為:畫面仍維持在應用程式階層中的相同位置,並不會建立新的導覽歷程記錄。
+</p>
+<p>這類檢視變更的範例如下:</p>
+<ul>
+<li>使用標籤和/或左與右滑動來切換檢視</li>
+<li>使用下拉清單 (亦即折疊標籤) 切換檢視</li>
+<li>篩選清單</li>
+<li>對清單排序</li>
+<li>變更顯示特性 (如縮放)</li>
+</ul>
+<h4>在同層級畫面間導覽</h4>
+<p>當您的應用程式支援從項目清單導覽至項目之一的詳細檢視時,使用者通常會想使用方向導覽功能,以便從該項目導覽至清單中的前一個或後一個項目。
+
+例如在 Gmail 中,可以很容易從會話群組向左或右滑動,方便檢視相同「收件匣」中的較新或舊會話群組。
+就像在一個畫面中變更檢視時,這類導覽不會變更 [上一層] 或 [返回] 的行為。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>然而有一個明顯的例外是,在不被引用清單綁在一起的相關詳細資料檢視之間瀏覽時 &mdash; 例如在 Play 商店中於相同開發者的不同應用程式之間瀏覽時,或是在相同演出者的專輯間瀏覽時。
+
+在這些情況下,瀏覽每個連結都會產生歷程記錄,這會造成 [返回] 按鈕會經歷每個先前檢視過的畫面。
+[上一層] 應該會繼續略過這些相關的畫面,並導覽到最近檢視過的容器畫面。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>基於您對詳細資料檢視的瞭解,您有能力讓 [上一層] 行為甚至變得更聰明。
+再延伸說明之前提及的 Play 商店範例,想像使用者已從最近檢視的「書籍」導覽至「電影」改編的詳細資料。
+在這種情況下,[上一層]
+可以返回到使用者之前沒有導覽過的上層容器 (電影)。</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">透過「主畫面小工具」和「通知」,導覽至您的應用程式</h2>
+
+<p>您可以使用主畫面小工具或通知,協助您直接導覽至深入您應用程式階層中的畫面。
+例如,Gmail 的「收件匣」小工具和新郵件通知,都可以略過「收件匣」畫面,將使用者直接帶到會話群組檢視之中。
+</p>
+
+<p>針對這兩種情況,可以使用下列方式來處理 [上一層] 按鈕:</p>
+
+<ul>
+<li>如果目的地畫面通常是透過您應用程式中的一個特定畫面到達,那麼 [上一層] 應該要導覽至該畫面。<em></em>
+</li>
+<li>否則<em></em>, [上一層] 應該導覽至您應用程式的最頂端 (「主」) 畫面。</li>
+</ul>
+
+<p>就 [返回] 按鈕而言,您應讓導覽更符合預期,方法是在工作的返回堆疊中,插入前往應用程式最頂端畫面的完整向上導覽路徑。
+這可讓忘了如何進入您應用程式的使用者,能在退出之前導覽至應用程式的最頂端畫面。
+
+</p>
+
+<p>舉例來說,Gmail 的主畫面小工具有一個按鈕,可以直接往下進入撰寫畫面。
+來自撰寫畫面的 [上一層] 或 [返回] 按鈕,會將使用者帶到「收件匣」中,而此處的 [返回] 按鈕則可繼續前往至「主畫面」。
+</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>間接通知</h4>
+
+<p>當您的應用程式需要同時呈現多個事件的資訊時,可以使用單一通知,引導使用者進入一個插頁畫面。
+此畫面會摘要這些事件,並提供路徑,讓使用者可以深入應用程式之中。這種風格的通知稱為「間接通知」<em></em>。
+
+</p>
+
+<p>與標準 (直接) 通知不同的是,從間接通知的插頁畫面按下 [返回],會讓使用者返回至通知觸發的起點 &mdash; 無其他畫面會插入至返回堆疊之中。
+
+一旦使用者從插頁畫面繼續進入應用程式之後,[上一層]
+與 [返回] 會如上所述,其行為就像針對標準通知一樣:在應用程式內導覽,而非返回插頁畫面。
+</p>
+
+<p>例如,假設 Gmail 中的使用者收到來自「行事曆」的間接通知。輕觸這個通知會打開插頁畫面,而此畫面會顯示數個不同事件的提醒。
+
+從插頁畫面輕觸 [返回],會讓使用者返回至 Gmail。輕觸特定事件會將使用者帶離插頁畫面,並進入完整的「行事曆」應用程式,顯示事件的詳細資料。
+
+從事件詳細資料中,[上一層] 和 [返回] 會導覽至「行事曆」的最頂層檢視。</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>快顯通知</h4>
+
+<p>快顯通知<em></em>會略過通知匣,直接出現在使用者面前。
+這不常使用,<strong>應該要保留在需要適時回應,以及必須中斷使用者前後關聯動作的時候</strong>。
+例如,Talk
+就使用這種風格,用來提示使用者有朋友邀請加入視訊聊天,而且此邀請會在幾秒之後自動過期。
+</p>
+
+<p>就導覽行為而言,快顯通知緊接著間接通知插頁畫面的行為。
+[返回] 會關閉快顯通知。如果使用者從快顯導覽進入通知應用程式,[上一層]
+和 [返回] 會遵循標準通知的規則,只在應用程式內導覽。
+</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">在應用程式間導覽</h2>
+
+<p>Android 系統的基本優點之一是應用程式互相啟動的能力,讓使用者能夠直接從一個應用程式導覽至另一個應用程式。
+例如,需要擷取一張相片的應用程式可以啟動「相機」應用程式,而此應用程式會將相片傳回引用的應用程式。開發人員可以輕鬆利用其他應用程式的程式碼,而使用者在經常執行的動作中可以享受一致性的體驗,這對雙方都是一大好處。
+
+
+
+</p>
+
+<p>要瞭解應用程式對應用程式的導覽,重要的是要瞭解以下討論的 Android 架構行為。
+</p>
+
+<h4>活動、工作和意圖</h4>
+
+<p>在 Android 中,<strong>活動</strong>是一個應用程式元件,定義了資訊畫面,以及使用者可以執行的所有關聯動作。
+您的應用程式是個活動的集合,包括您可以建立及您能從其他應用程式重複使用的活動。
+</p>
+
+<p><strong>工作</strong>是使用者遵循以達到目標的一系列活動。單一工作可以利用來自單一應用程式的活動,或是汲取數個不同應用程式的活動。
+
+</p>
+
+<p><strong>意向</strong>是指應用程式所發出想要另一套應用程式協助執行某動作訊號的機制。
+應用程式的活動可指示其可回應哪些意向。
+針對如「共用」等常見意向,使用者可能已安裝許多可以滿足此要求的應用程式。
+</p>
+
+<h4>範例:在應用程式間導覽,以支援共用</h4>
+
+<p>要理解活動、工作和意向如何攜手合作,請思考應用程式如何讓使用者使用另一套應用程式來共用內容。例如,從「主」畫面啟動 Play 商店應用程式,開始新工作 A (見下圖)。
+
+在導覽經歷 Play 商店,並輕觸一本促銷的書籍以查看詳細資料後,使用者仍會停留在相同工作中,並透過新增行為延伸工作。
+觸發「共用」動作會提示使用者一個對話框,列出已註冊可用來處理「共用」意向的每個活動 (來自不同的應用程式)。
+
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>當使用者選擇透過 Gmail 共用,Gmail
+的撰寫活動會被新增為工作 A 的延續 &mdash; 而不會建立新工作。如果 Gmail 有本身的工作正在背景執行,這並不會影響該工作。
+</p>
+
+<p>從撰寫活動中,傳送訊息或輕觸 [返回] 按鈕,會讓使用者返回至書籍詳細資料的活動。
+繼續輕觸 [返回] 則會經由 Play 商店往回導覽,最終到達「主畫面」。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>然而,透過輕觸撰寫行為的 [上一層],代表使用者指明停留在 Gmail 的意願。
+Gmail 的會話群組清單活動會隨即出現,並針對該活動建立一個新的工作 B。新工作的最後根源都是「主畫面」,所以從會話群組輕觸 [返回] 會返回至該處。
+</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>工作 A 仍然存在背景之中,而使用者可能會在稍後返回 (例如,透過「最近」畫面)。
+如果 Gmail 在背景正在執行自己的工作,則其會被工作 B 取代 &mdash; 並捨棄之前的前後關係,而就使用者的新目標。
+</p>
+
+<p>當您的應用程式註冊來處理具有深入應用程式階層活動的意向時,請參考<a href="#into-your-app">透過主畫面視窗小工具和通知,導覽至您的應用程式</a>,取得如何指定 [上一層] 導覽的指導方針。
+
+</p>
diff --git a/docs/html-intl/intl/zh-tw/design/patterns/notifications.jd b/docs/html-intl/intl/zh-tw/design/patterns/notifications.jd
new file mode 100644
index 0000000..3e3f59c
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/design/patterns/notifications.jd
@@ -0,0 +1,872 @@
+page.title=通知
+page.tags="notifications","design","L"
+@jd:body
+
+  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
+  <div>
+    <h3>開發人員文件</h3>
+    <p>通知使用者</p>
+  </div>
+</a>
+
+<a class="notice-designers" href="notifications_k.html">
+  <div>
+    <h3>Android 4.4 及較早版本中的通知</h3>
+  </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
+<div>
+    <h3>影片</h3>
+    <p>DevBytes:Android L 開發者預覽版中的通知</p>
+</div>
+</a>
+
+<style>
+  .col-5, .col-6, .col-7 {
+    margin-left:0px;
+  }
+</style>
+
+<p>通知系統可以隨時知會使用者有關應用程式中的相關事件與及時事件,例如來自朋友的新聊天訊息。您可以將通知視為一種事件發生時警示使用者的新聞管道,或是在使用者沒注意時,記錄事件的日誌 &mdash; 並會視情況跨所有 Android 裝置且同步處理。
+
+
+
+
+
+</p>
+
+<h4 id="New"><strong>Android 5.0 新功能</strong></h4>
+
+<p>在 Android 5.0 中,通知會透過結構化、視覺化和功能化的效果接收重要更新:
+</p>
+
+<ul>
+  <li>通知已經有視覺方面的變更,與新的材料設計風格一致。
+</li>
+  <li> 現在可在裝置的鎖定螢幕上提供通知,而敏感內容仍可隱藏於其背後。
+
+</li>
+  <li>當裝置於使用中收到高優先順序的通知時,會使用稱為預告 (heads-up) 通知的新格式。
+</li>
+  <li>雲端同步化通知:關閉您其中一部 Android 裝置的通知,隨之也會在其他裝置上關閉此通知。
+
+</li>
+</ul>
+
+<p class="note"><strong>注意:</strong>此版本 Android 中的通知設計和先前版本大相徑庭。
+
+如需有關先前版本通知的設計資訊,請參閱
+<a href="./notifications_k.html">Android 4.4 及較早版本中的通知</a>。</p>
+
+<h2 id="Anatomy">通知的詳細分析</h2>
+
+<p>本節會重溫通知的基礎功能,以及其如何可在不同類型裝置上出現。
+</p>
+
+<h3 id="BaseLayout">基礎版面配置</h3>
+
+<p>至少,所有通知都必須包含一個基礎版面配置,它包含:</p>
+
+<ul>
+  <li> 通知的<strong>圖示</strong>。該圖示代表原始應用程式。如果應用程式會產生一種以上的通知類型,則圖示也有可能表示通知類型。
+
+
+</li>
+  <li> 一個通知<strong>標題</strong>和額外<strong>文字</strong>。
+</li>
+  <li> 一個<strong>時間戳記</strong>。</li>
+</ul>
+
+<p>針對先前平台版本,使用 {@link android.app.Notification.Builder Notification.Builder}
+所建立的通知其外觀與運作方式和在 Android 5.0
+中的一樣,只是在系統為您處理的方式上有一點樣式上的變更。
+如需更多有關 Android 先前版本通知的詳細資訊,請參閱
+<a href="./notifications_k.html">Android 4.4 及較早版本中的通知</a>。
+</p></p>
+
+
+    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
+
+
+<div style="clear:both;margin-top:20px">
+      <p class="img-caption">
+      手持裝置通知的基礎版面配置 (左),以及穿戴裝置上的相同通知 (右),都帶有使用者相片及一個通知圖示
+
+    </p>
+  </div>
+
+<h3 id="ExpandedLayouts">擴充的版面配置</h3>
+
+
+<p>您可以選擇到底要讓您應用程式的通知提供多詳細的資料。
+通知可以顯示訊息的前幾行,也可以顯示較大的影像預覽。
+此額外資訊可提供使用者更多內容,而且 &mdash; 在某些情況下 &mdash; 可讓使用者讀取完整訊息。
+
+
+使用者可以捏合縮放或執行單手指滑動,在精簡的版面配置與擴充的版面配置間切換。
+
+
+ 對於單一事件通知,Android 提供三個擴充版面配置範本
+(文字、收件匣和影像),讓您可以在應用程式中使用。
+以下的影像顯示單一事件通知在手持裝置 (左) 和穿戴裝置 (右) 上的外觀。
+
+</p>
+
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
+  alt="" width="700px" height;="284px" />
+<img style="margin-top:30px"
+src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
+    alt="" width="311px" height;="450px" />
+
+<h3 id="actions" style="clear:both; margin-top:40px">動作</h3>
+
+<p>Android 支援可以在通知底端顯示的選用動作。透過動作,使用者可針對特定通知,從通知欄 (notification shade) 內處理最常見的工作,而無需開啟原始啟動的應用程式。這可加速互動,而且在配合滑動關閉
+(swipe-to-dismiss)
+時,有助使用者專注於高重要性的通知。
+
+
+
+</p>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
+
+
+
+<p style="clear:both">明智地決定要在通知中要納入多少個動作。
+您納入的動作愈多,就會發現創造出愈複雜的通知。
+請納入最緊迫重要且有意義的動作,限制自己儘可能使用最少數目的動作。
+
+
+</p>
+
+<p>適合用於通知上的動作包含:</p>
+
+<ul>
+  <li> 必須是必要、頻繁且典型的想要顯示內容類型
+
+  <li> 可讓使用者快速完成工作
+</ul>
+
+<p>避免下列狀況:</p>
+
+<ul>
+  <li> 模稜兩可
+  <li> 和通知的預設動作相同 (如「讀取」或「開啟」)
+
+</ul>
+
+
+
+<p>您最多可以指定三個動作,每個動作都由一個動作圖示與名稱組成。
+
+ 為簡單的基礎版面配置新增動作,可讓通知變得更具擴充性
+--
+即使通知並未具備擴充的版面配置。由於動作只針對擴充的通知顯示,其他時候則隱藏,請確認使用者可從通知內呼叫的任何動作,也可以從關聯的應用程式中使用。
+
+
+
+
+</p>
+
+<h2 style="clear:left">預告通知</h2>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
+  <p class="img-caption">
+    預告通知 (來電、高優先順序)
+出現在沉浸式應用程式之上的範例
+
+  </p>
+</div>
+
+<p>當高優先順序的通知到達 (如右) 時,會對使用者呈現很短的時間,且會顯示可能執行動作的擴充版面配置。
+
+</p>
+<p> 在這段時間之後,通知會退回至通知欄。
+如果通知的<a href="#correctly_set_and_manage_notification_priority">優先順序</a>被標記為「高」、「最大」或「全螢幕」,就會取得預告通知。
+</p>
+
+<p><b>預告通知的好範例</b></p>
+
+<ul>
+  <li> 使用裝置時有來電</li>
+  <li> 使用裝置時啟動鬧鐘功能</li>
+  <li> 新簡訊</li>
+  <li> 電池電力不足</li>
+</ul>
+
+<h2 style="clear:both" id="guidelines">指導方針</h2>
+
+
+<h3 id="MakeItPersonal">提供個人設定</h3>
+
+<p>針對由另一人傳送項目的通知
+(如郵件或狀態更新),使用
+{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()} 納入對方提供的影像。也將對方的資訊附加至通知的中繼資料中
+(請參閱 {@link android.app.Notification#EXTRA_PEOPLE})。</p>
+
+<p>您通知的主要圖示仍會顯示,這樣使用者就可以將主要圖示與狀態列中的可見圖示關聯起來。
+
+</p>
+
+
+<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
+<p style="margin-top:10px" class="img-caption">
+  通知會顯示觸發通知的人及其傳送的內容。
+</p>
+
+
+<h3 id="navigate_to_the_right_place">導覽至正確的地方</h3>
+
+<p>當輕觸通知的本文時
+(在動作按鈕之外),請將您的應用程式開啟至使用者可以檢視的地方,並根據通知中引用資料進行動作。
+
+在多數情況下,這將是單一資料項目 (如訊息) 的詳細資料檢視,但如果通知被堆疊時,也可能會是概述檢視。
+
+如果您的應用程式會將使用者帶到應用程式頂層之下的任何地方,則請將導覽過程插入應用程式的返回堆疊中,這可以讓使用者能夠按下系統的返回按鈕,返回至頂層。
+
+如需詳細資訊,請見<a href="{@docRoot}design/patterns/navigation.html#into-your-app">導覽</a>設計模式中的「透過主螢幕視窗小工具和通知,導覽至您的應用程式」<em></em>。
+
+</p>
+
+<h3 id="correctly_set_and_manage_notification_priority">正確設定和管理通知優先順序
+
+</h3>
+
+<p>Android 支援對通知設定優先順序的旗標。此旗標可與其他通知旗標比較,影響通知顯示的位置,這有助於確保使用者一律會先看到最重要的通知。
+
+
+在發佈通知時,您可以從以下優先順序等級選擇:
+
+</p>
+<table>
+ <tr>
+    <td class="tab0">
+<p><strong>優先順序</strong></p>
+</td>
+    <td class="tab0">
+<p><strong>使用</strong></p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MAX</code></p>
+</td>
+    <td class="tab1">
+<p>用於關鍵且緊急的通知,警示使用者注意此通知具時效性或必須在繼續特定工作前先解決的情況。
+
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>HIGH</code></p>
+</td>
+    <td class="tab1">
+<p>主要用於重要通訊,例如內容為使用者特別感興趣的郵件或聊天事件。高優先順序通知會觸發預告通知的顯示。
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>DEFAULT</code></p>
+</td>
+    <td class="tab1">
+<p>用於不屬於此處所述任何其他優先事項類型的所有通知。</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>LOW</code></p>
+</td>
+    <td class="tab1">
+<p>用於您希望使用者能夠被告知,但不那麼緊急的通知。
+低優先順序通知往往出現在清單的底端,因此適合於公共或間接的社交更新:
+
+使用者已要求針對這類事件通知,但這些通知一律不會優先於緊急或直接通訊。
+
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td class="tab1">
+<p><code>MIN</code></p>
+</td>
+    <td class="tab1">
+<p>用於內容關聯或背景資訊,例如天氣資訊或內容關聯位置的資訊。最低優先順序通知不會出現在狀態列。
+
+使用者會在展開通知欄時找到這些通知。
+</p>
+</td>
+ </tr>
+</table>
+
+
+<h4 id="how_to_choose_an_appropriate_priority"><strong>如何選擇合適的優先順序</strong>
+
+</h4>
+
+<p><code>DEFAULT</code>、<code>HIGH</code> 和 <code>MAX</code> 為可中斷的優先順序等級,且有打斷使用者正進行動作的風險。
+
+如要避免惹惱您應用程式的使用者,請將可中斷的優先順序保留給下列通知:
+</p>
+
+<ul>
+  <li> 涉及另一人</li>
+  <li> 具時效性</li>
+  <li> 可能會立即變更使用者在現實世界中的行為</li>
+</ul>
+
+<p>對使用者而言,設定為 <code>LOW</code> 和 <code>MIN</code> 的通知仍可能很有價值:
+很多通知 -- 就算不是大多數 -- 並不需要使用者立即注意,或透過振動使用者的手腕加以提醒;但在使用者選擇查看通知時,這些通知仍會包含使用者覺得有價值的資訊。
+
+
+<code>LOW</code> 和 <code>MIN</code>
+ 優先順序通知的準則包含:</p>
+
+<ul>
+  <li> 不會牽涉到別人</li>
+  <li> 不具時效性</li>
+  <li> 包含使用者可能感興趣,但可能在空閒時才會瀏覽的內容
+</li>
+</ul>
+
+
+  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
+
+
+<h3 style="clear:both" id="set_a_notification_category">設定通知類別
+</h3>
+
+<p>如果您的通知屬於某個預先定義的類別
+(詳見下列說明),則請據以指派。
+通知欄 (或任何其他通知接聽器) 等系統 UI
+可能會使用此資訊,決定排名和篩選結果。
+</p>
+<table>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
+</td>
+    <td>
+<p>來電 (語音或視訊) 或類似的同步化通訊要求
+</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
+</td>
+    <td>
+<p>傳入的直接訊息 (簡訊、即時訊息等)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
+</td>
+    <td>
+<p>非同步大量郵件 (電子郵件)</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
+</td>
+    <td>
+<p>「行事曆」事件</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
+</td>
+    <td>
+<p>宣傳或廣告</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
+</td>
+    <td>
+<p>鬧鐘或計時器</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
+</td>
+    <td>
+<p>長時間執行的背景操作其進度</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
+</td>
+    <td>
+<p>社交網路或共用更新</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
+</td>
+    <td>
+<p>背景操作或驗證狀態中的錯誤</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
+</td>
+    <td>
+<p>播放的媒體傳輸控制</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
+</td>
+    <td>
+<p>系統或裝置狀態更新。保留供系統使用。</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
+</td>
+    <td>
+<p>執行背景服務的表示</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
+</td>
+    <td>
+<p>針對單一件事的特定、及時建議。例如,新聞應用程式可能會想推薦其認為使用者下一步想要閱讀的新聞報導。
+
+</p>
+</td>
+ </tr>
+ <tr>
+    <td>
+<p><code><a
+href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
+</td>
+    <td>
+<p>有關裝置或內容關聯狀態的進行中資訊</p>
+</td>
+ </tr>
+</table>
+
+<h3 id="summarize_your_notifications">概述您的通知</h3>
+
+<p>當您的應用程式嘗試傳送的通知,但已有類型相同的通知仍在等待中,則請針對應用程式將這些相同類型的通知合併為單一概述通知,而不要建立新物件。
+
+</p>
+
+<p>概述通知會建立概述描述,並讓使用者瞭解特定種類的通知有多少數目正在等待處理。
+
+</p>
+
+<div class="col-6">
+
+<p><strong>不要這樣做</strong></p>
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
+</div>
+
+<div>
+<p><strong>請這樣做</strong></p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
+</div>
+
+<p style="clear:left; padding-top:30px; padding-bottom:20px">您可以使用擴充摘要版面配置,針對組成概述的個別通知,提供更多詳細資料。
+
+這種方法可讓使用者更能感覺出哪些通知正處於等待處理,以及是否夠有趣,以便在關聯應用程式中詳細閱讀。
+
+
+
+</p>
+<div class="col-6">
+  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
+  <p class="img-caption">
+  概述實際上是通知的展開和收縮 (使用 <code>InboxStyle</code>)
+  </p>
+</div>
+
+<h3 style="clear:both" id="make_notifications_optional">讓通知成為可選用的
+</h3>
+
+<p>使用者應該總是能夠控制通知。讓使用者可以停用您應用程式的通知,或變更其警示屬性,如鬧鐘聲音或是否要使用振動,方法則是為您的應用程式設定新增通知設定項目。
+
+
+
+</p>
+
+<h3 id="use_distinct_icons">使用易於分辨的的圖示</h3>
+<p>使用者應該能瞄一下通知區域,即可以分辨哪些種類的通知目前正在等待處理。
+
+</p>
+
+<div class="figure">
+  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
+</div>
+
+  <div><p><strong>請這樣做</strong></p>
+    <p>查看 Android 應用程式圖示,
+Android 應用程式已為您的應用程式提供外觀易於分辨的通知圖示。
+</p>
+
+    <p><strong>請這樣做</strong></p>
+    <p>針對小圖示使用<a href="/design/style/iconography.html#notification">通知圖示樣式</a>,針對您的動作列圖示使用 Material Light <a href="/design/style/iconography.html#action-bar">動作列圖示樣式</a>。
+
+
+
+</p>
+<p ><strong>請這樣做</strong></p>
+<p >讓圖示保持看起來簡單的狀態,避免因過多的詳細資料造成使用者難以看清楚。
+</p>
+
+  <div><p><strong>不要這樣做</strong></p>
+    <p>將任何額外的
+Alpha
+(變暗或淡出)
+置入您的小圖示和動作圖示之中;它們的邊緣可能會有反鋸齒狀,但因為 Android 使用這些圖示做為遮罩
+(也就是說,只使用 Alpha 通道),所以影像通常會以完全透明度來繪製。
+</p>
+
+</div>
+<p style="clear:both"><strong>不要這樣做</strong></p>
+
+<p>使用顏色以區分您與其他人的應用程式。通知圖示應該只是個白色圖示透明背景的背景影像。
+</p>
+
+
+<h3 id="pulse_the_notification_led_appropriately">可以調整通知 LED 適當開啟
+</h3>
+
+<p>許多 Android 裝置具備通知 LED,可用於當螢幕關閉時通知使用者有新事件。
+
+優先順序等級為<code>MAX</code>、<code>HIGH</code> 和 <code>DEFAULT</code> 的通知,
+應該要讓 LED 亮起,而只有低優先順序 (<code>LOW</code> 和 <code>MIN</code>) 的通知則不需要。
+
+</p>
+
+<p>使用者對通知的控制應該延伸到 LED 上。當您使用 DEFAULT_LIGHTS,LED 會亮白色。
+
+除非使用者已明確自訂通知,否則您的通知不應該使用其他顏色。
+
+</p>
+
+<h2 id="building_notifications_that_users_care_about">建立使用者喜歡的通知
+</h2>
+
+<p>若要建立使用者喜歡的應用程式,精心設計您的通知非常重要。通知代表您應用程式的聲音,並有助於您應用程式的個性。
+
+
+非必要或非重要的通知會讓使用者不高興,這會讓他們覺得應用程式想要吸引注目不擇手段,所以請明智地使用通知。
+
+
+</p>
+
+<h3 id="when_to_display_a_notification">顯示通知的時機</h3>
+
+<p>若要建立人們喜歡使用的應用程式,重要的是要體認到使用者的注意與專注是必須加以保護的資源。
+
+雖然 Android 的通知系統已重新設計,儘量降低通知對使用者注意力的影響。但仍然必須警覺,通知會中斷使用者的工作流程。在規劃您的通知時,請先自問:通知是否足夠重要到可以合理地中斷使用者。
+
+
+
+
+
+
+如果您不確定,則讓使用者可以使用您應用程式的通知設定,或調整通知優先順序旗標為 <code>LOW</code> 或 <code>MIN</code>,避免使用者在從事其他工作時因此分心。
+
+
+
+</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
+  <p style="margin-top:10px" class="img-caption">
+   具時效性的通知範例
+  </p>
+
+<p>妥善規劃的應用程式只會在必要時才出現,但有幾個情況的確有益於應用程式透過無提示通知中斷使用者的行為。
+</p>
+
+<p>通知主要還是使用於<strong>具時效性時間的事件</strong>,特別是當這些同步事件<strong>涉及其他人</strong>的時候。
+比如說,傳入的聊天是通訊的即時、同步形式:
+
+另一個使用者正主動等待您的回應。
+「行事曆」事件是何時使用通知吸引使用者注意的另一個好例子,因為事件即將發生,而「行事曆」事件通常牽涉到其他人。
+
+
+</p>
+
+<h3 style="clear:both" id="when_not_to_display_a_notification">不顯示通知的時機
+</h3>
+
+<div class="figure" style="margin-top:60px">
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
+</div>
+
+<p>在許多其他情況下,通知並不適當:</p>
+
+<ul>
+  <li> 當通知並非直接針對使用者,或者資訊並非真正具時效性時,請避免通知使用者。
+
+例如,來自社交網路的非同步與間接更新,通常不是即時中斷的好時機。
+
+
+對於重視這些狀況的使用者,可以讓他們自行選擇加入通知。
+</li>
+  <li> 如果相關的新資訊目前正在螢幕上,則不要建立另一個通知。
+反之,直接在前後關係中使用應用程式本身的 UI 通知使用者有新資訊。
+
+
+  例如,當使用者正與另一位使用者聊天時,聊天應用程式不應建立系統通知。
+</li>
+  <li> 如果應用程式或系統可以不干擾使用者而解決問題,就不要因為如儲存或同步化資訊,或更新應用程式等低層級的技術操作而中斷使用者活動。
+
+</li>
+  <li> 如果可能的話,就讓應用程式能自行從錯誤恢復,在不需要使用者進行任何動作時,就不要告知他們錯誤而中斷使用者的活動。
+
+</li>
+  <li> 不要建立無實質內容的通知,也不要建立內容僅是在廣告您應用程式的通知。
+
+通知應該要能夠提供實用、及時的新資訊,而非只是為了啟動一個應用程式。
+
+</li>
+  <li> 請不要為了讓您的品牌出現在使用者面前,而建立多餘的通知。
+
+  這類通知會讓您的使用者感到失望並不願意使用您的應用程式。能夠提供少量的更新資訊並可以吸引使用者注意您應用程式的最佳方式,是開發一個小工具,讓使用者可以選擇放置在主畫面上。
+
+
+
+
+</li>
+</ul>
+
+<h2 style="clear:left" id="interacting_with_notifications">與通知互動
+</h2>
+
+<p>通知可由狀態列上的圖示表示,並可以透過開啟通知匣來存取。
+
+</p>
+
+<p>輕觸通知會開啟相關應用程式,顯示符合通知的詳細資料內容。對通知往左右滑動,可以將通知從通知匣中移除。
+
+</p>
+
+<h3 id="ongoing_notifications">進行中通知</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
+      <p class="img-caption">
+    因為音樂播放的緣故所以有進行中通知
+  </p>
+</div>
+<p>進行中通知可讓使用者得知在背景中正在進行程序的資訊。例如,音樂播放程式會在通知系統中宣告正在播放的曲目,除非使用者停止曲目,否則就會繼續宣告。
+
+
+
+進行中通知也可以針對如下載檔案或編碼影片等耗時較長的工作,向使用者顯示目前進度。
+
+使用者無法手動將進行中通知從通知匣移除。
+</p>
+
+<h3 id="ongoing_notifications">媒體播放</h3>
+<p>在 Android 5.0 中,鎖定螢幕不會針對已過時的
+{@link android.media.RemoteControlClient} 類別,顯示傳輸控制項。但鎖定螢幕「的確」<em></em>會顯示通知,所以每個應用程式的播放通知,現在都已經是使用者從鎖定狀態控制播放的主要方法。
+
+這個行為可讓應用程式進一步控制以何種方式顯示哪些按鈕,同時無論螢幕是否鎖定,都能為使用者提供一致性的體驗。
+
+
+</p>
+
+<h3 style="clear:both"
+id="dialogs_and_toasts_are_for_feedback_not_notification">對話和快顯通知
+</h3>
+
+<p>您的應用程式目前若不在畫面上,就不應建立對話或快顯通知。
+對話或快顯通知只在使用者於您應用程式內採取動作時產生立即回應時才顯示。至於使用對話與快顯通知的進一步指引,請參閱<a href="/design/patterns/confirming-acknowledging.html">確認和確認完成</a>。
+
+
+
+</p>
+
+<h3>排名和排序</h3>
+
+<p>通知就是新聞,所以基本上是以逆時間順序顯示,同時會針對應用程式指定的通知<a href="#correctly_set_and_manage_notification_priority">優先順序</a>,給與特殊考慮。
+
+
+</p>
+
+<p>通知是鎖定螢幕的重要部分,並會在裝置重新顯示螢幕時明確作用。
+
+鎖定螢幕上的空間有限,所以更重要的是辨別出最緊急或相關的通知。
+
+基於這個理由,Android 針對通知提供了更複雜的排序演算法,並同時考慮:
+
+</p>
+
+<ul>
+  <li> 時間戳記和應用程式指定的優先順序。</li>
+  <li> 通知最近是否以聲音或振動干擾使用者。
+(也就是說,如果電話剛發出一個聲響,而使用者想要知道「剛剛發生什麼事?」,鎖定螢幕應該以瞄一下就能取得通知的方式來回應使用者。
+)
+
+</li>
+  <li> 任何使用 {@link android.app.Notification#EXTRA_PEOPLE} 附加至該通知的人員,尤其是他們是否為標記星號的連絡人。
+</li>
+</ul>
+
+<p>要善用這種排序,請著重於您想要建立的使用者體驗,而非著眼於清單上的任何特定排名位置。
+
+</p>
+
+  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
+
+  <p class="img-caption" style="margin-top:10px">Gmail 通知使用預設的優先順序,所以通常排序低於像 Hangouts 等即時訊息應用程式,但當有新郵件進來時,會暫時立即提升。
+
+
+
+
+  </p>
+
+
+<h3>在鎖定螢幕上</h3>
+
+<p>由於通知可見於鎖定螢幕上,因此使用者隱私是特別重要的考量。
+
+通知通常包含敏感資訊,而且不一定要顯示給拿起裝置並打開顯示的任何人。
+
+</p>
+
+<ul>
+  <li> 針對具有安全鎖定螢幕 (PIN、圖案或密碼) 的裝置,介面有公用和私密兩部分。
+公用介面可以顯示在安全鎖定螢幕上,因此任何人都可看見。
+私密介面是鎖定螢幕背後的世界,只在使用者登入裝置時才會顯示。
+</li>
+</ul>
+
+<h3>使用者控制安全鎖定螢幕上顯示的資訊</h3>
+<div class="figure" style="width:311px">
+  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
+      <p class="img-caption">
+    鎖定螢幕上的通知,以及使用者解鎖裝置後顯示的內容。
+  </p>
+</div>
+
+<p>當設定安全鎖定螢幕時,使用者可以選擇隱藏來自安全鎖定螢幕的機密詳細資料。
+在這種情況下,系統 UI 會考慮通知的「可見度」<em></em>等級,判斷可以顯示何種內容。
+
+</p>
+<p> 如要控制可見度等級,可以呼叫
+<code><a
+href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>,並指定下列值之一:
+</p>
+
+<ul>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>。
+顯示通知的完整內容。
+  如果未指定可見度,則這會是系統預設值。</li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>。
+在鎖定螢幕上,顯示這個通知存在的基本資訊,
+包括通知圖示和發佈通知的應用程式。通知詳細資料的其他部分則不會顯示。
+但請記住的下列幾點:
+  <ul>
+    <li> 如果您想要提供您通知的不同公用版本,
+以便顯示在安全鎖定螢幕上,
+請在 <code><a
+href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>
+欄位中提供一個取代的「通知」物件。
+    <li> 此設定可以讓您的應用程式有機會建立內容的改編版本,非常實用但卻不會透露個人資訊。
+考慮簡訊應用程式的例子,
+其通知包含簡訊的文字和傳送者的姓名與連絡人圖示。
+此通知應該是 <code>VISIBILITY_PRIVATE</code>,但 <code>publicVersion</code> 仍包含像「3 個新訊息」等實用資訊,
+但卻又不提供任何其他可用來識別的詳細資料。
+
+  </ul>
+  </li>
+  <li><code><a
+href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>。僅顯示最起碼的資訊,
+甚至連通知圖示都排除。</li>
+</ul>
+<h2 style="clear:both" id="notifications_on_android_wear">Android Wear 上的通知
+</h2>
+
+<p>預設情況下,通知和其<em>動作</em>會橋接至穿戴裝置。
+開發人員可以控制哪些通知可從電話橋接至手錶上,
+反之亦然。
+開發人員還可以控制哪些動作可以橋接。如果您的
+應用程式包含
+無法以單一點選完成的動作,
+請在您的穿戴通知上隱藏這些動作
+,或考慮將其連結至穿戴應用程式,
+讓使用者可以在手錶上完成動作。
+</p>
+
+<h4>橋接通知和動作</h4>
+
+<p>例如電話等已連線的裝置,
+可以橋接通知至穿戴裝置,讓通知可以在該處顯示。同樣的,也可以橋接動作,
+這樣使用者就可以直接從穿戴裝置對通知執行動作。</p>
+
+<p><strong>橋接</strong></p>
+
+<ul>
+  <li> 新的即時訊息</li>
+  <li> 例如 +1 等單點選動作,像 Heart</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
+
+<p><strong>請勿橋接</strong></p>
+
+<ul>
+  <li> 新到播客的通知</li>
+  <li> 對應至手錶上不可能執行的動作</li>
+</ul>
+
+
+
+<p><h4>要在穿戴裝置上定義的獨特動作</h4></p>
+
+<p>有些動作只能在穿戴裝置上執行。這些動作包含:</p>
+
+<ul>
+  <li> 罐頭回應的快速清單,例如「會馬上回來」</li>
+  <li> 在手機上開啟</li>
+  <li> 帶出語音輸入畫面的「註解」或「回覆」動作</li>
+  <li> 啟動穿戴裝置特定的應用程式動作</li>
+</ul>
+
+<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd
new file mode 100644
index 0000000..f63501f
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/about.jd
@@ -0,0 +1,294 @@
+page.title=Google Play商機
+meta.tags="visibility, growth, distributing"
+page.tags="play, apps, distributing, publishing"
+page.metaDescription=每月數十億次下載,此數量仍在攀升。憑藉 Google 的宏大規模向使用者呈現您的應用程式。
+page.image=/distribute/images/about-play.jpg
+
+@jd:body
+
+<div id="qv-wrapper">           
+  <div id="qv">
+  <h2>關於 Google Play</h2>
+    <ol style="list-style-type:none;">
+      <li><a href="#reach">範圍涵蓋全球,成長迅速</a></li>
+      <li><a href="#ratings-reviews">使用者評分與評論</a></li>
+      <li><a href="#category-browsing">類別瀏覽</a></li>
+      <li><a href="#search">搜尋</a></li>
+      <li><a href="#top-charts-and-lists">頂級排行圖表與清單</a></li>
+      <li><a href="#featured-staff-picks">特色精選、人員推薦、集合與徽章</a></li>
+      <li><a href="#product-detail-pages">市集清單頁面</a></li>
+      <li><a href="#related-resources">相關資源</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  Google Play 是散佈 Android 應用程式的超級市集。在 Google Play 上發行時,您會向遍佈全球 190 多個國家/地區的龐大的 Android 客戶群呈現您的應用程式。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-about-0.jpg" alt="Google Play on an Android Tablet" style="width:480px;position:relative" />
+</div>
+
+<p>
+  Google Play 是 Android 體驗的核心環節。新使用者可以使用應用程式、遊戲及其他 Google Play 內容對其裝置進行個人化。既有使用者可以定期返回以查看其趨勢與新項目。下載新應用程式非常便利迅捷,Google Play 會使用空中通訊功能將應用程式快速推送至使用者的裝置。
+</p>
+
+<p>
+  Google Play 也是網路使用者的頂級目標。只要有瀏覽器,任何人都能在網路上查看 Google Play。Android 使用者甚至可以購買並安裝所需的應用程式,Google Play 無需任何纜線即可將應用程式自動推送至使用者的裝置。
+</p>
+
+<p>
+  Google Play 網站的可存取性與便利性可為您提供新方式,供您將許多來源 (例如線上廣告、網頁搜尋與交叉連結) 的流量吸引到您的產品上來。Google Play 專為關聯使用者與絕佳的應用程式及遊戲而設計,能提供關鍵的通路,讓您的應用程式在市場上引人注目且動力十足。
+</p>
+
+<div class="headerLine">
+  <h2 id="ratings-reviews">
+    使用者評分與評論
+  </h2>
+
+
+</div>
+
+<p>
+  潛在的使用者會將評分與評論視為應用程式品質的關鍵度量指標。Android 使用者可將應用程式評為一星至五星,並發佈評論,以展示其對所下載應用程式的欣賞程度。
+</p>
+
+<p>
+  在 Google Play 清單與搜尋結果中,<strong>您應用程式的評分是影響其排名的最重要的因素之一,</strong>也是在規劃應用程式及遊戲以便在市集內推廣時,編輯人員尋求的關鍵度量指標之一。
+</p>
+
+<div class="img" style="padding: 1em auto;width:96%;">
+  <img src="{@docRoot}images/gp-rating-web.png" style="border:1px solid #ddd;">
+</div>
+
+<div class="headerLine">
+  <h2 id="category-browsing">
+    類別瀏覽
+  </h2>
+
+
+</div>
+
+<p>
+  在 Google Play 中發行應用程式時,您可以點選類別 (希望使用者從該類別中找到您的應用程式)。可以使用 30 多個類別。在每個類別中,會根據評分、評論、下載次數、國家/地區與其他因素的組合確定應用程式的排名。
+</p>
+
+<div class="headerLine">
+  <h2 id="search">
+    搜尋
+  </h2>
+
+
+</div>
+
+<p>
+  藉由在 Google Play 中進行搜尋,使用者可以快速準確地找到應用程式或遊戲。搜尋會使用強大的啟發法對作為使用者類型的字詞提出建議,並提供所建議應用程式的直接連結。在結果中,使用者會找到相關度最高、最受青睞的應用程式 (位於頂部)。
+</p>
+
+<div class="headerLine">
+  <h2 id="top-charts-and-lists">
+    頂級排行圖表與清單
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-top.jpg">
+</div>
+
+<p>
+  透過 [應用程式] 及 [遊戲] 首頁右側的頂級排行圖表,使用者可以始終了解有關 Android 使用者的流行資訊與趨勢。這些圖表始終保持最新狀態,每天會根據最近的下載活動進行數次更新。若應用程式的評分與下載活動次數上升,應用程式在這些圖表中的排行也將升高。
+</p>
+
+<p>
+  為了讓這些圖表盡可能貼近全球的使用者,在使用 Google Play 的最普遍的國家/地區中,還提供這些國家/地區特定的頂級排行圖表。若您的應用程式動力十足,下載次數與評分快速上升,則會攀升到一或多個頂級排行圖表中,並獲得更多的展示機會。
+</p>
+
+<table style="width:50%;">
+  <tr>
+    <td>
+      免費頂級排行
+    </td>
+    <td>
+      免費應用程式與免費遊戲的清單
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      付費頂級排行
+    </td>
+    <td>
+      付費應用程式與付費遊戲的清單
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      總收入頂級排行
+    </td>
+    <td>
+      總體收入 (免費或付費)
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      新免費頂級排行
+    </td>
+    <td>
+      推出未滿 30 天
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      新付費頂級排行
+    </td>
+    <td>
+      推出未滿 30 天
+    </td>
+  </tr>
+
+  <tr>
+    <td>
+      趨勢
+    </td>
+    <td>
+      安裝次數快速上升的新生項目
+    </td>
+  </tr>
+</table>
+
+<div class="headerLine">
+  <h2 id="featured-staff-picks">
+    特色精選、人員推薦、集合與徽章
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 編輯團隊致力於讓使用者注意到最佳的應用程式,並設定市集內應用程式品質的基調。該團隊會經常檢閱 Google Play 中的應用程式,不僅會尋找非常知名的應用程式及遊戲,還會尋找希望更多人了解的「泥沙下的珍珠」。該團隊會在<em>特色精選</em>、<em>人員推薦</em>及其他集合中推廣出色的應用程式。
+</p>
+
+<p>
+  您無法將應用程式指定為精選應用程式,但是該團隊會始終關注 Google Play 以尋找出色的應用程式。若您建置的應用程式深受使用者喜愛,並在 Android 裝置上具有良好外觀,就會引起編輯團隊的注意。
+</p>
+
+<h3 id="featured-staff-picks2">
+  特色精選與人員推薦
+</h3>
+
+<p>
+  Google Play 編輯人員每週都會選取新的一組應用程式,在其大受歡迎的<em>特色精選</em>與<em>人員推薦</em>集合中予以推廣。
+</p>
+
+<p>
+  <em>特色精選</em>集合會著重展示可供 Android 使用的最新最優的應用程式與遊戲標題。該清單還包括頂級類別 (這些頂級類別也屬特色精選之列) 中品質最優、最受青睞的應用程式。<em>人員推薦</em>會收集 Google Play 上最近所有的特色精選應用程式與遊戲。為了聚焦平板電腦使用者,特殊的<em>人員推薦</em>集合會著重展示適用於 Android 平板電腦的最佳應用程式。
+</p>
+
+<table style="text-align:center;margin:1.5em 0;">
+  <tr>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks1.jpg">
+      <p>
+        特色精選
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks2.jpg">
+      <p>
+        集合
+      </p>
+    </td>
+    <td style="border:none;">
+      <img src="{@docRoot}images/gp-about-picks3.jpg">
+      <p>
+        編輯人員的選擇
+      </p>
+    </td>
+  </tr>
+</table>
+
+<h3 id="collections">
+  應用程式集合
+</h3>
+
+<p>
+  編輯人員經常會根據主題或季節性活動,將一組應用程式及遊戲整合在一起。此集合方式快速及時,受其吸引,使用者經常使用這些清單來選取應用程式。
+</p>
+
+<p>
+  編輯人員會選擇供集合推廣的應用程式,即在手機與平板電腦上展示 Android 最佳特性的高品質應用程式。此外,該人員還會尋找可對集合整體作出有趣或獨特貢獻的應用程式。
+</p>
+
+<h3 id="editors-choice">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/editorschoice_ann.png">編輯人員的選擇 </h3>
+
+<p>
+  <em>編輯人員的選擇</em>是規劃的應用程式集合,著重展示可在 Android 上使用的某些非常出色的應用程式。編輯人員選擇這些應用程式著眼於品質與絕佳的使用者體驗、長期受歡迎,以及 Android 功能的創新使用。
+</p>
+
+<p>
+  此外,<em>編輯人員的選擇</em>所選擇的應用程式還會收到徽章,該徽章顯示在 Google Play 中應用程式名稱所在的位置。
+</p>
+
+<h3 id="top-developer">
+  <img style="margin-right:.25em;margin-bottom:.5em;" src="{@docRoot}images/topdev_ann.png">頂級開發人員 </h3>
+
+<p>
+  「頂級開發人員」徽章將授予因致力於推出 Android 上的高品質創新應用程式而取得認可、受人尊敬的開發人員。Google Play 編輯人員會根據開發人員的累計工作,不時頒發「頂級開發人員」徽章。
+</p>
+
+<p>
+  「頂級開發人員」徽章會顯示在 Google Play 中所顯示的開發人員名稱旁。該徽章意味著對開發人員所有應用程式的長期認可,預示著使用者對開發人員的產品具有更高的信任度。
+</p>
+
+<div class="headerLine">
+  <h2 id="product-detail-pages">
+    市集清單頁面
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-about-listing.jpg">
+</div>
+
+<p>
+  您應用程式的 Google Play 店面是其<em>市集清單頁面</em>:這是內容豐富的多彩頁面,您可藉此推廣應用程式、著重展示其評分與評論,並顯示應用程式的功能。
+</p>
+
+<p>
+  使用者將在您的市集清單內尋找您應用程式的所有相關資訊。若使用者在搜尋結果、頂級排行圖表、類別清單與集合內看到列示的應用程式,只需點選一次即可直接進入您的市集清單。
+</p>
+
+<p>
+  可以使用任何網頁瀏覽器透過 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 管理您的產品詳細資料頁面。登入以上傳或更新您的品牌資產,然後以市場的語言輸入您的產品詳細資料。
+</p>
+
+<p>
+  發行時,Google Play 會將您應用程式的評分、評論、連結新增至您的其他產品等項目。Google Play 還可以確保您的市集清單頁面在手機、平板電腦及網頁瀏覽器中具有良好外觀。
+</p>
+
+<p>
+  您可以從 Google Play 外部 (例如從您的網站、廣告活動、評論、社交媒體貼文等) 將網頁使用者直接連結至您的產品詳細資料頁面。請參閱<a href="{@docRoot}distribute/tools/promote/linking.html">連結至您的產品</a>以了解實現之道。
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="headerLine">
+<h2>相關資源</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="4"></div>
+    </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd
new file mode 100644
index 0000000..8fe944d
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/auto.jd
@@ -0,0 +1,163 @@
+page.title=散佈至 Android Auto
+page.image=/design/auto/images/auto-overview.png
+meta.tags="auto", "publish", "quality"
+page.tags="auto", "publish", "googleplay"
+page.metaDescription=將您的應用程式與內容散佈至 Android Auto。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>如何參加</h2>
+<ol>
+<li><a href="#understand_guidelines">了解指導方針</a></li>
+<li><a href="#develop_app">開發適用於 Auto 的卓越應用程式</a></li>
+<li><a href="#test_app">測試 Auto 應用程式品質</a></li>
+<li><a href="#opt_in">同意條款</a></li>
+<li><a href="#track_review">追蹤檢閱</a></li>
+</ol>
+
+<h2>您也應閱讀</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  若您開發出卓越的應用程式,Android Auto 與 Google Play 可協助您將其提供給車輛內的使用者。您可以延伸適用於 Auto 的新應用程式或既有應用程式,然後在 Google Play 中使用熟悉的工具與程序發行這些應用程式。
+</p>
+
+<p>
+  若要開始,請檢閱本文件的各節,以了解如何透過 Google Play 將您的 Auto 應用程式散佈至使用者。如需有關您的應用程式應符合的可用性、品質及安全性相關指導方針的資訊,請務必閱讀 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>。若應用程式已準備就緒,您可以接受 Developer Console 中的條款,並上傳 APK 以供檢閱。
+</p>
+
+<h2 id="how_to_participate">
+  如何參加
+</h2>
+
+<p>
+  藉由 Google Play,您可以提供在車輛內使用的應用程式。您可以使用既有的 Developer Console 帳戶以及目前的散佈與定價設定來執行開發與發行。參加方式非常簡單,以下諸節將說明參加程序。
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-auto-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1.了解指導方針與需求
+</h3>
+
+<p>
+  若要準備在 Android Auto 上成功推出應用程式,首先請檢閱有關在 Auto 上營造絕佳體驗的指導方針。請參閱 <a href="{@docRoot}design/auto/index.html">Android Auto 設計指導方針</a>,以了解延伸 Auto 所適用應用程式的創意,以及有關設計與可用性的詳細資料。
+</p>
+
+<p>
+  著手設計 Auto 體驗時,請確保閱讀並了解 Auto 應用程式的品質準則。在 Google Play 上,只會將可以在 Auto 上使用的應用程式指定為 Auto 應用程式,若您的應用程式符合一組基本的品質準則,則可以參加。如需詳細資料,請參閱 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>。
+</p>
+
+<h3 id="develop_app">2.開發適用於 Auto 的卓越應用程式</h3>
+
+<p>
+  適用於 Auto 的卓越應用程式針對在車輛內使用而設計,可利用 Android Auto 的功能。使用者在駕駛時,該應用程式能提供高品質的體驗,例如提供音訊內容的播放或訊息存取功能。
+</p>
+
+<p>
+  考慮 Auto 應用程式時,請檢閱<a href="{@docRoot}training/auto/start/index.html">開發人員文件</a>以及可用性指導方針,然後對以可能的最大限度提供支援進行規劃。請確保設計絕佳的體驗,並遵循指導方針以防止駕駛員分心。
+</p>
+
+<p>
+  您必須在提供用於手機、平板電腦及其他裝置的既有應用程式過程中,提供 Auto 應用程式 (使用相同的套件名稱與市集清單) 的體驗。
+</p>
+
+<h3 id="test_app">3.測試 Auto 應用程式品質</h3>
+
+<p>
+  應將您的 Auto 應用程式設計為在車內具有良好的執行狀況與極佳的外觀,並提供可能最優的使用者體驗。Google Play 會顯示所選高品質 Auto 應用程式,以降低使用者在 Google Play 中的探尋難度。以下說明您如何參加並提供使用者會喜愛的 Android Auto 應用程式:
+</p>
+
+<ul>
+  <li>符合 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>指導方針 <ul>
+      <li>遵循 <a href="{@docRoot}training/auto/index.html">Auto 應用程式開發</a>的最佳做法</li>
+      <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>準則</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4.同意 Android Auto 條款並發行</h3>
+
+<p>
+  開發人員帳戶所有者必須先同意 Developer Console 的 <strong></strong>[定價與散佈] 區段中的 <a href="https://play.google.com/about/auto/developer-distribution-agreement-addendum.html">Android Auto 條款</a>,然後您才能上傳 APK 並發行應用程式供檢閱。同意條款意味著您希望透過 Google Play 為 Android Auto 使用者提供您的應用程式,且您的應用程式符合 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>指導方針。
+</p>
+
+<p>
+  只有在您同意條款後,才能上傳您的 Auto 應用程式。以下內容將描述確定哪些應用程式為 Auto 應用程式:
+</p>
+
+<ul>
+  <li>您的應用程式宣示說明中必須使用應用程式所用的 auto 功能宣告 <code>com.google.android.gms.car.application</code> 中繼資料項目。如需有關設定您的應用程式以便與 Android Auto 搭配使用的詳細資訊,請參閱 <a href="{@docRoot}training/auto/start/index.html#auto-metadata">開始使用 Auto</a>。
+  </li>
+</ul>
+
+<p>
+  若您已建置準備發行的 APK,並已進行測試,確保其符合所有 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>指導方針,請將其上傳至 Developer Console。使用其他 Auto 功能資訊更新您的市集清單,然後視需要設定散佈選項。若您不熟悉如何在 Google Play 上準備推出應用程式,請參閱<a href="{@docRoot}distribute/googleplay/publish/preparing.html">推出檢查清單</a>。
+</p>
+
+<p>
+  您同意條款並儲存變更後,即可照常上傳並發行應用程式。在向 Android Auto 使用者提供應用程式之前,Google Play 會提交您的應用程式以根據 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>準則進行檢閱,並向您通知結果。若您的應用程式已核准,Google Play 會向 Android Auto 使用者提供該應用程式。如需有關如何追蹤您應用程式核准狀態的詳細資料,請參閱下一節。
+</p>
+
+<p>
+  請注意,檢閱會影響您的應用程式對 Google Play 市集內其他裝置 (例如在電話或平板電腦上) 的可用性。若您的既有應用程式包括對手機/平板電腦元件的更新,則 Android Auto 元件必須先通過檢閱,然後才能在 Google Play 市集內提供更新後的應用程式。
+</p>
+
+<p>
+  在 Developer Console 中同意 Android Auto 條款的步驟如下:
+</p>
+
+<ol>
+  <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>準則
+  </li>
+
+  <li>在 [所有應用程式]<strong></strong> 頁面中,按一下您希望發行的應用程式。
+  </li>
+
+  <li>在 [定價與散佈]<strong></strong> 下,向下捲動以尋找 <em>Android Auto</em> 及條款連結。
+  </li>
+
+  <li>按一下 [條款]<em></em> 連結。
+  </li>
+
+  <li>仔細閱讀條款,然後按一下 [同意]<em></em>。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-auto-opt-in.png">
+  <p class="caption">
+    <strong>同意 Auto 條款:</strong>同意 Developer Console 中的條款,以便將應用程式包括在 Android Auto 中。
+  </p>
+</div>
+
+<h3 id="track_review">5.追蹤檢閱</h3>
+
+<p>
+  將檢閱您的應用程式,以遵循上述防止駕駛員分心指導方針與技術及品質準則。此詳細檢閱程序所需的時間可能較您提交手機/平板電腦應用程式時習慣的時間更長。在核准您的應用程式之前,不會將您的應用程式或應用程式更新發行至 Google Play 市集。檢閱成功後,將發行您的應用程式,並在 Google Play 市集上予以提供。
+</p>
+
+<p>若未接受您的應用程式,您將收到<strong>傳送至您開發人員帳戶地址的通知電子郵件</strong>,內含需要修正的領域的摘要。若您已進行所需調整,可以將新版本的應用程式上傳至 Developer Console。
+</p>
+
+<p>
+  請注意,若提交的應用程式是既有應用程式的更新,且更新後的應用程式不符合檢閱準則,則會拒絕更新,既有應用程式在 Google Play 市集中仍保持已發行狀態。
+</p>
+
+<p>若要了解您應用程式的評估方式,請參閱 <a href="{@docRoot}distribute/essentials/quality/auto.html">Auto 應用程式品質</a>文件。 </p>
+
+
+  <h3>相關資源</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:autolanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div> 
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd
new file mode 100644
index 0000000..a0093bb
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/developer-console.jd
@@ -0,0 +1,449 @@
+page.title=Developer Console
+page.metaDescription=了解在 Google Play 上執行應用程式發行的基地,即 Developer Console。
+page.image=/distribute/images/developer-console.jpg
+Xnonavpage=true
+
+@jd:body
+
+<div id="qv-wrapper">           
+  <div id="qv">
+    <h2>發行功能</h2>
+    <ol>
+      <li><a href="#allapps">所有應用程式</a></li>
+      <li><a href="#account-details">您的帳戶詳細資料</a></li>
+      <li><a href="#merchant-account">連結您的商家帳戶</a></li>
+      <li><a href="#multiple-user-accounts">多個使用者帳戶</a></li>
+      <li><a href="#alpha-beta">Alpha 與 Beta 測試</a></li>
+      <li><a href="#staged-rollouts">分階段首次亮相</a></li>
+      <li><a href="#multiple-apk">多 APK 支援</a></li>
+      <li><a href="#selling-pricing-your-products">販售與定價</a></li>
+      <li><a href="#in-app-products">應用程式內產品</a></li>
+      <li><a href="#distribution-controls">散佈控制項</a></li>
+      <li><a href="#reviews-reports">使用者評論,當機報告</a></li>
+      <li><a href="#app-stats">應用程式統計資料</a></li>
+      <li><a href="#related-resources">相關資源</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>
+  <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 是供您發行作業與工具的基地。
+</p>
+<!-- <img src="{@docRoot}images/gp-dc-startscreen.jpg" style="width:480px;" /> -->
+<img src="{@docRoot}images/gp-devconsole-home.png" style="width:480px;">
+<p>
+  上傳應用程式,建置您的產品頁面,設定價格與散佈,然後即可發行。透過 Developer Console,您可以從網頁瀏覽器中管理在 Google Play 上發行的所有階段。
+</p>
+
+<p>
+  在<a href="{@docRoot}distribute/googleplay/start.html">註冊</a>並收到電子郵件傳送的確認後,您可以登入至 Google Play Developer Console。
+</p>
+
+<div class="headerLine">
+  <h2 id="allapps">
+    所有應用程式
+  </h2>
+
+
+</div>
+
+<p>
+  請從 [所有應用程式] 開始,該項目將提供應用程式的快速概觀,您可藉此跳至統計資料、評論及產品詳細資料,或上傳新的應用程式。
+</p>
+
+<div style="padding:1em 0em 0em 0em;">
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine" style="margin-top:-6px">
+  <h2 id="account-details">
+    您的帳戶詳細資料
+  </h2>
+
+
+</div>
+
+<p>
+  在帳戶詳細資料頁面上指定關於您或貴公司的基本開發人員簡介資訊。Google Play 與您的客戶可根據該資訊識別您的身分。您隨時可以後退,以編輯該資訊或變更設定。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-profile.png" class="frame">
+</div>
+
+<p>
+  您的開發人員簡介包含以下項目:
+</p>
+
+<ul>
+  <li>
+    <p>
+      開發人員名稱 (顯示在您的市集清單頁面上及 Google Play 中的其他位置)。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      連絡資訊 (僅供 Google 使用,您的客戶不會看到該資訊)。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      網站 URL (顯示在您的市集清單頁面上)。
+    </p>
+  </li>
+</ul>
+
+<p>
+  在帳戶詳細資料頁面上,您還可為行銷人員及其他團隊新增受限的存取權限、註冊商家帳戶,或設定 Google Play 授權的測試帳戶。
+</p>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    連結您的商家帳戶
+  </h2>
+
+
+</div>
+
+<p>
+  若您希望販售應用程式或應用程式內產品,請將您的 Google Wallet Merchant Account (Google 電子錢包商家帳戶) 連結至您的開發人員簡介。Google Play 會將連結的商家帳戶用於財務或稅務身分識別,以及每月的銷售支出。
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-user-accounts">
+    多個使用者帳戶
+  </h2>
+
+
+</div>
+
+<p>
+  為其他團隊成員設定使用者帳戶,以存取 Developer Console 的不同部分。
+</p>
+
+<div style="width:550px;">
+  <img src="{@docRoot}images/gp-dc-invite.png" class="frame">
+</div>
+
+<p>
+  註冊的第一個帳戶是<em>帳戶所有者</em>,具有對 Developer Console 所有部分的完整存取權限。所有者可以新增<em>使用者帳戶</em>,並管理 Developer Console 的存取權限。
+</p>
+
+<p>
+  例如,所有者可以向使用者授予針對發行與應用程式組態 (但不針對財務報告) 的存取權限。現在請了解如何<a href="https://support.google.com/googleplay/android-developer/answer/2528691">設定多個帳戶</a>。
+</p>
+
+<div class="headerLine">
+  <h2 id="store-listing-details">
+    市集清單詳細資料
+  </h2>
+
+
+</div>
+
+<p>
+  使用 Developer Console 可以設定<em>市集清單頁面</em>。Developer Console 是您的應用程式在 Google Play 中的基地,使用者在手機或網頁上可以透過該頁面了解並下載您的應用程式。
+</p>
+
+<p>
+  上傳自訂的品牌資產、螢幕擷取畫面及影片,以著重展示您應用程式的卓越之處。提供當地語系化的描述,並新增有關最新版本的註解,等等。您隨時可以更新市集清單。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-details.png" class="frame">
+</div>
+
+<div class="headerLine">
+  <h2 id="upload-instantly-publish">
+    上傳與即時發行
+  </h2>
+
+
+</div>
+
+<p>
+  在 Developer Console 中,您可以快速上傳並發行做好發行準備的 Android 應用程式套件檔案。在發行之前,應用程式只是<em>草稿</em>,在發行時,Google Play 會向使用者提供您的市集清單頁面與應用程式,您的應用程式將在數小時 (而非數週) 內顯示在市集清單中。
+</p>
+
+<p>
+  發行應用程式後,您能以任意頻率對其進行更新:隨時變更價格、組態與散佈選項,無需更新應用程式二進位檔案。
+</p>
+
+<p>
+  新增功能或解決程式碼問題時,您隨時可以發行更新後的二進位檔案。新版本幾乎立即可用,既有客戶會收到更新可供下載的通知。此外,使用者也可以接受您應用程式的自動更新,如此您一旦發行更新,使用者會立即收到並安裝這些更新。您隨時可以取消應用程式的發行。
+</p>
+
+<div class="headerLine">
+  <h2 id="alpha-beta">
+    Alpha 與 Beta 測試
+  </h2>
+
+
+</div>
+
+<p>
+  取得真實的使用者回饋通常極具價值,在推出應用程式之前更是如此。藉由 Google Play,可將應用程式的測試版輕鬆散佈至全球任何位置的 alpha 與 beta 測試群組。
+</p>
+
+<p>
+  在 Google Play Developer Console 的 [APK] <strong></strong>區段中,您可以找到 [Alpha 測試]<strong></strong> 與 [Beta 測試]<strong></strong> 標籤。您可在其中上傳多個版本的應用程式 APK 檔案,並將測試者的清單定義為 <a href="https://support.google.com/groups/answer/46601">Google 群組</a>或 <a href="https://support.google.com/plus/topic/2888488">Google+ 社群</a>。完成此作業後,您將收到您向測試者轉寄的 URL,測試者可透過該 URL 選擇進入測試程式。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-ab.png" class="frame">
+</div>
+
+<p>
+  測試者選擇進入後,會移至您應用程式的產品頁面。在測試者下載應用程式時,Google Play 會為其提供 alpha 或 beta 版本 (若合適)。若使用者無意中同時選擇進入兩個測試群組,Google Play 會始終為其提供 alpha 測試版本。
+</p>
+
+<p>
+  請注意,使用者無法在應用程式的 alpha 與 beta 版本上提供回饋與評論。若要收集回饋,您可以使用 <a href="https://support.google.com/groups/answer/46601">Google 群組</a>或 <a href="https://support.google.com/plus/topic/2888488">Google+ 社群</a>,或者設定電子郵件地址或您自己的網站。
+</p>
+
+<p>
+  您可以使用這些測試程式來<a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a>、為<a href="{@docRoot}distribute/users/expand-to-new-markets.html">首次亮相新市場</a>提供協助,並開始<a href="{@docRoot}distribute/users/build-community.html">建置您的社群</a>。此外,<a href="{@docRoot}distribute/tools/launch-checklist.html">推出檢查清單</a>與<a href="{@docRoot}distribute/tools/localization-checklist.html">當地語系化檢查清單</a>中提供了有關使用 beta 測試的更多資訊。
+</p>
+
+<div class="headerLine">
+  <h2 id="staged-rollouts">
+    分階段首次亮相
+  </h2>
+
+
+</div>
+
+<p>
+  您也可以使用 Google Play Developer Console 中 [APK] 區段內的 [生產] 標籤,分階段完成應用程式的首次亮相。您可在此定義能下載您應用程式的使用者的百分比。
+</p>
+
+<p>
+  分階段首次亮相有助於限制非預期錯誤或伺服器負載帶來的影響,您可藉此根據部分無偏見使用者的意見來評估使用者的回饋。在分階段首次亮相期間,使用者可以對您的應用程式進行評分及評論,因此若您猶豫不定,請在使用者的小範圍內進行應用程式的首次亮相。請確保關注並回應任何負面評論。
+</p>
+
+<p>
+  請注意,由於 Android 平台的<a href="{@docRoot}tools/publishing/versioning.html">應用程式版本控制需求</a>有所規定,因此不支援復原。若您需要復原,請考慮以新的版本編號推出先前的 APK。但是,此作法應該用作最後的解決辦法,因為使用者將無法存取新功能,您的舊應用程式可能無法與伺服器變更或資料格式正向相容,因此,請確保對更新執行 <a href="#alpha-beta">alpha 與 beta 測試</a>。
+</p>
+
+<div class="headerLine">
+  <h2 id="multiple-apk">
+    多 APK 支援
+  </h2>
+
+
+</div>
+
+<p>
+  在多數狀況下,您只需要單一應用程式套件 (APK) 即可,這通常是最輕鬆的應用程式管理及維護方式。但是,若您需要為不同裝置提供不同 APK,Google Play 會提供此目標的實現之道。
+</p>
+
+<p>
+  藉由<em>多 APK 支援</em>,您可以建立多個應用程式套件,這些套件使用相同的名稱,但其 OpenGL 材質壓縮格式、螢幕大小支援或支援的 Android 平台版本並不相同。您只需在單一產品清單下上傳所有 APK 即可,Google Play 會根據裝置的特性,選取最佳的 APK 提供給使用者。
+</p>
+
+<p>
+  此外,對於發行的每個 APK (包括多個 APK),您也可以使用 <em></em>[APK 擴充檔案] 選項,上傳最多兩個次要下載。每個擴充檔案最大為 2GB,可以包含任何類型的程式碼或資產。Google Play 會免費主控這些檔案,並在一般應用程式安裝過程中對這些檔案的下載進行處理。
+</p>
+
+<div class="headerLine">
+  <h2 id="selling-pricing-your-products">
+    對您的產品進行販售與定價
+  </h2>
+
+
+</div>
+
+<div class="figure-right">
+  <img src="{@docRoot}images/gp-buyer-currency.png" class="frame">
+</div>
+
+<p>
+  您可以使用工具設定應用程式及應用程式內產品的價格。您的應用程式可以免費下載,也可以付費下載 (需要先付費後下載)。
+</p>
+
+<ul>
+  <li>若以免費應用程式的形式發行您的應用程式,<strong>該應用程式在生命週期內必須始終免費</strong>。Google Play 中的所有使用者都可以下載免費應用程式。
+  </li>
+
+  <li>若以付費應用程式的形式發行您的應用程式,可以後來將其變更為免費。只有在 Google Play 中已註冊付費形式的使用者,才能購買並下載付費應用程式。
+  </li>
+</ul>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <p>
+      如需可散佈或販售您應用程式的國家/地區清單,請參閱<a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294&amp;topic=2365624&amp;ctx=topic">支援的應用程式散佈地點</a>。
+    </p>
+  </div>
+</div>
+
+<p>
+  此外,不論應用程式是免費還是付費,您都可以提供應用程式內產品與訂閱。請針對付費應用程式、應用程式內產品與訂閱分別設定價格。
+</p>
+
+<p>
+  使用者瀏覽您的應用程式產品頁面或開始購買時,Google Play 會為其顯示付費價格 (以使用者當地的貨幣表示)。
+</p>
+
+<p>
+  對於每項產品,您最初會設定預設價格 (以您自己的貨幣表示)。若您未設定其他價格,Google Play 會根據您應用程式的美元價格,每月一次自動設定當地價格。
+</p>
+
+<p>
+  但是,對於在每個國家/地區如何為您的產品定價,Google Play 會為您提供完備的控制項。開始時,您可以使用<strong>立即自動轉換價格</strong>功能,根據預設價格手動設定固定的當地價格。然後,您可以檢閱這些價格,並針對您希望的國家/地區設定新價格,每個國家/地區的價格彼此獨立,因此調整一個價格不會影響其他價格。對於多數國家/地區,您設定的價格即為使用者付費的最終價格 (含稅)。
+</p>
+
+<p>
+  如需有關對應用程式定價的詳細資訊,請參閱<a href="{@docRoot}distribute/users/expand-to-new-markets.html#localize-your-google-play-listing">開拓新市場</a>。
+</p>
+
+<div class="headerLine">
+  <h2 id="in-app-products">
+    應用程式內產品
+  </h2>
+
+
+</div>
+
+<p>
+  您可以使用 <a href="{@docRoot}google/play/billing/index.html">Google Play 應用程式內交易</a>作為應用程式的獲利方式,以販售應用程式內產品與訂閱。應用程式內產品需一次性付費購買,而訂閱可每月或每年逐次收費。
+</p>
+
+<p>
+  在特定的已發行 APK 或草稿 APK 的 [應用程式內產品]<strong></strong> 區段中,您可以:
+</p>
+
+<ul>
+  <li>為應用程式內產品及訂閱建立產品清單。
+  </li>
+
+  <li>設定價格。
+  </li>
+
+  <li>發行含應用程式的產品或撤回過時的產品。
+  </li>
+</ul>
+
+<p>
+  如需有關如何實作應用程式內交易的詳細資料,請參閱<a href="{@docRoot}google/play/billing/index.html">應用程式內交易</a>開發人員文件。您可以在<a href="{@docRoot}distribute/monetize/premium.html">加值</a>、<a href="{@docRoot}distribute/monetize/freemium.html">免費增值</a>及<a href="{@docRoot}distribute/monetize/subscriptions.html">訂閱</a>獲利模型中使用應用程式內產品
+</p>
+
+<div class="headerLine">
+  <h2 id="distribution-controls">
+    散佈控制項
+  </h2>
+
+
+</div>
+
+<p>
+  對您的應用程式散佈的目標國家/地區進行管理。對於某些國家/地區,您可以選擇希望針對的電訊商。此外,您還可以根據宣示說明檔案中宣告的散佈規則,查看可使用您應用程式的裝置清單。
+</p>
+
+<h3 id="geotargeting">
+  針對的國家/地區
+</h3>
+
+<p>
+  您可以使用 Google Play Developer Console 中的控制項輕鬆管理應用程式散佈的國家/地區,無需變更您的應用程式二進位檔案。您可以指定希望散佈至哪些國家/地區,甚至指定電訊商 (對於某些國家/地區)。
+</p>
+
+<p>
+  使用者造訪市集時,Google Play 會先確保其位於您針對的其中一個國家/地區內,然後再下載應用程式。您隨時可以變更針對的國家/地區及電訊商,只需在 Google Play Developer Console 中儲存變更即可。
+</p>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-supported-dev-requirements.png" class="frame">
+</div>
+
+<p>
+  若要協助向全球使用者行銷,您可以<a href="{@docRoot}distribute/tools/launch-checklist.html#start-localization">對市集清單</a> (包括應用程式詳細資料與描述、推廣圖形、螢幕擷取畫面等) 執行當地語系化。
+</p>
+
+<h3 id="captargeting">
+  針對的功能
+</h3>
+
+<p>
+  藉由 Google Play,您還可以根據應用程式依賴的裝置功能來控制散佈。應用程式可以在其宣示說明檔案中定義多種類型的相依性,例如硬體功能、OpenGL 材質壓縮格式、資源庫、Android 平台版本等。
+</p>
+
+<p>
+  在您上傳應用程式時,Google Play 會讀取相依性,並設定所需的散佈規則。如需有關宣告相依性的技術資訊,請閱讀 <a href="{@docRoot}google/play/filters.html">Google Play 上的篩選器</a>。
+</p>
+
+<p>
+  若要精確控制散佈,藉由 Google Play,您可以根據相依性 (若有),查看可使用您應用程式的所有裝置。在 Google Play Developer Console 中,您可以列出支援的裝置,甚至在需要時將特定裝置排除在外。
+</p>
+
+<div class="headerLine">
+  <h2 id="reviews-reports">
+    使用者評論與當機報告
+  </h2>
+
+
+</div>
+
+<div class="figure-right" style="width:500px;">
+  <img src="{@docRoot}images/gp-dc-reviews.png" class="frame">
+  <p class="img-caption">
+    透過使用者評論區段可以存取特定應用程式的使用者評論。您可以使用多種方式篩選評論,以便更輕鬆地找到問題並更有效地支援客戶。
+  </p>
+</div>
+
+<p>
+  透過 Google Play,使用者可以輕鬆地提交對您應用程式的評論,從而讓其他使用者受益。藉由這些評論,您可以直接了解客戶提供的可用性回饋、支援要求,以及重要功能問題的詳細資料。
+</p>
+
+<p>
+  使用當機報告進行除錯並改進應用程式。您可以查看從 Android 裝置自動提交的當機報告 (含堆疊追蹤與其他資料)。
+</p>
+
+<div class="headerLine">
+  <h2 id="app-stats">
+    應用程式統計資料
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:500px">
+  <img src="{@docRoot}images/gp-dc-stats.png">
+  <p class="img-caption">
+    <b>應用程式統計資料頁面</b>:為您顯示有關特定應用程式安裝效能的各種統計資料。
+  </p>
+</div>
+
+<p>
+  您可以取得有關應用程式安裝效能的詳細統計資料。
+</p>
+
+<p>
+  查看依獨特使用者及獨特裝置量測的安裝度量指標。檢視有效安裝次數、安裝總體次數、升級次數、每日安裝次數與解除安裝次數,以及有關評分的度量指標。
+</p>
+
+<p>
+  依度量指標 (包括 Android 平台版本、裝置、國家/地區、語言、應用程式版本及電訊商) 詳細查看安裝次數。檢視時間軸圖表上每個維度的安裝資料。
+</p>
+
+<p>
+  這些圖表會著重展示您應用程式安裝的峰值與長期趨勢,可協助您了解使用者的採用行為、將統計資料與推廣項目建立關聯,並查看應用程式改進與其他因素的效果。透過將特定點新增至時間軸,可以聚焦於維度內的資料。
+</p>
+
+<p style="clear:both">
+</p>
+
+<div class="dynamic-grid">
+<div class="headerLine">
+<h2 id="related-resources">相關資源</h2>
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/developerconsole"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+  </div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd
new file mode 100644
index 0000000..b362ae9
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/about.jd
@@ -0,0 +1,39 @@
+page.title=Designed for Families
+page.metaDescription=Designed for Families 可為您提供協助,讓家庭能更輕鬆地探尋您的應用程式與遊戲。
+page.image=/distribute/images/about-dff-sm.jpg
+meta.tags="families, googleplay, distribution"
+page.tags="families"
+
+@jd:body
+
+<p>
+  在數週之後,Google Play 將帶來面向家庭的新體驗,該體驗會提供新的方式,使用者可藉此為其家庭瀏覽、搜尋及探尋高品質應用程式與遊戲。
+</p>
+
+<p>
+  為了支援更便利的家庭友好市集,新的 Designed for Families 計劃邀請開發人員選擇加入面向家庭的應用程式與遊戲。符合<a href="https://support.google.com/googleplay/android-developer/answer/6184502">計劃需求</a>的應用程式將顯示在新的家庭體驗中,由此父母可以更輕鬆地尋找適合、可信的高品質應用程式與遊戲。
+</p>
+
+<img src="{@docRoot}distribute/images/about-dff-sm.jpg">
+
+<p>
+  請使用目前在 Developer Console 中管理應用程式所用的工具與程序,立即選擇加入您的應用程式與遊戲。除了將既有的類別、排行及評論保留在 Google Play 市集的其他位置,計劃中的應用程式還會受益於更高的可探尋性。
+</p>
+
+<h2 id="elibibility">資格</h2>
+
+<p>
+  在 Google Play 上,父母與家人 (符合應用程式的年齡段需求) 可以更輕鬆地探尋家庭友好體驗中的應用程式。Designed for Families 計劃的設計目的,是納入為兒童製作的應用程式以及可讓全家人樂在其中的應用程式。若要吸引這部分受眾,您的應用程式需要符合特定的指導方針及政策,在應用程式內容檢閱期間會對符合狀況進行評估。
+</p>
+
+<p>
+  請確保熟悉您的應用程式必須遵循的政策。這些政策包括<a href="http://play.google.com/about/developer-content-policy.html">內容政策</a>、<a href="http://play.google.com/about/developer-distribution-agreement.html">開發人員散佈合約</a>,以及<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA 增補合約</a>。
+</p>
+
+<p>
+  此外,您的應用程式還必須符合 Google Play 開發人員說明中心內列出的 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 計劃需求</a>。
+</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/start.html" class="next-class-link">後續內容:選擇</a>
+</div> 
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd
new file mode 100644
index 0000000..6964789
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/faq.jd
@@ -0,0 +1,233 @@
+page.title=常見問題
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=有關 Designed for Families 的問題與回答
+
+@jd:body
+
+<style>
+  dt {
+    font-weight:bold;
+  }
+  </style>
+  
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>本文件內容</h2>
+<ol>
+  <li><a href="#review">應用程式檢閱與選擇加入</a></li>
+  <li><a href="#monetization">獲利</a></li>
+  <li><a href="#other">其他問題</a></li>
+</ol>
+</div>
+
+<p>
+  以下各節提供有關 Designed for Families 的更多資訊,並回答您可能提出的有關 Designed for Families 的常見問題。
+</p>
+
+
+<h2 id="review">應用程式檢閱與選擇加入</h2>
+
+<dl>
+<dt>我如何選擇加入應用程式?</dt>
+
+<dl>
+  <dd>
+    在 Google Play Developer Console 中,您可以在應用程式的 [定價與散佈] 標籤上選擇加入 Designed for Families。<a href="{@docRoot}distribute/googleplay/families/start.html">逐步解說</a>如下所示。
+  </dd>
+
+  <dt>
+    我在何處展示應用程式的互動功能?您為何收集該資訊?
+  </dt>
+
+  <dd>
+    互動功能展示包含在內容評分問卷中。在 Designed for Families 計劃選擇加入流程中,您有機會對展示進行檢閱。我們收集此資訊,以便使用者評估您的應用程式時可以做出明智的選擇。
+  </dd>
+
+  <dt>
+    什麼是 COPPA?
+  </dt>
+
+  <dd>
+    COPPA 是美國聯邦貿易委員會 (FTC) 的兒童線上隱私權保護規章。<a href="http://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions">FTC 的 COPPA 相關常見問題</a>中提供了更多項細資料。請注意,對於如何遵守 COPPA 或其他兒童法規,Google Play 無法為開發人員提供法律指引。
+  </dd>
+
+  <dt>
+    我是否需要提供最新的隱私權原則,在何處提供?
+  </dt>
+
+  <dd>
+    是,您需要在應用程式的市集清單上提供持續隱私權原則的連結,並在 Developer Console 內確認您遵守當地的隱私權法規。若要新增或檢閱您的隱私權原則,請在 Developer Console 中選擇您的應用程式,然後捲至<strong></strong> [市集清單] 區段的底部。
+  </dd>
+
+  <dt>
+    我可以選取多少個年齡段?
+  </dt>
+
+  <dd>
+    您最多可以選取兩個相鄰的年齡段。年齡段包括:不超過 5 歲、6-8 歲,以及 9-12 歲。但是,若您的應用程式針對的受眾包含兒童與年齡較兒童更大的受眾,您必須選取 [一般受眾] <em></em>類別。
+  </dd>
+
+  <dt>
+    在 Designed for Families 計劃中,我可以選取多少個內容類別?
+  </dt>
+
+  <dd>
+    在 Designed for Families 計劃中,您可以選取一個類別,對於一般 Google Play 市集,您可以選取另一個類別。
+  </dd>
+
+  <dt>
+    什麼是 Designed for Families 類別?
+  </dt>
+
+<ul>
+<li><strong>動作與冒險</strong>:這些是以動作為導向的應用程式/遊戲,包括諸如賽車遊戲、童話冒險等所有內容。
+  </li>
+
+  <li style="list-style: none"><strong>益智遊戲</strong>:此類別包含讓使用者思考的遊戲,包括拼圖、比對遊戲以及類似遊戲。
+  </li>
+
+  <li><strong>創意</strong>:這些是激發創意的應用程式/遊戲。此類別中應用程式/遊戲的範例類型包括繪畫、噴塗以及您可以進行創作的其他遊戲。
+  </li>
+
+  <li><strong>教育</strong>:這些是具有教育價值的應用程式/遊戲,包括數學、科學、學習字母表、學習計數,以及諸如地理與歷史等更多類型的教育內容。
+  </li>
+
+  <li><strong>音樂與影片</strong>:這些是包含音樂元素或影片元素的應用程式/遊戲,包括從彈奏鋼琴到觀看影片等所有內容。
+  </li>
+
+  <li><strong>角色扮演</strong>:這些是使用者可以扮演某種角色 (例如廚師或醫生) 的應用程式/遊戲。
+  </li>
+</ul>
+
+<dl>
+  <dt>
+    若我選擇加入 Designed for Families 計劃,發行應用程式是否需要更長時間?
+  </dt>
+
+  <dd>
+    在您選擇加入 Designed for Families 後,Google Play 會檢閱您的應用程式,以確認其是否適合家庭使用。若您的應用程式符合所有計劃需求,預計發行時間不會長於一般發行時間;但是,若在 Designed for Families 檢閱期間拒絕應用程式,則該應用程式的發行可能會出現延遲。 
+  </dd>
+
+  <dt>
+    若我的應用程式遭 Designed for Families 計劃拒絕,會發生什麼狀況?
+  </dt>
+
+  <dd>
+    若您的應用程式遭 Designed for Families 計劃拒絕,我們會在 Developer Console 以及詳細的電子郵件中告訴您原因。您有機會修正問題並將應用程式重新提交至計劃,或變更選擇加入回應。請注意,若您的既有應用程式在 Google Play 上處於有效狀態,則只會拒絕您的應用程式更新 (您的應用程式在 Play 市集內仍保持有效狀態)。若您已將不符合需求的新應用程式提交至 Designed for Families 計劃,則提交的整個應用程式都會遭拒,也不會在 Play 上發行該應用程式。此後您可以解決確認的問題,並向 Designed for Families 計劃重新提交應用程式,也可以選擇退出計劃。
+  </dd>
+
+  <dt>
+    若我的應用程式在發行後發現未遵循 Designed for Families 計劃的需求,會發生什麼狀況?
+  </dt>
+
+  <dd>
+    在 Google Play 市集 (不僅是 Designed for Families 計劃) 中,將移除或擱置您的應用程式。對於移除的應用程式,可以採用與遭拒應用程式相同的補救措施。對於擱置的應用程式,可以使用開發人員求助程序進行求助。
+  </dd>
+
+  <dt>
+    若我選擇加入 Designed for Families 計劃,稍後是否能選擇退出?
+  </dt>
+
+  <dd>
+    是,您隨時可以選擇退出該計劃。請注意,若您選擇退出,將失去在新家庭友好體驗中的位置,且無法再享有計劃帶來的其他受益。
+  </dd>
+
+  <dt>
+    若我在該計劃接受應用程式後對應用程式進行更新,會發生什麼狀況?
+  </dt>
+
+  <dd>
+    若應用程式已包含在 Designed for Families 計劃中,需要自始至終遵循資格需求。若您需要編輯與應用程式關聯的 Designed for Families 中繼資料,請移至 Google Play Developer Console 的 [定價與散佈] 區段以編輯該資訊。若更新您的應用程式導致目標受眾發生變更,建議您針對已安裝應用程式的使用者發出警示。
+  </dd>
+
+  <dt>
+    若應用程式及遊戲使用 Google sign-in 或 Google Play Game 服務,是否能選擇加入 Designed for Families 計劃?
+  </dt>
+
+  <dd>
+    參加 Designed for Families 計劃的應用程式完全面向兒童,即針對以下年齡段:不超過 5 歲,6 至 8 歲或 9 至 12 歲的兒童<strong>不可</strong>使用 Google+ Sign-in 或 Google Play Game 服務作為其應用程式的登入方式。 <p>
+      若參加 Designed for Families 的應用程式針對兒童與年齡較兒童更大的受眾,可將 Google+ Sign-in 或 Google Play Game 服務用作<strong>可選</strong>功能。兒童使用者必須能完整存取應用程式或遊戲,無需登入 Google+ 或 Google Play Game 服務。
+    </p>
+  </dd>
+
+  <dt>
+    我的應用程式已選擇加入 Google Play for Education,已與 Google sign-in 整合,因此學生可以使用其學校帳戶登入。我是否需要變更 Google sign-in 在應用程式中的運作方式?
+   </dt>
+
+  <dd>
+    參加 Google Play for Education 的應用程式可將 Google sign-in 用於學生帳戶,只要其不要求攔截應用程式的所有使用者即可。
+  </dd>
+</dl>
+
+<h2 id="monetization">
+  Designed for Families 計劃獲利
+</h2>
+
+<dl>
+  <dt>
+    您是否能提供有關 Designed for Families 廣告政策的更多詳細資料?
+  </dt>
+
+  <dd>
+    請閱讀 <a href="https://support.google.com/googleplay/android-developer/answer/6184502#ads">Designed for Families 的廣告政策</a>。
+  </dd>
+
+  <dt>
+    我的應用程式能否提供中介螢幕廣告?
+  </dt>
+
+  <dd>
+    中介螢幕廣告可能適用於某些應用程式。但是,在提供廣告之前,使用者必須能導覽至主要行為。
+  </dd>
+
+  <dt>
+    我如何知道我的廣告網是否遵循 Designed for Families 的廣告政策?
+  </dt>
+
+  <dd>
+    請連絡您的廣告網,詢問其內容政策與廣告政策。若您使用 AdMob,請參閱 <a href="https://support.google.com/admob/answer/3248194">AdMob 說明中心</a>,以了解有關如何為您的應用程式或特定廣告單元建立標籤 (以便進行以兒童為導向的處理) 的詳細資料。確保整體使用者體驗 (含應用程式內廣告) 符合 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 計劃需求</a>是開發人員的責任。
+  </dd>
+
+  <dt>
+    我的應用程式內能否具有應用程式內購買?
+  </dt>
+
+  <dd>
+    在參與 Designed for Families 計劃的應用程式內,除了遵循 <a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html">Designed for Families DDA</a> 與其他適用法規需求外,關於應用程式內購買 (IAP) 沒有任何特定限制,但是 Play 會保留因商業策略過於激進而拒絕應用程式的權利。在參加 Designed for Families 計劃的所有應用程式 (主要針對兒童受眾) 中,Google Play 會強制執行 IAP 密碼保護,以確保父母 (而非兒童) 核准購買。請注意,針對一般受眾的應用程式不會採用此處理方式。
+  </dd>
+</dl>
+
+<h2 id="other">
+  其他問題
+</h2>
+
+<dl>
+  <dt>
+    對於參加 Designed for Families 的應用程式,預期的目標受眾是誰?
+  </dt>
+
+  <dd>
+    我們的目標是在 Google Play 市集內為父母與監護人提供卓越的體驗,以探尋由受信任品牌及開發人員提供且專為兒童與家庭設計的令人愉快的應用程式。
+  </dd>
+
+  <dt>
+    是否僅為特定國家/地區的開發人員提供 Designed for Families 計劃?
+  </dt>
+
+  <dd>
+    Designed for Families 是全球計劃。
+  </dd>
+
+  <dt>
+    目前家庭遊戲類別中所發行的應用程式會發生什麼狀況?
+  </dt>
+
+  <dd>
+    目前的家庭遊戲類別將在 2015 年 5 月過時。目前位於家庭遊戲類別中的應用程式必須選取 Play 市集內的其他類別。若應用程式未選取其他類別,會為該應用程式指定休閒遊戲類別。
+  </dd>
+</dl>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="https://docs.google.com/forms/d/1EtvUWqlkxS6RxHJjeI-3-7uzdbIZx6n9Cocy2D369B8/viewform" class="next-class-link">後續內容:隨時了解</a>
+</div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd
new file mode 100644
index 0000000..bf7a725
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/families/start.jd
@@ -0,0 +1,70 @@
+page.title=選擇加入 Designed for Families
+meta.tags="families", "guidelines", "quality"
+page.tags="families", "addendum"
+page.metaDescription=只需幾個簡易步驟即可加入 Designed for Families。
+
+@jd:body
+
+<p>
+  若您要建置專為兒童與家庭設計的應用程式,必須<em>先</em>執行以下幾項作業,然後再準備選擇加入 Designed for Families 計劃:
+</p>
+
+<ul>
+  <li>完成針對您應用程式的內容評分問卷,ESRB 評級應為 Everyone 或 Everyone 10+
+  </li>
+
+  <li>將隱私權原則連結新增至您應用程式的 [市集清單]<strong></strong> 頁面。
+  </li>
+
+  <li>確保您的應用程式符合所有 <a href="https://support.google.com/googleplay/android-developer/answer/6184502">Designed for Families 計劃需求</a>。
+  </li>
+</ul>
+
+<p>
+  現在您的應用程式已可供發行,您可以從<a href="https://play.google.com/apps/publish/"> Developer Console </a>直接選擇加入 Designed for Families。選擇加入意味著除了您在 Google Play 市集內已選取的類別外,您還希望您的應用程式可以在 Google Play 上用於新的家庭友好體驗。
+</p>
+
+<p>
+  選擇加入也會確認您的應用程式遵循 <a href="http://play.google.com/about/developer-content-policy.html">Google Play 開發人員計劃政策</a>以及<a href="http://play.google.com/about/developer-distribution-agreement.html">開發人員散佈合約</a> (包括<a href="https://play.google.com/intl/ALL_us/about/families/developer-distribution-agreement-addendum.html"> Designed for Families DDA 增補合約</a>)。若您不熟悉這些政策文件或增補合約,請確保在選擇加入之前仔細閱讀。
+</p>
+
+<p>
+  準備就緒後,針對特定應用程式,根據以下所述選擇加入 Designed for Families:
+</p>
+
+<ol>
+<li>在 Developer Console 的 [所有應用程式]<strong></strong> 頁面中,按一下您希望選擇加入的應用程式。在 [定價與散佈] 下,向下捲動以尋找 <strong>Designed for Families</strong> 及選擇加入核取方塊。<img src="/images/gp-dff-optin.png" style="border:2px solid #ddd;margin:1em 0;">
+  </li>
+
+  <li>開始選擇加入流程,確認您的應用程式符合資格需求。</li>
+  <li>若您的應用程式包含廣告,請確認其符合廣告政策。<img src="/images/gp-dff-appinfo.png" style="border:2px solid #ddd;margin:1em 0;"></li>
+  <li>從以下項目中選擇針對的年齡段:不超過 5 歲、6 至 8 歲、9 至 12 歲,或一般受眾 (若應用程式針對兒童與年齡較兒童更大的受眾)。若您的應用程式針對多個年齡段,您最多可以選擇兩個相鄰的年齡段。評級為 ESRB 10+ 的應用程式只能選擇針對 9 至 12 歲的年齡段或一般受眾。
+  </li>
+
+  <li>針對 Google Play 上面向家庭的新體驗,為您的應用程式選擇類別。此外,您的應用程式也將位於 Google Play 中的應用程式既有類別內。</li>
+  <li>檢閱並同意連結的文件,然後按一下 [選擇加入]<strong></strong>。最後,按一下 [定價與散佈] 頁面上的 [提交更新]<strong></strong> 以發行或更新您的應用程式。
+  </li>
+</ol>
+
+<p>
+  選擇加入您的應用程式後,Designed for Families 計劃會先對應用程式進行仔細檢閱,然後才會接受該應用程式。
+</p>
+
+<p class="note">
+  <strong>注意:</strong>Designed for Families 計劃中已發行的應用程式也可供 Google Play 上的所有使用者使用。 
+</p>
+
+<p>
+  若您選擇加入首次發行的應用程式,但該應用程式不符合 Designed for Families 計劃需求,則在 Google Play 上不會提供該應用程式,直到<strong></strong>您更新應用程式以符合計劃需求,<strong>或</strong>取消核取選擇加入方塊並通過 Google Play 的標準檢閱程序為止。
+</p>
+
+<p>
+  若您選擇加入 Google Play 上已發行的應用程式,但該應用程式不符合計劃需求,則該應用程式仍可供所有使用者使用,但不會新增至新的家庭體驗中,直到您更新應用程式以符合計劃需求為止。
+</p>
+
+<p>
+  若您發行應用程式的更新,並選擇該應用程式加入 Designed for Families,則應用程式更新需要先通過 Designed for Families 檢閱,然後才能供 Google Play 上的所有使用者使用。</p>
+
+<div class="paging-links" style="padding-top:.75em;">
+  <a href="{@docRoot}distribute/googleplay/families/faq.html" class="next-class-link">後續內容:常見問題</a>
+</div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd
new file mode 100644
index 0000000..0165279
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/guide.jd
@@ -0,0 +1,57 @@
+page.title=在 Google Play 上尋找成功
+page.metaDescription=協助您在 Google Play 上的應用程式或遊戲業務中尋找成功的指南。
+meta.tags="distribute", "bestpractices"
+page.tags="google play", "business", "monetize", "engagement"
+page.image=distribute/images/play_dev_guide.png
+
+@jd:body
+
+<p>
+  我們已建立可下載的指南,可協助您在 Google Play 上的應用程式或遊戲業務中尋找成功。該指南提供了功能、秘訣與最佳做法,以協助您建置有效的策略。
+</p>
+
+<p>
+  該指南分為以下各節:
+</p>
+<ul>
+  <li>
+    <strong>在 Google Play 上發行</strong> &mdash; 使用 Google Play Developer Console 將您的應用程式散佈至全球數量超過十億的 Android 使用者。
+  </li>
+
+  <li>
+    <strong>品質</strong> &mdash; 建置卓越應用程式的基本原則,以及對 Google Play 指導方針與政策的深刻見解。
+  </li>
+
+  <li>
+    <strong>可探尋性與範圍</strong> &mdash; 最大限度提高您應用程式的可探尋性,儘量爭取可能最廣泛的受眾。
+  </li>
+
+  <li>
+    <strong>吸引與挽留</strong> &mdash; 將潛在客戶轉化為活躍的使用者,並提高挽留使用者的能力。
+  </li>
+
+  <li>
+    <strong>獲利</strong> &mdash; 用於產生持續不斷、逐級攀升的營收串流的獲利策略。
+  </li>
+
+  <li>
+    <strong>使用 Google Analytics 進行量測</strong> &mdash; 了解使用者並改善使用者的應用程式體驗、轉變與行銷。
+  </li>
+
+  <li>
+    <strong>邁向全球</strong> &mdash; 在全球各地的市場推出您的應用程式。
+  </li>
+</ul>
+
+<p>
+  請按一下以下影像以下載該指南,或<a href="http://goo.gl/DFjbrS">在 Google Play 上取得該指南</a>。
+</p>
+
+<p>
+  在未來數月中,我們將發行該指南的多種語言版本。請定期回來查看此網站,因為我們會發佈有關新功能與最佳做法的資訊,以協助您實現應用程式的散佈與獲利。
+</p>
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:play_dev_guide"
+    data-cardSizes="9x6"
+    data-maxResults="1">
+  </div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd
new file mode 100644
index 0000000..bf7b702
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/auto.jd
@@ -0,0 +1,434 @@
+page.title=Auto 應用程式品質
+page.metaDescription=Auto 應用程式與車輛的輸入控制項及顯示進行整合,可最大限度減少駕駛員分心的狀況,從而提供絕佳的體驗。
+page.image=/distribute/images/gp-auto-quality.png
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質準則</h2>
+  <ol>
+    <li><a href="#core">核心應用程式品質</a></li>
+    <li><a href="#ux">視覺設計與互動</a></li>
+    <li><a href="#fn">功能</a></li>
+    <li><a href="#faq">常見問題</a></li>
+  </ol>
+
+  <h2>您也應閱讀</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">適用於音訊應用程式的 Android Auto UX 指導方針</a></li>
+    <li><a href="{@docRoot}shareables/auto/AndroidAuto-messaging-apps.pdf">適用於傳訊應用程式的 Android Auto UX 指導方針</a></li>
+  </ol>
+</div>
+</div>
+
+
+  <img src="{@docRoot}distribute/images/gp-auto-quality.png" style="width:480px;">
+
+
+<p>在您的應用程式中設計對 Android Auto 的支援時,避免駕駛員分心是高於一切的準則。若應用程式使用 Auto 使用者介面,應透過諸如語音命令或非常簡易的視覺設計等最佳做法,最大限度減少讓駕駛員分心的狀況。
+</p>
+
+<p>
+  絕佳的 Auto 體驗應具備可預測的特性。若應用程式支援 Android Auto,應該只有在資訊具有重大意義時,才向駕駛員顯示適時資訊,並針對常見任務使用可預測的簡易樣式。
+</p>
+
+<p class="caution">
+  <strong>重要說明:</strong>若應用程式在連接至 Android Auto 螢幕的裝置上執行,則本頁面中列出的準則適用於您應用程式的使用者介面及行為。應用程式必須符合這些準則,才能具備成為 Google Play 上 Android Auto 應用程式的資格。
+</p>
+
+
+<div class="headerLine">
+  <h2 id="core">
+  核心應用程式品質
+  </h2>
+
+<p>
+ 除了以下列出的 Auto 特定準則外,Auto 應用程式還應符合適用於 Android 平台的所有相關核心應用程式品質準則 (如<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a>準則中所詳述)。請根據這些準則對您的應用程式進行測試,以確保應用程式符合 Android 的導覽與設計標準。然後,根據所有 Auto 特定準則對應用程式進行測試,請謹記,若您的應用程式在連接至 Android Auto 的裝置上執行,必須符合本頁面列出的需求。 <div class="headerLine">
+  <h2 id="ux">
+  視覺設計與使用者互動
+  </h2>
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式遵循關鍵的設計與互動樣式,以確保在 Android Auto 上提供一致、直觀且充滿樂趣的使用者體驗。許多元素 (例如抽出式導覽面板、卡背景、字型與圖示顏色) 由系統設定並呈現。您自己的應用程式特定設計元素必須符合以下準則。
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    類型
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="safety">
+    駕駛員注意力
+  </td>
+
+  <td id="AU-MV">
+    AU-MV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式不會在 Auto 螢幕上顯示動畫元素 (例如以動畫顯示的圖形、遊戲、影片或進度列)。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VA">
+    AU-VA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式不會在 Auto 螢幕上顯示任何形式的視覺廣告或文字廣告。只能接受音訊廣告。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-IM">
+    AU-IM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式元素不會在 Auto 螢幕上顯示任何影像。例外狀況包括:應用程式可能會針對消費螢幕 (例如專輯封面) 背景中的上下文內容,顯示單一靜態影像 ,應用程式可能會在內容抽出式導覽面板中顯示圖示。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-DS">
+    AU-DS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式不會包括導致駕駛員分心的任何功能。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-VI">
+    AU-VI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式在 Android Auto 中處於使用中時,永遠不會在手機螢幕上顯示任何形式的視覺資訊 (通知、快顯通知、影片、影像、廣告等)。
+    </p>
+  </td>
+</tr>
+
+
+
+<tr>
+  <td rowspan="3" id="layout">
+    版面配置
+  </td>
+
+  <td id="AU-SC">
+    AU-SC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式不會顯示自動捲動的文字。
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td id="AU-FT">
+    AU-FT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式會使用預設 Roboto 字型 (以核准的兩種大小) 顯示所有字串。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-ST">
+    AU-ST
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式不會顯示長於 120 個字元的任何個別字串。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="contrast">
+    視覺對比
+  </td>
+
+  <td id="AU-DM">
+    AU-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式支援白晝模式 (在明亮背景中顯示深色的文字與控制項)。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NM">
+    AU-NM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式支援黑夜模式 (在深色背景中顯示明亮的文字與控制項)。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-WI">
+    AU-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式提供白色的圖示組,系統會將其設為彩色以提供自動對比補償。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-OC">
+    AU-OC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式提供顏色,系統可以最佳化顏色以便於在車內閱讀。(<a href="{@docRoot}shareables/auto/AndroidAuto-custom-colors.pdf">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="interaction">
+    互動
+  </td>
+
+  <td id="AU-VC">
+    AU-VC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式必須支援語音命令。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-AB">
+    AU-AB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式特定按鈕回應使用者動作的延遲不超過兩秒。
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式經過正確設定並提供預期的功能行為。
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    類型
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="5" id="general">
+   一般
+  </td>
+
+  <td id="AU-LT">
+    AU-LT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式的載入時間不超過 10 秒。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-FP">
+    AU-FP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     Auto 應用程式功能按預期運作,或按應用程式的 Google Play 市集清單中所述內容運作。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-RL">
+    AU-RL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式從主螢幕重新啟動後,可將狀態還原為盡可能接近先前的狀態。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SS">
+    AU-SS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式中完成任何任務都不超過六步。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-GO">
+    AU-GO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式的任何非功能按鈕或已停用按鈕都必須灰顯。
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="media">
+    媒體
+  </td>
+
+
+  <td id="AU-PA">
+    AU-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式最多具有四個主要動作與一個可選動作溢出開關 (若不使用動作溢出,可以有五個主要動作)。(<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-SA">
+    AU-SA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     應用程式最多具有四個可選次要動作與一個動作溢出開關。(<a href="{@docRoot}shareables/auto/AndroidAuto-audio-apps.pdf">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+
+<tr>
+  <td rowspan="2" id="notifications">
+    通知
+  </td>
+
+  <td id="AU-NA">
+    AU-NA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式不會透過通知顯示廣告。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="AU-NT">
+    AU-NT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+     只有在通知與駕駛員的需求相關時,應用程式才顯示通知。
+   </p>
+   <p>
+    範例:<br /> 良好:通知使用者已送達新訊息。<br /> 不良:向使用者通知有關新專輯發行事宜。
+    </p>
+  </td>
+</tr>
+
+</table>
+
+<!--
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/autoqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+-->
+
+<div class="headerLine">
+  <h2 id="faq">
+  常見問題
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>提交應用程式後,如何才能知道我的應用程式不符合 Android Auto 的所有需求?</strong>
+</p>
+<p>若您計劃開發適用於 Auto 的應用程式,建議您立即開始啟用並測試您的應用程式。但是,此時無法發行 Auto 啟用的應用程式。請加入 <a href="http://g.co/AndroidAutoDev" class="external-link">Auto 開發人員 Google+ 社群</a>,以及時了解您何時能提交 Auto 啟用的應用程式。</p>
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>我的應用程式針對的不僅是 Android Auto。若我的應用程式不符合 Auto 需求,我的新應用程式或更新後的應用程式是否仍顯示在 Google Play 中針對手機與平板電腦的位置?</strong>
+</p>
+<p>
+  否。Google 開始核准程序時,會對您的 Auto 應用程式執行駕駛員安全檢閱,在核准該應用程式之前,不可散佈該應用程式。由於該 APK 也是適用於手機與平板電腦的 APK,因此在 Auto 核准程序完成之前,將無法使用適用於這些裝置的 Play 市集更新。
+</p>
+
+<p class="caution">
+  <strong>重要說明:</strong>由於存在這一限制,因此您不應將生產 APK 用於 Auto 支援原型設計。
+</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..feabc20
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/core.jd
@@ -0,0 +1,1014 @@
+page.title=核心應用程式品質
+page.metaDescription=應用程式品質會對應用程式的安裝、使用者評分與評論、吸引力及使用者挽留能力產生影響,因此直接影響到應用程式長期的成敗。
+page.image=/distribute/images/core-quality-guidelines.jpg
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質準則</h2>
+  <ol>
+    <li><a href="#ux">設計與互動</a></li>
+        <li><a href="#fn">功能</a></li>
+        <li><a href="#ps">效能與穩定性</a></li>
+        <li><a href="#listing">Google Play</a></li>
+
+  </ol>
+  
+  <h2>測試</h2>
+  <ol>
+    <li><a href="#test-environment">設定測試環境</a></li>
+        <li><a href="#tests">測試程序</a></li>
+        </ol>
+
+  <h2>您也應閱讀</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/tablets.html">平板電腦應用程式品質</a></li>
+        <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li>
+  </ol>
+  
+
+</div>
+</div>
+
+<div class="top-right-float">
+  <img src="{@docRoot}images/gp-core-quality.png" style="margin-left: 20px;">
+</div>
+
+<p>
+  Android 使用者希望取得高品質的應用程式。應用程式品質會對應用程式的安裝、使用者評分與評論、吸引力及使用者挽留能力產生影響,因此直接影響到應用程式長期的成敗。
+</p>
+
+<p>
+  本文件將協助您透過一組精簡的核心應用程式品質準則與關聯的測試,對您應用程式品質的基本層面進行評估。所有 Android 應用程式都應符合這些準則。
+</p>
+
+<p>
+  在發行應用程式之前,請根據這些準則對其進行測試,以確保這些應用程式在許多裝置上能良好運作、符合 Android 的導覽與設計標準,並為 Google Play 市集內的推廣商機做好準備。您的測試並不限於本文所述內容,本文件的目的在於指定所有應用程式都應呈現的基本品質特性,以便您可以將其納入您的測試規劃中。
+</p>
+
+<p>
+  若您要建立適用於平板電腦及/或 Google Play for Education 的應用程式,應考慮其他品質準則,<a href="{@docRoot}distribute/essentials/quality/tablets.html">平板電腦應用程式品質</a>指導方針與<a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">教育指導方針</a>中已定義這些準則。
+</p>
+
+<div class="headerLine">
+  <h2 id="ux">
+  視覺設計與使用者互動
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式提供標準的 Android 視覺設計與互動樣式 (若適用),從而提供一致且直觀的使用者體驗。
+</p>
+
+<table>
+  <tr>
+    <th style="width:2px;">
+      領域
+    </th>
+    <th style="width:54px;">
+      ID
+    </th>
+    
+
+    <th>
+      描述
+    </th>
+    <th style="width:54px;">
+      測試
+    </th>
+  </tr>
+  <tr id="UX-B1">
+  <td>標準設計</td>
+  <td>
+    UX-B1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式遵循 <a href="{@docRoot}design/index.html">Android 設計</a>指導方針,並使用通用的 <a href="{@docRoot}design/patterns/index.html">UI 樣式與圖示</a>:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>應用程式不會重新定義系統圖示 (例如 [後退] 按鈕) 的預期功能。
+    </li>
+
+    <li>若應用程式觸發標準 UI 行為,不會使用完全不同的圖示取代系統圖示。
+    </li>
+
+    <li>若應用程式提供標準系統圖示的自訂版本,則該圖示會與系統圖示非常相似,並會觸發標準系統行為。
+    </li>
+
+    <li>應用程式不會重新定義或誤用 Android UI 樣式,從而避免導致圖示或行為對使用者產生誤導或混淆。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td rowspan="3">
+    導覽
+  </td>
+  <td id="UX-N1">
+    UX-N1
+  </td>
+  <td>
+    <p>
+    應用程式支援標準系統<a href="{@docRoot}design/patterns/navigation.html">後退按鈕導覽</a>,不會使用螢幕上的任何自訂「後退按鈕」提示。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr>
+  <td id="UX-N2">
+    UX-N2
+  </td>
+  <td>
+    <p>
+    使用 [後退] 按鈕可以關閉所有對話方塊。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-3</a>
+  </td>
+  </tr>
+
+  <tr id="UX-N3">
+  <td>
+    UX-N3
+  </td>
+  <td>
+    任何時候按下 [首頁] 按鈕都會導覽至裝置的主螢幕。
+  </td>
+  <td>
+    <a href="#core">CR-1</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S1">
+  <td rowspan="2">
+    通知
+  </td>
+  <td>
+    UX-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    通知遵循 Android 設計<a href="{@docRoot}design/patterns/notifications.html">指導方針</a>。尤其在以下方面更是如此:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>會將多個通知堆疊到單一通知物件中 (若可能)。
+    </li>
+
+    <li>只有在通知與執行中事件 (例如播放音樂或手機通話) 相關時,通知才持續存在。
+    </li>
+
+    <li>除非使用者選擇,否則通知不包含與應用程式核心功能不相關的廣告或內容。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="UX-S2">
+  <td>
+    UX-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式只能使用通知實現以下目標:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>指示與使用者個人相關的環境中發生的變更 (例如傳入的訊息),或
+    </li>
+
+    <li>展示與執行中事件 (例如播放音樂或手機通話) 相關的資訊/控制項。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,6x3,6x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式以適當的權限層級提供預期的功能行為。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    領域
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    描述
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  </tr>
+
+  <tr id="FN-P1">
+  <td rowspan="2">
+    權限
+  </td>
+  <td>
+    FN-P1
+  </td>
+  <td>
+    應用程式僅要求支援核心功能所需的<em>絕對最低</em>權限。
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-11</a>
+  </td>
+  </tr>
+
+  <tr id="FN-P2">
+  <td>
+    FN-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    除非與應用程式的核心功能相關,否則應用程式不會要求能對敏感資料 (例如連絡人或系統日誌) 或需使用者付款的服務 (例如撥號程式或 SMS) 進行存取的權限。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="FN-L1">
+  <td>
+    安裝位置
+  </td>
+  <td>
+    FN-L1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    若安裝在 SD 卡上 (在應用程式支援的狀況下),應用程式將正常運作。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    對於多數大型應用程式 (超過 10MB),建議支援在 SD 卡上進行安裝。如需有關哪些應用程式類型應支援在 SD 卡安裝的資訊,請參閱<a href="{@docRoot}guide/topics/data/install-location.html">應用程式安裝位置</a>開發人員指南。
+    </p>
+  </td>
+  <td>
+    <a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A1">
+  <td rowspan="4">
+    音訊
+  </td>
+  <td>
+    FN-A1
+  </td>
+  <td>
+    除非音訊是核心功能 (例如應用程式是音樂播放器),否則在螢幕關閉時不會播放該音訊。
+  </td>
+  <td>
+    <a href="#core">CR-7</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A2">
+  <td>
+    FN-A2
+  </td>
+  <td>
+    除非是核心功能,否則<a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">在螢幕鎖定後不會播放</a>音訊。
+  </td>
+  <td>
+    <a href="#core">CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A3">
+  <td>
+    FN-A3
+  </td>
+  <td>
+    除非是核心功能,否則在主螢幕或其他應用程式上不會播放音訊。
+  </td>
+  <td>
+    <a href="#core">CR-1、<br>
+    CR-2</a>
+  </td>
+  </tr>
+
+  <tr id="FN-A4">
+  <td>
+    FN-A4
+  </td>
+  <td>
+    在應用程式回到前景,或向使用者指示播放處於暫停狀態時,音訊將恢復。
+  </td>
+  <td>
+    <a href="#core">CR-1、CR-8</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U1">
+  <td rowspan="3">
+    UI 與圖形
+  </td>
+  <td>
+    FN-U1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式支援橫向與直向 (若可能)。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    這兩個方向展示大部分相同的功能與動作,並具有同等功能。可以接受內容或檢視中的微小變更。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U2">
+  <td>
+    FN-U2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    在這兩個方向,應用程式都使用整個螢幕,不會因為顧及方向變更而採用上下黑邊式顯示。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    可以接受採用少量的上下黑邊式顯示來補償螢幕幾何圖形的微小變更。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-U3">
+  <td>
+    FN-U3
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式可以正確處理兩個顯示方向之間的快速轉換,同時不出現顯示問題。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-5</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S1">
+  <td rowspan="2">
+    使用者/應用程式狀態
+  </td>
+  <td>
+    FN-S1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    除非與應用程式的核心功能相關,否則在應用程式位於背景中時,應用程式不應讓任何服務仍處於執行中狀態。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    例如,應用程式不應讓服務處於執行中狀態以保持通知的網路連線、保持藍牙連線或保持 GPS 為開機狀態。
+    </p>
+  </td>
+  <td>
+    <a href="#core">CR-6</a>
+  </td>
+  </tr>
+
+  <tr id="FN-S2">
+  <td>
+    FN-S2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式能正確保留並還原使用者或應用程式狀態。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    應用程式可以在離開前景時保留使用者或應用程式狀態,並防止因後退導覽及其他狀態變更而導致資料意外遺失。返回至前景時,應用程式必須還原所保留的狀態以及擱置的所有重要狀態交易,例如對可編輯欄位、遊戲進度、功能表、影片及應用程式或遊戲的其他部分進行的變更。
+    </p>
+
+    <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+    <li>應用程式從最近應用程式切換器恢復後,可讓使用者返回至上次使用的確切狀態。
+    </li>
+
+    <li>在裝置從睡眠 (鎖定) 狀態喚醒後,應用程式恢復時,應用程式可讓使用者返回至上次使用的確切狀態。
+    </li>
+
+    <li>應用程式從 [首頁] 或 [所有應用程式] 重新啟動後,可將狀態還原為盡可能接近先前的狀態。
+    </li>
+
+    <li>按下 [後退] 後,應用程式會提供選項供使用者儲存應用程式或使用者狀態,否則在後退導覽後將遺失該狀態。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#core">CR-1、CR-3、CR-5</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/corequalityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ps">
+  效能與穩定性
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保應用程式提供使用者預期的效能、穩定性與回應能力。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    領域
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    描述
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  </tr>
+
+  <tr id="PS-S1">
+  <td>
+    穩定性
+  </td>
+  <td>
+    PS-S1
+  </td>
+  <td>
+    在所針對的裝置上,應用程式不會當機、強制關閉、凍結或以其他異常方式運作。
+  </td>
+  <td>
+    <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>、<a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P1">
+  <td rowspan="2">
+    效能
+  </td>
+  <td>
+    PS-P1
+  </td>
+  <td>
+    應用程式可快速載入,若應用程式的載入時間超過兩秒,會在螢幕上向使用者提供回饋 (進度指示器或類似的提示)。
+  </td>
+  <td>
+    <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-P2">
+  <td>
+    PS-P2
+  </td>
+  <td>
+    在啟用 StrictMode (請參閱以下的 <a href="#strictmode">StrictMode 測試</a>) 的狀況下,測試應用程式時 (包括執行遊戲、播放動畫、進行 UI 轉換以及執行應用程式的其他任何部分期間),紅色閃爍 (StrictMode 的效能警告) 不可見。
+  </td>
+  <td>
+    <a href="#PM-1">PM-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-M1">
+  <td>
+    媒體
+  </td>
+  <td>
+    PS-M1
+  </td>
+  <td>
+    在應用程式的一般使用與載入期間,音樂與影片可以順暢播放,無雜音、卡頓或其他瑕疵。
+  </td>
+  <td>
+    <a href="#core">CR-all</a>、<a href="#SD-1">SD-1</a>、<a href="#HA-1">HA-1</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V1">
+  <td rowspan="2">
+    視覺品質
+  </td>
+  <td>
+    PS-V1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式顯示圖形、文字、影像與其他 UI 元素時,無明顯的變形、模糊或像素化。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>應用程式會為其針對的所有螢幕大小與大小規格 (包括<a href="{@docRoot}distribute/essentials/quality/tablet.html">諸如平板電腦等較大螢幕裝置</a>的大小規格) 提供高品質圖形。
+    </li>
+
+    <li>功能表、按鈕與其他 UI 元素的邊緣不出現任何鋸齒。
+    </li>
+    </ol>
+  </td>
+  <td rowspan="2">
+    <a href="#core">CR-all</a>
+  </td>
+  </tr>
+
+  <tr id="PS-V2">
+  <td>
+    PS-V2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式能以可接受的方式顯示文字及文字區塊。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>在支援的所有大小規格 (包括諸如平板電腦等較大螢幕裝置的大小規格) 中可以接受複合。
+    </li>
+
+    <li>不出現任何遭截斷的字母或字彙。
+    </li>
+
+    <li>按鈕或圖示中不出現任何不正確的字彙換行。
+    </li>
+
+    <li>文字與周圍的元素之間存在充分的間距。
+    </li>
+    </ol>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/performance" data-sortorder="-timestamp"
+data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="listing">
+  Google Play
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式為在 Google Play 上發行而做好準備。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    領域
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    描述
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  </tr>
+
+  <tr id="GP-P1">
+  <td rowspan="2">
+    政策
+  </td>
+  <td>
+    GP-P1
+  </td>
+  <td>
+    應用程式應嚴格遵循 <a href="http://play.google.com/about/developer-content-policy.html">Google Play 開發人員內容政策</a>的條款,不提供不適當的內容,不使用其他品牌的智慧財產,等等。
+  </td>
+  <td>
+    <a href="#gp">GP-all</a>
+  </td>
+  </tr>
+
+  <tr id="GP-P2">
+  <td>
+    GP-P2
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    根據<a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=188189">內容評分指導方針</a>正確設定應用程式的成熟度層級。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    尤其請注意,若應用程式要求裝置位置的使用權限,則無法將其成熟度層級指定為「所有人」。
+    </p>
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D1">
+  <td rowspan="3">
+    應用程式詳細資料頁面
+  </td>
+  <td>
+    GP-D1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    應用程式功能圖形遵循此<a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">部落格貼文</a>中所述的指導方針。請確保:
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>應用程式清單包括高品質的功能圖形。
+    </li>
+
+    <li>若裝置影像、螢幕擷取畫面或小文字在縮小比例以及在應用程式針對的最小螢幕大小上顯示時難以辨認,則功能圖形不包含這些項目。
+    </li>
+
+    <li>功能圖形與廣告不相似。
+    </li>
+    </ol>
+  </td>
+  <td>
+    <a href="#gp">GP-1、GP-2</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D2">
+  <td>
+    GP-D2
+  </td>
+  <td>
+    應用程式螢幕擷取畫面與影片不顯示或不參考非 Android 裝置。
+  </td>
+  <td rowspan="2">
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+
+  <tr id="GP-D3">
+  <td>
+    GP-D3
+  </td>
+  <td>
+    應用程式螢幕擷取畫面或影片不以會引發誤導的方式展示應用程式的內容與體驗。
+  </td>
+  </tr>
+
+  <tr id="GP-X1">
+  <td>
+    使用者支援
+  </td>
+  <td>
+    GP-X1
+  </td>
+  <td>
+    若 Google Play 頁面上 [評論] 標籤中使用者報告的常見錯誤可重現並在許多不同裝置上出現,則對其進行修正。若錯誤僅出現在少數裝置上,如果這些裝置是備受青睞的裝置或新裝置,您也應修正錯誤。
+  </td>
+  <td>
+    <a href="#gp">GP-1</a>
+  </td>
+  </tr>
+</table>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/core/play" data-sortorder="-timestamp"
+data-cardsizes="6x3,6x3,6x3,6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-environment">
+  設定測試環境
+  </h2>
+
+
+</div>
+
+<p>
+  若要評估您應用程式的品質,需要設定適當的硬體或模擬器環境以進行測試。
+</p>
+
+<p>
+  理想的測試環境包括少數實際硬體裝置 (代表關鍵的大小規格) 以及目前消費者可以使用的硬體/軟體組合。您無需在市場上的<em>每個</em>裝置上進行測試,而是應專注於少量的代表性裝置,甚至對每種大小規格測試一或兩個裝置即可。
+</p>
+
+<p>
+  若您無法取得供測試的實際硬體裝置,應<a href="{@docRoot}tools/devices/index.html">設定模擬裝置 (AVD)</a> 以代表最常見的大小規格與硬體/軟體組合。
+</p>
+
+<p>
+  若要不限於基本測試,您可以新增更多裝置、更多大小規格或新硬體/軟體組合至測試環境。此外,您也可以提高測試與品質準則的數量或複雜度。
+</p>
+
+<div class="headerLine">
+  <h2 id="tests">
+  測試程序
+  </h2>
+
+
+</div>
+
+<p>
+  這些測試程序可以協助您探尋應用程式內各種類型的品質問題。您可以合併這些測試,或將多組測試整合到您的測試計劃中。如需將特定準則與特定測試關聯的參考,請參閱以上諸節。
+</p>
+
+<table>
+  <tr>
+  <th style="width:2px;">
+    類型
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  <th>
+    描述
+  </th>
+  </tr>
+
+  <tr>
+  <td rowspan="12" id="core">
+    核心套件
+  </td>
+  <td>
+    CR-0
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    導覽至應用程式的所有部分 (所有畫面、對話方塊、設定及所有使用者流程)。
+    </p>
+
+    <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+    <li>若應用程式涉及編輯或建立內容、執行遊戲或媒體播放,請確保進入這些流程以建立或修改內容。
+    </li>
+
+    <li>在測試應用程式時,請引入網路連線、電池功能、GPS 或位置可用性、系統負載等的短暫變更。
+    </li>
+    </ol>
+  </td>
+  </tr>
+
+  <tr id="tg2">
+  <td id="core2">
+    CR-1
+  </td>
+  <td>
+    在每個應用程式畫面中,按下裝置的 [首頁] 鍵,然後從 [所有應用程式] 畫面重新啟動應用程式。
+  </td>
+  </tr>
+
+  <tr id="CR-2">
+  <td>
+    CR-2
+  </td>
+  <td>
+    在每個應用程式畫面中,切換至其他執行中應用程式,然後使用最近應用程式切換器返回受測試的應用程式。
+  </td>
+  </tr>
+
+  <tr id="CR-3">
+  <td>
+    CR-3
+  </td>
+  <td>
+    在每個應用程式畫面 (及對話方塊) 中,按下 [後退] 按鈕。
+  </td>
+  </tr>
+
+  <tr id="CR-5">
+  <td>
+    CR-5
+  </td>
+  <td>
+    在每個應用程式畫面中,旋轉裝置,使其在橫向與直向之間至少切換三次。
+  </td>
+  </tr>
+
+  <tr id="CR-6">
+  <td>
+    CR-6
+  </td>
+  <td>
+    切換至其他應用程式,以便將受測試的應用程式置於背景中。移至 [設定],檢查在受測試應用程式位於背景中時,是否有服務在執行中。在 Android 4.0 及更高版本中,移至 [應用程式] 畫面,然後在 [執行中] 標籤內尋找應用程式。在更低的版本中,使用「管理應用程式」檢查執行中的服務。
+  </td>
+  </tr>
+
+  <tr id="CR-7">
+  <td>
+    CR-7
+  </td>
+  <td>
+    按下電源按鈕讓裝置進入睡眠狀態,然後再次按下電源按鈕喚醒螢幕。
+  </td>
+  </tr>
+
+  <tr id="CR-8">
+  <td>
+    CR-8
+  </td>
+  <td>
+    將裝置設為按下電源按鈕時進入鎖定狀態。按下電源按鈕讓裝置進入睡眠狀態,然後再次按下電源按鈕喚醒螢幕,隨後將裝置解除鎖定。
+  </td>
+  </tr>
+
+  <tr id="CR-9">
+  <!-- Hardware features -->
+
+  <td>
+    CR-9
+  </td>
+  <td>
+    對於具有滑出式鍵盤的裝置,將鍵盤滑出並滑入至少一次。對於具有鍵盤基座的裝置,將裝置連接至鍵盤基座。
+  </td>
+  </tr>
+
+  <tr id="CR-10">
+  <td>
+    CR-10
+  </td>
+  <td>
+    對於具有外部顯示連接埠的裝置,插入外部顯示器。
+  </td>
+  </tr>
+
+  <tr id="CR-11">
+  <td>
+    CR-11
+  </td>
+  <td>
+    在通知抽出式導覽面板中觸發並觀察應用程式能顯示的所有類型的通知。在適用時展開通知 (Android 4.1 與更高版本),並點選提供的所有動作。
+  </td>
+  </tr>
+
+  <tr id="CR-12">
+  <td>
+    CR-12
+  </td>
+  <td>
+    移至 [設定] &gt; [應用程式資訊] 檢查應用程式要求的權限。
+  </td>
+  </tr>
+
+  <tr id="tg3">
+  <td>
+    在 SD 卡上安裝
+  </td>
+  <td>
+    SD-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    將應用程式安裝到<a href="{@docRoot}guide/topics/data/install-location.html">裝置 SD 卡</a>後,重複<em>核心套件</em> (若應用程式支援)。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    若要將應用程式移至 SD 卡,您可以使用 [設定] &gt; [應用程式資訊] &gt; [移至 SD 卡]。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg32">
+  <td>
+    硬體加速
+  </td>
+  <td>
+    HA-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    啟用硬體加速後,重複<em>核心套件</em>。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    若要強制啟用硬體加速 (在裝置支援的狀況下),請在應用程式宣示說明中新增 <code>hardware-accelerated="true"</code> 至 <code>&lt;application&gt;</code>,然後重新編譯。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="tg33">
+  <td>
+    效能監控
+  </td>
+  <td>
+    PM-1
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+    在啟用 StrictMode 分析後重複<em>核心套件</em>,<a href="#strictmode">如下所述</a>。
+    </p>
+
+    <p style="margin-bottom:.25em;">
+    密切注意記憶體回收及其對使用者體驗的影響。
+    </p>
+  </td>
+  </tr>
+
+  <tr id="gp">
+  <td rowspan="3">
+    Google Play
+  </td>
+  <td>
+    GP-1
+  </td>
+  <td>
+    登入至 <a href="https://play.google.com/apps/publish/">Developer Console</a> 以檢閱您的開發人員簡介、應用程式描述、螢幕擷取畫面、功能圖形、成熟度設定及使用者回饋。
+  </td>
+  </tr>
+
+  <tr id="GP-2">
+  <td>
+    GP-2
+  </td>
+  <td>
+    下載您的功能圖形與螢幕擷取畫面,然後將其縮小,以便與裝置上的顯示器大小以及您所針對的大小規格相符。
+  </td>
+  </tr>
+
+  <tr id="GP-3">
+  <td>
+    GP-3
+  </td>
+  <td>
+    檢閱所有圖形資產、媒體、文字、程式碼資源庫,以及應用程式中封裝的其他內容,或擴充檔案下載。
+  </td>
+  </tr>
+
+  <tr id="GP-4">
+  <td>
+    付款
+  </td>
+  <td>
+    GP-4
+  </td>
+  <td>
+    導覽至您應用程式中的所有畫面,然後進入所有應用程式內購買流程。
+  </td>
+  </tr>
+</table>
+
+<h3 id="strictmode">
+  使用 StrictMode 進行測試
+</h3>
+
+<p>
+  對於效能測試,我們建議在您的應用程式中啟用 {@link android.os.StrictMode},並將其用於擷取主執行緒與其他執行緒上影響效能、網路存取、檔案讀取/寫入等項目的操作。
+</p>
+
+<p>
+  您可以使用 {@link android.os.StrictMode.ThreadPolicy.Builder} 針對執行緒設定監控政策,並使用在 <code>ThreadPolicy</code> 中{@link android.os.StrictMode.ThreadPolicy.Builder#detectAll()}啟用支援的所有監控。
+</p>
+
+<p>
+  請確保使用{@link android.os.StrictMode.ThreadPolicy.Builder#penaltyFlashScreen() penaltyFlashScreen()}針對 <code>ThreadPolicy</code> 啟用政策違犯的<strong>視覺通知</strong>。
+</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd
new file mode 100644
index 0000000..3c16f9d
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tablets.jd
@@ -0,0 +1,623 @@
+page.title=平板電腦應用程式品質
+page.metaDescription=安裝 Android 產品的平板電腦不斷增多,由此為您的應用程式帶來新的商機。
+page.image=/distribute/images/tablet-guidelines-color.jpg
+Xnonavpage=true
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>檢查清單</h2>
+<ol>
+<li><a href="#core-app-quality">1.測試基本平板電腦應用程式品質</a></li>
+<li><a href="#optimize-layouts">2.最佳化版面配置</a></li>
+<li><a href="#use-extra-space">3.使用更大的螢幕區域</a></li>
+<li><a href="#use-tablet-icons">4.使用專為平板電腦設計的資產</a></li>
+<li><a href="#adjust-font-sizes">5.調整字型與輕觸目標</a></li>
+<li><a href="#adjust-widgets">6.調整主螢幕小工具</a></li>
+<li><a href="#offer-full-feature-set">7.提供完備功能集</a></li>
+<li><a href="#android-versions">8.正確針對 Android 版本</a></li>
+<li><a href="#hardware-requirements">9.正確宣告相依性</a></li>
+<li><a href="#support-screens">10.宣告對平板電腦螢幕的支援</a></li>
+<li><a href="#google-play">11.展示您的平板電腦 UI</a></li>
+<li><a href="#google-play-best-practices">12.遵循在 Google Play 中發行的最佳做法</a></li>
+
+</ol>
+<h2>測試</h2>
+<ol>
+<li><a href="#test-environment">設定測試環境</a></li>
+</ol>
+</div></div>
+
+<div class="todp-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/tablet-guidelines-color.jpg" style="width:480px;">
+</div>
+
+<p>
+  安裝 Android 產品的平板電腦不斷增多,由此為<a href="{@docRoot}distribute/stories/tablets.html">使用者的參與及盈利</a>帶來新的機遇。本文件所述的指導方針將協助您透過引人注目的功能與良好設計的直覺式 UI,符合平板電腦使用者的預期。
+</p>
+
+<p>
+  雖然這些指導方針已編號,但是您能以任何順序對其進行了解。對於您應用程式適用的每項指導方針,您都應了解其建議,而為了向客戶提供最優產品,您應盡可能遵循這些建議。
+</p>
+
+<p>
+  本文件會經常提供資源連結,以協助您了解內含的每項建議。
+</p>
+
+<div class="headerLine"><h2 id="core-app-quality">1.測試基本平板電腦應用程式品質</h2></div>
+
+<p>提供平板電腦應用程式絕佳體驗的第一步,是確保其符合應用程式所針對所有裝置及尺寸規格的<em>核心應用程式品質準則</em>。如需完備資訊,請參閱<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質指導方針</a>。 
+</p>
+
+<p>
+此外,在發行之前,請確保您的應用程式已通過基本技術檢查並符合推出條件,例如:
+</p>
+
+<ul>
+  <li><a href="#android-versions">以相應的 Android 版本為目標</a></li>
+  <li><a href="#hardware-requirements">正確指定硬體相依性</a></li>
+  <li><a href="#support-screens">宣告對相應螢幕的支援</a></li>
+  <li><a href="#use-extra-space">使用提供的所有螢幕空間</a></li>
+  <li><a href="#google-play">將螢幕擷取畫面上傳至 Google Play</a></li>
+</ul>
+
+<p>若已將應用程式上傳至 Google Play Developer Console,您可以造訪<a href="#google-play-optimization-tips">最佳化秘訣頁面</a>查看對應用程式執行檢查的結果。</p>
+
+
+<div class="headerLine">
+<h2 id="optimize-layouts">2.針對較大的螢幕最佳化版面配置</h2></div>
+
+<p>
+  藉由 Android,可以輕鬆開發針對諸多裝置螢幕大小與尺寸規格都能良好運作的應用程式。這一普遍相容性對您非常有利,因為您可以將其協助設計的單一應用程式廣泛散佈到針對的所有裝置上。但是,若要為每個螢幕組態 (尤其是平板電腦) 的使用者提供最佳體驗,對於每個所針對的螢幕組態,您需要最佳化版面配置及其他 UI 元件。在平板電腦上,透過最佳化 UI,可以充分利用提供的更大螢幕實現諸多目標,例如提供新功能、展示新內容或以其他方式改善體驗,以提高對使用者的吸引力。
+</p>
+
+<p>
+  若您已開發適用於手機的應用程式,現在希望將其散佈到平板電腦上,可以先對版面配置、字型及間距進行微小調整。在某些狀況下 (例如對於 7 英寸平板電腦或畫布很大的遊戲),只需執行這些調整,應用程式即可擁有良好的外觀。在其他狀況下 (例如對於更大的平板電腦),您可以重新設計 UI 部分,使用高效的多窗格 UI、更輕鬆的導覽及其他內容取代「延伸的 UI」。
+</p>
+
+
+<div style="width:500px;margin:1.5em;margin-top:-16px;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">去除「延伸」的 UI</span>:在平板電腦上,單一窗格版面配置會產生很難處理的空白,並導致行過長。請使用邊框間距縮短 UI 元素的寬度,並考慮使用多窗格版面配置。</p>
+</div>
+
+<p>以下提供一些建議:</p>
+
+
+<ul>
+  <li>視需要為 <code>large</code> 與 <code>xlarge</code> 螢幕提供自訂版面配置。此外,您還可以提供根據螢幕的<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">最短維度</a>或<a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">可用的最小寬度與高度</a>而載入的版面配置。
+  </li>
+
+  <li>對於較大的螢幕,請至少自訂諸如字型大小、邊界、間距等維度,以改善空間使用狀況與內容可讀性。
+  </li>
+
+  <li>請調整 UI 控制項的位置,以便使用者在手持平板電腦時能輕鬆存取,例如平板電腦方向為橫向時,將 UI 控制項的位置向兩邊調整。
+  </li>
+
+  <li>平板電腦上 UI 元素的邊框間距通常應大於手機上的該間距。建議使用<a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm"> 48dp 節奏</a> (與 16dp 網格)。
+  </li>
+
+  <li>充分填補文字內容,使其並非恰好沿螢幕邊緣對齊。在螢幕邊緣附近的內容周圍使用至少為 <code>16dp</code> 的邊框間距。
+  </li>
+</ul>
+
+<p>尤其是確保您的版面配置在螢幕上不會顯示為「延伸」狀態:</p>
+
+<ul>
+<li>文字行不應過長,應最佳化為每行最多 100 個字元,每行字元數介於 50 與 75 之間時可取得最佳效果。</li>
+<li>ListView 與功能表不應使用全螢幕寬度。</li>
+<li>請使用邊框間距來管理螢幕上元素的寬度,或切換至平板電腦的多窗格 UI (請參閱下一節)。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/optimize"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="use-extra-space">3.利用更大的螢幕區域</h2></div>
+
+<div style="width:340px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="padding:4px;margin-bottom:0em;">
+<p class="img-caption"><span
+style="font-weight:500;">多窗格版面配置</span> 會在平板電腦螢幕上產生更佳的視覺平衡,同時提供更高的可用性與可讀性。</p>
+</div>
+
+<p>平板電腦螢幕能為您的應用程式提供大得多的螢幕顯示空間,尤其在平板電腦方向為橫向時,更是如此。特別是 10 英寸的平板電腦,能提供大幅擴展的區域,而即使是 7 英寸的平板電腦也能提供較大的空間,供您顯示內容並吸引使用者。 </p>
+
+<p>考慮平板電腦上所執行應用程式的 UI 時,請確保 UI 完全利用平板電腦上所提供的更大螢幕區域。以下提供一些建議:</p>
+
+<ul>
+<li>請尋求機會納入其他內容,或對既有內容使用其他處理方式。</li>
+<li>在平板電腦螢幕上使用<a href="{@docRoot}design/patterns/multi-pane-layouts.html">多窗格版面配置</a>,以便將多個單一檢視合併為複合檢視。藉此,您可以更高效地使用更大的螢幕區域,並降低使用者導覽應用程式的難度。 </li>
+<li>請對螢幕方向變更時,複合檢視中面板的重新排列狀況進行規劃。</li>
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+<div style="">
+<img src="{@docRoot}images/home/wear-wordmark.png"> <img src="{@docRoot}images/home/wear.png">
+<p class="image-caption"
+style="padding:.5em"><span
+style="font-weight:500;">複合檢視</span> 可將手機 UI 的多個單一檢視 <em>(上圖)</em> 合併為平板電腦更豐富、更高效的 UI <em>(下圖)</em>。 </p>
+</div>
+</div>
+
+<li>將單一螢幕實作為 {@link android.app.Activity} 子類別時,請考慮將個別內容面板實作為{@link android.app.Fragment}子類別。您可藉此在不同的大小規格與共用內容的螢幕之間最大限度重複使用程式碼。</li>
+<li>請決定使用多窗格 UI 的螢幕大小,然後在相應的螢幕大小貯體中提供不同的版面配置 (諸如 <code>large</code>/<code>xlarge</code>) 或最小螢幕寬度 (諸如 <code>sw600dp</code>/<code>sw720</code>)。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/extrascreen"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="use-tablet-icons">4.使用專為平板電腦螢幕設計的資產</h2></div>
+
+<div><img src="{@docRoot}design/media/devices_displays_density@2x.png"></div>
+
+<p>若要確保您的應用程式具有最佳的外觀,請為平板電腦通常所支援範圍中的每個密度提供圖示與其他點陣圖資產。具體而言,您應根據<a href="{@docRoot}design/style/iconography.html">圖表</a>指導方針來設計動作列、通知與啟動器的圖示,並在多個密度中提供這些圖示,以便其以適當的大小顯示在所有螢幕上 (沒有模糊或其他顯像偽差)。</p>
+
+<p class="table-caption"><strong>表格 1.</strong>圖示類型的原始資產大小。<table>
+<tr>
+<th>密度</th>
+<th>啟動器</th>
+<th>動作列</th>
+<th>小型/內容關聯式</th>
+<th>通知</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48 px</td>
+<td>32x32 px</td>
+<td>16x16 px</td>
+<td>24x24 px</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72 px</td>
+<td>48x48 px</td>
+<td>24x24 px</td>
+<td>36x36 px</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(使用 hdpi)</em></td>
+<td><em>(使用 hdpi)</em></td>
+<td><em>(使用 hdpi)</em></td>
+<td><em>(使用 hdpi)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96 px</td>
+<td>64x64 px</td>
+<td>32x32 px</td>
+<td>48x48 px</td>
+</tr>
+<tr>
+<td><code>xxhdpi</code></td>
+<td>144x144 px</td>
+<td>96x96 px</td>
+<td>48x48 px</td>
+<td>72x72 px</td>
+</tr>
+
+</table>
+
+<p>
+  請至少提供每個圖示與點陣圖資產的一個版本 (已針對以下<strong>至少一個</strong>常用平板電腦螢幕密度進行最佳化):
+</p>
+<ul>
+  <li><code>hdpi</code></li>
+  <li><code>xhdpi</code></li>
+  <li><code>xxhdpi</code></li>
+</ul>
+
+<p>其他秘訣:</p>
+
+<ul>
+<li>在設計圖示時,請使用向量形狀,以便在縮放時不會遺失詳細資料或邊緣捲曲。</li>
+<li>使用密度特定的<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">資源限定詞</a>以確保為每個螢幕密度載入正確的圖示。</li>
+<li>對於平板電腦與其他大螢幕裝置要求的啟動器圖示,其密度大小通常大於裝置的實際密度,因此您應提供最高密度的啟動器圖示。例如,若平板電腦使用 {@code xhdpi} 螢幕,將要求 {@code xxhdpi} 版本的啟動器圖示。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/assets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-font-sizes">5.調整字型大小與輕觸目標</h2></div>
+
+<p>若要確保您的應用程式在平板電腦上易於使用,請花一些時間對您針對的所有螢幕組態,調整平板電腦 UI 的字型大小與輕觸目標。您可以透過<a href="{@docRoot}guide/topics/ui/themes.html">風格化屬性</a>或<a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">維度資源</a>來調整字型大小,透過版面配置與點陣圖可繪項目來調整輕觸目標,如上所述。 </p>
+
+<p>以下提供一些考慮事項:</p>
+<ul>
+<li>對於平板電腦螢幕的各種大小與密度,文字不應過大或過小。請確保針對標籤所對應的 UI 元素適當調整標籤大小,並確保標籤、標題與其他元素中沒有不適當的換行。</li>
+<li>對於螢幕上的元素,建議採用的輕觸目標大小是 48dp (至少為 32dp),可能需要在平板電腦 UI 中進行某些調整。請閱讀<a href="{@docRoot}design/style/metrics-grids.html">計量與網格</a>了解實作策略,以便為大多數使用者提供協助。若要因應特定使用者的協助工具需求,可能需要使用更大的輕觸目標。 </li>
+<li>若可能,對於較小的圖示,請使用 {@link android.view.TouchDelegate} 將可觸區域擴大至 48dp 以上,或只是將圖示置於透明按鈕的中央。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/fonts"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="adjust-widgets">6.調整主螢幕小工具的大小</h2></div>
+
+<p>若您的應用程式包括主螢幕小工具,請考慮以下幾點,以確保平板電腦螢幕為使用者提供絕佳的體驗: </p>
+
+<ul>
+<li>針對平板電腦螢幕適當設定小工具的預設高度與寬度,以及重新調整高度及寬度的最大值與最小值。
+</li>
+<li>應將小工具的大小重新調整為至少 420dp,以涵蓋至少 5 個主螢幕列 (若是垂直或方形小工具) 或欄 (若是水平或方形小工具)。 </li>
+<li>確保 9 貼片影像能正確顯示。</li>
+<li>使用預設系統邊界。</li>
+<li>若可能,請將應用程式的 <code>targetSdkVersion</code> 設為至少是 14。</li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/widgets"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="offer-full-feature-set">7.為平板電腦使用者提供完備功能集</h2></div>
+
+<div class="centered-full-image" style="width:600px;margin:1.5em"><img src="{@docRoot}images/gp-tablets-full-feature-set.png" alt="Tablet feature sets"></div>
+
+<p>請讓您的平板電腦使用者體驗應用程式的最佳功能。以下提供一些建議:</p>
+
+<ul>
+  <li>將應用程式設計為在平板電腦上至少提供在電話上提供的一組功能。
+  </li>
+
+  <li>在特殊狀況下,若多數平板電腦的硬體或使用狀況不支援某些功能,您的應用程式在平板電腦上可以略去或替換這些功能。範例: <ul>
+      <li>若手機使用電話語音功能,但目前平板電腦上不提供電話語音功能,您可以略去或替換相關功能。
+      </li>
+
+      <li>許多平板電腦具有 GPS 感應器,但是多數使用者在駕車時通常不會攜帶平板電腦。若使用者藉由您電話應用程式提供的功能,可以在攜帶電話時記錄其駕車的 GPS 路線,則應用程式不需要在平板電腦上提供該功能,因為該使用狀況不具備吸引力。
+      </li>
+    </ul>
+  </li>
+
+  <li>若您要略去平板電腦 UI 的某項功能,請確保使用者無法存取該功能,或確保為替換功能提供「優雅降級」(另請參閱以下有關硬體功能的一節)。
+  </li>
+</ul>
+
+<div class="headerLine"><h2 id="android-versions">8.正確針對 Android 版本</h2></div>
+
+<p>
+  若要確保散佈到可能最廣泛的平板電腦,請確保您的應用程式正確針對支援平板電腦的 Android 版本。<a href="{@docRoot}about/versions/android-3.0.html">Android 3.0</a> (API 層級為 11) 中已新增對平板電腦的初始支援。<a href="{@docRoot}about/versions/android-4.0.html">Android 4.0</a> 中已引入對平板電腦、電話及其他裝置的統一 UI 架構支援。
+</p>
+
+<p>
+  您可以在宣示說明檔案中的 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a> 元素內設定應用程式所針對 Android 版本的範圍。在多數狀況下,您可以將元素的 <code>targetSdkVersion</code> 屬性設為可用的最高 API 層級,從而正確針對 Android 版本。
+</p>
+
+<p style="margin-bottom:.5em;">
+  請至少對 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a> 元素進行檢查,以確保:
+</p>
+
+<ol style="list-style-type:lower-alpha;margin-top:0em;">
+  <li>
+    所宣告 <code>targetSdkVersion</code> 的值至少為 11 (建議至少為 14),或
+  </li>
+
+  <li>
+    所宣告 <code>minSdkVersion</code> 的值至少為 11。
+  </li>
+
+  <li>若宣告 <code>maxSdkVersion</code> 屬性,其值必須至少為 11。請注意,一般<em>不建議</em>使用 <code>maxSdkVersion</code>。
+  </li>
+</ol>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/versions"
+  data-sortOrder="-timestamp"
+  data-cardSizes="6x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="hardware-requirements">9.正確宣告硬體功能相依性</h2></div>
+
+<p>
+  手機與平板電腦為感應器、相機、電話語音及其他功能提供的硬體支援通常稍有不同。例如,許多平板電腦可使用「Wi-Fi」組態,但該組態不包括電話語音支援。
+</p>
+
+<p>
+  為了能將單一 APK 廣泛散佈到您電話與平板電腦的整個客戶群,請確保您的應用程式不會宣告需要平板電腦上通常不提供的硬體功能。您應改為在應用程式的宣示說明中將這些硬體功能正確宣告為<em>不需要</em>,如下所述。
+</p>
+
+<ul>
+<li>在您的應用程式宣示說明中,尋找 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> 元素。尤其是尋找可能無法用於某些平板電腦的硬體功能,例如: <ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code> (請參閱後部相機),或</li>
+<li><code>android.hardware.camera.front</code></li>
+</ul></li>
+
+<li>透過納入 <code>android:required=”false”</code> 屬性,將 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a> 元素宣告為<em>不需要</em>。 <p>
+  例如,以下提供了 <code>android.hardware.telephony</code> 相依性的正確宣告方式,您藉此仍可以廣泛散佈應用程式,即使對於不提供電話語音功能的裝置,也是如此:
+</p>
+
+<pre>&lt;uses-feature android:name="android.hardware.telephony" android:required="false" /&gt;</pre></li>
+
+<li>與此類似,請檢查宣示說明中是否存在表示對不適用於平板電腦的硬體功能有需求的 <a href="{@docRoot}guide/topics/manifest/permission-element.html"><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions"><code>&lt;permission&gt;</code></a></a> 元素。若您發現此類許可,請確保明確宣告這些功能的對應 <code>&lt;uses-feature&gt;</code> 元素,並納入 <code>android:required=”false”</code> 屬性。</li>
+</ul>
+
+
+<p>
+  將硬體功能宣告為<em>不需要</em>後,請確保在多種裝置上測試您的應用程式。應用程式在其使用的硬體功能無法提供時應正常運作,若合適,應提供「優雅降級」與替代功能。
+</p>
+
+<p>
+  例如,若應用程式通常使用 GPS 來設定位置,但是裝置上不支援 GPS,則應用程式可以讓使用者改為手動設定位置。應用程式可以在執行階段檢查裝置硬體功能,並視需要進行處理。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/hardware"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine"><h2 id="support-screens">10.宣告對平板電腦螢幕的支援</h2></div>
+
+<p>若要確保可以將您的應用程式散佈到多種平板電腦,您的應用程式應在宣示說明檔案中宣告對多種平板電腦螢幕大小的支援,如下所示:</p>
+
+<ul>
+  <li>若已宣告 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> 元素,則該元素不得指定 <code>android:largeScreens="false"</code> 或 <code>android:xlargeScreens="false"</code>。</li>
+  <li>對於所針對的 <code>minSdkVersion</code> 值小於 13 的應用程式,必須宣告 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> 元素與 <code>android:largeScreens="true"</code> 及 <code>android:xlargeScreens="true"</code>。</li>
+</ul>
+
+<p>若應用程式在宣示說明中宣告<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>元素,則該元素應包括對應用程式所支援<em>平板電腦螢幕的所有大小與密度的組合</em>進行指定的屬性。請注意,若可能,應避免在應用程式中使用<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><code>&lt;compatible-screens&gt;</code></a>元素。</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/tabletscreens"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,6x3,6x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine"><h2 id="google-play">11.在 Google Play 中展示您的平板電腦 UI</h2></div>
+
+<p>
+  在執行工作為平板電腦應用程式建立豐富的最佳化 UI 後,請確保讓您的客戶了解這些 UI!以下展示了在 Google Play 上將您的平板電腦應用程式向使用者推廣的一些重要方式。
+</p>
+
+<div><img class="border-img" src="{@docRoot}images/gp-tablet-quality-4.jpg"></div>
+
+
+<h4>
+  上傳您平板電腦 UI 的螢幕擷取畫面
+</h4>
+
+<p>
+  平板電腦使用者希望了解您的應用程式在平板電腦裝置上 (而非在電話上) 的狀況。若您已開發平板電腦應用程式,請確保將平板電腦應用程式 UI 的螢幕擷取畫面上傳至 Google Play Developer Console。以下提供一些指導方針:
+  </p>
+
+<ul style="margin-top:0;">
+  <li>請顯示您應用程式的核心功能,而非啟動或登入頁面。對於使用者花費大部分時間了解的環節,您應使用螢幕擷取畫面予以展示。
+  </li>
+
+  <li>請新增在 7 英寸與 10 英寸平板電腦上拍攝的螢幕擷取畫面。
+  </li>
+
+  <li>若可能,請新增拍攝的橫向與直向螢幕擷取畫面。
+  </li>
+
+  <li>若可能,請使用螢幕擷取功能。避免在您的螢幕擷取畫面中顯示 實際的裝置硬體。</li>
+
+  <li>在每個方向,建議的平板電腦螢幕擷取畫面解析度為至少 <strong>1280 x 720</strong>。
+  </li>
+
+  <li>對於 7 英寸平板電腦,請上傳平板電腦 UI 的 8 個螢幕擷取畫面;對於 10 英寸平板電腦,請上傳其他 8 個螢幕擷取畫面。
+  </li>
+</ul>
+
+<h4>
+  更新應用程式的描述與版本資訊
+</h4>
+
+<ul>
+  <li>在您的應用程式描述中,請確保著重說明您的應用程式能為平板電腦使用者提供平板電腦最佳化 UI 與卓越的功能。請新增某些詳細資料,以說明您的平板電腦應用程式 UI 的運作方式,以及使用者喜歡該 UI 的原因所在。
+  </li>
+
+  <li>請在應用程式的版本資訊與更新資訊中納入平板電腦支援的有關資訊。
+  </li>
+</ul>
+
+<h4>
+  更新您的推廣影片
+</h4>
+
+<p>
+  許多使用者會觀看應用程式的推廣影片,以了解應用程式的狀況以及使用者是否喜歡該應用程式。對於平板電腦使用者,請在推廣影片中著重說明您應用程式的平板電腦 UI,以充分利用這一興趣。以下提供一些秘訣與指導方針:
+</p>
+
+<ul>
+  <li>新增平板電腦上所執行應用程式的一或多個螢幕擷取畫面。若要以最有效的方式吸引平板電腦使用者,建議您以與電話 UI 大致相等的比例,推廣平板電腦 UI。
+  </li>
+
+  <li>請在影片中儘早顯示平板電腦 UI。不要指望平板電腦使用者在了解電話 UI 的功能介紹時會耐心等候。最理想的狀況是,您應在前 10 秒內 (或至少在介紹電話 UI 時) 展示平板電腦 UI,以立即吸引使用者。
+  </li>
+
+  <li>若要清晰說明您正在展示平板電腦 UI,請將手持平板電腦裝置上所執行應用程式的螢幕擷取畫面包含在內。
+  </li>
+
+  <li>在影片的記述或畫外音中,請著重說明應用程式的平板電腦 UI。
+  </li>
+</ul>
+
+<h4>
+  在推廣活動中介紹您的平板電腦 UI
+</h4>
+
+<p>
+  請確保透過推廣活動、網站、社交貼文、廣告及其他方式,讓平板電腦使用者了解您的平板電腦 UI。以下提供一些建議:
+</p>
+
+<ul>
+  <li>規劃行銷或廣告活動,以著重說明在平板電腦上使用您的應用程式。</li>
+
+  <li>在推廣活動中展示平板電腦應用程式的最佳特性,使用 <a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator</a> 可快速產生 7 英寸或 10 英寸平板電腦上所執行應用程式的高品質推廣影像,視您的選擇而定,可以具有或不具有陰影及螢幕眩光。這與擷取、拖曳及釋放一樣簡單。
+  </li>
+
+  <li>請在您的線上推廣中納入 Google Play 徽章,以便使用者藉此可以直接連結至您應用程式的市集清單。使用 <a href="{@docRoot}distribute/tools/promote/badges.html">Badge Generator</a>,您可以產生多種語言的徽章。
+  </li>
+</ul>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/showcase"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>
+
+<div class="headerLine">
+  <h2 id="google-play-best-practices">
+    12.遵循在 Google Play 中發行的最佳做法
+  </h2>
+
+
+</div>
+
+<p>
+  以下展示了在 Google Play 上提供成功的平板電腦應用程式所採用的一些最佳做法。
+</p>
+
+<div>
+  <img class="border-img" src="{@docRoot}images/gp-tablet-quality-5.jpg" style="1px solid #ddd">
+</div>
+
+<h4 id="google-play-optimization-tips">
+  檢查您應用程式的最佳化秘訣
+</h4>
+
+<p>Google Play Developer Console 現在提供 [最佳化秘訣] 頁面,您可藉此根據平板電腦應用程式散佈與品質的基本指導方針,快速檢查應用程式的運作狀況。若要造訪該頁面,請登入 Developer Console,從 [所有應用程式] 載入應用程式,然後按一下左側導覽列中的 [最佳化秘訣]。</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>如何傳送回饋</h2>
+
+<p>請使用以下連結傳送回饋或要求手動檢閱您的最佳化秘訣。</p>
+
+<p>請確保先閱讀平板電腦應用程式品質指導方針的相關各節,然後傳送回饋。</p>
+
+<p><strong><a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">專為平板電腦而設計的連絡人表單&raquo;</a></strong></p>
+</div>
+</div>
+
+<p>Developer Console 會執行一系列檢查以驗證基本的品質準則,藉此建立您應用程式的 [最佳化秘訣] 頁面。若發現存在問題,會在 [最佳化秘訣] 頁面中以「待處理」項目的形式向您提出警示。</p>
+
+<p>若您已為應用程式開發平板電腦體驗,請確保造訪 [最佳化秘訣] 頁面,以根據基本檢查查看您應用程式的運作狀況。若列出問題,建議您先解決應用程式中的這些問題,然後上傳新的二進位檔案以供散佈 (若需要)。 </p>
+
+<p>對於 [最佳化秘訣] 頁面中列示的「待處理」問題,若您覺得不適用於您的應用程式或會影響在平板電腦上的品質,請使用<a href="https://support.google.com/googleplay/android-developer/contact/tabletq" target="_googleplay" style="white-space:nowrap">專為平板電腦而設計的連絡人表單&raquo;</a>通知我們。我們會檢閱您的應用程式,並視需要更新您的 [最佳化秘訣] 頁面。</p>
+
+
+<h4>確認應用程式的篩選</h4>
+
+<p>
+  將應用程式上傳至 <a href="https://play.google.com/apps/publish/">Developer Console</a> 後,請檢查 APK 的支援裝置清單,以確保您希望針對的平板電腦裝置中未篩除該應用程式。
+</p>
+
+<h4>以單一 APK 的形式散佈</h4>
+
+<p>
+  建議您針對所有螢幕大小 (電話與平板電腦) 以單一 APK 的形式 (使用單一 Google Play 清單) 發行應用程式。此方法具有多項重要優點。
+</p>
+
+<ul style="margin-top:.25em;">
+  <li>使用者可以更輕鬆地透過搜尋、瀏覽或推廣找到您的應用程式
+  </li>
+
+  <li>使用者取得新裝置時,可以更輕鬆地自動還原您的應用程式。
+  </li>
+
+  <li>將合併所有裝置中您的評分與下載統計資料。
+  </li>
+
+  <li>在另一個清單中發行平板電腦應用程式會降低對您品牌的評分。
+  </li>
+</ul>
+
+<p>
+  雖然在多數狀況下,強烈建議您使用單一 APK 連絡所有裝置,但是若需要,您也可以改為選擇使用<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支援</a>提供應用程式。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines/googleplay"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
+
+
+<div class="headerLine">
+  <h2 id="test-environment">
+    設定平板電腦的測試環境
+  </h2>
+
+
+</div>
+
+<p>
+  憑藉用於測試的適用硬體或模擬器環境,評估您的應用程式在平板電腦上的品質 (包括核心應用程式品質與平板電腦應用程式品質)。
+</p>
+
+<p>
+  與<a href="{@docRoot}distribute/essentials/quality/core.html#test-environment">建議的測試環境</a>相較,根據核心應用程式品質準則進行測試,包括中型平板電腦以及具有更多或更少硬體/軟體功能的平板電腦。
+</p>
+
+<p class="table-caption"><strong>表格 1.</strong>一般平板電腦測試環境可能包括下表中每行內的一或兩項裝置,具有列示的其中一個平台版本、螢幕組態與硬體功能組態。</p>
+
+<table>
+<tr>
+<th>類型</th>
+<th>大小</th>
+<th>密度</th>
+<th>版本</th>
+<th>AVD 面板</th>
+</tr>
+
+<tr>
+<td>7 英寸平板電腦</td>
+<td><span style="white-space:nowrap"><code>large</code> 或</span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
+<td>Android 4.0+ (API 層級至少為 14)</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">10 英寸</span> 平板電腦</td>
+<td><span style="white-space:nowrap"><code>xlarge</code> 或</span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>,<br /><code>hdpi</code>,<br /><code>xhdpi</code></td>
+<td>Android 3.2+ (API 層級至少為 13)</td>
+<td>WXGA800</td>
+</tr>
+</table>
+
+<div class="headerLine"><h2 id="related-resources">相關資源</h2></div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/essentials/tabletguidelines"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd
new file mode 100644
index 0000000..9329606
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd
@@ -0,0 +1,448 @@
+page.title=電視應用程式品質
+page.metaDescription=在各種 Android 裝置中,電視的數量不斷攀升。為了提供絕佳的體驗,需要特別注意電視應用程式的設計與功能。
+page.image=/distribute/images/gp-tv-quality.png
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質準則</h2>
+  <ol>
+    <li><a href="#ux">設計與互動</a></li>
+    <li><a href="#fn">功能</a></li>
+    <li><a href="#faq">常見問題</a></li>
+  </ol>
+
+  <h2>您也應閱讀</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li>
+  </ol>
+</div>
+</div>
+
+<div class="top-right-float" style="padding-right:0;margin-bottom:1em;">
+  <img src="{@docRoot}distribute/images/gp-tv-quality.png" style="width:480px;">
+</div>
+
+<p>
+  與使用手機及平板電腦相較,使用者觀看電視時具有不同的一組預期。通常,電視使用者與螢幕的距離大約為 10 英尺,因此微小的細節不太引人注目,而且小文字很難閱讀。由於使用者與電視之間有一段距離,因此必須使用遙控器執行導覽與選取,而非觸碰螢幕上的元素。這些不同之處導致為電視使用者提供良好體驗的構成要素具有顯著不同的需求。
+</p>
+
+<p>
+  為電視使用者提供絕佳體驗的第一步,是檢閱並遵循 <a href="{@docRoot}design/tv/index.html">Android 電視設計指導方針</a>,這些指導方針針對如何為電視應用程式建置最優的使用者體驗提供了指示。此外,您還應檢閱<a href="{@docRoot}training/tv/start/index.html">建置電視應用程式</a>訓練,以了解電視應用程式的基本實作需求。
+</p>
+
+<p class="caution">
+  <strong>重要說明:</strong>若要確保提供絕佳的使用者體驗,適用於電視裝置的應用程式必須符合可用性的某些特定需求。只有符合以下品質準則的應用程式,才有資格作為 Google Play 上的 Android 電視應用程式。
+</p>
+
+<p class="note"><strong>注意:</strong>如需有關如何在 Google Play 中發行電視應用程式的資訊,請參閱<a href="{@docRoot}distribute/googleplay/tv.html">散佈至 Android 電視</a>。</p>
+
+
+
+<div class="headerLine">
+  <h2 id="ux">
+  視覺設計與使用者互動
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式遵循關鍵的設計與互動樣式,以確保在電視裝置上提供一致、直觀且充滿樂趣的使用者體驗。
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    類型
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="4" id="launcher">
+    啟動器
+  </td>
+
+  <td id="TV-LM">
+    TV-LM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式在安裝後,會在 Android 電視啟動器中顯示啟動器圖示。(<a href="{@docRoot}training/tv/start/start.html#tv-activity">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LB">
+    TV-LB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      在 Android 電視啟動器中,應用程式會顯示 320px x 180px 的完整大小橫幅作為其啟動器圖示。(<a href="{@docRoot}design/tv/patterns.html#banner">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-BN">
+    TV-BN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式啟動橫幅包含應用程式的名稱。(<a href="{@docRoot}design/tv/patterns.html#banner">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-LG">
+    TV-LG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式是遊戲,會顯示在 Android 電視啟動器的 [遊戲] 列中。<br>
+      (<a href="{@docRoot}training/tv/games/index.html#manifest">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="layout">
+    版面配置
+  </td>
+
+  <td id="TV-LO">
+    TV-LO
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      所有應用程式介面都以橫向顯示。(<a href="{@docRoot}training/tv/start/layouts.html#structure">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TC">
+    TV-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式顯示的核心文字大小至少為 16sp。(<a href="{@docRoot}design/tv/style.html#typography">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TA">
+    TV-TA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式顯示的所有文字大小至少為 12sp。(<a href="{@docRoot}design/tv/style.html#typography">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-OV">
+    TV-OV
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式不會顯示部分遭螢幕邊緣截斷的任何文字或功能。(<a href="{@docRoot}training/tv/start/layouts.html#overscan">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-TR">
+    TV-TR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式不會部分遮蓋其他應用程式。應用程式會填滿整個螢幕,並具有不透明的背景。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="navigation">
+    導覽
+  </td>
+
+  <td id="TV-DP">
+    TV-DP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      除非應用程式如 <a href="#TV-GP">TV-GP</a> 中指定需要遊戲手把,否則可以使用 5 向 D-pad 控制裝置來導覽應用程式功能。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DK">
+    TV-DK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式如 <a href="#TV-GP">TV-GP</a> 中指定需要遊戲手把,則使用標準的 Android 遊戲手把按鍵可以導覽所有功能。(<a href="{@docRoot}training/game-controllers/controller-input.html#button">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-DM">
+    TV-DM
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式不依賴具有 [功能表] 按鈕的遙控器也能存取使用者介面的控制項。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式經過正確設定並提供預期的功能行為。
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    類型
+  </th>
+  <th style="width:54px;">
+    測試
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="2" id="manifest">
+   宣示說明
+  </td>
+
+  <td id="TV-ML">
+    TV-ML
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式宣示說明使用 {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER} 類別設定 {@link android.content.Intent#ACTION_MAIN} 意圖類型。(<a href="{@docRoot}training/tv/start/start.html#tv-activity">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+</tr>
+  <td id="TV-MT">
+    TV-MT
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式宣示說明將硬體功能 {@code android.hardware.touchscreen} 設為不需要。(<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="game-controllers">
+    遊戲手把
+  </td>
+
+  <td id="TV-GP">
+    TV-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式將遊戲手把用作主要輸入方式,會使用 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> 宣示說明標籤宣告相應的需求。(<a href="{@docRoot}training/tv/games/index.html#gamepad">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-GC">
+    TV-GC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式提供使用遊戲手把的視覺指示,這些指示應不含品牌資訊,並顯示相容的按鈕版面配置。(<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="4" id="advertising">
+    廣告推廣
+  </td>
+
+  <td id="TV-AP">
+    TV-AP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式允許使用 D-pad 控制裝置與廣告推廣互動。(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AD">
+    TV-AD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      對於使用全螢幕非影片廣告的廣告推廣,應用程式允許使用者使用 D-pad 控制裝置立即關閉廣告。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AU">
+    TV-AU
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      對於使用可點選、非全螢幕、非影片廣告的廣告推廣,應用程式不允許廣告連結至網頁 URL。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-AA">
+    TV-AA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      對於使用可點選、非全螢幕、非影片廣告的廣告推廣,應用程式不允許廣告連結至電視裝置上不可用的其他應用程式。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="web">
+    網頁內容
+  </td>
+
+  <td id="TV-WB">
+    TV-WB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      對於網頁內容,應用程式會使用 {@link android.webkit.WebView} 元件,不會嘗試啟動網頁瀏覽器應用程式。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="media-playback">
+    媒體播放
+  </td>
+
+  <td id="TV-NP">
+    TV-NP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式在使用者離開後繼續播放聲音,應用程式會在主螢幕建議列提供<em>現在播放</em>卡,因此使用者可以返回至應用程式以控制播放。(<a href="{@docRoot}training/tv/playback/now-playing.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PA">
+    TV-PA
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式提供<em>現在播放</em>卡,使用者選取此卡後,會進入可暫停播放的畫面。(<a href="{@docRoot}training/tv/playback/now-playing.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="TV-PP">
+    TV-PP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式播放視訊或音樂內容,則在播放期間傳送播放或暫停關鍵事件時,應用程式會在媒體的播放與暫停之間進行切換。<br>
+      (<a href="{@docRoot}reference/android/view/KeyEvent.html#KEYCODE_MEDIA_PLAY_PAUSE">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/tvqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+
+<div class="headerLine">
+  <h2 id="faq">
+  常見問題
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>提交應用程式後,如何才能知道我的應用程式不符合電視裝置的所有需求?</strong>
+</p>
+<p>
+  若您的應用程式不符合本頁面所述的可用性需求,Play 市集團隊會透過主 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 帳戶 (與應用程式關聯) 中指定的電子郵件地址與您連絡。
+</p>
+<p class="caution">
+  <strong>注意:</strong>請確保您的應用程式包括電視裝置的<a href="{@docRoot}preview/tv/start/index.html#tv-activity">所需宣示說明項目</a>,否則不會將您的應用程式視為電視應用程式,也不會針對電視可用性需求對其進行檢閱。
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>我的應用程式針對的不僅是電視裝置。若我的應用程式不符合電視裝置需求,我的新應用程式或更新後的應用程式是否仍顯示在 Google Play 中針對手機與平板電腦的位置?</strong>
+</p>
+<p>
+  是。上述需求只會對散佈至 Google Play 市集的電視裝置進行限制。散佈至其他裝置類型 (例如手機、平板電腦及其他裝置) 不受影響。
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>若我的應用程式符合發行需求,對 Google Play 市集內的電視裝置何時才提供該應用程式?</strong>
+</p>
+
+<p>
+  在官方發行 Android 5.0 <em>後</em>,符合電視需求的應用程式將顯示在 Google Play 市集內的電視裝置上。
+</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd
new file mode 100644
index 0000000..47a2d91
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/wear.jd
@@ -0,0 +1,398 @@
+page.title=穿戴式裝置應用程式品質
+page.tags="wear","wearables","quality","guidelines"
+page.metaDescription=穿戴式裝置是專為簡略瀏覽而建置的較小裝置,需要獨特的應用程式在正確的時間提供正確的資訊。
+page.image=/distribute/images/gp-wear-quality.png
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>品質準則</h2>
+  <ol>
+    <li><a href="#ux">設計與互動</a></li>
+    <li><a href="#fn">功能</a></li>
+    <li><a href="#faq">常見問題</a></li>
+  </ol>
+
+  <h2>您也應閱讀</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li>
+    <li><a href="{@docRoot}distribute/essentials/optimizing-your-app.html">最佳化您的應用程式</a></li>
+    <li><a href="{@docRoot}design/patterns/notifications.html">通知</a></li>
+  </ol>
+</div>
+</div>
+
+<img src="{@docRoot}distribute/images/gp-wear-quality.png" style="width:480px;">
+
+<p>
+  Android Wear 旨在於正確的時間為使用者提供正確的資訊。Android Wear 自動啟動,可供簡略瀏覽,需要很少或不需要使用者介入,從而提供絕佳體驗。設計用於穿戴式裝置的應用程式與設計用於手機或平板電腦的應用程式相較有很大不同。兩者具有不同的優點與缺點、不同的使用狀況,要考慮的人體工程學也不同。
+</p>
+
+<p>
+  為 Wear 使用者提供絕佳體驗的第一步,是閱讀 <a href="{@docRoot}design/wear/index.html">Android Wear 設計指導方針</a>,這些指導方針針對如何為 Wear 應用程式建置最優的使用者體驗提供了指示。此外,您還應檢閱<a href="{@docRoot}training/building-wearables.html">建置穿戴式裝置應用程式</a>訓練,以了解 Wear 應用程式的基本實作需求。
+</p>
+
+<p class="caution">
+  <strong>重要說明:</strong>若要確保提供絕佳的使用者體驗,適用於穿戴式裝置的應用程式必須符合可用性的特定需求。只有符合以下品質準則的應用程式,才有資格作為 Google Play 上的 Android Wear 應用程式。透過具有作為 Wear 應用程式的資格,Android Wear 使用者可以更輕鬆地在 Google Play 上探尋您的應用程式。
+</p>
+
+<p class="note">
+ <strong>注意:</strong>如需有關如何在 Google Play 中發行 Wear 應用程式的資訊,請參閱<a href="{@docRoot}distribute/googleplay/wear.html">散佈至 Android Wear</a>。
+</p>
+
+<div class="headerLine">
+  <h2 id="fn">
+  功能
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式經過正確設定並提供預期的功能行為。
+</p>
+
+
+<table>
+<tr>
+  <th style="width:2px;">
+    類型
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="general">
+   一般
+  </td>
+
+  <td id="WR-GL">
+    WR-GL
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      手持式應用程式包括穿戴式裝置特定功能的通知,或直接在 Wear 裝置上執行的穿戴式裝置應用程式。(<a href="{@docRoot}training/building-wearables.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-VF">
+    WR-VF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式具有使用者可見的 Wear 功能。
+    </p>
+  </td>
+</tr>
+
+<tr>
+ <td id="WR-BF">
+    WR-BF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      Wear 功能按預期運作,或按應用程式的 Google Play 市集清單中所述內容運作。
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="packaging">
+   封裝
+  </td>
+
+  <td id="WR-PK">
+    WR-PK
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若穿戴式裝置應用程式依賴手持式應用程式來發揮功能,應將穿戴式裝置應用程式封裝在手持式應用程式中。(<a href="{@docRoot}training/wearables/apps/packaging.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="3" id="functional-notifications">
+    通知
+  </td>
+
+  <td id="WR-FW">
+    WR-FW
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      穿戴式裝置特定功能的通知使用 {@code RemoteInput} 或 {@code WearableExtender}。(<a href="{@docRoot}training/wearables/notifications/index.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FR">
+    WR-FR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      藉由傳訊應用程式的通知,使用者可以透過語音輸入或快速回應來提供回覆。(<a href="{@docRoot}training/wearables/notifications/voice-input.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-FG">
+    WR-FG
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      將相似的通知歸入同一堆疊中。(<a href="{@docRoot}training/wearables/notifications/stacks.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="2" id="gestures">
+    手勢
+  </td>
+
+  <td id="WR-GP">
+    WR-GP
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      只有在希望提示以結束時,全螢幕動作才使用「長時間按下」手勢。 <br/> (<a href="{@docRoot}training/wearables/ui/exit.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-GD">
+    WR-GD
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      若應用程式在全螢幕動作中停用「輕拂以關閉」手勢,則在該動作中將回應「長時間按下以關閉」手勢。(<a href="{@docRoot}training/wearables/ui/exit.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="watchface">
+    錶面
+  </td>
+
+  <td id="WR-WF">
+    WR-WF
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      包含錶面的應用程式將使用正式的錶面 API。(<a href="{@docRoot}training/wearables/watch-faces/index.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/functionality"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="ux">
+  視覺設計與使用者互動
+  </h2>
+
+
+</div>
+
+<p>
+  這些準則可確保您的應用程式遵循關鍵的設計與互動樣式,以便在穿戴式裝置上提供一致、直觀且充滿樂趣的使用者體驗。
+</p>
+
+<table>
+
+<tr>
+  <th style="width:2px;">
+    類型
+  </th>
+  <th style="width:54px;">
+    ID
+  </th>
+  <th>
+    描述
+  </th>
+</tr>
+
+<tr>
+  <td rowspan="3" id="layout">
+    版面配置
+  </td>
+
+  <td id="WR-LS">
+    WR-LS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式使用者介面已針對方形顯示幕正確設定格式。應用程式內容適合實體顯示區域,文字或控制項未遭螢幕邊緣截斷。 <br/> (<a href="{@docRoot}training/wearables/ui/layouts.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-LR">
+    WR-LR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式使用者介面已針對圓形顯示幕 (包括螢幕底部具有內嵌項目 (即「下巴」) 的裝置) 正確設定格式。應用程式內容適合實體顯示區域,文字或控制項未遭螢幕邊緣截斷。 <br/> (<a href="{@docRoot}training/wearables/ui/layouts.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-TC">
+    WR-TC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式文字較大且可供簡略瀏覽,建議最小為 16sp。(<a href="{@docRoot}design/wear/style.html#Typography">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="launcher">
+    啟動器
+  </td>
+
+  <td id="WR-LN">
+    WR-LN
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式啟動器字串是應用程式名稱,而非命令片語。(<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="5" id="notifications">
+    通知
+  </td>
+
+  <td id="WR-NC">
+    WR-NC
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式在適當時顯示確認動畫。(<a href="{@docRoot}design/wear/patterns.html#Countdown">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-NR">
+    WR-NR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知卡的右上邊緣顯示應用程式圖示。若通知卡具有單一動作控制項 (例如媒體播放卡),則屬例外狀況。 <br/> (<a href="{@docRoot}design/wear/style.html#Assets">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-WI">
+    WR-WI
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知動作具有白色圖示、動作標題以及透明背景。 <br/> (<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PB">
+    WR-PB
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知相片背景僅用於傳遞資訊,不用於為卡建立品牌。(<a href="{@docRoot}design/wear/style.html#Branding">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td id="WR-PR">
+    WR-PR
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      通知相片背景的解析度至少為 400x400。(<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+<tr>
+  <td rowspan="1" id="googleplay">
+    Google Play
+  </td>
+
+  <td id="WR-GS">
+    WR-GS
+  </td>
+  <td>
+    <p style="margin-bottom:.5em;">
+      應用程式在其 Play 市集清單中至少包含一個 Wear 螢幕擷取畫面。(<a
+href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">進行了解</a>)
+    </p>
+  </td>
+</tr>
+
+
+</table>
+
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/essentials/wearqualityguidelines/visualdesign"
+data-sortorder="-timestamp" data-cardsizes="6x2" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="faq">
+  常見問題
+  </h2>
+</div>
+
+<p style="margin-top:30px;">
+  <strong>提交應用程式供 Android Wear 檢閱後,如何才能知道我的應用程式不符合 Wear 的所有需求?</strong>
+</p>
+<p>
+  若您的應用程式不符合本頁面所述的可用性需求,Play 市集團隊會透過 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 帳戶 (與應用程式關聯) 中指定的電子郵件地址與您連絡。
+</p>
+<p class="caution">
+  <strong>注意:</strong>請確保您的應用程式符合<a href="#fn">功能需求</a>,否則不會將您的應用程式視為 Wear 應用程式,也不會針對 Wear <a href="#ux">設計與互動</a>對其進行檢閱。
+</p>
+<p class="note">
+ <strong>注意:</strong>如需有關如何在 Google Play 中發行 Wear 應用程式的資訊,請參閱<a href="{@docRoot}distribute/googleplay/wear.html">散佈至 Android Wear</a>。
+</p>
+
+
+<p style="margin-top:30px;">
+  <strong>若我的應用程式不符合 Wear 需求,我的新應用程式或更新後的應用程式是否仍顯示在 Google Play 中針對手機與平板電腦的位置,並且仍會安裝在穿戴式裝置上?</strong>
+</p>
+<p>
+  是。上述需求僅判斷在 Google Play 上是否將您的應用程式視為 Android Wear 應用程式,以及該應用程式是否可供 Android Wear 使用者更輕鬆地探尋。若未接受您的應用程式為 Wear 應用程式,仍會向其他裝置類型 (例如手機或平板電腦) 提供該應用程式,並且仍會安裝在穿戴式裝置上。
+</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd
new file mode 100644
index 0000000..3364e49
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/start.jd
@@ -0,0 +1,137 @@
+page.title=開始發行
+page.metaDescription=透過註冊開發人員帳戶,在 Google Play 上只需數分鐘即可開始發行。
+meta.tags="publishing"
+page.tags="google play", "publishing", "register", "signup"
+page.image=/distribute/images/getting-started.jpg
+
+@jd:body
+
+<div class="top-right-float" style="margin-right:24px;margin-top:-18px">
+  <a href="https://play.google.com/apps/publish/"><img src="{@docRoot}images/gp-start-button.png"></a>
+</div>
+
+<p>
+  透過以下方式,在 Google Play 上只需數分鐘即可開始發行:
+</p>
+
+<ul>
+  <li>註冊 Google Play 發行人員帳戶
+  </li>
+
+  <li>若您希望販售應用程式或應用程式內產品,請設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶)。
+  </li>
+
+  <li>探索 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a> 與發行工具。
+  </li>
+</ul>
+
+<p>
+  準備就緒後,請使用 [開始] 按鈕移至 Developer Console。
+</p>
+
+<div class="headerLine">
+  <h2>
+    註冊發行人員帳戶
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      秘訣
+    </h2>
+
+    <ul>
+      <li>您需要註冊 Google 帳戶。在程序執行期間,您可以建立 Google 帳戶。
+      </li>
+
+      <li>若您是組織,請考慮註冊新的 Google 帳戶,而非使用個人帳戶。
+      </li>
+
+      <li>檢閱您可以散佈及販售應用程式的<a
+href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=138294">開發人員國家/地區</a>與<a
+href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">商家國家/地區</a>。
+      </li>
+    </ul>
+  </div>
+</div>
+
+<ol>
+  <li>造訪 <a href="https://play.google.com/apps/publish/">Google Play Developer Console</a>。
+  </li>
+
+  <li>輸入有關您<strong>開發人員身分</strong>的基本資訊 (名稱、電子郵件地址等)。您可在稍後修改此資訊。
+  </li>
+
+  <li>閱讀並接受您所在國家/地區的<strong>開發人員散佈合約</strong>。請注意,您在 Google Play 上發行的應用程式與市集清單必須遵循開發人員計劃政策以及美國出口法規。
+  </li>
+
+  <li>使用 Google Wallet 支付 <strong>$25 美元的註冊費</strong>。若您沒有 Google Wallet 帳戶,可以在程序執行期間快速設定該帳戶。
+  </li>
+
+  <li>確認您的註冊後,會向註冊期間輸入的電子郵件地址傳送電子郵件以通知您。
+  </li>
+</ol>
+
+<div class="headerLine">
+  <h2 id="merchant-account">
+    設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶)
+  </h2>
+
+
+</div>
+
+<div class="figure" style="width:200px;">
+  <img src="{@docRoot}images/gp-start-wallet-icon.png">
+</div>
+
+<p>
+  若您希望販售付費應用程式、應用程式內產品或訂閱,需要具有 Google Wallet Merchant Account (Google 電子錢包商家帳戶)。您隨時可以設定該帳戶,但請先檢閱<a
+href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=150324">商家國家/地區</a>的清單。<br>
+  <br>
+  設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶) 的步驟:<br>
+  <br>
+</p>
+
+<ol>
+  <li>
+    <strong>登入</strong>至您的 Google Play Developer Console,網址為 <a href="https://play.google.com/apps/publish/" target="_blank">https://play.google.com/apps/publish/</a>。
+  </li>
+
+  <li>開啟側面導覽列上的 [財務報告] <strong></strong><img src="{@docRoot}images/distribute/console-reports.png">。 </li>
+
+  <li>按一下 [立即設定商家帳戶]<strong></strong>。
+  </li>
+</ol>
+
+<p>
+  此操作將引導您進入 Google Wallet 網站,您需要使用有關貴企業的資訊完成此步驟。
+</p>
+
+<div class="headerLine">
+  <h2>
+    探索 Developer Console
+  </h2>
+
+
+</div>
+
+<p>
+  確認您的註冊後,您可以登入至 Developer Console,這是您的應用程式發行操作與工具在 Google Play 上的基地。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-dc-home.png" class="border-img">
+</div>
+
+<div class="headerLine">
+<h2 id="related-resources">相關資源</h2><hr />
+</div>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/googleplay/gettingstarted"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3"
+  data-maxResults="6"></div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd
new file mode 100644
index 0000000..c4f7a7c
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/tv.jd
@@ -0,0 +1,210 @@
+page.title=散佈至 Android 電視
+page.image=/design/tv/images/atv-home.jpg
+meta.tags="tv", "publish", "quality"
+page.tags="tv", "publish", "googleplay"
+page.metaDescription=將您的應用程式、遊戲與內容散佈至 Android 電視。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>如何參加</h2>
+<ol>
+<li><a href="#understand_guidelines">了解指導方針</a></li>
+<li><a href="#develop_app">開發適用於電視的卓越應用程式</a></li>
+<li><a href="#test_app">測試電視應用程式品質</a></li>
+<li><a href="#opt_in">選擇</a></li>
+<li><a href="#track_review">追蹤檢閱</a></li>
+</ol>
+
+<h2>您也應閱讀</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  若您開發出卓越的應用程式或遊戲,Android 電視與 Google Play 可協助您將其提供給客廳中的使用者。您可以採用針對電視進行最佳化的店面形式,來提供應用程式與遊戲。您可以延伸適用於電視的新應用程式或既有應用程式,然後在 Google Play 中使用熟悉的工具與程序發行這些應用程式。
+</p>
+
+<p>
+  若要開始,請檢閱本文件的各節,以了解如何透過 Google Play 將您的電視應用程式散佈至使用者。如需有關您的應用程式應符合的可用性與品質標準的資訊,請務必閱讀<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>。若應用程式已準備就緒,您可以選擇在 Developer Console 的 Android 電視店面中發行。
+</p>
+
+<h2 id="how_to_participate">
+  如何參加
+</h2>
+
+<p>
+  藉由 Google Play,您可以向客廳中的新使用者展示您的電視應用程式。您可以使用既有的 Developer Console 帳戶以及目前的散佈與定價設定來執行開發與發行。參加方式非常簡單,以下諸節將說明參加程序。
+</p>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-tv-process.png">
+</div>
+
+<h3 id="understand_guidelines">
+  1.了解指導方針與需求
+</h3>
+
+<p>
+  若要準備在 Android 電視上成功推出應用程式,首先請檢閱有關在電視上營造絕佳應用程式體驗的指導方針。請參閱 <a href="{@docRoot}design/tv/index.html">Android 電視設計指導方針</a>,以了解延伸電視所適用應用程式的創意,以及有關設計與可用性的詳細資料。
+</p>
+
+<p>
+  著手設計電視體驗時,請確保閱讀並了解電視應用程式的品質準則。適用於 Android 電視的 Google Play 體驗<strong>只會展示電視上可以使用的應用程式</strong>,若您的應用程式符合一組基本的品質準則,則可以參加。如需詳細資料,請參閱<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>。
+</p>
+
+<h3 id="develop_app">2.開發適用於電視的卓越應用程式</h3>
+
+<p>
+  適用於電視的卓越應用程式針對在客廳使用而設計,可利用 Android 電視的功能以及相關輸入配件 (例如遊戲手把、D-pad 及遙控器)。應用程式經過改進,以便在大螢幕上提供完美的高品質體驗,並為使用者提供引人注目的功能組。
+</p>
+
+<p>
+  考慮電視應用程式時,請檢閱<a href="{@docRoot}training/tv/start/index.html">開發人員文件</a>以及可用性指導方針,然後對以可能的最大限度提供支援進行規劃。請確保為使用者設計絕佳的可靠體驗,並使用 SDK 中包括的可靠資源庫營造該體驗。您會希望針對電視使用狀況對應用程式的其他部分進行最佳化,在開發程序的早期確認這些部分是不錯的想法。
+</p>
+
+<p>
+  在大多數狀況下,我們建議在提供用於手機、平板電腦及其他裝置的既有應用程式過程中,提供電視應用程式 (使用相同的套件名稱與市集清單) 的體驗。藉由此方法,使用者可以順利升級至您的電視體驗,您也可以利用在應用程式用於手機與平板電腦時所取得的評論與評分。
+</p>
+
+<p>
+  對於支援的所有裝置,您可將電視意圖、可靠資源庫、電視特定程式碼及資源包含在單一 APK 解決方案中。若需要,您可以使用<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支援</a>向 Android 電視裝置提供自訂二進位檔案 (使用用於手機與平板電腦的相同套件名稱與市集清單)。
+</p>
+
+<p>
+  在整個設計與開發過程中,請務必採用適當的裝置執行使用者體驗的原型建立與測試。您應儘早取得一或多個 Android 電視裝置或模擬器,並設定測試環境。建議在 Android 電視環境中供測試的硬體裝置為 Nexus Player,<a href="http://www.google.com/intl/all/nexus/player/">Google Play</a> 與其他市集可提供該裝置,此外,您還應取得遊戲手把及其他電視輸入裝置。
+</p>
+
+<h3 id="test_app">3.測試電視應用程式品質</h3>
+
+<p>
+  應將您的電視應用程式設計為在 Android 電視上具有良好的執行狀況與極佳的外觀,並提供可能最優的使用者體驗。Google Play 會顯示高品質的應用程式,以降低使用者在 Google Play 中的探尋難度。以下說明您如何參加並提供使用者會喜愛的 Android 電視應用程式。
+</p>
+
+<ul>
+  <li>符合核心應用程式品質指導方針 <ul>
+      <li>遵循 <a href="{@docRoot}design/index.html">Android 設計指導方針</a>。請格外注意在應用程式中使用<a href="http://www.google.com/design/spec/material-design/introduction.html">材料設計</a>。
+      </li>
+
+      <li>根據<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質指導方針</a>測試您的應用程式。
+      </li>
+    </ul>
+  </li>
+  <li>符合<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>指導方針 <ul>
+      <li>遵循<a href="{@docRoot}training/tv/index.html">電視應用程式開發</a>的最佳做法</li>
+      <li>確保您的應用程式符合所有<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則</li>
+    </ul>
+  </li>
+  <li>盡力實現簡易性與最高的可用性</li>
+</ul>
+
+<h3 id="opt_in">4.選擇 Android 電視並發行</h3>
+
+<p>
+  若您已建置準備發行的 APK,並已進行測試,確保其符合所有<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>指導方針,請將其上傳至 Developer Console。使用電視螢幕擷取畫面與電視橫幅更新您的市集清單,然後視需要設定散佈選項。若您不熟悉如何在 Google Play 上準備推出應用程式,請參閱<a href="{@docRoot}distribute/googleplay/publish/preparing.html">推出檢查清單</a>。
+</p>
+
+<p>
+  您需要先從 Developer Console 的 [定價與散佈]<strong></strong> 區段中選擇 Android 電視,然後才能發佈至 Android 電視使用者。該選擇意味著您希望透過 Google Play 為 Android 電視使用者提供您的應用程式,且您的應用程式符合<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>指導方針。
+</p>
+
+<p>
+  只有在您的應用程式符合上傳 APK 時會自動檢查的以下兩項初級品質準則時,才可以進行選擇:
+</p>
+
+<ul>
+  <li>您的應用程式宣示說明必須包括 <a href="{@docRoot}reference/android/content/Intent.html#ACTION_MAIN"><code>ACTION_MAIN</code></a> 意圖類型,以及 <a href="{@docRoot}reference/android/content/Intent.html#CATEGORY_LEANBACK_LAUNCHER"><code>CATEGORY_LEANBACK_LAUNCHER</code></a> 類別。請在<a href="{@docRoot}training/tv/start/start.html#tv-activity">這裡</a>深入了解。
+  </li>
+
+  <li>您的應用程式必須宣告其不需要觸控螢幕。宣示說明必須使用 <code>android:required="false”</code> 宣告 <code>android.hardware.touchscreen</code> 硬體。請在<a href="{@docRoot}training/tv/start/hardware.html#declare-hardware-requirements">這裡</a>深入了解。
+  </li>
+</ul>
+
+<p>
+  若您的應用程式符合上述初級準則,您將看到 Android 電視的選擇核取方塊,如下所示。若未啟用選擇核取方塊,請檢閱您的 APK,以確保其符合上述初級準則。
+</p>
+
+<p>
+  您選擇並儲存變更後,即可照常發行應用程式。在向 Android 電視使用者提供應用程式之前,Google Play 會提交您的應用程式以根據<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則進行檢閱,並向您通知結果。如需有關如何追蹤您應用程式核准狀態的詳細資料,請參閱下一節。
+</p>
+
+<p>
+  若您的應用程式符合<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則,Google Play 會向 Android 電視使用者提供該應用程式。您的應用程式也有資格成為應用程式集合與推廣中展示機會更多的精選應用程式。為了讓各地的使用者知道您的應用程式針對 Android 電視而設計,Google Play 會為應用程式的市集清單新增電視徽章。
+</p>
+
+<p>
+  請注意,選擇與檢閱不會影響您的應用程式對 Google Play 市集內其他裝置的可用性,例如在電話或平板電腦上,您的應用程式一經發行即可使用。
+</p>
+
+<p>
+  在 Developer Console 中選擇 Android 電視的步驟如下:
+</p>
+
+<ol>
+  <li>請確保您的應用程式符合所有<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>準則
+  </li>
+
+  <li>將電視螢幕擷取畫面與橫幅圖形新增至應用程式的市集清單
+  </li>
+
+  <li>在 [所有應用程式]<strong></strong> 頁面中,按一下您希望選擇的應用程式。
+  </li>
+
+  <li>在 [定價與散佈]<strong></strong> 下,向下捲動以尋找 <em>Android 電視</em>及選擇核取方塊。
+  </li>
+
+  <li>按一下 [將您的應用程式散佈至 Android 電視]<em></em> 旁的核取方塊。
+  </li>
+
+  <li>按一下 [儲存]<strong></strong> 以儲存變更。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-tv-opt-in.png">
+  <p class="caption">
+    <strong>電視選擇:</strong>從 Developer Console 中選擇 Android 電視,以便將應用程式包括在 Android 電視中。
+  </p>
+</div>
+
+<h3 id="track_review">5.追蹤您的檢閱與核准</h3>
+
+<p>
+  若您的應用程式符合 Android 電視的技術與品質準則 (如上所述),則會向 Android 電視的使用者提供您的應用程式。若您的應用程式不符合該準則,您將收到<strong>傳送至您開發人員帳戶地址的通知電子郵件</strong>,內含需要修正的領域的摘要。若您已進行所需調整,可以將新版本的應用程式上傳至 Developer Console。 
+</p>
+
+<p>
+  在 Developer Console 中,您隨時可以在應用程式 [定價與散佈] <strong></strong> 頁面中的 [Android 電視]<em></em> 下,檢查應用程式的檢閱與核准狀態。
+</p>
+
+<p>
+  存在三種核准狀態:
+</p>
+
+<ul>
+  <li>
+    <em>待決</em> - 已傳送您的應用程式供檢閱,檢閱尚未完成。
+  </li>
+
+  <li>
+    <em>已核准</em> - 已檢閱並核准您的應用程式。會直接向 Android 電視使用者提供該應用程式。 
+  </li>
+
+  <li>
+    <em>未核准</em> - 已檢閱但未核准您的應用程式。如需有關為何未核准應用程式的資訊,請檢查通知電子郵件。您可以解決所有問題,然後再次選擇並發行,以啟動另一次檢閱。
+  </li>
+</ul>
+
+<p>若要了解您應用程式的評估方式,請參閱<a href="{@docRoot}distribute/essentials/quality/tv.html">電視應用程式品質</a>文件。 </p>
+
+
+  <h3>相關資源</h3>
+
+  <div class="resource-widget resource-flow-layout col-16"
+    data-query="collection:tvlanding"
+    data-cardSizes="9x6, 6x3x2"
+    data-maxResults="6">
+  </div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd
new file mode 100644
index 0000000..19a48f5
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/wear.jd
@@ -0,0 +1,199 @@
+page.title=散佈至 Android Wear
+page.image=/design/media/wear/ContextualExample.008_2x.png
+meta.tags="wear", "publish", "quality"
+page.tags="wear", "publish", "googleplay"
+page.metaDescription=將您的應用程式、遊戲與內容散佈至 Android Wear。
+
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>如何參加</h2>
+<ol>
+<li><a href="#understand_guidelines">了解指導方針</a></li>
+<li><a href="#develop_app">開發適用於 Wear 的卓越應用程式</a></li>
+<li><a href="#test_app">測試 Wear 應用程式品質</a></li>
+<li><a href="#opt_in">選擇</a></li>
+<li><a href="#track_review">追蹤檢閱</a></li>
+</ol>
+
+<h2>您也應閱讀</h2>
+<ol>
+<li><a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a></li>
+<li><a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a></li>
+</ol>
+
+</div></div>
+
+<p>
+  若您開發出卓越的應用程式,Android Wear 與 Google Play 可協助您將其提供給使用者。雖然所有應用程式都可將基本通知傳送至 Android Wear 裝置,但是您可以使用較此更多的功能。延伸您的應用程式以支援自訂 Wear 互動,並在所有 Wear 裝置上提供經過改進且極具吸引力的使用者體驗。若您的應用程式符合手機上核心應用程式品質指導方針,並為 Android Wear 裝置提供高品質的體驗,Google Play 會展示您的應用程式以簡化探尋。
+</p>
+
+<p>
+  若要開始,請檢閱本文件的各節,以了解如何透過 Google Play 將您的 Wear 應用程式散佈至使用者。如需有關您的應用程式應符合的可用性與品質標準的資訊,請務必閱讀 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>。若應用程式已準備就緒,您可以從 Developer Console 中選擇作為 Android Wear 應用程式的名稱。
+</p>
+
+<h2 id="how_to_participate">
+  如何參加
+</h2>
+
+<p>
+  藉由 Google Play,您可讓 Wear 使用者更容易探尋到您的 Wear 應用程式。您可以使用既有的 Developer Console 帳戶以及目前的散佈與定價設定來執行開發與發行。參加方式非常簡單,以下諸節將說明參加程序。
+</p>
+
+<h3 id="understand_guidelines">
+  1.了解指導方針與需求
+</h3>
+
+<div style="float:right;margin:1em 0 1.5em 2em;">
+  <img src="{@docRoot}images/gp-wear-process.png">
+</div>
+
+<p>
+  若要準備在 Android Wear 上成功推出應用程式,首先請檢閱有關在 Wear 上營造絕佳應用程式體驗的指導方針。請參閱 <a href="{@docRoot}design/wear/index.html">Android Wear 設計指導方針</a>,以了解延伸 Wear 所適用應用程式的創意,以及有關設計與可用性的詳細資料。
+</p>
+
+<p>
+  著手設計 Wear 體驗時,請確保閱讀並了解 Wear 應用程式的品質準則。在 Google Play 上,只會將可以在 Wear 上使用的應用程式指定為 Wear 應用程式,若您的應用程式符合一組基本的品質準則,則可以參加。如需詳細資料,請參閱 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>。
+</p>
+
+<h3 id="develop_app">2.開發適用於 Wear 的卓越應用程式</h3>
+
+<p>
+閱讀指導方針後,下一步是開發應用程式。以下各節將描述如何開始為 Wear 建置絕佳的應用程式體驗。
+</p>
+
+<h4>設計第一</h4>
+
+<p>
+  Android Wear 旨在於正確的時間為使用者提供正確的資訊。Android Wear 自動啟動,可供簡略瀏覽,需要很少或不需要使用者介入,從而提供絕佳體驗。雖然所有應用程式都能將基本通知傳送至 Wear 裝置而無需修改,但是為 Wear 建置的卓越應用程式經過改進,可提供完美的高品質體驗、使用不同的螢幕版面配置,並為使用者提供引人注目的功能組。
+</p>
+
+<p>
+  考慮 Wear 應用程式時,請檢閱<a href="{@docRoot}training/building-wearables.html">開發人員文件</a>以及<a href="{@docRoot}design/wear/index.html">可用性指導方針</a>,然後對以可能的最大限度加以使用進行規劃。您可以使用 SDK 與支援資源庫中提供的 API 為使用者設計絕佳的通知體驗。此外,您還可以選擇建置直接在穿戴式裝置上執行的應用程式。
+</p>
+
+<h4>封裝您的應用程式</h4>
+
+<p>
+  我們建議在提供用於手機、平板電腦及其他裝置的既有應用程式過程中,提供 Wear 應用程式 (使用相同的套件名稱與市集清單) 的體驗。藉由此方法,使用者可以順利升級至您的 Wear 體驗,您也可以利用在應用程式用於手機與平板電腦時所取得的評論與評分。若穿戴式裝置應用程式依賴某應用程式來發揮功能,應始終將穿戴式裝置應用程式封裝在該應用程式中。若要了解封裝方式,請參閱<a href="{@docRoot}training/wearables/apps/packaging.html">封裝穿戴式裝置應用程式</a>。
+</p>
+
+<h4>在多種裝置上進行測試</h4>
+
+<p>
+  在整個設計與開發過程中,請務必採用適當的裝置執行使用者體驗的原型建立與測試。強烈建議您儘早取得一或多個 Android Wear 裝置,或使用不同的模擬器組態進行開發,並設定測試環境。請務必在方形與圓形版面配置上最佳化您的設計。
+</p>
+
+<h3 id="test_app">3.測試 Wear 應用程式品質</h3>
+
+<p>
+  應將您的 Wear 應用程式設計為在 Android Wear 上具有良好的執行狀況與極佳的外觀,並應提供可能最優的使用者體驗。Google Play 會展示所選的高品質 Wear 應用程式以簡化探尋。以下說明您如何參加並提供使用者會喜愛的 Android Wear 應用程式:
+</p>
+
+<ul>
+  <li>符合核心應用程式品質指導方針 <ul>
+      <li>遵循 <a href="{@docRoot}design/index.html">Android 設計指導方針</a>。請格外注意在應用程式中使用<a href="http://www.google.com/design/spec/material-design/introduction.html">材料設計</a>。
+      </li>
+
+      <li>根據<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質指導方針</a>測試您的應用程式。
+      </li>
+    </ul>
+  </li>
+  <li>符合 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則 <ul>
+      <li>遵循 <a href="{@docRoot}training/building-wearables.html">Wear 應用程式開發</a>的最佳做法</li>
+      <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則</li>
+    </ul>
+  </li>
+</ul>
+
+<h3 id="opt_in">4.選擇 Android Wear 並發行</h3>
+
+<p>
+  若您已建置準備發行的 APK,並已進行測試,確保其符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則,請將其上傳至 Developer Console。使用 Wear 螢幕擷取畫面更新您的市集清單,然後視需要設定散佈選項。若您不熟悉如何在 Google Play 上準備推出應用程式,請參閱<a href="{@docRoot}distribute/googleplay/publish/preparing.html">推出檢查清單</a>。
+</p>
+
+<p>
+  您可以先從 Developer Console 的 [定價與散佈]<strong></strong> 區段中選擇 Android Wear,然後發佈至使用者。該選擇意味著您希望透過 Google Play 讓 Android Wear 使用者更容易探尋您的應用程式,且您的應用程式符合 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則。
+</p>
+
+<p>
+  您選擇並儲存變更後,即可照常發行應用程式。此外,Google Play 會提交您的應用程式以根據 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則進行檢閱,並向您通知結果。如需有關如何追蹤您應用程式核准狀態的詳細資料,請參閱下一節。
+</p>
+
+<p>
+  若您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則,Google Play 會讓 Android Wear 使用者更容易探尋該應用程式。您的應用程式也有資格成為應用程式集合與推廣中展示機會更多的精選應用程式。
+</p>
+
+<p>
+  請注意,選擇與檢閱不會影響您的應用程式在 Google Play 市集內的可用性,您的應用程式一經發行即可使用。
+</p>
+
+<p>
+  在 Developer Console 中選擇 Android Wear 的步驟如下:
+</p>
+
+<ol>
+  <li>確保您的應用程式符合所有 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>準則
+  </li>
+
+  <li>將 Wear 螢幕擷取畫面新增至應用程式的市集清單
+  </li>
+
+  <li>在 [所有應用程式]<strong></strong> 頁面中,按一下您希望選擇的應用程式。
+  </li>
+
+  <li>在 [定價與散佈]<strong></strong> 下,向下捲動以尋找 <em>Android Wear</em> 及選擇核取方塊。
+  </li>
+
+  <li>按一下 [在 Android Wear 上散佈您的應用程式]<em></em> 旁的核取方塊。
+  </li>
+
+  <li>按一下 [儲存]<strong></strong> 以儲存 [定價與散佈] 的變更。
+  </li>
+</ol>
+
+<div style="padding-top:1em">
+  <img style="border:2px solid #ddd;" src="{@docRoot}images/gp-wear-opt-in.png">
+  <p class="caption">
+    <strong>Wear 選擇:</strong>從 Developer Console 中選擇 Android Wear,以便將應用程式包括在 Android Wear 中。
+  </p>
+</div>
+
+<h3 id="track_review">5.追蹤您的檢閱與核准</h3>
+
+<p>
+  若您的應用程式符合 Android Wear 的技術與品質準則 (如上所述),則 Android Wear 上的使用者能更輕鬆地探尋您的應用程式。若您的應用程式不符合該準則,您將收到<strong>傳送至您開發人員帳戶地址的通知電子郵件</strong>,內含需要修正的領域的摘要。若您已進行所需調整,可以將新版本的應用程式上傳至 Developer Console。
+</p>
+
+<p>
+  在 Developer Console 中,您隨時可以在應用程式 [定價與散佈] <strong></strong> 頁面中的 [Android Wear]<em></em> 下,檢查應用程式的檢閱與核准狀態。
+</p>
+
+<p>
+  存在三種核准狀態:
+</p>
+
+<ul>
+  <li>
+    <em>待決</em> - 已傳送您的應用程式供檢閱,檢閱尚未完成。
+  </li>
+
+  <li>
+    <em>已核准</em> - 已檢閱並核准您的應用程式。Android Wear 使用者可以更輕鬆地探尋該應用程式。
+  </li>
+
+  <li>
+    <em>未核准</em> - 已檢閱但未核准您的應用程式。如需有關為何未核准應用程式的資訊,請檢查通知電子郵件。您可以解決所有問題,然後再次選擇並發行,以啟動另一次檢閱。
+  </li>
+</ul>
+
+<p>若要了解您應用程式的評估方式,請參閱 <a href="{@docRoot}distribute/essentials/quality/wear.html">Wear 應用程式品質</a>文件。 </p>
+
+
+  <h3>相關資源</h3>
+
+  <div class="resource-widget resource-flow-layout col-13"
+    data-query="collection:wearlanding"
+    data-cardSizes="6x2"
+    data-maxResults="3">
+  </div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd b/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd
new file mode 100644
index 0000000..6e97417
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/tools/launch-checklist.jd
@@ -0,0 +1,792 @@
+page.title=推出檢查清單
+page.metaDescription=為使用者提供應用程式這一完整程序的基本概述。請在開發時儘早閱讀本檢查清單,以協助您為實現在 Google Play 上成功推出應用程式而進行規劃。
+meta.tags="localizing, publishing, disttools"
+page.tags="launch, publishing, Google Play"
+page.image=/distribute/images/launch-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>檢查清單</h2>
+    <ol>
+      <li><a href="#understand-publishing">1.了解發行程序</a></li>
+      <li><a href="#understand-policies">2.了解 Google Play 政策</a></li>
+      <li><a href="#test-quality">3.測試核心應用程式品質</a></li>
+      <li><a href="#determine-rating">4.判斷內容評分</a></li>
+      <li><a href="#determine-country">5.判斷國家/地區散佈</a></li>
+      <li><a href="#confirm-size">6.確認整體大小</a></li>
+      <li><a href="#confirm-platform">7.確認平台與螢幕範圍</a></li>
+      <li><a href="#decide-price">8.決定免費還是付費</a></li>
+      <li><a href="#consider-billing">9.使用應用程式內交易</a></li>
+      <li><a href="#set-prices">10.為您的產品設定價格</a></li>
+      <li><a href="#start-localization">11.開始當地語系化</a></li>
+      <li><a href="#prepare-graphics">12.準備推廣圖形、螢幕擷取畫面及影片</a></li>
+      <li><a href="#build-upload">13.建置準備發行的 APK</a></li>
+      <li><a href="#plan-beta">14.規劃 Beta 版</a></li>
+      <li><a href="#complete-details">15.完成市集清單</a></li>
+      <li><a href="#use-badges">16.使用 Google Play 徽章與連結</a></li>
+      <li><a href="#final-checks">17.最終檢查及發行</a></li>
+      <li><a href="#support-users">18.在推出後支援使用者</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px"><img src="{@docRoot}distribute/images/launch-checklist.jpg"></div>
+
+<p>
+  在 Google Play 上發行應用程式及將其散佈至使用者之前,您需要準備好應用程式、對其進行測試,並準備推廣材料。
+</p>
+
+<p>
+  本頁面將協助您了解發行程序,並為在 Google Play 上成功推出產品做好準備。本頁面將概述您在 Google Play 上發行應用程式之前需要完成的某些任務,例如建立準備發行的已簽署應用程式套件 (APK)、了解應用程式的需求,以及為您的每個應用程式建立產品頁面與圖形資產。
+</p>
+
+<p>
+  準備與發行任務會進行編號,以便您可以大致了解任務序列。但是,您可以透過適用於您的任何順序來處理任務,可以視需要略過任何步驟。
+</p>
+
+<p>
+  為了發行應用程式而逐步完成工作時,您將取得多種支援資源。每個步驟中將提供相關連結。
+</p>
+
+<div class="headerLine">
+  <h2 id="understand-publishing">
+    1.了解發行程序
+  </h2>
+
+
+</div>
+
+<p>
+  您應先花一點時間閱讀並了解發行的整體工作流程,並熟悉該程序的運作方式,然後再開始執行本檢查清單中的步驟。尤其是您或您的開發團隊需要準備應用程式,以使用所有 Android 應用程式通用的程序進行發行。<a href="{@docRoot}tools/publishing/publishing_overview.html">發行工作流程文件</a>將提供有關發行如何運作以及如何準備好 APK 以執行發行的詳細資料。
+</p>
+
+<p>
+  通常在熟悉發行之後,請繼續進行閱讀,以了解在 Google Play 上發行應用程式時應考慮的問題。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/understanding"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="understand-policies">
+    2.了解 Google Play 政策與合約
+  </h2>
+
+
+</div>
+
+<p>
+  請確保您已了解並遵循在註冊時已接受的 Google Play 計劃政策。Google Play 會主動強制執行政策,任何違規都會導致您的應用程式擱置,若發生重複違規,會終止您的開發人員帳戶。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/policies" data-sortorder=
+"-timestamp" data-cardsizes="6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test-quality">
+    3.測試品質
+  </h2>
+
+
+</div>
+
+<p>
+  在 Google Play 上發行應用程式之前,請務必確保在您針對的所有裝置上,這些應用程式都能符合對所有 Android 應用程式的基本品質預期。您可以設定測試環境,並根據<strong>適用於所有應用程式的一組簡短的品質準則</strong>對應用程式進行測試,以檢查應用程式的品質。如需完備資訊,請參閱<a href="{@docRoot}distribute/essentials/quality/core.html">核心應用程式品質</a>指導方針。
+</p>
+
+<p>
+  若您的應用程式針對平板電腦裝置,請確保該應用程式能為平板電腦客戶提供引人注目的豐富體驗。請參閱<a href="{@docRoot}distribute/essentials/quality/tablets.html">平板電腦應用程式品質</a>指導方針,以了解針對平板電腦對您的應用程式執行最佳化所採用方式的有關建議。
+</p>
+
+<p>
+  若計劃讓您的應用程式可供 Google Play for Education 使用,您需要確保應用程式適合 K-12 教室,並確保其能提供出眾的教育價值。如需了解您的教育應用程式應展示特性的有關資訊,請參閱<a href="{@docRoot}distribute/essentials/gpfe-guidelines.html">教育指導方針</a>。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/quality" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-rating">
+    4.判斷您應用程式的內容評分
+  </h2>
+
+
+</div>
+
+<p>
+  Google Play 需要您設定應用程式的內容評分,該評分會向 Google Play 使用者通知應用程式的成熟度層級。發行之前,您應確認要使用的評分層級。可用的內容評分層級如下:
+</p>
+
+<ul>
+  <li>
+    <p>
+      所有人
+    </p>
+  </li>
+
+  <li>
+    <p>
+      低成熟度
+    </p>
+  </li>
+
+  <li>
+    <p>
+      中成熟度
+    </p>
+  </li>
+
+  <li>
+    <p>
+      高成熟度
+    </p>
+  </li>
+</ul>
+
+<p>
+  在 Android 裝置上,Android 使用者可以設定所需的成熟度層級以供瀏覽。隨後,Google Play 會根據該設定對應用程式進行篩選,因此您選取的內容評分可以影響應用程式向使用者的散佈。您可以在 Developer Console 中指派 (或變更) 應用程式的內容評分,不需要在您的二進位檔案中進行任何變更。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/rating" data-sortorder=
+"-timestamp" data-cardsizes="9x3,6x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="determine-country">
+    5.判斷國家/地區散佈
+  </h2>
+
+
+</div>
+
+<p>
+  藉由 Google Play,您可以控制將您的應用程式散佈至哪些國家/地區。為了實現最廣泛的散佈並擁有可能最大的客戶群,通常您會希望將應用程式散佈至能力所及的所有國家/地區。但是,由於業務需求、應用程式需求或推出相依性等原因,您可能希望將一或多個國家/地區排除在散佈範圍之外。
+</p>
+
+<p>
+  請務必儘早判斷散佈的確切國家/地區,因為這會影響以下項目:
+</p>
+
+<ul>
+  <li>
+    <p>
+      對應用程式中當地語系化資源的需求。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      對 Developer Console 中當地語系化應用程式描述的需求。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      可能特定於某些國家/地區的應用程式所遵循的法律需求。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      時區支援、本地定價等。
+    </p>
+  </li>
+</ul>
+
+<p>
+  對於您要針對的國家/地區,您應評估當地語系化需求 (從您的應用程式及其 Google Play 清單詳細資料兩方面),並在您預期的推出日期之前開始當地語系化工作。
+</p>
+
+<p>
+  如需了解當地語系化程序的關鍵步驟與考量事項,請參閱<a href="{@docRoot}distribute/tools/localization-checklist.html">當地語系化檢查清單</a>。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/country" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-size">
+    6.確認應用程式的整體大小
+  </h2>
+
+
+</div>
+
+<p>
+  應用程式的整體大小會影響其設計以及在 Google Play 上的發行方式。目前,在 Google Play 上發行的最大 APK 大小為 <strong>50 MB</strong>。若您的應用程式超出該大小,或您希望提供次要下載,可以使用 <a href="{@docRoot}google/play/expansion-files.html">APK 擴充檔案</a>,Google Play 會在其伺服器基礎架構上免費主控這些檔案,並自動處理裝置的下載。
+</p>
+
+<ul>
+  <li>
+    <p>
+      在 Google Play 上發行的最大 APK 大小為 50 MB。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      對於每個 APK,您可以使用最多兩 (2) 個 APK 擴充檔案,每個最大為 2GB。
+    </p>
+  </li>
+</ul>
+
+<p>
+  使用 APK 擴充檔案是 散佈大型應用程式的極具成本效益的便利方式。但是,使用 APK 擴充檔案需要在您的應用程式二進位檔案中進行某些變更,因此您需要先進行這些變更,然後再建立準備發行的 APK。
+</p>
+
+<p>
+  若要最大限度降低應用程式二進位檔案的大小,請確保在建置準備發行的 APK 時,對您的程式碼執行 <a href="{@docRoot}tools/help/proguard.html">Proguard</a> 工具或類似擾亂器。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/size" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="confirm-platform">
+    7.確認應用程式的平台與螢幕相容性範圍
+  </h2>
+
+
+</div>
+
+<p>
+  在發行之前,請務必確保您的應用程式專為在您希望針對的 Android 平台版本與裝置螢幕大小上正確執行而設計。
+</p>
+
+<p>
+  從應用程式相容性的視角看來,Android 平台版本由 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API 層級</a>定義。您應確認應用程式與 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;minSdkVersion&gt;</a> 相容的最低版本,因為這會影響應用程式在發行後向 Android 裝置的散佈。
+</p>
+
+<p>
+  對於螢幕大小,您應確認在您希望支援的螢幕大小與像素密度範圍內,應用程式能正確執行並具有良好的外觀。您應遵循<a href="{@docRoot}guide/practices/screens_support.html">支援多個螢幕</a>中提供的建議,為多個螢幕大小提供可擴充的支援。但是,若您未能執行此操作,請使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a> 宣告應用程式支援的最小螢幕。隨後 Google Play 會對應用程式的可用性進行相應限制,使其可供至少具有所宣告螢幕大小的裝置使用。
+</p>
+
+<p>
+  若要更好地了解 Android 平台版本的目前裝置滲透力及所有 Android 裝置中的螢幕大小,請參閱<a href="{@docRoot}about/dashboards/index.html">裝置儀表板</a>圖表。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/platform" data-sortorder=
+"-timestamp" data-cardsizes="6x3,6x3,6x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="decide-price">
+    8.決定您的應用程式是免費還是付費
+  </h2>
+
+
+</div>
+
+<div class="figure">
+  <img src="{@docRoot}images/gp-launch-checklist-1.png">
+</div>
+
+<p>
+  在 Google Play 上,您可以採用免費下載或付費下載的形式發行應用程式。免費應用程式可供 Google Play 中的任何 Android 使用者下載。只有位於支援付費下載的國家/地區,並已在 Google Play 中註冊付費形式 (例如信用卡或流動電訊商帳單付款服務) 的使用者,才能下載付費應用程式。
+</p>
+
+<p>
+  決定您的應用程式是免費還是付費非常重要,因為在 Google Play 上,<strong>免費應用程式必須始終免費</strong>。
+</p>
+
+<ul>
+  <li>
+    <p>
+      以免費應用程式的形式發行應用程式後,您無法將其變更為付費應用程式。但是,您仍可透過 Google Play 的<a href="{@docRoot}google/play/billing/index.html">應用程式內交易</a>服務,販售<a href="{@docRoot}google/play/billing/billing_overview.html#products">應用程式內的產品</a>與<a href="{@docRoot}google/play/billing/billing_subscriptions.html">訂閱</a>。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      若您以付費應用程式的形式發行應用程式,<em>可以</em>隨時將其變更為免費應用程式 (<strong>但此後無法再將其變更為付費應用程式</strong>)。此外,您也可以販售應用程式內產品與訂閱。
+    </p>
+  </li>
+</ul>
+
+<p>
+  若您的應用程式為付費,或您要販售應用程式內產品,需要先<a href="https://developers.google.com/wallet/digital/training/getting-started/merchant-setup">設定 Google Wallet Merchant Account (Google 電子錢包商家帳戶)</a>,然後才能發行。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/price" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="consider-billing">
+    9.考慮使用應用程式內交易
+  </h2>
+
+
+</div>
+
+<p>
+  藉由 Google Play <a href="{@docRoot}google/play/billing/index.html">應用程式內交易</a>,您可以販售應用程式內的數位內容。您可以使用該服務販售廣泛的內容,包括可下載的內容 (例如媒體檔案或相片) 與虛擬內容 (例如遊戲級別或藥劑)。藉由應用程式內交易服務,您可以從應用程式內販售一次性購買項目及訂閱項目。如此可協助您在應用程式的整個生命週期內,實現應用程式的獲利。
+</p>
+
+<p>
+  若您要尋求更多方式來實現應用程式的獲利並營造吸引力,應考慮採用應用程式內交易或立即購。這些服務在使用者與開發人員中已非常普遍。若要使用應用程式內交易或立即購,需要對您的應用程式二進位檔案進行變更,因此您需要先完成並測試您的實作,然後再建立準備發行的 APK。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/purchasemethod"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="set-prices">
+    10.為您的產品設定價格
+  </h2>
+
+
+</div>
+
+<p>
+  若您的應用程式為付費應用程式,或者您要販售應用程式內產品或實體產品,則藉由 Google Play,可為全球市場的使用者設定採用多種貨幣的產品價格。您可以個別設定採用不同貨幣的價格,因此可以根據市場狀況與匯率對價格進行靈活調整。
+</p>
+
+<p>
+  在發行之前,請考慮如何為您的產品設定價格,以及採用各種貨幣時的價格是多少。然後,可以透過 Developer Console 設定採用所有可用貨幣的價格。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/setprice" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,9x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="start-localization">
+    11.開始當地語系化
+  </h2>
+
+
+</div>
+
+<p>
+  對於您要針對的國家/地區,良好的想法是評估當地語系化需求,確保您的應用程式實現國際化,並在您預期的推出日期之前開始當地語系化工作。
+</p>
+
+<p>
+  除了應用程式設計外,至少需要考慮當地語系化的以下三個方面:
+</p>
+
+<ul>
+  <li>
+    <p>
+      對您應用程式中的字串、影像與其他資源執行當地語系化。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      對您的應用程式在 Google Play 上的市集清單詳細資料執行當地語系化。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      對市集清單隨附的應用程式圖形資產、螢幕擷取畫面與影片執行當地語系化。
+    </p>
+  </li>
+</ul>
+
+<p>
+  如需了解當地語系化程序的關鍵步驟與考量事項,請參閱<a href="{@docRoot}distribute/tools/localization-checklist.html">當地語系化檢查清單</a>。
+</p>
+
+<p>
+  若要對市集清單執行當地語系化,請先建立並完成應用程式標題、描述與推廣文字。收集並傳送供當地語系化的上述所有項目。此外,您也可以選擇翻譯「最近變更」文字,以說明應用程式的更新。隨後,您可在 Developer Console 中新增執行當地語系化的清單詳細資料,或者可以選擇讓 Google Play 將您的清單詳細資料自動翻譯為您支援的語言。
+</p>
+
+<p>
+  若要讓您的應用程式清單對全球客戶群具備吸引力,關鍵在於建立推廣圖形、螢幕擷取畫面及影片的當地語系化版本。例如,為了取得最大效益,您的應用程式功能圖形可能包括應翻譯的文字。您可以針對每種語言建立推廣圖形的不同版本,並將其上傳至 Developer Console。若您提供推廣影片,可以建立該影片的當地語系化版本,然後針對您支援的每種語言,新增正確的當地語系化影片的連結。
+</p>
+
+<p>
+  完成翻譯後,請視需要將其移至應用程式資源中,並測試其是否能正確載入。上傳資產並設定市集清單時,請儲存應用程式的已翻譯字串詳細資料以供稍後使用。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/localization"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="prepare-graphics">
+    12.準備推廣圖形、螢幕擷取畫面及影片
+  </h2>
+
+
+</div>
+
+<p>
+  在 Google Play 上發行時,您可以提供多種高品質圖形資產,以展示您的應用程式或品牌。在發行後,這些資產會顯示在您的市集清單頁面上、搜尋結果中以及其他位置。這些圖形資產是市集清單頁面成功吸引使用者的關鍵,因此您應考慮由專業人員來產生這些資產。螢幕擷取畫面與影片也非常重要,因為這些項目會展示應用程式的外觀、使用或播放方式,以及與眾不同之處。
+</p>
+
+<p>
+  所有圖形資產都應經過精心設計,以易於查看,並以色彩豐富、妙趣橫生的方式著重展示您的應用程式或品牌。這些資產參考的標誌與圖示應該與使用者下載應用程式後,在所有應用程式啟動器中看到的標誌與圖示相同。此外,您的圖形資產還應非常適合您所發行所有應用程式的圖形資產,使用者在您的市集清單頁面上也將看到您的圖形資產。
+</p>
+
+<p>
+  為了協助您以更有效的方式向全球受眾行銷您的應用程式,Google Play 可讓您建立推廣圖形、螢幕擷取畫面與影片的當地語系化版本,並將其上傳至 Developer Console。使用者造訪應用程式的市集清單時,Google Play 會顯示您針對使用者的語言而提供的推廣圖形、螢幕擷取畫面及影片。
+</p>
+
+<p>
+  若要對您的推廣圖形執行當地語系化,您可以翻譯內嵌文字、使用不同的圖像或簡報,或者變更行銷方法以最大限度因應特定語言使用者的需求。例如,若您的功能或推廣圖形包括內嵌的產品名稱或標語,您可以翻譯該文字,並將其新增至推廣圖形的當地語系化版本中。
+</p>
+
+<p>
+  由於當地語系化的圖形資產與影片非常重要,因此您應在預期的發行日期之前,就著手開始建立這些資產與影片,並對其執行當地語系化。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/graphics" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="build-upload">
+    13.建置並上傳準備發行的 APK
+  </h2>
+
+
+</div>
+
+<p>
+  若您對應用程式因應 UI、相容性及品質需求的狀況感到滿意,可以建置準備發行的應用程式版本。您可以將準備發行的 APK 上傳至 Developer Console,然後將其向使用者散佈。
+</p>
+
+<p>
+  對於所有應用程式而言,不論採用何種散佈方式,對準備發行的 APK 進行預備的程序都相同。一般該程序包括基本程式碼清理與最佳化、建置版本金鑰並使用版本金鑰登入,以及最終測試。
+</p>
+
+<p>
+  如需了解有關如何建立準備發行的應用程式版本的完備詳細資料,請閱讀<a href="{@docRoot}tools/publishing/preparing.html">準備發行</a>。
+</p>
+
+<p>
+  備妥準備發行的 APK 後,可以將其上傳至 Developer Console。若需要,可以在發行前使用更近的版本取代 APK。
+</p>
+<!--<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/build"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div>-->
+
+<div class="headerLine">
+  <h2 id="plan-beta">
+    14.規劃 Beta 版
+  </h2>
+
+
+</div>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      輕鬆的 beta 測試
+    </h2>
+
+    <p>
+      藉由 Google Play,您可以在全球任何地點設定多組 alpha 與 beta 測試者。下次登入 Developer Console 時,請了解這項強大功能。
+    </p>
+  </div>
+</div>
+
+<p>
+  在推出應用程式之前,取得真實的使用者回饋通常極具價值,在推出新應用程式時更是如此。強烈建議您向關鍵市場的使用者散佈應用程式的測試版,並提供簡易方式讓使用者提供回饋並報告錯誤。
+</p>
+
+<p>
+  Google Play 可以協助您設定應用程式的試用計劃。您登入 Developer Console 並上傳 APK 後,可以設定多組使用者對應用程式進行 alpha 與 beta 測試。您可以先設定 alpha 測試者的較小群組,然後設定 beta 測試者的較大群組。新增使用者後,使用者可以存取您應用程式的市集清單並安裝應用程式。<strong>alpha 或 beta 版本的使用者無法發佈評論或評分</strong>,因此<strong>對 Google Play 上您的評分並無風險</strong>。您需要針對要提供的測試回饋安排某種機制,例如 Google Forum 或 Google+。
+</p>
+
+<p>
+  您收到的回饋將協助您調整 UI、翻譯與市集清單,以確保為使用者提供絕佳的體驗。
+</p>
+<!-- Related resources
+
+<table>
+  <tr>
+    <td>Beta-testing and Staged Rollouts
+See how you can facilitate testing with Google Play.</td>
+  </tr>
+</table> -->
+
+<div class="headerLine">
+  <h2 id="complete-details">
+    15.完成應用程式的市集清單
+  </h2>
+
+
+</div>
+
+<p>
+  在 Google Play 上,將在使用者的市集清單頁面、使用者為詳細了解您的應用程式而造訪的頁面,以及使用者為決定在其 Android 裝置或網頁上購買或下載您的應用程式 而瀏覽的頁面上,向使用者展示您應用程式的產品資訊。
+</p>
+
+<p>
+  Google Play 會在您的市集清單頁面上,為您提供多種方式 (從色彩豐富的圖形、螢幕擷取畫面與影片,到當地語系化的描述、版本詳細資料與其他應用程式連結) 以推廣應用程式並吸引使用者。在準備發行您的應用程式時,請確保利用產品詳細資料頁面能提供的所有資訊,盡可能提高您的應用程式對使用者的吸引力。
+</p>
+
+<p>
+  您應在預期的推出日期之前,開始規劃產品頁面,準備當地語系化的描述、高品質的圖形資產、螢幕擷取畫面與影片等。
+</p>
+
+<p>
+  在接近預期的發行日期時,您應熟悉 Developer Console 中與市集清單組態頁面關聯的所有欄位、選項與資產。在收集頁面的資訊與資產時,請確保可將其輸入或上傳至 Developer Console,直到頁面完成且可供發行為止。
+</p>
+
+<p>
+  在 Developer Console 中設定應用程式針對的地理位置後,請謹記針對您支援的所有語言,新增當地語系化的市集清單、推廣圖形等。
+</p>
+
+<p>
+  若您的應用程式針對平板電腦裝置,請確保納入平板電腦上所執行應用程式的至少一個螢幕擷取畫面,並在應用程式描述、版本資訊、推廣活動及其他位置著重展示您的應用程式對平板電腦的支援。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/productdetails"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="use-badges">
+    16.在推廣活動中使用 Google Play 徽章與連結
+  </h2>
+
+
+</div>
+
+<p>
+  擁有 Google Play 徽章,即可採用官方許可的方式向 Android 使用者推廣您的應用程式。使用 <a href="{@docRoot}distribute/tools/promote/badges.html">Google Play 徽章產生器</a>可以快速建立徽章,以便將使用者連結至透過網頁、廣告、評論等提供的產品。此外,您也可以使用特殊的<a href="{@docRoot}distribute/tools/promote/linking.html">連結格式</a>直接連結至您的市集清單頁面、產品清單或搜尋結果。
+</p>
+
+<p>
+  若要協助您的應用程式在推出後吸引關注,強烈建議您透過盡可能多的通路,在盡可能多的國家/地區舉行宣告產品的推廣活動,以便為推出產品提供支援。例如,您可以使用廣告投放、社交網路或部落格貼文、影片與其他媒體、採訪與評論或可以採用的其他任何通路對產品的推出進行推廣。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/badges" data-sortorder=
+"-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="final-checks">
+    17.最終檢查及發行
+  </h2>
+
+
+</div>
+
+<p>
+  若您認為發行的準備事宜已就緒,請登入 Developer Console,然後花一點時間執行最後的幾項檢查。
+</p>
+
+<p>
+  請確保:
+</p>
+
+<ul>
+  <li>
+    <p>
+      您的開發人員簡介具有正確的資訊,並已連結至正確的 Google Wallet Merchant Account (Google 電子錢包商家帳戶) (若您要販售產品)。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      您上傳的應用程式版本正確無誤。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      市集清單的所有部分 (包括所有圖形資產、螢幕擷取畫面、影片、當地語系化的描述等) 都已準備就緒。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      您已將應用程式的定價設為免費或付費。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      您已設定所針對的國家/地區 (及電訊商),並已設定以買家貨幣表示的產品價格 (若適用)
+    </p>
+  </li>
+
+  <li>
+    <p>
+      「相容裝置」會顯示您的應用程式將散佈至所針對的裝置。若並非如此,您應與開發團隊核對應用程式的需求與篩選規則。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      您已提供正確的網站連結及正確的支援電子郵件地址。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      您的應用程式並未違犯內容政策指導方針。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      您已確認應用程式符合 Google Play 上發佈 Android 內容的指導方針,並符合美國出口法規。
+    </p>
+  </li>
+</ul>
+
+<p>
+  您的應用程式現在即可發行!
+</p>
+
+<p>
+  若您要發行更新,請確保閱讀<a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&amp;answer=113476&amp;topic=2365760&amp;ctx=topic">發行更新的需求</a>。
+</p>
+
+<p>
+  若您已準備就緒,請按一下 Developer Console 中的 [發行]<strong></strong> 按鈕。在數小時內,會向使用者提供您的應用程式,您的產品頁面會顯示在 Google Play 中,供瀏覽、搜尋或自您的推廣活動進行連結。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/launchchecklist/finalchecks"
+data-sortorder="-timestamp" data-cardsizes="6x3,6x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    18.在推出後支援使用者
+  </h2>
+
+
+</div>
+
+<p>
+  在發行應用程式或應用程式更新後,為您的客戶提供支援是非常關鍵的舉措。快速及時、謙恭有禮的支援會為使用者提供更優的體驗,進而為您的產品帶來更高的評分與更積極的評論。若您積極回應使用者的需求與回饋,使用者可能對您的應用程式更有興趣並推薦該應用程式。尤其是若您採用協調一致的推廣活動,在發行後更是如此。
+</p>
+
+<p>
+  您可以採用多種方式與使用者保持連絡並為其提供支援。最基本的方式是在您的市集清單頁面上提供<em>支援電子郵件地址</em>。除此之外,您可以採用選擇的任何方式 (例如論壇、郵寄清單或 Google+ 頁面) 來提供支援。Google Play 團隊將針對下載、安裝與付費問題為使用者提供支援,但上述範圍之外的其他問題將由您負責解決。您可以支援的問題包括功能要求、應用程式的使用問題,以及相容性設定的有關問題。
+</p>
+
+<p>
+  在發行之後,請規劃以下事宜:
+</p>
+
+<ul>
+  <li>
+    <p>
+      在應用程式的市集清單頁面上,經常檢查對您的評分與評論。尋找暗示出現錯誤或其他問題的重複主題。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      留心新 Android 平台版本的推出,因為您應用程式的相容性設定可能需要更新。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      在您的網站上放置支援資源連結,並設定諸如論壇等其他任何支援。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      在您的市集清單頁面上提供適當的支援電子郵件地址,並在使用者花時間向您傳送電子郵件時予以回應。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      在 Google Play 所提供自動退款時段的基礎上,您自己的退款政策應慷慨大方,因為滿意的使用者更有可能在將來進行購買。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      確認並修正應用程式中的問題。這有助於讓您的應用程式清晰易懂,並有助於您在市集清單頁面上主動列出已知問題。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      盡可能地經常發行更新,同時避免因過於頻繁的更新而導致品質受損或讓使用者感到不快。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      在每次更新時,請確保提供所變更內容的摘要。您可以在 Developer Console 中輸入該資訊。使用者將閱讀該資訊,並會體會到您對提高應用程式的品質非常注重。
+    </p>
+  </li>
+</ul>
+</ul>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/launchchecklist/afterlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,9x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd b/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd
new file mode 100644
index 0000000..1b95d0b
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/distribute/tools/localization-checklist.jd
@@ -0,0 +1,716 @@
+page.title=當地語系化檢查清單
+page.metaDescription=利用 Android 與 Google Play 提供的全球受眾。請閱讀本檢查清單,以大致了解如何為全球市場提供您的產品。
+meta.tags="localizing, publishing, disttools"
+page.tags="local, l10n, translation, language"
+page.image=/distribute/images/localization-checklist.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv" style="width:280px">
+    <h2>檢查清單</h2>
+    <ol>
+      <li><a href="#identify-languages">1.確定目標語言與地區設定</a></li>
+      <li><a href="#design">2.針對當地語系化進行設計</a></li>
+      <li><a href="#manage-strings">3.管理進行當地語系化的字串</a></li>
+      <li><a href="#translate-strings">4.翻譯 UI 字串與其他資源</a></li>
+      <li><a href="#test">5.對您的當地語系化應用程式進行測試</a></li>
+      <li><a href="#prepare-launch">6.準備面向全球推出產品</a></li>
+      <li><a href="#support-users">7.在推出後支援全球使用者</a></li>
+    </ol>
+  </div>
+</div>
+
+<div class="top-right-float" style="width:194px">
+  <img src="{@docRoot}distribute/images/localization-checklist.jpg">
+</div>
+
+<p>
+  Android 與 Google Play 可為您的應用程式提供遍佈全球的受眾,以及在諸如日本、韓國、印度、巴西與俄羅斯等國家/地區內快速擴充且可以連絡的使用者群體。我們強烈建議您執行當地語系化,因為這會最大限度提高您應用程式的散佈潛能,吸引全球的使用者進行評分。
+</p>
+
+<p>
+  當地語系化包含應用程式開發週期內的多項任務,預先的規劃不可或缺。本文件將協助您了解當地語系化的關鍵層面,讓您在 Google Play 上為面向全球成功推出應用程式而做好準備。
+</p>
+
+<div class="headerLine">
+  <h2 id="identify-languages">
+    1.確定目標語言與地區設定
+  </h2>
+
+
+</div>
+
+<p>
+  確定將應用程式散佈至哪些國家/地區以及當地使用者使用何種語言,這是當地語系化準備過程中基本但重要的一步。在市場商機巨大,但並未廣泛使用英語或其他國際語言的國家/地區,對應用程式進行當地語系化尤其重要。
+</p>
+
+<p>
+  對於全球使用者,您可以在以下三個主要方面管理應用程式:國家/地區、地區設定及語言。其中,語言是當地語系化的關鍵考量事項 (由於日期、時間、貨幣及類似資訊的格式存在不同,因此地區設定也非常重要)。使用者會控制其 Android 裝置上使用的語言與地區設定,這兩項轉而會影響應用程式的顯示方式。
+</p>
+
+<p>
+  通常,您會根據整體市場規模與商機、應用程式類別、競爭環境、當地定價及商業因素等,決定首先將哪些國家/地區作為目標。然後根據您針對的國家/地區,判斷應用程式中需要支援的語言。
+</p>
+
+<p>
+  隨後,您可以決定當地語系化為所針對國家/地區的部分或全部語言。首先當地語系化為主要地區語言,然後隨使用者群體的擴充新增更多語言,這可能是合理的舉措。
+</p>
+
+<p>
+  確定目標語言之後,您可以專注於針對這些市場的開發、翻譯、測試及行銷活動。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/identifylocales"
+data-sortorder="-timestamp" data-cardsizes="9x3," data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="design">
+    2.針對當地語系化進行設計
+  </h2>
+
+
+</div>
+
+<p>
+  在確定進行當地語系化的目標語言後,請評估為了在應用程式中支援這些語言而需要完成的工作,並及早開始規劃工作。請考慮每種語言中的字彙擴充、書寫體需求、字元間距及換行限制、從左向右及從右向左行文順序的支援以及可能存在的其他因素。
+</p>
+
+<h4>
+  <strong>設計一組彈性版面配置</strong>
+</h4>
+
+<p>
+  建立版面配置時,請確保將具有文字的 UI 元素設計為具有較大空間。良好的做法是,提供較您的語言通常所需空間更多 (正常狀況下多 30%) 的空間 ,以容納其他語言。
+</p>
+
+<p>
+  此外,元素應該能在水平或垂直方向擴充,以顧及 UI 字串或輸入文字寬度與高度的變化。在任何目標語言中,您的文字字串都不應與邊框或螢幕邊緣重疊。
+</p>
+
+<p>
+  若您仔細設計 UI,通常可以將一組版面配置用於您支援的所有語言。如需詳細資訊,請參閱<a href="{@docRoot}training/basics/fragments/fragment-ui.html">建置彈性 UI</a>。
+</p>
+
+<h4>
+  <strong>在需要時使用備用版面配置</strong>
+</h4>
+
+<p>
+  若您的 UI 無法容納其中一種目標語言的文字,可以僅針對該語言建立<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">備用版面配置</a>。藉由 Android,可以輕鬆宣告針對特定語言、地區設定、螢幕大小等而載入的多組版面配置與其他資源,只需以適當的資源識別碼為這些版面配置與資源建立標籤即可。雖然備用版面配置具備彈性,但是也會導致應用程式的維護難度隨時間演進而不斷升高。通常,使用彈性更優的單一版面配置是更穩妥的作法。
+</p>
+
+<h4>
+  <strong>支援 RTL 版面配置與文字</strong>
+</h4>
+
+<p>
+  若您要散佈至使用從右向左 (RTL) 行文順序的國家/地區,應考慮在可能的範圍內,實作對 RTL 版面配置與文字顯示及編輯的支援。
+</p>
+
+<p>
+  Android 4.1 已引入對雙向文字的有限支援,應用程式可藉此以從左向右 (LTR) 及從右向左 (RTL) 的行文順序顯示及編輯文字。Android 4.2 已新增<a href="http://android-developers.blogspot.fr/2013/03/native-rtl-support-in-android-42.html">對 RTL 版面配置的完備原生支援</a> (包括版面配置鏡像),因此您可為所有使用者提供相同的絕佳應用程式體驗。
+</p>
+
+<p>
+  對於 Android 4.2 使用者,至少可以輕鬆地新增基本 RTL 版面配置鏡射,這對因應 RTL 使用者的需求大有幫助。
+</p>
+
+<h4>
+  <strong>使用系統提供的日期、時間、數字與貨幣的格式</strong>
+</h4>
+
+<p>
+  在您的應用程式指定因地區設定而異的日期、時間、數字、貨幣及其他實體時,請確保使用系統提供的格式,而非應用程式特定的格式。請謹記,並非所有地區設定都使用相同的千位分隔符號、小數分隔符號或百分比符號。
+</p>
+
+<p>
+  Android 提供多種公用程式,以設定格式及轉換不同地區設定中所用的模式,例如對日期使用 <a href="{@docRoot}reference/android/text/format/DateUtils.html">DateUtils</a> 與 <a href="{@docRoot}reference/java/text/DateFormat.html">DateFormat</a>;對數字與貨幣使用 <a href="{@docRoot}reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)">String.format()</a> 或 <a href="{@docRoot}reference/java/text/DecimalFormat.html">DecimalFormat</a>;對電話號碼使用 <a href="{@docRoot}reference/android/telephony/PhoneNumberUtils.html">PhoneNumberUtils</a>;等等。
+</p>
+
+<p>
+  若根據使用者地區設定的有關假設將格式設為固定值,則在使用者變更為其他地區設定時會引發問題。強烈建議您使用系統提供的格式與公用程式。
+</p>
+
+<h4>
+  <strong>納入完備的一組預設資源</strong>
+</h4>
+
+<p>
+  請透過提供完備的一組預設資源,確保不論採用何種語言或地區設定,您的應用程式都能正確執行。應用程式的預設資源是<em>並未以任何語言或地區設定識別碼予以標記</em>的資源,例如 res/drawable/ 與 res/values/ 中儲存的資源。若您的應用程式嘗試載入的資源不可用於目前語言或不在預設資源組內,則應用程式將當機。
+</p>
+
+<p>
+  不論您在應用程式內使用何種預設語言,都請確保將關聯的版面配置、可繪項目及字串儲存在預設資源目錄中 (無語言或地區設定識別碼)。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/tools/loc/designforloc" data-sortorder="-timestamp"
+data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="manage-strings">
+    3.管理進行當地語系化的字串
+  </h2>
+
+
+</div>
+
+<p>
+  請務必正確管理應用程式的 UI 字串,以便能為使用者提供出眾的體驗,並能直接執行當地語系化。
+</p>
+
+<h4>
+  <strong>將所有字串移至 strings.xml 中</strong>
+</h4>
+
+<p>
+  建置應用程式時,請謹記不要將任何字串設為固定程式碼,而是將<em>所有</em>字串宣告為預設 strings.xml 檔案中的資源,藉此可輕鬆執行更新與當地語系化。可以擷取、翻譯 strings.xml 檔案中的字串,然後將其重新整合至您的應用程式中 (包含適當的識別碼),而無需對編譯的程式碼進行任何變更。
+</p>
+
+<p>
+  若您產生含文字的影像,也請將這些字串置於 strings.xml 中,在翻譯後重新產生影像。
+</p>
+
+<h4>
+  <strong>遵循針對 UI 字串的 Android 指導方針</strong>
+</h4>
+
+<p>
+  在設計並開發 UI 時,請確保密切注意與使用者談話的<em>方式</em>。通常,請使用<a href="{@docRoot}design/style/writing.html">簡明扼要</a>、友好但簡潔的談話風格,並在所有 UI 中使用一致的風格。
+</p>
+
+<p>
+  請確保您閱讀並遵循 Android 對於<a href="{@docRoot}design/style/writing.html">書寫風格及用字選詞</a>的設計建議。如此可提高您的應用程式對使用者的吸引力,並協助使用者更快了解您的 UI。
+</p>
+
+<p>
+  此外若可能,請始終使用 Android 標準術語,例如使用「動作列」、「選項功能表」、「系統列」、「通知」等表示 UI 元素。以正確無誤、前後一致的方式使用 Android 詞彙可降低翻譯難度,並為使用者提供更優的最終產品。
+</p>
+
+<h4>
+  <strong>為宣告的字串提供充分的背景資訊</strong>
+</h4>
+
+<p>
+  宣告 strings.xml 檔案中的字串時,請確保描述該字串的使用背景資訊。該資訊對翻譯者而言極具價值,可產生品質更優的翻譯,並能協助您隨時間演進以更有效的方式管理字串。
+</p>
+
+<p>
+  範例如下:
+</p>
+
+<pre class="prettyprint">
+&lt;!-- The action for submitting a form. This text is on a button that can fit 30 chars --&gt;
+&lt;string name="login_submit_button"&gt;Sign in&lt;/string&gt;
+</pre>
+<p>
+  請考慮提供可說明以下問題的背景資訊:
+</p>
+
+<ul>
+  <li>
+    <p>
+      該字串用於哪個項目?何時/何地向使用者顯示該字串?
+    </p>
+  </li>
+
+  <li>
+    <p>
+      該字串位於版面配置中的哪個位置?例如,翻譯按鈕時,其彈性低於對文字方塊的翻譯。
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>標記訊息中不應翻譯的部分</strong>
+</h4>
+
+<p>
+  通常,字串會包含不應翻譯為其他語言的文字。程式碼片段、值的預留位置、特殊符號或名稱都是此類文字的常見範例。在準備供翻譯的字串時,請尋找並標記應保持原狀不翻譯的文字,以便翻譯者不做變更。
+</p>
+
+<p>
+  若要標記不應翻譯的文字,請使用 <code>&lt;xliff:g&gt;</code> 預留位置標籤。以下所示的範例標籤將確保在翻譯時不會變更文字「%1$s」(否則會中斷訊息):
+</p>
+
+<pre class="prettyprint">
+&lt;string name="countdown"&gt;
+    &lt;xliff:g id="time" example="5 days&gt;%1$s&lt;/xliff:g&gt;until holiday
+&lt;/string&gt;
+</pre>
+<p>
+  宣告預留位置標籤時,請一律新增對預留位置所針對項目進行說明的 id 屬性。若應用程式會在後來替換預留位置的值,請確保提供範例屬性以明確展示預期的用法。
+</p>
+
+<p>
+  以下提供了預留位置標籤的其他一些範例:
+</p>
+
+<pre>
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+
+&lt;!-- Example placeholder for a special unicode symbol --&gt;
+
+&lt;string name="star_rating"&gt;Check out our 5
+
+    &lt;xliff:g id="star"&gt;\u2605&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a for a URL --&gt;
+
+&lt;string name="app_homeurl"&gt;
+
+    Visit us at &lt;xliff:g id="application_homepage"&gt;http://my/app/home.html&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a name --&gt;
+
+&lt;string name="prod_name"&gt;
+
+    Learn more at &lt;xliff:g id="prod_gamegroup"&gt;Game Group&lt;/xliff:g&gt;
+
+&lt;/string&gt;
+
+&lt;!-- Example placeholder for a literal --&gt;
+
+&lt;string name="promo_message"&gt;
+
+    Please use the "&lt;xliff:g id="promotion_code"&gt;ABCDEFG&lt;/xliff:g&gt;” to get a discount.
+
+&lt;/string&gt;
+
+...
+
+&lt;/resources&gt;
+</pre>
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/managestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="translate-strings">
+    4.翻譯 UI 字串與其他資源
+  </h2>
+
+
+</div>
+
+<p>
+  將應用程式的 UI 字串與資源翻譯為您的目標語言是當地語系化的關鍵階段,也是需要操作最小心、規劃最周密的環節。
+</p>
+
+<p>
+  建議您與專業的翻譯者合作 (請參閱<a href="#gp-trans">購買專業翻譯</a>),以確保取得能提高應用程式價值的高品質翻譯,雖然可以選擇機器翻譯,但是機器翻譯可能不會為使用者提供良好的體驗。
+</p>
+
+<h4>
+  <strong>準備翻譯</strong>
+</h4>
+
+<p>
+  翻譯輸出的品質一部分取決於輸入,因此請確保您的 strings.xml 檔案井然有序、註解充分且準確無誤。
+</p>
+
+<p>
+  可以採用以下方式準備供翻譯的字串:
+</p>
+
+<ul>
+  <li>
+    <p>
+      請確保您的字串格式正確,前後一致。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      請遵循上述<a href="#manage-strings">管理進行當地語系化的字串</a>中列示的字串建議。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      清理 strings.xml 檔案,移除未使用的字串。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      在檔案中放置註解 (以確定檔案的所有者、原始來源與版本) 以及對翻譯者的所有特殊指示。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      確定既有的翻譯 (若有),並將其包括在向翻譯者傳送的 zip 檔案或其他套件中。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      確定需要翻譯的可繪項目或其他資源,並將其包括在翻譯者的套件中。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      此外,請考慮翻譯應用程式的市集清單詳細資料 (應用程式標題與描述、版本資訊等) 以及其他國際行銷材料。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      請建立術語清單,以說明產品、市場或基本技術中關鍵詞彙的含意與用法。將清單新增至翻譯者的套件。
+    </p>
+  </li>
+</ul>
+
+<h4>
+  <strong>傳送供翻譯的字串</strong>
+</h4>
+
+<p>
+  在開發週期的早期,請連絡專業翻譯廠商,以了解成本與返回時間。請確保在成本中包括多次重複。您可以在網路上尋找翻譯廠商,也可以直接使用 Google Play Developer Console 提供的翻譯服務 (請參閱<a href="#gp-trans">購買專業翻譯</a>)。
+</p>
+
+<p>
+  翻譯完成後,請對翻譯進行初步檢查。請檢查是否所有檔案都已翻譯、是否存在潛在編碼問題,並確保宣告格式原封不動。
+</p>
+
+<p>
+  若一切毫無問題,請小心地將當地語系化的目錄與檔案重新移至應用程式的資源中。請確保以適當的語言及地區設定識別碼為目錄建立標籤,以便可以在後來正確載入這些目錄。
+</p>
+
+<p>
+  將翻譯重新整合至應用程式後,請開始<a href="#test">測試已當地語系化的應用程式</a>。
+</p>
+
+<h4 id="gp-trans">
+  <strong>透過 Google Play 購買專業翻譯</strong>
+</h4>
+
+<p>
+  Google Play 應用程式翻譯服務可以協助您快速尋找並購買應用程式的翻譯。在 Developer Console 中,您可以瀏覽第三方廠商的清單,這些廠商已預先具備 Google 授予的資格,能以極具競爭性的價格提供高品質的翻譯。您可以上傳希望翻譯的字串、選取希望翻譯的目標語言,並根據時間與價格選取翻譯廠商。
+</p>
+
+<p>
+  購買翻譯後,您將收到廠商傳送的電子郵件。您將針對翻譯與廠商直接簽署業務合約;您需要直接與廠商合作來管理翻譯程序及交付項目,並解決所有支援問題。
+</p>
+
+<div>
+  <img src="{@docRoot}images/gp-localization-trans-0.png" class="border-img">
+</div>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/translatestrings"
+data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="test">
+    5.對您的當地語系化應用程式進行測試
+  </h2>
+
+
+</div>
+
+<p>
+  收到已翻譯的字串與資源並將其重新移至應用程式後,您需要對應用程式進行測試,以確保為向全球使用者散佈應用程式做好準備。
+</p>
+
+<p>
+  手動測試可以協助您探尋版面配置與字串中會影響使用者滿意度 (最終影響您應用程式的使用者評分) 的當地語系化問題。
+</p>
+
+<h4>
+  <strong>設定測試環境</strong>
+</h4>
+
+<p>
+  若要對已當地語系化的應用程式進行測試,您需要根據您針對的市場與大小規格,設定包含多個裝置 (或虛擬裝置) 與螢幕大小的環境。請注意,特定地區的裝置範圍可能有所不同。若可能,請確保您的測試裝置與使用者可能使用的實際裝置相符。
+</p>
+
+<h4>
+  <strong>尋找常見的當地語系化問題</strong>
+</h4>
+
+<p>
+  在每個測試裝置上,於 [設定] 中設定語言或地區設定。安裝並啟動應用程式,然後在所有 UI 流程、對話方塊及使用者互動中進行導覽。在需要輸入的位置輸入文字。要尋找的問題包括:
+</p>
+
+<ul>
+  <li>
+    <p>
+      遭剪裁的文字,或者與 UI 元素或螢幕的邊緣重疊的文字
+    </p>
+  </li>
+
+  <li>
+    <p>
+      不良的換行
+    </p>
+  </li>
+
+  <li>
+    <p>
+      不正確的字彙中斷或標點
+    </p>
+  </li>
+
+  <li>
+    <p>
+      不正確的字母順序排序
+    </p>
+  </li>
+
+  <li>
+    <p>
+      不正確的版面配置方向或文字方向
+    </p>
+  </li>
+
+  <li>
+    <p>
+      未翻譯的文字 (若顯示預設字串而非已翻譯的字串,可能是因為您忽略了要翻譯的字串,或者標記資源目錄時使用了不正確的語言識別碼)。
+    </p>
+  </li>
+</ul>
+
+<p>
+  若譯文中的字串較原文更長,導致版面配置無法容納,建議您嘗試簡化預設文字、簡化翻譯後的文字,或調整預設的版面配置。若上述舉措都無法解決該問題,您可以針對該語言建立自訂版面配置。
+</p>
+
+<h4>
+  <strong>對預設資源進行測試</strong>
+</h4>
+
+<p>
+  在採用支援的所有語言與地區設定對應用程式進行測試後,請確保採用<em>不支援的語言</em>與地區設定再次對應用程式進行測試。這可協助您確保應用程式包括一組完備的預設字串與資源,如此您的應用程式可供所有使用者使用,不論使用者偏好何種語言,都是如此。
+</p>
+
+<h4>
+  <strong>與以當地語系為母語者一起檢閱</strong>
+</h4>
+
+<p>
+  在測試期間或測試之後,建議您讓以當地語系為母語的人員檢閱當地語系化的應用程式。執行此作業的一種方式是讓該地區的使用者執行 beta 測試 (Google Play 可以協助您實現此目標)。 <!-- </p>
+
+<h3 class="rel-resources clearfloat">Related resources</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/test"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> -->
+</p>
+
+<div class="headerLine">
+  <h2 id="prepare-launch">
+    6.準備面向全球推出產品
+  </h2>
+
+
+</div>
+
+<p>
+  翻譯應用程式是當地語系化的關鍵環節,但是若要協助您的產品吸引使用者並贏得關注,您應準備在針對的國家/地區舉行推出活動,並針對全球使用者制定更廣泛的產品推出與行銷計劃。
+</p>
+
+<h4>
+  <strong>對您的 Google Play 清單執行當地語系化</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      對您的 Google Play 清單執行當地語系化
+    </h2>
+
+    <p>
+      Google Play 市集清單是全球使用者對您應用程式的第一印象,您應向所有使用者著重展示應用程式的卓越之處!請在 Developer Console 中對您的清單進行當地語系化,包括:
+    </p>
+
+    <ul>
+      <li>應用程式標題與描述
+      </li>
+
+      <li>手機與平板電腦上所用應用程式的螢幕擷取畫面
+      </li>
+
+      <li>推廣圖形與影片。
+      </li>
+    </ul>
+  </div>
+</div>
+
+<p>
+  若您希望應用程式在國際市場取得成功,需要對 Google Play 市集清單進行當地語系化。您可以在 Developer Console 中管理當地語系化的清單。
+</p>
+
+<p>
+  在推出之前,請決定應用程式標題、描述、推廣文字、行銷名稱與計劃,以及其他文字與影像。請及早傳送供翻譯的清單文字與影像,以便在開始 beta 測試時,可將這些文字與影像準備就緒。翻譯後的文字可用時,您可以透過 Developer Console 新增該文字。
+</p>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      Google Play 中的市集清單翻譯
+    </h2>
+
+    <p>
+      您可以使用 Google Play 上的應用程式翻譯服務翻譯您的市集清單。請備妥包含您市集清單資訊的 XML 檔案,並在上傳 strings.xml 檔案時上傳該檔案 (請參閱<a href="#gp-trans">購買專業翻譯</a>)
+    </p>
+  </div>
+</div>
+
+<p>
+  此外,既然您已努力建立卓越的當地語系化應用程式,就讓使用者進行了解!請針對手機與 7 英寸及 10 英寸平板電腦,製作每種語言的 UI 螢幕擷取畫面。您可將所支援每種語言的螢幕擷取畫面上傳至 Developer Console。對於以其他語言瀏覽您應用程式清單的使用者而言,這些螢幕擷取畫面極具價值。
+</p>
+
+<p>
+  此外,還需要建立推廣圖形與影片的當地語系化版本。例如,您的應用程式功能圖形可能包括應翻譯的文字以取得最佳效果,或者您可能希望對於不同的國家/地區採用不同的視覺方法。您可以針對每種語言建立推廣圖形的不同版本,並將其上傳至 Developer Console。若您提供推廣影片,可以建立該影片的當地語系化版本,然後針對您支援的每種語言,新增正確的當地語系化影片的連結。
+</p>
+
+<h4>
+  <strong>在重要的國家/地區規劃 beta 版</strong>
+</h4>
+
+<div class="sidebox-wrapper" style="float:right;">
+  <div class="sidebox">
+    <h2>
+      輕鬆的 beta 測試
+    </h2>
+
+    <p>
+      現在藉由 Google Play,您可以在全球任何地點設定多組 alpha 與 beta 測試者。下次登入 Developer Console 時,請了解這項強大功能。
+    </p>
+  </div>
+</div>
+
+<p>
+  在推出應用程式之前,取得真實的使用者回饋通常極具價值,採用新的語言在新的國家/地區推出應用程式時更是如此。在這些情況下,強烈建議您向關鍵市場的使用者散佈應用程式的測試版,並提供簡易方式讓使用者提供回饋並報告錯誤。
+</p>
+
+<p>
+  Google Play 可以協助您設定應用程式的試用計劃。您登入 Developer Console 並上傳 APK 後,可以設定多組使用者對應用程式進行 alpha 與 beta 測試。您可以先設定 alpha 測試者的較小群組,然後設定 beta 測試者的較大群組。
+</p>
+
+<p>
+  新增使用者後,使用者可以存取您應用程式的市集清單並安裝應用程式。<strong>alpha 或 beta 版本的使用者無法發佈評論或評分</strong>,因此<strong>對 Google Play 上您的評分並無風險</strong>。但是,這意味著您需要設定某種機制供測試者為您提供回饋:請考慮建立 <a href="http://www.google.com/+/business/">Google+</a> 頁面或 <a href="https://groups.google.com/forum/#!overview">Google 群組</a>。
+</p>
+
+<p>
+  您收到的回饋將協助您調整 UI、翻譯與市集清單,以確保為使用者提供絕佳的體驗。
+</p>
+
+<h4>
+  <strong>規劃國際行銷</strong>
+</h4>
+
+<p>
+  若要在各個國家/地區贏得最多關注,請考慮舉辦國際行銷或廣告推廣活動。活動的範圍視您能承受的預算而異,但是對於產品推出期間及推出之後執行國家/地區特定的行銷而言,通常該活動都是符合成本效益並富有成效的舉措。
+</p>
+
+<h4>
+  <strong>建立當地語系化的 Google Play 徽章</strong>
+</h4>
+
+<p>
+  若您準備執行國際行銷,請確保將<a href="{@docRoot}distribute/tools/promote/badges.html">當地語系化的 Google Play 徽章</a>包括在內,以便告訴使用者您在 Google Play 上。您可以使用徽章產生器快速建置能在網站或行銷材料中使用的當地語系化徽章。此外,也可以使用高解析度資產。
+</p>
+
+<h4>
+  <strong>建立當地語系化的 Device Art</strong>
+</h4>
+
+<p>
+  若您提供 Android 裝置上所執行應用程式的產品螢幕擷取畫面,請確保這些螢幕擷取畫面具有良好的視覺效果並反映 Android 裝置的最新功能。為了協助您建立高品質的行銷材料,請您使用拖放式 <a href="{@docRoot}distribute/tools/promote/device-art.html">Device Art Generator</a> 在 Nexus 裝置上快速產生螢幕擷取畫面。
+</p>
+
+<h4>
+  <strong>檢查您的最佳化秘訣</strong>
+</h4>
+
+<p>
+  為推出產品進行準備時,請確保登入 Developer Console 並檢查應用程式的最佳化秘訣。最佳化秘訣可讓您了解遺失部分當地語系化市集清單的時間,並提供其他有用的提醒以成功推出當地語系化的產品。
+</p>
+
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13" data-query=
+"collection:distribute/toolsreference/localizationchecklist/preplaunch"
+data-sortorder="-timestamp" data-cardsizes="9x3,9x3,6x3,9x3,9x3,9x3"
+data-maxresults="6">
+</div>
+
+<div class="headerLine">
+  <h2 id="support-users">
+    7.在推出後支援全球使用者
+  </h2>
+
+
+</div>
+
+<p>
+  面向全球推出應用程式後,您應準備支援使用各種語言、位於各個時區的使用者。提供全球使用者支援的程度取決於您的預算,但至少您應在推出產品後細心查看評分、評論並下載統計資料。
+</p>
+
+<p>
+  以下提供一些建議:
+</p>
+
+<ul>
+  <li>
+    <p>
+      在 Developer Console 中使用應用程式統計資料比較各語言、各國家/地區的下載、安裝、解除安裝及評分狀況,若無法保持特定語言或國家/地區的下載次數或評分,請考慮採用某些選項來改善產品或變更行銷方法。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      請定期檢查評論,Google Play 會為您翻譯所有使用者評論,因此您可以隨時了解全球使用者對您應用程式的感覺、他們最喜歡的功能以及對其有影響的問題。透過觀看評論,您可以確認可能對特定國家/地區的使用者有影響的技術問題,然後修正問題並更新應用程式。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      若可能,請回應評論,以使用者的語言或通用語言 (若可能) 與全球使用者交流會產生良好效果。若無法使用上述語言,您可以嘗試使用翻譯工具,但是結果可能無法預測。若您的應用程式在某種語言中備受青睞,請考慮從以該語言為母語者處取得支援協助。
+    </p>
+  </li>
+
+  <li>
+    <p>
+      請確保網站上提供所有支援資源的連結。請考慮建立特定語言使用者群組、Google+ 社群或其他支援論壇。
+    </p>
+  </li>
+</ul>
+
+<p>
+  依據以上做法對應用程式進行當地語系化、向全球使用者推廣及行銷應用程式,並提供持續不斷的支援,您可藉此吸引許多新使用者使用您的應用程式,並保持其忠誠度。
+</p>
+
+<p>
+  請確保閱讀<a href="{@docRoot}distribute/tools/launch-checklist.html">推出檢查清單</a>,以詳細了解如何在 Google Play 上規劃、建置並推出應用程式。
+</p>
+<h3 class="rel-resources clearfloat">相關資源</h3>
+
+<div class="resource-widget resource-flow-layout col-13"
+  data-query="collection:distribute/toolsreference/localizationchecklist/supportlaunch"
+  data-sortOrder="-timestamp"
+  data-cardSizes="9x3,9x3,6x3,9x3,9x3,9x3"
+  data-maxResults="6"></div> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/google/play/filters.jd b/docs/html-intl/intl/zh-tw/google/play/filters.jd
new file mode 100644
index 0000000..8cfd59a
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/google/play/filters.jd
@@ -0,0 +1,266 @@
+page.title=Google Play 上的篩選器
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>快速檢視</h2>
+<ul>
+<li>Google Play 可套用篩選器以控制哪些 Android 裝置可以從市集下載您的應用程式。</li>
+<li>透過篩選,可確保只有裝置與您應用程式的相容性需求相符的使用者才能使用您的應用程式。 <li>篩選由您在應用程式的宣示說明檔案中宣告的組態需求及其他因素來確定。</li>
+</ul>
+
+<h2>本文件內容</h2>
+
+<ol>
+  <li><a href="#how-filters-work">Google Play 上篩選器的運作方式</a></li>
+  <li><a href="#manifest-filters">根據宣示說明元素進行篩選</a>
+  </li>
+  <li><a href="#other-filters">其他篩選器</a></li>
+  <li><a href="#MultiApks">使用不同篩選器發行多個 APK</a></li>
+</ol>
+
+<h2>另請參閱</h2>
+ <ol>
+<li><a href="{@docRoot}guide/practices/compatibility.html">Android
+相容性</a></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
+</ol>
+
+</div>
+</div>
+
+<p>若使用者在 Google Play 上搜尋或瀏覽尋找要下載的應用程式,會根據與裝置相容的條件對應用程式結果進行篩選。例如,若使用者需要相機,Google Play 不會顯示無相機的裝置所適用的應用程式。此<em>篩選</em>功能可協助開發人員對應用程式的散佈進行管理,有助於確保為使用者提供可能最優的體驗。</p>
+
+<p>Google Play 中篩選的基礎是多種類型的應用程式中繼資料與組態設定 (包括宣示說明宣告、所需的資源庫、架構相依性,以及 Google Play Developer Console 中設定的諸如所針對地理位置、定價等散佈控制項)。</p>
+
+<p>Google Play 篩選在一定程度上以宣示說明宣告及 Android 架構的其他方面為基礎,但實際篩選行為與該架構截然不同,且不受特定 API 層級的影響。本文件將指定 Google Play 使用的目前篩選規則。</p>
+
+
+<h2 id="how-filters-work">Google Play 上篩選器的運作方式</h2>
+
+<p>對於在 Google Play 應用程式中瀏覽尋找或搜尋應用程式的使用者,Google Play 會使用以下所述的篩選限制來判斷是否向其顯示您的應用程式。</p>
+
+<p>判斷是否顯示您的應用程式時,Google Play 會檢查裝置的硬體與軟體需求,以及裝置的電訊商、位置與其他特性。隨後,會將檢查結果與應用程式的宣示說明檔案及發行詳細資料所述限制與相依性進行比較。 </p>
+
+<p>根據篩選規則,若應用程式與裝置相容,Google Play 會向使用者顯示該應用程式。否則,Google Play 會在搜尋結果與類別瀏覽中隱藏您的應用程式,即使使用者在 Google Play 中按一下直接指向該應用程式 ID 的深度連結以明確要求該應用程式,也是如此。</p>
+
+<p>您可以針對應用程式使用可用篩選器的任意組合。例如,您可以設定 <code>minSdkVersion</code> 需求為 <code>"4"</code>,並在應用程式中設定 <code>smallScreens="false"</code>,則將應用程式上傳至 Google Play 時,您可以僅針對歐洲國家/地區 (電訊商)。因此 Google Play 的篩選器可防止在不符合上述所有三項需求的裝置上提供該應用程式。 </p>
+
+<p>所有篩選限制都與應用程式的版本關聯,對於不同版本的應用程式,篩選限制可以不同。例如,若使用者已安裝您的應用程式,隨後您發行的更新會導致該應用程式對使用者不可見,則使用者不會看到該更新可用。</p>
+
+<h4>在 Google Play 網站上進行篩選</h4>
+
+<p>若使用者瀏覽 <a href="http://play.google.com/apps">Google Play 網站</a>,可以看到發行的所有應用程式。但是,Google Play 網站會對應用程式需求與使用者註冊的每個裝置進行比較以了解相容性,只允許使用者安裝與其裝置相容的應用程式。</p>
+
+<h2 id="manifest-filters">根據應用程式宣示說明進行篩選</h2>
+
+<p>大多數篩選器都由應用程式宣示說明檔案 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a> 中的元素觸發 (但並非宣示說明檔案中的所有元素都能觸發篩選)。表 1 列出您應該用於觸發篩選的宣示說明元素,並說明針對每個元素的篩選如何運作。</p>
+
+<p id="table1" class="table-caption"><strong>表格 1.</strong>在 Google Play 上觸發篩選的宣示說明元素。</p>
+<table>
+  <tr>
+    <th>宣示說明元素</th>
+    <th>篩選器名稱</th>
+    <th>運作方式</th>
+  </tr>
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">螢幕大小</td>
+    <td valign="top">
+
+<p>應用程式透過設定 <code>&lt;supports-screens&gt;</code> 元素的屬性,會指示能支援的螢幕大小。發行應用程式時,Google Play 會根據裝置的螢幕大小,使用這些屬性來判斷是否向使用者顯示應用程式。 </p>
+
+<p>作為一般規則,Google Play 會假設裝置上的平台可將較小的版面配置放置到較大的螢幕中,但無法將較大的版面配置放置到較小的螢幕中。因此,若應用程式宣告僅支援「一般」螢幕大小,Google Play 會為一般螢幕大小的裝置與大螢幕裝置提供該應用程式,同時對應用程式進行篩選,以便不會向小螢幕裝置提供該應用程式。</p>
+
+<p>若應用程式並未宣告 <code>&lt;supports-screens&gt;</code> 的屬性,Google Play 會使用這些屬性的預設值 (這些值視 API 層級而不同)。具體說明如下: </p>
+
+<ul>
+<li><p>對於將 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> 或 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> 設為不超過 3 的應用程式,<code>&lt;supports-screens&gt;</code> 元素本身未定義,不提供任何屬性。在此狀況下,Google Play 會假設應用程式為一般螢幕大小的裝置而設計,並會向一般螢幕大小的裝置或大螢幕裝置顯示該應用程式。 </p>
+
+<li>若 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> 或 <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> 設為至少為 4,所有屬性的預設值為 <code>"true"</code>。如此,依預設,會將應用程式視為支援所有螢幕大小。</li>
+</ul>
+
+    <p><strong>範例 1</strong><br /> 宣示說明宣告 <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>,且不包括 <code>&lt;supports-screens&gt;</code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 不會向小螢幕裝置的使用者顯示該應用程式,但是會向一般螢幕大小或大螢幕裝置的使用者顯示該應用程式。 </p>
+    <p><strong>範例 2<br />
+    </strong>宣示說明宣告 <code>&lt;uses-sdk android:minSdkVersion="3"
+    android:targetSdkVersion="4"&gt;</code>,且不包括 <code>&lt;supports-screens&gt;</code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有裝置的使用者顯示該應用程式。 </p>
+    <p><strong>範例 3<br />
+    </strong>宣示說明宣告 <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code>,且不包括 <code>&lt;supports-screens&gt;</code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。 </p>
+    <p>如需有關如何在您的應用程式中宣告螢幕大小支援的詳細資訊,請參閱 <code><a
+    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code> 與<a href="{@docRoot}guide/practices/screens_support.html">支援多個螢幕</a>。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
+      <!-- ##api level 3## --></td>
+    <td valign="top">裝置組態: <br /> 鍵盤、導覽、觸控螢幕</td>
+    <td valign="top"><p>應用程式可以要求特定硬體功能,Google Play 會僅在具有所需硬體的裝置上顯示應用程式。</p>
+      <p><strong>範例 1<br />
+      </strong>宣示說明包括 <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>,且使用者正在沒有五向導覽控制器的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p>
+      <p><strong>範例 2<br />
+      </strong>宣示說明不包括 <code>&lt;uses-configuration&gt;</code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。</p>
+<p>如需更多詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>。</p></td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">裝置功能<br /> (<code>name</code>)</td>
+    <td valign="top"><p>應用程式可以要求裝置上顯示特定裝置功能。Android 2.0 (API 層級為 5) 中已引入此功能。</p>
+      <p><strong>範例 1<br />
+      </strong>宣示說明包括 <code>&lt;uses-feature
+android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>,且使用者正在沒有光感應器的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p>
+      <p><strong>範例 2<br />
+      </strong>宣示說明不包括 <code>&lt;uses-feature&gt;</code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。</p>
+      <p>如需完備資訊,請參閱 <code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>。</p>
+      <p><em>根據暗示的功能進行篩選:</em>在某些狀況下,Google Play 會將透過 <code>&lt;uses-permission&gt;</code> 元素要求的許可,解譯為功能需求 (等同於 <code>&lt;uses-feature&gt;</code> 元素中宣告的功能需求)。另請參閱以下的 <a href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top">OpenGL-ES 版本<br /> (<code>openGlEsVersion</code>)</td>
+    <td valign="top"><p>應用程式可以使用 <code>&lt;uses-feature
+        android:openGlEsVersion=&quot;int&quot;&gt;</code> 屬性要求裝置支援特定 OpenGL-ES 版本。</p>
+      <p><strong>範例 1<br />
+      </strong>應用程式透過在宣示說明中多次指定 <code>openGlEsVersion</code>,要求多個 OpenGL-ES 版本。<strong>結果</strong>:Google Play 會視為應用程式要求所指示的最高版本。</p>
+<p><strong>範例 2<br />
+</strong>應用程式要求 OpenGL-ES 1.1 版,使用者在支援 OpenGL-ES 2.0 版的裝置上搜尋應用程式。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向該使用者顯示該應用程式。若裝置報告其支援 OpenGL-ES 版本 <em>X</em>,Google Play 會視為該裝置也支援低於 <em>X</em> 的所有版本。
+</p>
+<p><strong>範例 3<br />
+</strong>使用者在未報告 OpenGL-ES 版本的裝置 (例如執行 Android 1.5 或更低版本的裝置) 上搜尋應用程式。<strong>結果</strong>:Google Play 會視為該裝置僅支援 OpenGL-ES 1.0。Google Play 會向使用者僅顯示未指定 <code>openGlEsVersion</code> 的應用程式,或未指定高於 1.0 的 OpenGL-ES 版本的應用程式。 </p>
+      <p><strong>範例 4<br />
+      </strong>宣示說明未指定 <code>openGlEsVersion</code>。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。 </p>
+<p>如需更多詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>。</p></td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
+    <td valign="top">軟體資源庫</td>
+    <td valign="top"><p>應用程式可以要求裝置上顯示特定的共用資源庫。 </p>
+      <p><strong>範例 1<br />
+      </strong>應用程式要求 <code>com.google.android.maps</code> 資源庫,且使用者正在沒有 <code>com.google.android.maps</code> 資源庫的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p>
+      <p><strong>範例 2</strong><br /> 宣示說明不包括 <code>&lt;uses-library&gt;</code> 元素。<strong>結果</strong>:除非套用其他篩選器,否則 Google Play 會向所有使用者顯示該應用程式。</p>
+<p>如需更多詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>。</p></td>
+  </tr>
+  <tr id="uses-permission-filtering">
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
+    <td valign="top">&nbsp;</td>
+    <td valign="top">嚴格來說,Google Play 不會根據 <code>&lt;uses-permission&gt;</code> 元素進行篩選。但是,Google Play 會讀取這些元素,以判斷應用程式是否具有可能並未在 <code>&lt;uses-feature&gt;</code> 元素中正確宣告的硬體功能需求。例如,若應用程式要求 <code>CAMERA</code> 許可,但未針對 <code>android.hardware.camera</code> 宣告 <code>&lt;uses-feature&gt;</code> 元素,則 Google Play 會視為應用程式要求相機,不應向裝置未提供相機的使用者顯示。</p>
+    <p>一般而言,若應用程式要求硬體相關許可,Google Play 會視為應用程式要求基本硬體功能,即使可能並非對應於 <code>&lt;uses-feature&gt;</code> 宣告,也是如此。隨後,Google Play 會根據 <code>&lt;uses-feature&gt;</code> 宣告暗示的功能設定篩選。</p>
+    <p>如需暗示硬體功能的許可清單,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a> 元素的文件。</p>
+</td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
+    <td valign="top">最低架構版本 (<code>minSdkVersion</code>)</td>
+    <td valign="top"><p>應用程式可以要求最低 API 層級。  </p>
+      <p><strong>範例 1</strong><br /> 宣示說明包括 <code>&lt;uses-sdk
+      android:minSdkVersion=&quot;3&quot;&gt;</code>,應用程式使用 API 層級 3 中引入的 API。使用者在 API 層級為 2 的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 不會向該使用者顯示該應用程式。 </p>
+      <p><strong>範例 2</strong><br /> 宣示說明不包括 <code>minSdkVersion</code>,應用程式使用 API 層級 3 中引入的 API。使用者在 API 層級為 2 的裝置上搜尋應用程式。<strong>結果</strong>:Google Play 會將 <code>minSdkVersion</code> 視為「1」,並將應用程式視為與所有 Android 版本相容。Google Play 會向該使用者顯示該應用程式,並允許該使用者下載該應用程式。該應用程式在執行階段將當機。 </p>
+    <p>由於您希望避免第二種狀況,我們建議您始終宣告 <code>minSdkVersion</code>。如需詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>。</p></td>
+  </tr>
+  <tr>
+    <td valign="top">最高架構版本 (<code>maxSdkVersion</code>)</td>
+    <td valign="top"><p><em>已失效。</em>若在應用程式的宣示說明中設定 <code>maxSdkVersion</code>,Android 2.1 及更高版本不會檢查或強制使用 <code>maxSdkVersion</code> 屬性,也不會編譯 SDK。對於已使用 <code>maxSdkVersion</code> 編譯的裝置,Google Play 會保留該裝置並將其用於篩選。</p>
+<p> <em>不</em>建議宣告 <code>maxSdkVersion</code>。如需詳細資料,請參閱 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>。</p></td>
+  </tr>
+</table>
+
+
+
+<h3 id="advanced-filters">進階宣示說明篩選器</h3>
+
+<p>除了<a href="#table1">表 1</a> 中的宣示說明元素外,Google Play 還可以根據表 2 中的進階宣示說明元素對應用程式進行篩選。</p>
+
+<p>這些進階宣示說明元素及其觸發的篩選僅用於例外使用狀況,專為特定類型的高效能遊戲與類似應用程式 (需要對應用程式的散佈進行嚴格控制) 而設計。<strong>多數應用程式應永遠不使用此類篩選器</strong>。</p>
+
+<p id="table2" class="table-caption"><strong>表 2.</strong>用於 Google Play 篩選的進階宣示說明元素。</p>
+<table>
+  <tr><th>宣示說明元素</th><th>摘要</th></tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code &lt;compatible-screens&gt;}</a></nobr></td>
+    <td>
+      <p>若裝置螢幕大小與密度不符合元素中的{@code &lt;compatible-screens&gt;}任何螢幕組態 (由 {@code &lt;screen&gt;} 元素宣告),Google Play 會對應用程式進行篩選。</p>
+      <p class="caution"><strong>注意:</strong>通常,<strong>您不應使用此宣示說明元素</strong>。若使用此元素,會將您未列出的螢幕大小與密度的所有組合排除在外,從而大幅減少您應用程式可能擁有的使用者。您應改為針對未使用替代資源說明的螢幕組態,使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code &lt;supports-screens&gt;}</a> 宣示說明元素 (如<a href="#table1">表 1</a> 所述) 啟用螢幕相容性模式。</p>
+    </td>
+  </tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code &lt;supports-gl-texture&gt;}</a></nobr></td>
+    <td>
+      <p>除非裝置支援應用程式所支援的一或多個 GL 材質壓縮格式,否則 Google Play 會對應用程式進行篩選。 </p>
+    </td>
+  </tr>
+</table>
+
+
+
+<h2 id="other-filters">其他篩選器</h2>
+
+<p>Google Play 可使用其他應用程式特性來判斷對於指定裝置上的特定使用者是顯示還是隱藏應用程式,如下表所述。 </p>
+
+<p id="table3" class="table-caption"><strong>表格 3</strong>。對 Google Play 上的篩選有影響的應用程式及發行特性。</p>
+<table> <tr>
+    <th>篩選器名稱</th> <th>運作方式</th> </tr>
+
+  <tr>
+    <td valign="top">發行狀態</td> <td valign="top"><p>在 Google Play 中,只有已發行的應用程式才會顯示在搜尋與瀏覽結果內。</p> <p>若使用者可以在其已購買、已安裝或最近已解除安裝應用程式的 [下載] 區域內看到某應用程式,則即使該應用程式並未發行,使用者也可以安裝。</p> <p>若應用程式已擱置,使用者將無法重新安裝或更新,即使該應用程式顯示在 [下載] 區域內,也是如此。</p> </td></tr>
+  <tr>
+  <td valign="top">付費狀態</td> <td valign="top"><p>並非所有使用者都能看到付費的應用程式。若要顯示付費的應用程式,裝置必須具有 SIM 卡,必須執行 Android 1.1 或更高版本,且必須位於可以使用付費應用程式的國家/地區 (由 SIM 電訊商確定) 內。</p></td>
+</tr> <tr>
+  <td valign="top">針對的國家/地區</td> <td valign="top"> <p>將應用程式上傳至 Google Play 時,您可以根據<strong>定價與散佈</strong>,選取要將應用程式散佈至哪些國家/地區。此後,會僅為您所選國家/地區的使用者提供該應用程式。</p>
+</td> </tr> <tr>
+  <td valign="top" style="white-space:nowrap;">CPU 架構 (ABI)</td>
+  <td valign="top"><p>若應用程式包括的原生資源庫針對特定的 CPU 架構 (例如 ARM EABI v7 或 x86),則該應用程式只有在支援該架構的裝置上才可見。如需有關 NDK 及使用原生資源庫的詳細資料,請參閱<a href="{@docRoot}tools/sdk/ndk/index.html#overview">什麼是 Android NDK?</a></p> </tr> <tr>
+  <td valign="top">防複製應用程式</td> <td valign="top"><p class="caution">Google Play 不再支援 Developer Console 中的防複製功能,也不再根據該功能對應用程式進行篩選。若要保護您的應用程式,請改用<a href="{@docRoot}google/play/licensing/index.html">應用程式授權</a>。如需詳細資訊,請參閱<a href="{@docRoot}google/play/licensing/overview.html#CopyProtection">替換防複製功能</a>。</p></td> </tr> </table>
+
+<h2 id="MultiApks">使用不同篩選器發行多個 APK</h2>
+
+<p>藉由某些特定的 Google Play 篩選器,您可以針對同一應用程式發行多個 APK,以便為不同的裝置組態提供不同的 APK。例如,若您建立使用高逼真度圖形資產的視訊遊戲,可能希望建立兩個 APK,以分別支援不同的材質壓縮格式。由此,您可以僅納入每個裝置組態所需的材質,從而降低 APK 檔案的大小。視每個裝置對材質壓縮格式的支援而定,Google Play 會為裝置提供您已宣告支援該裝置的 APK。</p>
+
+<p>目前,只有在每個 APK 根據以下組態提供不同的篩選器時,Google Play 才允許您針對同一應用程式發行多個 APK:</p>
+<ul>
+  <li>OpenGL 材質壓縮格式 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code &lt;supports-gl-texture&gt;}</a>元素。</p>
+  </li>
+  <li>螢幕大小 (以及可選的螢幕密度) <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code &lt;supports-screens&gt;}</a>或<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code &lt;compatible-screens&gt;}</a> 元素。</p>
+  </li>
+  <li>API 層級 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>元素。</p>
+  </li>
+  <li>CPU 架構 (ABI) <p>透過納入使用 <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a> (針對諸如 ARM EABI v7 或 x86 等特定 CPU 架構) 而建置的原生資源庫。</p>
+  </li>
+</ul>
+
+<p>其他所有篩選器仍照常運作,但只有這四個篩選器能區分 Google Play 上同一應用程式清單中的不同 APK。例如,若各 APK 僅因裝置是否具備相機而有所不同,則您<em>無法</em>針對同一應用程式發行多個 APK。</p>
+
+<p class="caution"><strong>注意:</strong>針對同一應用程式發行多個 APK 是進階功能,<strong>多數應用程式應僅發行為諸多裝置組態提供支援的單一 APK</strong>。發行多個 APK 需要您遵循篩選器中的特定規則,並格外注意每個 APK 的版本代碼,以確保每個組態使用正確的更新路徑。</p>
+
+<p>若您需要有關如何在 Google Play 上發行多個 APK 的詳細資訊,請參閱<a href="{@docRoot}google/play/publishing/multiple-apks.html">多 APK 支援</a>。</p> 
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/index.jd b/docs/html-intl/intl/zh-tw/index.jd
index 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-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd
new file mode 100644
index 0000000..4225184
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/index.jd
@@ -0,0 +1,72 @@
+page.title=管理應用行為顯示生命週期
+page.tags=應用行為顯示生命週期
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<h2>相依性和先決條件</h2>
+<ul>
+  <li>如何建立 Android 專案 (請參閱<a href="{@docRoot}training/basics/firstapp/creating-project.html">建立 Android
+專案</a>)</li>
+</ul>
+
+
+<h2>您也應該閱讀</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a></li>
+</ul>
+
+
+<h2>試試看</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>使用者在應用程式內部、由內到外、由外到內執行導覽時,應用程式中的 {@link android.app.Activity} 執行個體會在生命週期的不同狀態之間進行轉換。
+
+例如,在您的應用行為顯示首次啟動時,會進入系統的前景,並成為使用者的焦點。
+
+在此過程中,Android 系統會針對設定使用者介面與其他元件所在的應用行為顯示,呼叫一系列生命週期方法。
+若使用者執行的行為會啟動其他應用行為顯示或切換至其他應用程式,系統會在您的應用行為顯示進入背景 (在此處應用行為顯示將不再可見,但執行個體及其狀態保持不變) 時,針對該應用行為顯示呼叫另一組生命週期方法。
+
+
+</p>
+
+<p>在生命週期回呼方法內,您可以宣告在使用者離開並重新進入應用行為顯示時,應用行為顯示採用的行為。
+例如,若您建置串流影片播放器,可能會在使用者切換至其他應用程式時暫停影片播放,並終止網路連線。在使用者返回時,您可以重新連接至網路,讓使用者從先前暫停的位置繼續播放影片。
+
+
+</p>
+
+<p>本課程將說明每個 {@link
+android.app.Activity} 執行個體都會接收的生命週期重要回呼方法,並說明如何使用這些方法,以便應用行為顯示的運作能符合使用者的預期,而且在應用行為顯示不需要系統資源時不耗用系統資源。
+</p>
+
+<h2>課程</h2>
+ 
+<dl>
+  <dt><b><a href="starting.html">啟動應用行為顯示</a></b></dt>
+  <dd>了解應用行為顯示生命週期的有關基本概念、使用者啟動應用程式的方式,以及建立基本應用行為顯示的執行方式。
+</dd>
+  <dt><b><a href="pausing.html">暫停並繼續應用行為顯示</a></b></dt>
+  <dd>了解應用行為顯示暫停 (遭部分遮蓋) 與繼續時的狀況,以及在這些狀態變更期間應執行的操作。
+</dd>
+  <dt><b><a href="stopping.html">停止並重新啟動應用行為顯示</a></b></dt>
+  <dd>了解在使用者完全離開應用行為顯示與返回應用行為顯示時的狀況。</dd>
+  <dt><b><a href="recreating.html">重新建立應用行為顯示</a></b></dt>
+  <dd>了解在應用行為顯示遭終結時的狀況,以及如何在需要時重新建置應用行為顯示狀態。
+</dd>
+</dl> 
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd
new file mode 100644
index 0000000..8c0843d
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/pausing.jd
@@ -0,0 +1,147 @@
+page.title=暫停並繼續應用行為顯示
+page.tags=應用行為顯示生命週期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本課程示範</h2>
+    <ol>
+      <li><a href="#Pause">暫停您的應用行為顯示</a></li>
+      <li><a href="#Resume">繼續您的應用行為顯示</a></li>
+    </ol>
+    
+    <h2>您也應該閱讀</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a>
+      </li>
+    </ul>
+
+<h2>試試看</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>在應用程式正常使用期間,有時前景應用行為顯示會受到其他視覺元件的遮蓋,導致該應用行為顯示<em>暫停</em>。
+例如,若開啟半透明的應用行為顯示 (諸如採用對話方塊風格的應用行為顯示),前一個應用行為顯示會暫停。
+只要應用行為顯示仍部分可見,但目前並非焦點,就會保持暫停狀態。
+</p>
+
+<p>但是,若應用行為顯示完全遭遮蓋且不可見,則會<em>停止</em> (下一課將對此進行討論)。
+</p>
+
+<p>在您的應用行為顯示進入暫停狀態時,系統會針對您的 {@link android.app.Activity} 呼叫 {@link
+android.app.Activity#onPause onPause()} 方法,您可藉此停止在暫停時不應繼續的進行中行為 (例如影片),或保留使用者持續離開您的應用程式時應永久儲存的資訊。若使用者從暫停狀態返回至您的應用行為顯示,系統會繼續執行該應用行為顯示,並呼叫 {@link android.app.Activity#onResume onResume()} 方法。
+
+
+
+</p>
+
+<p class="note"><strong>注意:</strong>若您的應用行為顯示收到對 {@link
+android.app.Activity#onPause()} 的呼叫,可能表示該應用行為顯示將暫停片刻,隨後使用者會將焦點重新移到您的應用行為顯示上。
+但是,這通常首先表示使用者離開您的應用行為顯示。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
+<p class="img-caption"><strong>圖 1.</strong>若半透明的應用行為顯示遮蓋您的應用行為顯示,系統會呼叫 {@link android.app.Activity#onPause onPause()},您的應用行為顯示會進行等候 (狀態為「已暫停」) (1)。
+
+若使用者在應用行為顯示仍處於暫停狀態時返回至應用行為顯示,系統將呼叫 {@link android.app.Activity#onResume onResume()} (2)。
+</p>
+
+
+<h2 id="Pause">暫停您的應用行為顯示</h2>
+      
+<p>若系統為您的應用行為顯示呼叫 {@link android.app.Activity#onPause()},嚴格來說意味著您的應用行為顯示仍是部分可見,但多數情況下表示使用者離開應用行為顯示,該應用行為顯示很快將進入「已停止」狀態。
+
+通常,您應使用 {@link android.app.Activity#onPause()} 回呼執行以下操作:
+</p>
+
+<ul>
+  <li>停止動畫或會耗用 CPU 資源的其他進行中行為。</li>
+  <li>認可未儲存的變更,但是只有在使用者希望離開時永久儲存此類變更 (例如電子郵件草稿) 的情況下才執行此操作。
+</li>
+  <li>釋放系統資源,例如廣播接收器、感應器 (如 GPS) 的控點,或釋放在您的應用行為顯示暫停時可能影響電池使用壽命 (且使用者不再需要) 的資源。
+
+</li>
+</ul>
+
+<p>例如,若您的應用程式使用 {@link android.hardware.Camera},則使用 {@link android.app.Activity#onPause()} 方法可以良好地將其釋放。
+</p>
+
+<pre>
+&#64;Override
+public void onPause() {
+    super.onPause();  // Always call the superclass method first
+
+    // Release the Camera because we don't need it when paused
+    // and other activities might need to use it.
+    if (mCamera != null) {
+        mCamera.release()
+        mCamera = null;
+    }
+}
+</pre>
+
+<p>一般而言,您<strong>不</strong>應使用 {@link android.app.Activity#onPause()} 將使用者變更 (例如表單中輸入的個人資訊) 儲存至永久儲存空間。
+只有在您確信使用者希望自動儲存變更 (例如在起草電子郵件的情況下) 時,才應將使用者變更保留在 {@link android.app.Activity#onPause()} 中的永久儲存空間內。但是在 {@link
+android.app.Activity#onPause()} 期間,您應避免執行耗用大量 CPU 資源的工作 (例如寫入至資料庫),因為這會降低向下一個應用行為顯示進行視覺轉換的速度 (您應改為在 {@link android.app.Activity#onStop onStop()} 期間執行高負荷的關機作業)。
+
+
+
+
+</p>
+
+<p>對於使用 {@link android.app.Activity#onPause
+onPause()} 方法執行的作業,應保持相對簡單,以便在您的應用行為顯示實際正在停止的情況下,實現向使用者下一個目標的快速轉換。
+</p>
+
+<p class="note"><strong>注意:</strong>您的應用行為顯示暫停後,{@link
+android.app.Activity} 執行個體將保留在記憶體中,應用行為顯示繼續時將重新呼叫該執行個體。您無需重新初始化在使用回呼方法 (導致產生「已繼續」狀態) 期間建立的元件。
+
+</p>
+
+
+
+<h2 id="Resume">繼續您的應用行為顯示</h2>
+
+<p>若使用者從「已暫停」狀態繼續執行您的應用行為顯示,系統會呼叫 {@link
+android.app.Activity#onResume()} 方法。</p>
+
+<p>請注意,每次您的應用行為顯示進入前景時 (包括第一次建立該應用行為顯示時),系統都會呼叫此方法。
+因此,您應實作 {@link
+android.app.Activity#onResume()},以初始化您在 {@link
+android.app.Activity#onPause()} 期間釋放的元件,並執行每次應用行為顯示進入「已繼續」狀態時必須進行的其他初始化 (例如開始播放動畫,以及對只有在應用行為顯示具有使用者焦點時才使用的元件進行初始化)。
+
+</p>
+
+<p>以下 {@link android.app.Activity#onResume()} 範例是上述 {@link android.app.Activity#onPause()} 範例的對應,會針對應用行為顯示暫停時釋放的相機執行初始化。
+
+</p>
+
+<pre>
+&#64;Override
+public void onResume() {
+    super.onResume();  // Always call the superclass method first
+
+    // Get the Camera instance as the activity achieves full user focus
+    if (mCamera == null) {
+        initializeCamera(); // Local method to handle camera init
+    }
+}
+</pre>
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd
new file mode 100644
index 0000000..4b0efda
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/recreating.jd
@@ -0,0 +1,178 @@
+page.title=重新建立應用行為顯示
+page.tags=應用行為顯示生命週期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本課程示範</h2>
+    <ol>
+      <li><a href="#SaveState">儲存您的應用行為顯示狀態</a></li>
+      <li><a href="#RestoreState">還原您的應用行為顯示狀態</a></li>
+    </ol>
+    
+    <h2>您也應該閱讀</h2>
+    <ul>
+      <li><a href="{@docRoot}training/basics/supporting-devices/screens.html">支援不同的螢幕</a>
+</li>
+      <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a></li>
+      <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a>
+      </li>
+    </ul>
+
+  </div>
+</div>
+
+<p>在某些情況下,您的應用行為顯示會因應用程式的正常行為 (例如使用者按下 <em>[返回]</em>按鈕) 而遭終結,或您的應用行為顯示透過呼叫 {@link android.app.Activity#finish()} 來示意自身發生毀損。
+
+此外,在您的應用行為顯示目前已停止並且已長時間未使用時,或者在系統因前景應用行為顯示需要更多資源而必須關閉背景程序以復原記憶體時,系統可能會終結您的應用行為顯示。
+
+</p>
+
+<p>若您的應用行為顯示因使用者按下 <em>[返回]</em>按鈕而遭終結,或應用行為顯示將自身終止,則系統中該 {@link android.app.Activity} 執行個體的概念將永遠無法實現,因為該行為表示不再需要此應用行為顯示。
+
+但是,若系統因系統限制 (而非因應用程式正常行為) 而終結應用行為顯示,則雖然實際的 {@link android.app.Activity} 執行個體不會執行,但系統會記住該執行個體曾經存在,因此若使用者重新導覽至該應用行為顯示,系統會使用對應用行為顯示遭終結時的狀態進行描述的一組已儲存資料,建立該應用行為顯示的新執行個體。
+
+
+
+系統用於還原先前狀態的已儲存資料稱為「執行個體狀態」,是 {@link android.os.Bundle} 物件中所儲存索引鍵值配對的集合。
+
+</p>
+
+<p class="caution"><strong>注意:</strong>使用者每次旋轉螢幕時,都會終結並重新建立您的應用行為顯示。
+螢幕變更方向時,系統會終結並重新建立前景應用行為顯示,因為螢幕組態已變更,您的應用行為顯示可能需要載入替代資源 (例如版面配置)。
+
+</p>
+
+<p>依預設,系統會使用 {@link android.os.Bundle} 執行個體狀態將每個 {@link android.view.View} 物件的有關資訊 (例如輸入至 {@link android.widget.EditText} 物件中的文字值) 儲存至您的應用行為顯示版面配置中。
+
+因此,若終結並重新建立您的應用行為顯示執行個體,會將版面配置的狀態還原為其先前的狀態,您無需輸入任何程式碼。
+
+但是,您可能希望還原更多的應用行為顯示狀態資訊,例如成員變數 (可追蹤應用行為顯示中使用者的進度)。
+
+</p>
+
+<p class="note"><strong>注意:</strong>若要讓 Android 系統還原應用行為顯示中檢視的狀態,
+<strong>每個檢視都必須具有唯一的 ID</strong> (由 <a href="{@docRoot}reference/android/view/View.html#attr_android:id">{@code
+android:id}</a> 屬性提供)。
+</p>
+
+<p>若要儲存有關應用行為顯示狀態的其他資料,您必須覆寫 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 回呼方法。系統會在使用者離開您的應用行為顯示時呼叫此方法,並向其傳遞 {@link android.os.Bundle} 物件 (在您的應用行為顯示遭到非預期終結時將儲存該物件)。
+
+
+
+若系統必須稍後重新建立應用行為顯示執行個體,會將同一 {@link
+android.os.Bundle} 物件傳遞至 {@link android.app.Activity#onRestoreInstanceState
+onRestoreInstanceState()} 與 {@link android.app.Activity#onCreate onCreate()} 方法。
+
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-savestate.png" />
+<p class="img-caption"><strong>圖 2.</strong>系統開始停止您的應用行為顯示時,會呼叫 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} (1),因此您可以指定在必須重新建立 {@link android.app.Activity} 執行個體時希望儲存的其他狀態資料。若已終結應用行為顯示,且必須重新建立該執行個體,系統會將 (1) 中定義的狀態資料傳遞至 {@link android.app.Activity#onCreate onCreate()} 方法 (2) 與 {@link android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 方法 (3)。
+
+
+
+
+
+
+</p>
+
+
+
+<h2 id="SaveState">儲存您的應用行為顯示狀態</h2>
+
+<p>在您的應用行為顯示開始停止時,系統會呼叫 {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()},因此您的應用行為顯示可將狀態資訊與索引鍵值配對的集合一併儲存。
+此方法的預設實作會儲存應用行為顯示的檢視層次狀態相關資訊 (例如 {@link android.widget.EditText} 小工具中的文字或 {@link android.widget.ListView} 的捲動位置)。
+
+</p>
+
+<p>若要儲存應用行為顯示的其他狀態資訊,您必須實作 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()},並將索引鍵值配對新增至 {@link android.os.Bundle} 物件。
+
+例如:</p>
+
+<pre>
+static final String STATE_SCORE = "playerScore";
+static final String STATE_LEVEL = "playerLevel";
+...
+
+&#64;Override
+public void onSaveInstanceState(Bundle savedInstanceState) {
+    // Save the user's current game state
+    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
+    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
+    
+    // Always call the superclass so it can save the view hierarchy state
+    super.onSaveInstanceState(savedInstanceState);
+}
+</pre>
+
+<p class="caution"><strong>注意:</strong>請始終呼叫 {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} 的超級類別實作,以便預設實作可儲存檢視階層的狀態。
+</p>
+
+
+
+<h2 id="RestoreState">還原您的應用行為顯示狀態</h2>
+
+<p>在重新建立先前終結的應用行為顯示時,您可以從 {@link android.os.Bundle} 復原系統向您的應用行為顯示傳遞的已儲存狀態。
+
+{@link android.app.Activity#onCreate onCreate()} 與 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 回呼方法會接收同一 {@link android.os.Bundle} (包含執行個體狀態資訊)。
+</p>
+
+<p>由於不論系統是建立應用行為顯示的新執行個體,還是重新建立先前的執行個體,都會呼叫 {@link android.app.Activity#onCreate onCreate()} 方法,因此您必須先檢查狀態 {@link android.os.Bundle} 是否為 null,然後再嘗試對其進行讀取。
+
+若其為 null,表示系統正在建立應用行為顯示的新執行個體,否則表示正在還原先前已終結的執行個體。
+
+</p>
+
+<p>例如,以下為您展示了如何在 {@link android.app.Activity#onCreate
+onCreate()} 中還原某些狀態資料:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState); // Always call the superclass first
+   
+    // Check whether we're recreating a previously destroyed instance
+    if (savedInstanceState != null) {
+        // Restore value of members from saved state
+        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+    } else {
+        // Probably initialize members with default values for a new instance
+    }
+    ...
+}
+</pre>
+
+<p>您可以選擇並非在 {@link android.app.Activity#onCreate onCreate()} 期間還原狀態,而是實作 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()},系統會在呼叫 {@link android.app.Activity#onStart()} 方法後呼叫該項目。
+
+只有存在要還原的已儲存狀態時,系統才會呼叫 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()},因此您無需檢查 {@link android.os.Bundle} 是否為 null:
+</p>
+        
+<pre>
+public void onRestoreInstanceState(Bundle savedInstanceState) {
+    // Always call the superclass so it can restore the view hierarchy
+    super.onRestoreInstanceState(savedInstanceState);
+   
+    // Restore state members from saved instance
+    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
+    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
+}
+</pre>
+
+<p class="caution"><strong>注意:</strong>請始終呼叫 {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 的超級類別實作,以便預設實作可還原檢視階層的狀態。
+</p>
+
+<p>若要詳細了解因執行階段中的重新啟動事件 (例如在旋轉螢幕時) 而重新建立應用行為顯示,請閱讀<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>。
+</p>
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd
new file mode 100644
index 0000000..3453ac5
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd
@@ -0,0 +1,285 @@
+page.title=啟動應用行為顯示
+page.tags=應用行為顯示的生命週期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本課程示範</h2>
+<ol>
+  <li><a href="#lifecycle-states">了解生命週期回呼</a></li>
+  <li><a href="#launching-activity">指定您應用程式的啟動器應用行為顯示</a></li>
+  <li><a href="#Create">建立新執行個體</a></li>
+  <li><a href="#Destroy">終結應用行為顯示</a></li>
+</ol>
+    
+    <h2>您也應該閱讀</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a></li>
+    </ul>
+
+<h2>試試看</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>在其他程式設計範例中,使用 {@code main()} 方法啟動應用程式,而 Android 系統與此不同,透過呼叫與 {@link android.app.Activity} 執行個體生命週期的特定階段相對應的特定回呼方法,在該執行個體中啟動程式碼。
+
+
+可以採用一系列回呼方法啟動應用行為顯示,也可以採用一系列回呼方法終結應用行為顯示。
+</p>
+
+<p>本課程將概述最重要的生命週期方法,並為您展示如何處理第一個生命週期回呼 (該回呼會建立應用行為顯示的新執行個體)。
+</p>
+
+
+
+<h2 id="lifecycle-states">了解生命週期回呼</h2>
+
+<p>在應用行為顯示的生命週期內,系統會以類似於階梯金字塔的順序,呼叫一組核心生命週期方法。
+換言之,應用行為顯示生命週期的每個階段都是金字塔上的一個台階。
+在系統建立新應用行為顯示執行個體時,每個回呼方法都會將應用行為顯示狀態向頂部移動一個台階。
+在金字塔的頂部,應用行為顯示將在前景中執行,使用者可以與應用行為顯示互動。
+</p>
+
+<p>在使用者開始離開應用行為顯示時,系統會呼叫可將應用行為顯示狀態沿金字塔下移的其他方法,以終結應用行為顯示。
+在某些狀況下,應用行為顯示會沿金字塔僅移動部分台階,然後開始等候 (例如若使用者切換至其他應用程式),應用行為顯示可以由此移回頂部 (若使用者返回該應用行為顯示),並在使用者先前停止的位置繼續。
+
+
+</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle.png" />
+<p class="img-caption"><strong>圖 1.</strong>應用行為顯示生命週期的簡化圖例 (以階梯金字塔表示)。
+此圖例顯示,對於讓應用行為顯示向頂部的「已繼續」狀態邁上一個台階所用的每個回呼,都存在可讓應用行為顯示下移的回呼方法。
+
+應用行為顯示也可以從「已暫停」及「已停止」狀態返回至「已繼續」狀態。
+</p>
+
+
+<p>視應用行為顯示的複雜程度而定,您可能不需要實作所有生命週期方法。
+但是,請務必了解每個生命週期方法,並實作能確保您的應用程式以使用者預期方式運作的生命週期方法。
+正確實作應用行為顯示生命週期方法可確保您的應用程式以多種方式良好運作,包括:
+</p>
+<ul>
+  <li>使用您的應用程式時,若使用者接電話或切換至其他應用程式,不會發生當機。
+</li>
+  <li>使用者未主動使用時,不會耗用寶貴的系統資源。
+</li>
+  <li>若使用者離開您的應用程式並在稍後返回,使用者的進度不會遺失。
+</li>
+  <li>若螢幕方向在橫向與直向之間旋轉,不會發生當機或遺失使用者的進度。
+</li>
+</ul>
+
+<!--
+<p class="table-caption"><strong>Table 1.</strong> Activity lifecycle state pairs and callback 
+methods.</p>
+<table>
+  <tr>
+    <th scope="col">Lifecycle State</th>
+    <th scope="col">Startup Method</th>
+    <th scope="col">Teardown Method</th>
+  </tr>
+  <tr>
+    <td>Created / Destroyed</td>
+    <td>{@link android.app.Activity#onCreate onCreate()}</td>
+    <td>{@link android.app.Activity#onDestroy()}</td>
+  </tr>
+  <tr>
+    <td>Started / Stopped</td>
+    <td>{@link android.app.Activity#onStart()}</td>
+    <td>{@link android.app.Activity#onStop()}</td>
+  </tr>
+  <tr>
+    <td>Resumed / Resumed</td>
+    <td>{@link android.app.Activity#onResume()}</td>
+    <td>{@link android.app.Activity#onPause()}</td>
+  </tr>
+</table>
+-->
+
+<p>在以下課程中您將了解到,某些情況下應用行為顯示會在不同的狀態之間進行轉換,如圖 1 所示。
+但是在這些狀態中,只有三種可以是靜態狀態。
+換言之,應用行為顯示長時間存在時,只能具備這三種狀態的其中之一:
+</p>
+<dl>
+  <dt>已繼續</dt>
+    <dd>若具備此狀態,應用行為顯示將位於前景中,使用者可以與應用行為顯示互動 (有時也稱為「執行中」狀態)。
+</dd>
+  <dt>已暫停</dt>
+    <dd>若具備此狀態,該應用行為顯示的一部分會遭其他應用行為顯示遮蓋,&mdash;
+位於前景中的其他應用行為顯示處於半透明狀態,或未覆蓋整個螢幕。已暫停的應用行為顯示不會接收使用者輸入,也無法執行任何程式碼。
+
+  <dt>已停止</dt>
+    <dd>若具備此狀態,應用行為顯示將完全隱藏,使用者無法看到;會將該應用行為顯示視為位於背景中。
+停止後,會保留應用行為顯示執行個體及其所有狀態資訊 (例如成員變數),但其無法執行任何程式碼。
+</dd>
+</dl>
+
+<p>其他狀態 (「已建立」與「已啟動」) 都是暫時狀態,系統透過呼叫下一個生命週期回呼方法,會從這些狀態快速移至下一個狀態。
+換言之,在系統呼叫 {@link android.app.Activity#onCreate onCreate()} 後,會快速呼叫 {@link
+android.app.Activity#onStart()},然後快速呼叫 {@link
+android.app.Activity#onResume()}。
+</p>
+
+<p>以上所述是應用行為顯示的基本生命週期。現在您將開始了解某些特定生命週期行為。
+</p>
+
+
+
+<h2 id="launching-activity">指定您應用程式的啟動器應用行為顯示</h2> 
+
+<p>若使用者從主螢幕中選取您的應用程式圖示,系統會針對應用程式中您已宣告作為「啟動器」(或「主程式」) 應用行為顯示的 {@link android.app.Activity},呼叫 {@link
+android.app.Activity#onCreate onCreate()} 方法。
+此應用行為顯示將作為您應用程式使用者介面的主要進入點。
+</p>
+
+<p>您可以定義 Android 宣示說明檔案 (即 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">{@code AndroidManifest.xml}</a>,位於您專案目錄的根目錄中) 中用作主要應用行為顯示的應用行為顯示。
+</p>
+
+<p>必須在宣示說明中使用 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> (包括 {@link
+android.content.Intent#ACTION_MAIN MAIN} 行為與 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 類別) 宣告您應用程式的主要應用行為顯示。
+例如:</p> 
+
+<pre>
+&lt;activity android:name=".MainActivity" android:label="&#64;string/app_name">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.MAIN" />
+        &lt;category android:name="android.intent.category.LAUNCHER" />
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>注意:</strong>使用 Android SDK 工具建立新 Android 專案時,預設專案檔案包括宣示說明中使用此篩選器宣告的 {@link android.app.Activity} 類別。
+
+</p>
+
+<p>若未針對您的其中一項應用行為顯示宣告 {@link android.content.Intent#ACTION_MAIN MAIN} 行為或 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 類別,您的應用程式圖示將不會顯示在主螢幕的應用程式清單中。
+
+</p>
+
+
+
+<h2 id="Create">建立新執行個體</h2>
+
+<p>大多數應用程式都包括多項不同的應用行為顯示,使用者可以藉此執行不同的行為。不論應用行為顯示是使用者按一下應用程式圖示時建立的主要應用行為顯示,還是您的應用程式為回應使用者行為而啟動的其他應用行為顯示,系統都會呼叫 {@link android.app.Activity#onCreate onCreate()} 方法,以建立 {@link android.app.Activity} 的每個新執行個體。
+
+
+
+</p>
+
+<p>您必須實作 {@link android.app.Activity#onCreate onCreate()} 方法以執行基本的應用程式啟動邏輯,在應用行為顯示的整個生命週期內,該操作應僅執行一次。
+例如,實作 {@link android.app.Activity#onCreate onCreate()} 將定義使用者介面,並且可能會啟動某些類別範圍的變數。
+
+</p>
+
+<p>例如,以下 {@link android.app.Activity#onCreate onCreate()} 方法範例展示的一些程式碼將執行應用行為顯示的某些基礎設定,諸如宣告使用者介面 (在 XML 版面配置檔案中定義)、定義成員變數,以及設定 UI 的某些部分。
+
+
+</p>
+
+<pre>
+TextView mTextView; // Member variable for text view in the layout
+
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    // Set the user interface layout for this Activity
+    // The layout file is defined in the project res/layout/main_activity.xml file
+    setContentView(R.layout.main_activity);
+    
+    // Initialize member TextView so we can manipulate it later
+    mTextView = (TextView) findViewById(R.id.text_message);
+    
+    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+        // For the main activity, make sure the app icon in the action bar
+        // does not behave as a button
+        ActionBar actionBar = getActionBar();
+        actionBar.setHomeButtonEnabled(false);
+    }
+}
+</pre>
+
+<p class="caution"><strong>注意:</strong>僅在 Android 2.0 (API 層級為 5) 及更高版本中,可以透過此方式使用 {@link android.os.Build.VERSION#SDK_INT} 防止舊版系統執行新 API。
+
+在舊版系統中,將發生執行階段例外狀況。</p>
+
+<p>{@link android.app.Activity#onCreate onCreate()} 執行完成後,系統會連續快速呼叫 {@link android.app.Activity#onStart()} 與 {@link android.app.Activity#onResume()} 方法。
+
+您的應用行為顯示永遠不會具備「已建立」或「已啟動」狀態。嚴格來說,在呼叫 {@link android.app.Activity#onStart()} 時,使用者可以看到應用行為顯示,但隨後會快速呼叫 {@link android.app.Activity#onResume()},應用行為顯示將保持「已繼續」狀態,直到發生某些狀況 (例如接聽電話、使用者導覽至其他應用行為顯示,或裝置螢幕關閉) 變更該狀態為止。
+
+
+
+</p>
+
+<p>在後續的其他課程中,您將了解在應用行為顯示的生命週期期間,其他啟動方法 ({@link
+android.app.Activity#onStart()} 與 {@link android.app.Activity#onResume()}) 在用於從「已暫停」或「已停止」狀態繼續執行應用行為顯示時如何提供助益。
+</p>
+
+<p class="note"><strong>注意:</strong>{@link android.app.Activity#onCreate onCreate()} 方法包括稱為 <code>savedInstanceState</code> 的參數,在有關<a href="recreating.html">重新建立應用行為顯示</a>的後續課程中將討論該參數。
+
+</p>
+
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-create.png" />
+<p class="img-caption"><strong>圖 2.</strong>應用行為顯示生命週期結構的另一個圖例 (著重展示系統建立應用行為顯示的新執行個體時依次呼叫的三個主要回呼:{@link android.app.Activity#onCreate onCreate()}、{@link
+android.app.Activity#onStart()} 及 {@link android.app.Activity#onResume()}。
+
+完成這一系列的回呼後,應用行為顯示將具備「已繼續」狀態,此時使用者可以與應用行為顯示互動,直到使用者切換至其他應用行為顯示為止。
+
+</p>
+
+
+
+
+
+
+
+<h2 id="Destroy">終結應用行為顯示</h2>
+
+<p>應用行為顯示的第一個生命週期回呼是 {@link android.app.Activity#onCreate
+onCreate()},最後一個回呼是 {@link android.app.Activity#onDestroy}。系統針對您的應用行為顯示呼叫此方法作為最終訊號,表示正從系統記憶體中完全移除您的應用行為顯示執行個體。
+
+</p>
+
+<p>大多數應用程式不需要實作此方法,因為區域類別參考與應用行為顯示一併終結,您的應用行為顯示應在 {@link
+android.app.Activity#onPause} 與 {@link android.app.Activity#onStop} 期間執行大多數清理。
+但是,若您的應用行為顯示包括 {@link
+android.app.Activity#onCreate onCreate()} 期間建立的背景執行緒,或包括其他長時間執行的資源 (若未正確關閉,可能會導致記憶體流失),您應在 {@link
+android.app.Activity#onDestroy} 期間終止這些執行緒或資源。
+
+</p>
+
+<pre>
+&#64;Override
+public void onDestroy() {
+    super.onDestroy();  // Always call the superclass
+    
+    // Stop method tracing that the activity started during onCreate()
+    android.os.Debug.stopMethodTracing();
+}
+</pre>
+
+<p class="note"><strong>注意:</strong>在所有情況下,系統會在已呼叫 {@link android.app.Activity#onPause} 與 {@link
+android.app.Activity#onStop} 後呼叫 {@link android.app.Activity#onDestroy},但在 {@link android.app.Activity#onCreate onCreate()} 方法中呼叫 {@link
+android.app.Activity#finish()} 的情況除外。
+
+在某些情況下 (例如您應用行為顯示的執行目的在於臨時確定是否啟動其他應用行為顯示),您可能會從 {@link
+android.app.Activity#onCreate onCreate()} 中呼叫 {@link android.app.Activity#finish()} 以終結應用行為顯示。
+若是如此,系統會立即呼叫 {@link android.app.Activity#onDestroy},而不會呼叫其他任何生命週期方法。
+
+</p>
diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd
new file mode 100644
index 0000000..a2da5ca
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/stopping.jd
@@ -0,0 +1,187 @@
+page.title=停止並重新啟動應用行為顯示
+page.tags=應用行為顯示生命週期
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+    
+    <h2>本課程示範</h2>
+    <ol>
+      <li><a href="#Stop">停止您的應用行為顯示</a></li>
+      <li><a href="#Start">啟動/重新啟動您的應用行為顯示</a></li>
+    </ol>
+    
+    <h2>您也應該閱讀</h2>
+    <ul>
+      <li><a href="{@docRoot}guide/components/activities.html">應用行為顯示</a>
+      </li>
+    </ul>
+
+<h2>試試看</h2>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">下載示範</a>
+ <p class="filename">ActivityLifecycle.zip</p>
+</div>
+
+  </div>
+</div>
+
+<p>正確停止並重新啟動您的應用行為顯示是應用行為顯示生命週期內的重要程序,該程序可確保使用者感知您的應用程式在持續運作,而且不會遺失進度。在以下一些重要情況下,會停止並重新啟動您的應用行為顯示:
+
+</p>
+
+<ul>
+  <li>使用者開啟 [最近的應用程式] 視窗,並從您的應用程式切換至其他應用程式。在您的應用程式內,目前位於前景中的應用行為顯示將停止。
+若使用者從主螢幕啟動器圖示或 [最近的應用程式] 視窗返回至您的應用程式,應用行為顯示將重新啟動。
+</li>
+  <li>使用者在您的應用程式中執行啟動新應用行為顯示的行為。建立第二個應用行為顯示時,目前的應用行為顯示將停止。
+若使用者隨後按下 <em>[返回]</em> 按鈕,第一個應用行為顯示將重新啟動。
+</li>
+  <li>使用者在其電話上使用您的應用程式時,會接聽電話。</li>
+</ul>
+
+<p>{@link android.app.Activity} 類別可提供兩種生命週期方法,即 {@link
+android.app.Activity#onStop()} 與 {@link android.app.Activity#onRestart()},您可藉此明確處理如何停止並重新啟動您的應用行為顯示控點。
+處於暫停狀態時,會發生部分 UI 受阻的狀況,但停止狀態與此不同,可保證 UI 不再可見,使用者的焦點在於獨立的應用行為顯示 (或完全獨立的應用程式) 中。
+
+</p>
+
+<p class="note"><strong>注意:</strong>由於在您的 {@link android.app.Activity} 執行個體停止時,系統會將其保留在系統記憶體中,因此您可能完全不需要實作 {@link android.app.Activity#onStop()} 與 {@link android.app.Activity#onRestart()} (甚至 {@link
+android.app.Activity#onStart()}) 方法。
+
+對於相對簡單的大多數應用行為顯示,應用行為顯示會正常停止並重新啟動,您可能只需要使用 {@link
+android.app.Activity#onPause()} 暫停進行中的行為,並與系統資源中斷連線。
+</p>
+
+<img src="{@docRoot}images/training/basics/basic-lifecycle-stopped.png" />
+<p class="img-caption"><strong>圖 1.</strong>使用者離開您的應用行為顯示時,系統將呼叫 {@link android.app.Activity#onStop onStop()} 以停止應用行為顯示 (1)。
+若使用者在停止應用行為顯示時返回,系統將呼叫 {@link android.app.Activity#onRestart onRestart()} (2),然後快速呼叫 {@link android.app.Activity#onStart onStart()} (3) 與 {@link
+android.app.Activity#onResume()} (4)。
+
+請注意,不論何種狀況導致應用行為顯示停止,系統始終會先呼叫 {@link android.app.Activity#onPause onPause()},然後呼叫 {@link
+android.app.Activity#onStop onStop()}。
+</p>
+
+
+
+<h2 id="Stop">停止您的應用行為顯示</h2>
+
+<p>您的應用行為顯示收到對 {@link android.app.Activity#onStop()} 方法的呼叫時,將不再可見,並會在使用者不使用時釋放不需要的幾乎所有資源。
+
+在停止您的應用行為顯示後,若系統需要復原系統記憶體,可能會終結執行個體。
+在極少數狀況下,系統可能只會終止應用程式的程序,而不會呼叫應用行為顯示的最終 {@link android.app.Activity#onDestroy()} 回呼,因此請您務必使用 {@link android.app.Activity#onStop()} 釋放可能導致記憶體流失的資源。
+
+</p>
+
+<p>雖然會先呼叫 {@link android.app.Activity#onPause onPause()} 方法,然後呼叫 {@link android.app.Activity#onStop()},但是您應使用 {@link android.app.Activity#onStop onStop()} 執行規模更大、耗用 CPU 資源更多的關閉作業,諸如將資訊寫入至資料庫。
+
+
+</p>
+
+<p>例如,以下範例展示了 {@link android.app.Activity#onStop onStop()} 的實作,該實作將註記草稿的內容儲存至永續性儲存體:
+</p>
+
+<!-- TODO: Find a better example for onStop, because this kind of thing should probably use a
+separate thread but that's too complicated to show here. -->
+<pre>
+&#64;Override
+protected void onStop() {
+    super.onStop();  // Always call the superclass method first
+
+    // Save the note's current draft, because the activity is stopping
+    // and we want to be sure the current note progress isn't lost.
+    ContentValues values = new ContentValues();
+    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
+    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
+
+    getContentResolver().update(
+            mUri,    // The URI for the note to update.
+            values,  // The map of column names and new values to apply to them.
+            null,    // No SELECT criteria are used.
+            null     // No WHERE columns are used.
+            );
+}
+</pre>
+
+<p>您的應用行為顯示停止後,{@link android.app.Activity} 物件將保留在記憶體中,應用行為顯示繼續時將重新呼叫該物件。
+您無需重新初始化在使用回呼方法 (導致產生「已繼續」狀態) 期間建立的元件。
+此外,系統還會追蹤版面配置中每個 {@link android.view.View} 的目前狀態,因此若使用者在 {@link android.widget.EditText} 小工具中輸入文字,將保留該內容,您無需對其執行儲存與還原。
+
+
+</p>
+
+<p class="note"><strong>注意:</strong>即使系統在您的應用行為顯示停止時將其終結,該應用行為顯示仍在 {@link android.os.Bundle} (索引鍵值配對的二進位大型物件) 中保留 {@link android.view.View} 物件 (例如 {@link
+android.widget.EditText} 中的文字) 的狀態,若使用者重新導覽至應用行為顯示的同一執行個體,會還原這些物件 (<a href="recreating.html">下一課</a>將更詳細地討論在終結並重新建立您的應用行為顯示時使用 {@link android.os.Bundle} 儲存其他狀態資料)。
+
+
+</p>
+
+
+
+<h2 id="Start">啟動/重新啟動您的應用行為顯示</h2>
+
+<p>您的應用行為顯示從停止狀態回到前景中時,會收到對 {@link android.app.Activity#onRestart()} 的呼叫。
+此外,系統還會呼叫 {@link
+android.app.Activity#onStart()} 方法,每次您的應用行為顯示變為可見時 (不論是重新啟動還是第一次建立),都會執行此操作。
+但是,只有在應用行為顯示從停止狀態繼續時,才會呼叫 {@link
+android.app.Activity#onRestart()} 方法,因此,您可將其用於執行只有在先前停止但未終結應用行為顯示時才需要執行的特殊還原工作。
+
+</p>
+
+<p>應用程式需要使用 {@link android.app.Activity#onRestart()} 來還原應用行為顯示狀態的狀況並不常見,因此針對適用於普通應用程式的這一方法,不存在任何指導方針。
+
+但是,由於您的 {@link android.app.Activity#onStop()} 方法將基本上清除應用行為顯示的所有資源,因此在應用行為顯示重新啟動時,您需要重新啟動這些資源。
+
+此外,在首次建立應用行為顯示時 (此時不存在既有的應用行為顯示執行個體),您也需要重新啟動這些資源。
+因此,您通常應使用 {@link android.app.Activity#onStart()} 回呼方法作為 {@link android.app.Activity#onStop()} 方法的對應,因為系統在建立您的應用行為顯示以及從停止狀態重新啟動應用行為顯示時,都會呼叫 {@link
+android.app.Activity#onStart()}。
+
+
+</p>
+
+<p>例如,由於使用者可能離開應用程式很長時間後才回到應用程式,因此使用 {@link android.app.Activity#onStart()} 方法可以良好地驗證所需的系統功能是否已啟用:
+
+</p>
+
+<pre>
+&#64;Override
+protected void onStart() {
+    super.onStart();  // Always call the superclass method first
+    
+    // The activity is either being restarted or started for the first time
+    // so this is where we should make sure that GPS is enabled
+    LocationManager locationManager = 
+            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+    boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+    
+    if (!gpsEnabled) {
+        // Create a dialog here that requests the user to enable GPS, and use an intent
+        // with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
+        // to take the user to the Settings screen to enable GPS when they click "OK"
+    }
+}
+
+&#64;Override
+protected void onRestart() {
+    super.onRestart();  // Always call the superclass method first
+    
+    // Activity being restarted from stopped state    
+}
+</pre>
+
+
+
+
+<p>系統終結您的應用行為顯示時,會針對您的 {@link android.app.Activity} 呼叫 {@link android.app.Activity#onDestroy()} 方法。
+由於通常您應該已使用 {@link android.app.Activity#onStop()} 釋放大多數資源,因此在收到對 {@link
+android.app.Activity#onDestroy()} 的呼叫之前,大多數應用程式幾乎都不需要執行操作。
+此方法將為您提供對可能導致記憶體流失的資源執行清理的最後機會,因此您應確保已終結其他執行緒,並確保已停止長時間執行的其他行為 (例如方法追蹤)。
+
+
+</p>
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/databases.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..f3706f1
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/databases.jd
@@ -0,0 +1,317 @@
+page.title=在 SQL 資料庫中儲存資料
+page.tags=資料儲存空間
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本課程示範</h2>
+<ol>
+  <li><a href="#DefineContract">定義結構描述與合約</a></li>
+  <li><a href="#DbHelper">使用 SQL Helper 建立資料庫</a></li>
+  <li><a href="#WriteDbRow">將資訊置入資料庫中</a></li>
+  <li><a href="#ReadDbRow">讀取資料庫中的資訊</a></li>
+  <li><a href="#DeleteDbRow">刪除資料庫中的資訊</a></li>
+  <li><a href="#UpdateDbRow">更新資料庫</a></li>
+</ol>
+
+<h2>您也應該閱讀</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">使用資料庫</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+  <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>對於重複資料或結構化資料 (例如連絡資訊),將其儲存至資料庫是理想的選擇。
+本課程假設您已大體熟悉 SQL 資料庫,並協助您開始在 Android 上使用 SQLite 資料庫。
+
+{@link android.database.sqlite} 套件中提供在 Android 上使用資料庫所需的 API。
+</p>
+
+
+<h2 id="DefineContract">定義結構描述與合約</h2>
+
+<p>SQL 資料庫的其中一項主要準則是結構描述,即針對資料庫組織方式的正式宣告。
+在您建立資料庫所用的 SQL 陳述式中,會反映結構描述。
+您可能會發現,建立伴隨類別 (也稱為<em>合約</em>類別) 會非常有益,該類別會以系統化的自我記錄方式,明確指定結構描述的配置。
+
+</p>
+
+<p>合約類別是常數 (可為 URI、表格與欄定義名稱) 的容器。
+藉由合約類別,您可在同一套件內的所有其他類別中使用相同的常數。
+您可藉此在一個位置變更欄名稱,然後將其傳播到全部程式碼中。
+</p>
+
+<p>組織合約類別的良好方式,是將適用於整個資料庫的全域定義置於類別的根層級,
+然後,針對列舉欄的每個表格建立內部類別。
+</p>
+
+<p class="note"><strong>注意:</strong>透過實作 {@link
+android.provider.BaseColumns} 介面,您的內部類別可繼承主索引鍵欄位 (稱為 {@code _ID}),某些 Android 類別 (諸如 cursor adaptor) 希望其具備該欄位。
+
+此操作並非必需的操作,但是可協助您的資料庫與 Android 架構協調運作。
+</p>
+
+<p>例如,以下程式碼片段會定義單一表格的表格名稱與欄名稱:
+</p>
+
+
+<pre>
+public final class FeedReaderContract {
+    // To prevent someone from accidentally instantiating the contract class,
+    // give it an empty constructor.
+    public FeedReaderContract() {}
+
+    /* Inner class that defines the table contents */
+    public static abstract class FeedEntry implements BaseColumns {
+        public static final String TABLE_NAME = &quot;entry&quot;;
+        public static final String COLUMN_NAME_ENTRY_ID = &quot;entryid&quot;;
+        public static final String COLUMN_NAME_TITLE = &quot;title&quot;;
+        public static final String COLUMN_NAME_SUBTITLE = &quot;subtitle&quot;;
+        ...
+    }
+}
+</pre>
+
+
+
+<h2 id="DbHelper">使用 SQL Helper 建立資料庫</h2>
+
+<p>定義資料庫的外觀之後,您應實作多種方法以建立並維護資料庫與表格。
+以下所示是可建立及刪除表格的某些典型陳述式:
+</P>
+
+<pre>
+private static final String TEXT_TYPE = &quot; TEXT&quot;;
+private static final String COMMA_SEP = &quot;,&quot;;
+private static final String SQL_CREATE_ENTRIES =
+    &quot;CREATE TABLE &quot; + FeedEntry.TABLE_NAME + &quot; (&quot; +
+    FeedEntry._ID + &quot; INTEGER PRIMARY KEY,&quot; +
+    FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+    FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+    ... // Any other options for the CREATE command
+    &quot; )&quot;;
+
+private static final String SQL_DELETE_ENTRIES =
+    &quot;DROP TABLE IF EXISTS &quot; + FeedEntry.TABLE_NAME;
+</pre>
+
+<p>如同在裝置的<a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">內部儲存空間</a>儲存檔案一樣,Android 會將您的資料庫儲存在與應用程式關聯的私用磁碟空間內。
+
+依預設,其他應用程式無法存取此區域,因此您的資料安全無虞。
+</p>
+
+<p>{@link
+android.database.sqlite.SQLiteOpenHelper} 類別中提供一組有用的 API。若使用此類別取得資料庫的參考,只有在需要執行且<em>並非處於應用程式啟動期間</em>時,系統才會執行資料庫的建立與更新操作 (執行時間可能很長)。
+
+
+
+您只需呼叫 {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 或
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} 即可。
+</p>
+
+<p class="note"><strong>注意:</strong>由於這些操作的時間可能很長,因此請確保您在背景執行緒 (例如 {@link android.os.AsyncTask} 或 {@link android.app.IntentService}) 中呼叫 {@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} 或 {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}。
+
+</p>
+
+<p>若要使用 {@link android.database.sqlite.SQLiteOpenHelper},請建立可覆寫 {@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}、{@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} 與 {@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()} 回呼方法的子類別。
+您還可以實作 {@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()},但這並非必需的操作。
+
+</p>
+
+<p>例如,以下展示了 {@link
+android.database.sqlite.SQLiteOpenHelper} (使用上述某些命令) 的實作:</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+    // If you change the database schema, you must increment the database version.
+    public static final int DATABASE_VERSION = 1;
+    public static final String DATABASE_NAME = &quot;FeedReader.db&quot;;
+
+    public FeedReaderDbHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+    public void onCreate(SQLiteDatabase db) {
+        db.execSQL(SQL_CREATE_ENTRIES);
+    }
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        // This database is only a cache for online data, so its upgrade policy is
+        // to simply to discard the data and start over
+        db.execSQL(SQL_DELETE_ENTRIES);
+        onCreate(db);
+    }
+    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        onUpgrade(db, oldVersion, newVersion);
+    }
+}
+</pre>
+
+<p>若要存取您的資料庫,請啟動 {@link
+android.database.sqlite.SQLiteOpenHelper} 的子類別:</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">將資訊置入資料庫中</h2>
+
+<p>透過將 {@link android.content.ContentValues} 物件傳遞至 {@link android.database.sqlite.SQLiteDatabase#insert insert()} 方法,可將資料插入至資料庫:
+</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+         FeedEntry.TABLE_NAME,
+         FeedEntry.COLUMN_NAME_NULLABLE,
+         values);
+</pre>
+
+<p>{@link android.database.sqlite.SQLiteDatabase#insert insert()} 的第一個引數即為表格名稱。
+第二個引數將提供欄的名稱,
+ 在 {@link android.content.ContentValues} 為空時,架構可在該欄中插入 NULL (若您將其設為 {@code "null"},則在無值時,架構不會插入列)。
+
+</p>
+
+
+
+
+<h2 id="ReadDbRow">讀取資料庫中的資訊</h2>
+
+<p>若要從資料庫進行讀取,請使用 {@link android.database.sqlite.SQLiteDatabase#query query()} 方法,然後向其傳遞您的選取條件與所需的欄。該方法會合併 {@link android.database.sqlite.SQLiteDatabase#insert insert()} 與 {@link android.database.sqlite.SQLiteDatabase#update update()} 的元素,對您希望擷取的資料 (而非要插入的資料) 進行定義的欄清單除外。
+
+
+
+將在 {@link android.database.Cursor} 物件中,為您傳回查詢結果。
+</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+    FeedEntry._ID,
+    FeedEntry.COLUMN_NAME_TITLE,
+    FeedEntry.COLUMN_NAME_UPDATED,
+    ...
+    };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+    FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+    FeedEntry.TABLE_NAME,  // The table to query
+    projection,                               // The columns to return
+    selection,                                // The columns for the WHERE clause
+    selectionArgs,                            // The values for the WHERE clause
+    null,                                     // don't group the rows
+    null,                                     // don't filter by row groups
+    sortOrder                                 // The sort order
+    );
+</pre>
+
+<p>若要查看游標指示的列,請使用其中一種 {@link android.database.Cursor} move 方法,您必須始終先呼叫該方法,然後再開始讀取值。
+一般而言,您應呼叫 {@link android.database.Cursor#moveToFirst} 來執行啟動,如此會將「讀取位置」置於結果中的第一個項目。
+
+對於每列,您可以呼叫其中一種 {@link android.database.Cursor} get 方法 (例如 {@link android.database.Cursor#getString
+getString()} 或 {@link android.database.Cursor#getLong getLong()}),以讀取欄的值。
+對於每種 get 方法,您必須傳遞所需欄的索引位置,可以呼叫 {@link android.database.Cursor#getColumnIndex getColumnIndex()} 或
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()} 取得該位置。例如:
+
+
+</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+    cursor.getColumnIndexOrThrow(FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">刪除資料庫中的資訊</h2>
+
+<p>若要刪除表格中的列,您需要提供識別這些列的選取條件。
+資料庫 API 可提供建立選取條件的機制 (能防止 SQL 插入)。
+該機制會將選取規格分為選取子句與選取引數。
+子句可定義要查看的欄,您也可以藉此合併欄測試。
+
+引數是要測試的值,繫結在子句中。由於對結果的處理方式不同於規則 SQL 陳述式,因此結果不會遭受 SQL 插入。
+
+</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+// Specify arguments in placeholder order.
+String[] selectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, selection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">更新資料庫</h2>
+
+<p>若您需要修改資料庫值的子集,請使用 {@link
+android.database.sqlite.SQLiteDatabase#update update()} 方法。</p>
+
+<p>更新表格會合併 {@link
+android.database.sqlite.SQLiteDatabase#insert insert()} 的內容值語法與 {@link android.database.sqlite.SQLiteDatabase#delete delete()} 的 {@code where} 語法。
+</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + &quot; LIKE ?&quot;;
+String[] selectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+    FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+    values,
+    selection,
+    selectionArgs);
+</pre>
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/files.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..8b8d0a7
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/files.jd
@@ -0,0 +1,379 @@
+page.title=儲存檔案
+page.tags=資料儲存空間
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本課程示範</h2>
+<ol>
+  <li><a href="#InternalVsExternalStorage">選擇內部或外部儲存空間</a></li>
+  <li><a href="#GetWritePermission">取得外部儲存空間的權限</a></li>
+  <li><a href="#WriteInternalStorage">將檔案儲存在內部儲存空間</a></li>
+  <li><a href="#WriteExternalStorage">將檔案儲存在外部儲存空間</a></li>
+  <li><a href="#GetFreeSpace">查詢可用空間</a></li>
+  <li><a href="#DeleteFile">刪除檔案</a></li>
+</ol>
+
+<h2>您也應該閱讀</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">使用內部儲存空間</a>
+</li>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">使用外部儲存空間</a>
+</li>
+</ul>
+
+</div>
+</div>
+
+<p>Android 使用的檔案系統類似於其他平台上的磁碟式檔案系統。
+本課程將說明如何透過 Android 檔案系統,使用 {@link java.io.File}
+API 讀取並寫入檔案。
+</p>
+
+<p>{@link java.io.File} 物件適用於以從頭到尾的順序,無一略過地讀取或寫入大量資料。
+該物件的用途很廣,例如非常適用於影像檔案或透過網路交換的項目。
+</p>
+
+<p>本課程將顯示如何在您的應用程式中執行與檔案相關的基本任務。本課程假設您已熟悉 Linux 檔案系統的基本概念,以及 
+{@link java.io} 中的標準檔案輸入/輸出 API。
+</p>
+
+
+<h2 id="InternalVsExternalStorage">選擇內部或外部儲存空間</h2>
+
+<p>所有 Android 裝置都有兩個檔案儲存區域:「內部」與「外部」儲存空間。這些名稱源自 Android 發展的初期,當時大多數裝置都提供內建靜態記憶體 (內部儲存空間),以及諸如 micro SD 卡等卸除式儲存媒體 (外部儲存空間)。有些裝置將永久儲存空間分為「內部」與「外部」分割區,因此即使沒有卸除式儲存媒體,也始終存在兩個儲存空間,不論外部儲存空間是否為卸除式媒體,API 行為都相同。以下清單將概述每個儲存空間的狀況。
+
+
+
+
+
+</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>內部儲存空間:</b></p>
+<ul>
+<li>裝置始終具備內部儲存空間。</li>
+<li>依預設,只有您的應用程式能存取此空間內儲存的檔案。</li>
+<li>使用者解除安裝您的應用程式時,系統會從內部儲存空間移除您應用程式的所有檔案。
+</li>
+</ul>
+<p>若您希望確保使用者與其他應用程式都無法存取您的檔案,使用內部儲存空間是最佳選擇。
+</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>外部儲存空間:</b></p>
+<ul>
+<li>裝置並非始終具備外部儲存空間,因為使用者可以將外部儲存空間掛接為 USB 儲存裝置,在某些情況下也可以從裝置上移除外部儲存空間。
+</li>
+<li>其他應用程式可以讀取外部儲存空間,因此您可能無法對該空間內儲存的檔案遭讀取的情況進行控制。
+</li>
+<li>若使用者解除安裝您的應用程式,只有在您將應用程式的檔案儲存在 {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} 的目錄中時,系統才會從外部儲存空間移除您應用程式的檔案。
+</li>
+</ul>
+<p>對於不需要存取限制的檔案,以及您希望與其他應用程式共用的檔案,或允許使用者使用電腦存取的檔案,外部儲存空間是最佳的儲存位置。
+
+</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>秘訣:</strong>雖然應用程式依預設會安裝在內部儲存空間,但是您可以在宣示說明中指定 <a href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> 屬性,以便可以將應用程式安裝在外部儲存空間。
+
+在 APK 的大小很大,且使用者的外部儲存空間大於內部儲存空間時,使用者非常喜歡使用該選項。
+如需詳細資訊,請參閱<a href="{@docRoot}guide/topics/data/install-location.html">應用程式安裝位置</a>。
+</p>
+
+
+<h2 id="GetWritePermission">取得外部儲存空間的權限</h2>
+
+<p>若要寫入至外部儲存空間,您必須在<a href="{@docRoot}guide/topics/manifest/manifest-intro.html">宣示說明檔案</a>中要求 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 權限:
+</p>
+
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+
+<div class="caution"><p><strong>注意:</strong>
+目前,所有應用程式無需特殊權限即可讀取外部儲存空間。
+但是,此狀況在將來的版本中將有所變更。若您的應用程式需要讀取外部儲存空間 (但不寫入該空間),您需要宣告 {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE} 權限。
+若要確保您的應用程式仍以預期方式運作,您應立即宣告此權限,然後變更即會生效。
+</p>
+<pre>
+&lt;manifest ...>
+    &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
+    ...
+&lt;/manifest>
+</pre>
+<p>但是,若您的應用程式使用 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 權限,則也以隱含方式具備外部儲存空間讀取權限。
+</p>
+</div>
+
+<p>您無需任何權限即可將檔案儲存在內部儲存空間。
+您的應用程式始終具備內部儲存空間目錄中檔案的讀取與寫入權限。
+</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">將檔案儲存在內部儲存空間</h2>
+
+<p>將檔案儲存在內部儲存空間時,您可以呼叫以下兩種方法的其中之一,以
+{@link java.io.File} 擷取相應目錄:</p>
+
+<dl>
+  <dt>{@link android.content.Context#getFilesDir}</dt>
+  <dd>傳回代表您應用程式所用內部目錄的 {@link java.io.File}。</dd>
+  <dt>{@link android.content.Context#getCacheDir}</dt>
+  <dd>傳回代表您應用程式暫存快取檔案所用內部目錄的 {@link java.io.File}。
+請確保於不再需要檔案時刪除檔案,並針對您在任何指定時間所用的記憶體數量實作合理的大小限制,例如 1MB。
+
+若系統所用的儲存空間開始不足,可能會刪除您的快取檔案而不提供警告。
+</dd>
+</dl>
+
+<p>若要在上述其中一個目錄中建立新檔案,可以使用 {@link
+java.io.File#File(File,String) File()} 建構函式,然後傳送會指定您內部儲存空間目錄的 {@link java.io.File} (由上述其中一種方法提供)。
+例如:</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>或者,您可以呼叫 {@link
+android.content.Context#openFileOutput openFileOutput()},以取得寫入內部目錄中檔案的 {@link java.io.FileOutputStream}。
+例如,以下展示了如何將某些文字寫入至檔案:
+</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+  outputStream.write(string.getBytes());
+  outputStream.close();
+} catch (Exception e) {
+  e.printStackTrace();
+}
+</pre>
+
+<p>或者,若您需要快取某些檔案,應改用 {@link
+java.io.File#createTempFile createTempFile()}。例如,以下方法會從 {@link java.net.URL} 中擷取檔案名稱,然後在您應用程式的內部快取目錄中建立具有該名稱的檔案:
+
+</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+    File file;
+    try {
+        String fileName = Uri.parse(url).getLastPathSegment();
+        file = File.createTempFile(fileName, null, context.getCacheDir());
+    catch (IOException e) {
+        // Error while creating file
+    }
+    return file;
+}
+</pre>
+
+<p class="note"><strong>注意:</strong>
+您應用程式的內部儲存空間目錄由位於 Android 檔案系統特殊位置的應用程式套件名稱指定。嚴格來說,若將檔案模式設為可讀取,則其他應用程式可以讀取您的內部檔案。
+
+
+但是,其他應用程式也需要知道您的應用程式套件名稱與檔案名稱。
+除非您將檔案明確設為可讀取或可寫入,否則其他應用程式無法瀏覽您的內部目錄,也沒有讀取或寫入存取權。
+因此,只要您針對內部儲存空間中的檔案使用 {@link android.content.Context#MODE_PRIVATE},其他應用程式將永遠無法存取這些檔案。
+
+</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">將檔案儲存在外部儲存空間</h2>
+
+<p>由於可能不具備外部儲存空間&mdash;例如使用者將儲存裝置掛接至 PC,或移除提供外部儲存空間的 SD 卡&mdash;,因此您始終應先驗證磁碟區可用,然後再對其執行存取。
+
+您可以呼叫 {@link android.os.Environment#getExternalStorageState},以查詢外部儲存空間狀態。
+若傳回的狀態等於 {@link android.os.Environment#MEDIA_MOUNTED},則可以讀取並寫入檔案。
+
+例如,以下方法可用於判斷儲存空間的可用性:
+</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state)) {
+        return true;
+    }
+    return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+    String state = Environment.getExternalStorageState();
+    if (Environment.MEDIA_MOUNTED.equals(state) ||
+        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+        return true;
+    }
+    return false;
+}
+</pre>
+
+<p>雖然使用者與其他應用程式可以修改外部儲存空間,但是可在外部儲存空間儲存兩種類別的檔案:
+</p>
+
+<dl>
+  <dt>公用檔案</dt>
+  <dd>這些檔案將供其他應用程式及使用者自由使用。
+若使用者解除安裝您的應用程式,這些檔案仍可供使用者使用。
+
+  <p>例如,由您的應用程式拍攝的相片或下載的其他檔案都是公用檔案。</p>
+  </dd>
+  <dt>私用檔案</dt>
+  <dd>這些檔案本屬於您的應用程式,在使用者解除安裝您的應用程式時應予以刪除。雖然嚴格來說,由於這些檔案位於外部儲存空間,因此可供使用者與其他應用程式存取,但實際上這些檔案對於您應用程式之外的使用者並無價值。使用者解除安裝您的應用程式時,系統會刪除您應用程式外部私用目錄中的所有檔案。
+
+
+
+ 
+  <p>例如,您的應用程式下載的附加資源,或暫存媒體檔案都是私用檔案。</p>
+  </dd>
+</dl>
+
+<p>若您希望將公用檔案儲存在外部儲存空間,請使用 
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} 方法取得代表外部儲存空間內相應目錄的 {@link java.io.File}。
+該方法採用對要儲存的檔案類型進行指定 (以便能合理區分這些檔案與其他公用檔案) 的引數,諸如 {@link android.os.Environment#DIRECTORY_MUSIC} 或 {@link
+android.os.Environment#DIRECTORY_PICTURES}。
+
+例如:</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+    // Get the directory for the user's public pictures directory. 
+    File file = new File(Environment.getExternalStoragePublicDirectory(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+
+<p>若您希望儲存應用程式私用的檔案,可以呼叫 {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()},然後向其傳送名稱 (表示您希望使用的目錄類型),從而擷取相應目錄。
+
+以此方式建立的每個目錄都會新增至父系目錄 (該目錄會封裝您應用程式的所有外部儲存空間檔案),並在使用者解除安裝您的應用程式時由系統刪除。
+
+</p>
+
+<p>例如,以下所示的方法可用於建立個別相簿的目錄:</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+    // Get the directory for the app's private pictures directory. 
+    File file = new File(context.getExternalFilesDir(
+            Environment.DIRECTORY_PICTURES), albumName);
+    if (!file.mkdirs()) {
+        Log.e(LOG_TAG, "Directory not created");
+    }
+    return file;
+}
+</pre>
+
+<p>若預先定義的任何子目錄名稱都不適用於您的檔案,您可以改為呼叫 {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} 並傳送 {@code null}。此操作
+會傳回外部儲存空間內您應用程式私用目錄的根目錄。</p>
+
+<p>請記住,{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 會在使用者解除安裝您的應用程式時所刪除的目錄中建立目錄。若您希望要儲存的檔案在使用者解除安裝您的應用程式後仍可用&mdash;例如您的應用程式是相機,而使用者希望保留相片&mdash;,應改用 {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}。
+
+
+
+</p>
+
+
+<p>不論是將 {@link
+android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} 用於共用的檔案,還是將 {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} 用於您應用程式私用的檔案,請務必使用由 API 常數 (例如 {@link android.os.Environment#DIRECTORY_PICTURES}) 提供的目錄名稱。
+
+
+這些目錄名稱可確保系統正確處理檔案。
+例如,系統媒體掃描程式會將 {@link
+android.os.Environment#DIRECTORY_RINGTONES} 中儲存的檔案視為鈴聲,而非音樂。
+</p>
+
+
+
+
+<h2 id="GetFreeSpace">查詢可用空間</h2>
+
+<p>若您預先知道要儲存的資料量,可以呼叫 {@link java.io.File#getFreeSpace} 或 {@link
+java.io.File#getTotalSpace} 以探明在不會導致 {@link
+java.io.IOException} 的情況下空間是否充足。
+上述方法可分別提供儲存磁碟區內目前可用空間量與空間總量。
+該資訊還可以用於避免填充的儲存磁碟區超過特定臨界值。
+</p>
+
+<p>但是,系統不保證您可以寫入 {@link java.io.File#getFreeSpace} 所示的位元組數量。
+若傳回的數值較您要儲存的資料量略大,或檔案系統的已使用空間不到 90%,則繼續寫入可能是安全的。否則,可能不應寫入儲存空間。
+
+
+</p>
+
+<p class="note"><strong>注意:</strong>在儲存檔案之前,您無需檢查可用空間量。
+您可以嘗試立即寫入檔案,然後在發生 {@link java.io.IOException} 時執行捕捉即可。
+若您不知道需要的確切空間量,可能需要執行該作業。
+例如,若您在儲存檔案之前,將 PNG 影像轉化為 JPEG 以變更檔案的編碼,就不會預先知道檔案的大小。
+
+</p>
+
+
+
+
+<h2 id="DeleteFile">刪除檔案</h2>
+
+<p>不再需要檔案時,應一律刪除檔案。最直接的檔案刪除方式是讓開啟的檔案參考在自身上呼叫 {@link java.io.File#delete}。
+</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>若檔案儲存在內部儲存空間,您也可以呼叫 {@link android.content.Context#deleteFile deleteFile()},讓 {@link android.content.Context} 尋找並刪除檔案:
+</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>注意:</strong>使用者解除安裝您的應用程式時,Android 系統會刪除以下檔案:
+</p> 
+<ul>
+<li>您在內部儲存空間儲存的所有檔案</li>
+<li>您使用 {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} 在外部儲存空間儲存的所有檔案。</li>
+</ul>
+<p>但是,您應定期手動刪除使用 {@link android.content.Context#getCacheDir()} 建立的所有快取檔案,並定期刪除不再需要的其他檔案。
+
+</p>
+</div>
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/index.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..9ff1fc0
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/index.jd
@@ -0,0 +1,57 @@
+page.title=儲存資料
+page.tags=資料儲存空間,檔案,sql,資料庫,偏好設定
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>相依性和先決條件</h2>
+<ul>
+  <li>Android 1.6 (API 層級為 4) 或更高版本</li>
+  <li>熟悉地圖的索引鍵值集合</li>
+  <li>熟悉 Java 檔案 I/O API</li>
+  <li>熟悉 SQL 資料庫</li>
+</ul>
+
+<h2>您也應該閱讀</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html">儲存選項</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>在 {@link android.app.Activity#onPause onPause()} 期間,大多數 Android 應用程式都需要儲存資料 (即使僅儲存應用程式狀態的有關資訊),因此使用者的進度不會遺失。
+大多數非一般的應用程式還需要儲存使用者設定,某些應用程式必須管理檔案與資料庫中的大量資訊。
+
+本課程將為您介紹 Android 中的主要資料儲存選項,包括:
+</p>
+
+<ul>
+    <li>將簡單資料類型的索引鍵值配對儲存至共用偏好設定檔案
+</li>
+    <li>將任意檔案儲存至 Android 的檔案系統</li>
+    <li>使用由 SQLite 管理的資料庫</li>
+</ul>
+
+
+<h2>課程</h2>
+
+<dl>
+  <dt><b><a href="shared-preferences.html">儲存索引鍵值組</a></b></dt>
+    <dd>了解如何使用共用的偏好設定檔案將少量資訊儲存至索引鍵值配對。
+</dd>
+
+  <dt><b><a href="files.html">儲存檔案</a></b></dt>
+    <dd>了解如何儲存基本檔案 (例如儲存通常循序讀取的很長一系列資料)。
+</dd>
+
+ <dt><b><a href="databases.html">在 SQL 資料庫中儲存資料</a></b></dt>
+   <dd>了解如何使用 SQLite 資料庫讀取及寫入結構化資料。</dd>
+
+</dl>
diff --git a/docs/html-intl/intl/zh-tw/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/zh-tw/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..46f8f20
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,120 @@
+page.title=儲存索引鍵值組
+page.tags=資料儲存空間
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本課程示範</h2>
+<ol>
+  <li><a href="#GetSharedPreferences">取得 SharedPreferences 的控點</a></li>
+  <li><a href="#WriteSharedPreference">寫入至共用的偏好設定</a></li>
+  <li><a href="#ReadSharedPreference">從共用的偏好設定進行讀取</a></li>
+</ol>
+
+<h2>您也應該閱讀</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">使用共用的偏好設定</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>若您希望儲存相對較小的索引鍵值集合,應使用 {@link android.content.SharedPreferences} API。
+{@link android.content.SharedPreferences} 物件指向包含索引鍵值配對的檔案,並提供讀取及寫入這些配對的簡單方法。
+
+每個 {@link android.content.SharedPreferences} 檔案都由架構管理,可以是公用或私用檔案。
+
+</p>
+
+<p>本課程將為您展示如何使用 {@link android.content.SharedPreferences} API 儲存及擷取簡單值。
+</p>
+
+<p class="note"><strong>注意:</strong>{@link android.content.SharedPreferences} API 僅用於讀取及寫入索引鍵值配對,不應將其與 {@link android.preference.Preference} API 混淆,後者可協助您建置應用程式設定的使用者介面 (然而這些 API 使用 {@link android.content.SharedPreferences} 作為其儲存應用程式設定的實作方式)。
+
+
+
+如需有關使用 {@link
+android.preference.Preference} API 的資訊,請參閱<a href="{@docRoot}guide/topics/ui/settings.html">設定</a>指南。</p>
+
+<h2 id="GetSharedPreferences">取得 SharedPreferences 的控點</h2>
+
+<p>您可以呼叫以下兩種方法的其中之一,以建立新的共用偏好設定檔案或存取既有的共用偏好設定檔案:
+</p>
+<ul>
+  <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} &mdash; 若您需要使用多個共用偏好設定檔案 (根據名稱進行識別,第一個參數將指定名稱),請使用此方法。
+您可以從應用程式中的任何 {@link android.content.Context} 呼叫此方法。
+</li>
+  <li>{@link android.app.Activity#getPreferences(int) getPreferences()} &mdash; 若您只需針對應用行為顯示使用一個共用偏好設定檔案,請從 {@link android.app.Activity} 使用此方法。
+
+由於此方法會擷取屬於該應用行為顯示的預設共用偏好設定檔案,因此您無需提供名稱。
+</li>
+</ul>
+
+<p>例如,以下程式碼會在 {@link android.app.Fragment} 內執行。該程式碼會存取共用偏好設定檔案 (根據資源字串 {@code R.string.preference_file_key} 識別),並使用私用模式開啟該檔案 (因此只有您的應用程式可以存取該檔案)。
+
+
+</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>對您的共用偏好設定檔案進行命名時,您應使用能唯一識別您應用程式的名稱,例如 {@code "com.example.myapp.PREFERENCE_FILE_KEY"}
+</p>
+
+<p>或者,若您針對應用行為顯示只需使用一個共用偏好設定檔案,可以使用 {@link android.app.Activity#getPreferences(int) getPreferences()} 方法:
+</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>注意:</strong>若您使用 {@link android.content.Context#MODE_WORLD_READABLE} 或 {@link
+android.content.Context#MODE_WORLD_WRITEABLE} 建立共用偏好設定檔案,則知道檔案識別碼的其他任何應用程式都能存取您的資料。
+
+</p>
+
+
+<h2 id="WriteSharedPreference">寫入至共用的偏好設定</h2>
+
+<p>若要寫入至共用偏好設定檔案,請針對您的 {@link android.content.SharedPreferences} 呼叫 {@link
+android.content.SharedPreferences#edit},以建立 {@link
+android.content.SharedPreferences.Editor}。</p>
+
+<p>傳遞您希望使用諸如 {@link
+android.content.SharedPreferences.Editor#putInt putInt()} 及 {@link
+android.content.SharedPreferences.Editor#putString putString()} 等方法寫入的索引鍵與值。然後呼叫 {@link
+android.content.SharedPreferences.Editor#commit} 以儲存變更。例如:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">從共用的偏好設定進行讀取</h2>
+
+<p>若要擷取共用偏好設定檔案中的值,請呼叫諸如 {@link
+android.content.SharedPreferences#getInt getInt()} 與 {@link
+android.content.SharedPreferences#getString getString()} 等方法,然後針對您希望使用的值提供索引鍵,以及 (可選) 在索引鍵不存在時傳回的預設值。
+
+例如:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
+</pre>
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd
new file mode 100644
index 0000000..2088b27
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd
@@ -0,0 +1,236 @@
+page.title=允許其他應用程式啟動您的應用行為顯示
+page.tags=意圖
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>本課程示範</h2>
+<ol>
+  <li><a href="#AddIntentFilter">新增意圖篩選器</a></li>
+  <li><a href="#HandleIntent">在應用行為顯示中處理意圖</a></li>
+  <li><a href="#ReturnResult">傳回結果</a></li>
+</ol>
+
+<h2>您也應該閱讀</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">共用檔案</a>
+</ul>
+  </div>
+</div>
+
+<p>前兩課著重說明一個方面:從您的應用程式啟動其他應用程式的應用行為顯示。但是,若您的應用程式能執行可能適用於其他應用程式的行為,則應準備回應其他應用程式的行為要求。
+
+例如,若您建置的社交應用程式可用於與使用者的好友分享訊息或相片,則支援 {@link android.content.Intent#ACTION_SEND} 意圖可為您帶來顯著受益,使用者藉此可從其他應用程式啟動「共用」行為,並啟動您的應用程式來執行該行為。
+
+
+</p>
+
+<p>若要允許其他應用程式啟動您的應用行為顯示,需要在您的宣示說明檔案中針對對應的 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> 元素新增 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a> 元素。
+</p>
+
+<p>若您的應用程式安裝在裝置上,系統會識別您的意圖篩選器,並將資訊新增至安裝的所有應用程式都支援的意圖內部目錄中。在應用程式使用隱含意圖呼叫 {@link android.app.Activity#startActivity
+startActivity()} 或 {@link android.app.Activity#startActivityForResult startActivityForResult()} 時,系統會找出能回應意圖的一或多項應用行為顯示。
+
+
+
+</p>
+
+
+
+<h2 id="AddIntentFilter">新增意圖篩選器</h2>
+
+<p>若要正確定義您的應用行為顯示可以處理的意圖,您新增的每個意圖篩選器都應儘可能具體地說明應用行為顯示所接受行為與資料的類型。
+
+</p>
+
+<p>若應用行為顯示的意圖篩選器執行 {@link android.content.Intent} 物件的以下條件,系統會將指定的 {@link android.content.Intent} 傳送至該應用行為顯示:
+</p>
+
+<dl>
+  <dt>行為</dt>
+    <dd>對要執行的行為進行命名的字串。通常是平台所定義值 (例如 {@link android.content.Intent#ACTION_SEND} 或 {@link android.content.Intent#ACTION_VIEW}) 的其中之一。
+
+    <p>請在您的意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code &lt;action&gt;}</a> 元素指定此項目。在此元素中指定的值必須是行為的完整字串名稱,而非 API 常數 (請參閱以下範例)。
+
+</p></dd>
+
+  <dt>資料</dt>
+    <dd>對意圖所關聯資料的描述。
+    <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code &lt;data&gt;}</a> 元素指定此項目。在此元素中使用一或多個屬性,您可以僅指定 MIME 類型、URI 首碼、URI 配置,或指定這些項目的組合,以及表示所接受資料類型的其他項目。
+
+
+</p>
+    <p class="note"><strong>注意:</strong>若您不需要宣告 {@link android.net.Uri} 資料的有關詳情 (例如若您的應用行為顯示處理其他類型的「額外」資料,而非處理 URI),應僅指定 {@code android:mimeType} 屬性以宣告應用行為顯示處理的資料類型,例如 {@code text/plain} 或 {@code image/jpeg}。
+
+
+</p>
+</dd>
+  <dt>類別</dt>
+    <dd>提供對處理意圖的應用行為顯示進行特性描述的其他方式,通常與使用者的手勢或應用行為顯示的啟動位置有關。
+系統支援多種不同的類別,但大多數類別很少使用。
+然而依預設,所有隱含意圖都與 {@link android.content.Intent#CATEGORY_DEFAULT} 一併定義。
+
+    <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code &lt;category&gt;}</a> 元素指定此項目。
+</p></dd>
+</dl>
+
+<p>在意圖篩選器中,您可以宣告每個條件以及 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code &lt;intent-filter&gt;}</a> 元素中巢套的對應 XML 元素,以宣告應用行為顯示所接受的條件。
+
+</p>
+
+<p>例如,若資料類型為文字或影像,以下應用行為顯示具備的意圖篩選器可處理 {@link
+android.content.Intent#ACTION_SEND} 意圖:</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="text/plain"/>
+        &lt;data android:mimeType="image/*"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p>傳入的每項意圖只會指定一項行為與一種資料類型,但是在每個 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> 中,可以宣告 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a> 與 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+&lt;data&gt;}</a> 元素的多個執行個體。
+
+</p>
+
+<p>若兩個行為與資料配對在行為方面彼此排斥,您應建立單獨的意圖篩選器,以指定與哪些資料類型配對時可接受哪些行為。
+
+</p>
+
+<p>例如,假設您的應用行為顯示可處理 {@link
+android.content.Intent#ACTION_SEND} 與 {@link
+android.content.Intent#ACTION_SENDTO} 意圖的文字與影像。在此情況下,您必須針對兩個行為定義兩個單獨的意圖篩選器,因為 {@link
+android.content.Intent#ACTION_SENDTO} 意圖必須使用 {@link android.net.Uri} 資料指定接收者的地址 (使用 {@code send} 或 {@code sendto} URI 配置)。
+
+例如:</p>
+
+<pre>
+&lt;activity android:name="ShareActivity">
+    &lt;!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SENDTO"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:scheme="sms" />
+        &lt;data android:scheme="smsto" />
+    &lt;/intent-filter>
+    &lt;!-- filter for sending text or images; accepts SEND action and text or image data -->
+    &lt;intent-filter>
+        &lt;action android:name="android.intent.action.SEND"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+        &lt;data android:mimeType="image/*"/>
+        &lt;data android:mimeType="text/plain"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p class="note"><strong>注意:</strong>若要接收隱含意圖,您必須在意圖篩選器中納入 {@link android.content.Intent#CATEGORY_DEFAULT} 類別。
+{@link
+android.app.Activity#startActivity startActivity()} 與 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 方法對所有意圖進行處理時,就像已宣告 {@link android.content.Intent#CATEGORY_DEFAULT} 類別一樣。
+若您在意圖篩選器中未宣告該類別,不會將任何隱含意圖解析為您的應用行為顯示。
+</p>
+
+<p>如需有關傳送及接收 {@link android.content.Intent#ACTION_SEND} 意圖 (執行社交共用行為) 的詳細資訊,請參閱有關<a href="{@docRoot}training/sharing/receive.html">接收其他應用程式的簡單資料</a>的課程。
+</p>
+
+
+<h2 id="HandleIntent">在應用行為顯示中處理意圖</h2>
+
+<p>若要確定您應用行為顯示中將採用的行為,您可以讀取用於啟動該應用行為顯示的 {@link
+android.content.Intent}。</p>
+
+<p>您的應用行為顯示啟動時,請呼叫 {@link android.app.Activity#getIntent()} 以擷取啟動該應用行為顯示的 {@link android.content.Intent}。
+在應用行為顯示的生命週期期間,您隨時可以執行該作業,但通常應在早期回呼 (例如 {@link android.app.Activity#onCreate onCreate()} 或 {@link android.app.Activity#onStart()}) 期間執行。
+
+</p>
+
+<p>例如:</p>
+
+<pre>
+&#64;Override
+protected void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+
+    setContentView(R.layout.main);
+
+    // Get the intent that started this activity
+    Intent intent = getIntent();
+    Uri data = intent.getData();
+
+    // Figure out what to do based on the intent type
+    if (intent.getType().indexOf("image/") != -1) {
+        // Handle intents with image data ...
+    } else if (intent.getType().equals("text/plain")) {
+        // Handle intents with text ...
+    }
+}
+</pre>
+
+
+<h2 id="ReturnResult">傳回結果</h2>
+
+<p>若您希望將結果傳回至呼叫您意圖的應用行為顯示,只需呼叫 {@link
+android.app.Activity#setResult(int,Intent) setResult()} 以指定結果代碼及結果 {@link
+android.content.Intent} 即可。在您的操作已完成,且使用者應返回原始的應用行為顯示時,請呼叫 {@link android.app.Activity#finish()} 以關閉 (並終結) 您的應用行為顯示。
+例如:
+</p>
+
+<pre>
+// Create intent to deliver some kind of result data
+Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
+setResult(Activity.RESULT_OK, result);
+finish();
+</pre>
+
+<p>您必須始終一併指定結果代碼與結果。結果通常是 {@link
+android.app.Activity#RESULT_OK} 或 {@link android.app.Activity#RESULT_CANCELED}。然後,您可以視需要為其他資料提供 {@link android.content.Intent}。
+</p>
+
+<p class="note"><strong>注意:</strong>依預設,會將結果設為 {@link
+android.app.Activity#RESULT_CANCELED}。因此,若使用者在完成行為之前以及在您設定結果之前按下 [後退] 按鈕<em></em>,原始應用行為顯示會收到「已取消」結果。
+
+</p>
+
+<p>若您只需傳回表示其中一種結果選項的整數,可將結果代碼設為大於 0 的任意值。
+若您使用結果代碼以提供整數,且無需納入 {@link android.content.Intent},可以呼叫 {@link
+android.app.Activity#setResult(int) setResult()},然後僅傳遞結果代碼。
+例如:</p>
+
+<pre>
+setResult(RESULT_COLOR_RED);
+finish();
+</pre>
+
+<p>在此情況下,可能只會有少數結果,因此結果代碼是本機定義的整數 (大於 0)。
+若您將結果傳回至您應用程式內的應用行為顯示,此功能會非常適用,因為接收結果的應用行為顯示可以參考公用常數,以確定結果代碼的值。
+
+</p>
+
+<p class="note"><strong>注意:</strong>無需檢查是否已使用 {@link
+android.app.Activity#startActivity startActivity()} 或 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 啟動您的應用行為顯示。
+若啟動應用行為顯示的意圖希望產生結果,只需呼叫 {@link
+android.app.Activity#setResult(int,Intent) setResult()} 即可。
+若原始應用行為已呼叫 {@link
+android.app.Activity#startActivityForResult startActivityForResult()},則系統將向其傳遞您提供給 {@link android.app.Activity#setResult(int,Intent) setResult()} 的結果;否則,結果將被忽略。
+
+</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/index.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/index.jd
new file mode 100644
index 0000000..70492f4
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/intents/index.jd
@@ -0,0 +1,62 @@
+page.title=與其他應用程式互動
+page.tags=意圖,應用行為的顯示
+helpoutsWidget=true
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>相依性和先決條件</h2>
+<ul>
+  <li>了解應用行為顯示生命週期的基本知識 (請參閱<a href="{@docRoot}training/basics/activity-lifecycle/index.html">管理應用行為顯示生命週期</a>)
+</li>
+</ul>
+
+
+<h2>您也應該閱讀</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">共用檔案</a>
+  <li><a href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">將應用程式與意圖整合 (部落格文章)</a>
+</li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">意圖和意圖篩選器</a>
+</li>
+</ul>
+
+</div>
+</div>
+
+<p>Android 應用程式通常具有多個<a href="{@docRoot}guide/components/activities.html">應用行為顯示</a>。每個應用行為顯示都會顯示使用者介面,使用者可藉此執行特定任務 (例如檢視地圖或拍照)。若要將使用者從一個應用行為顯示傳送至另一個應用行為顯示,您的應用程式必須使用 {@link
+android.content.Intent} 來定義應用程式執行作業的「意圖」。
+
+使用某方法 (例如 {@link
+android.app.Activity#startActivity startActivity()}) 將 {@link android.content.Intent} 傳遞至系統時,
+系統會使用 {@link
+android.content.Intent} 來識別並啟動相應的應用程式元件。若使用意圖,應用程式甚至可以藉此啟動獨立應用程式中包含的應用行為顯示。
+</p>
+
+<p>{@link android.content.Intent} 可以是<em>明確的</em>,以啟動特定元件
+(特定 {@link android.app.Activity} 執行個體),也可以是<em>隱含的</em>,以啟動可處理預期行為 (例如「拍照」) 的元件。
+</p>
+
+<p>本課程將為您展示如何使用 {@link android.content.Intent} 來執行與其他應用程式的某些基本互動,例如啟動其他應用程式、接收該應用程式的結果,以及讓您的應用程式能回應其他應用程式的意圖。
+
+</p>
+
+<h2>課程</h2>
+
+<dl>
+  <dt><b><a href="sending.html">將使用者傳送至其他應用程式</a></b></dt>
+  <dd>展示如何建立隱含意圖以啟動能執行行為的其他應用程式。
+</dd>
+  <dt><b><a href="result.html">從應用行為顯示取得結果</a></b></dt>
+  <dd>展示如何啟動其他應用行為顯示並接收應用行為顯示傳回的結果。</dd>
+  <dt><b><a href="filters.html">允許其他應用程式啟動您的應用行為顯示</a></b></dt>
+  <dd>展示如何透過定義對您的應用程式所接受的隱含意圖進行宣告的意圖篩選器,讓應用程式中的應用行為顯示可供其他應用程式使用。
+</dd>
+</dl>
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/result.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/result.jd
new file mode 100644
index 0000000..9fabe91
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/intents/result.jd
@@ -0,0 +1,178 @@
+page.title=從應用行為顯示取得結果
+page.tags=意圖
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>本課程示範</h2>
+<ol>
+  <li><a href="#StartActivity">啟動應用行為顯示</a></li>
+  <li><a href="#ReceiveResult">接收結果</a></li>
+</ol>
+
+<h2>您也應該閱讀</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li>
+    <li><a href="{@docRoot}training/secure-file-sharing/index.html">共用檔案</a>
+</ul>
+
+  </div>
+</div>
+
+<p>啟動其他應用行為顯示不必是單向作業。您也可以啟動其他應用行為顯示,然後接收傳回的結果。
+若要接收結果,請呼叫 {@link android.app.Activity#startActivityForResult
+startActivityForResult()} (而非 {@link android.app.Activity#startActivity
+startActivity()})。</p>
+
+<p>例如,您的應用程式可以啟動相機應用程式,然後接收所拍攝的相片作為結果。或者,您可以啟動人員應用程式 (以便讓使用者選取連絡人),然後接收作為結果的連絡人詳細資料。
+
+</p>
+
+<p>當然,必須將提供回應的應用行為顯示設計為傳回結果。執行時,該應用行為顯示會以其他 {@link android.content.Intent} 物件的形式傳送結果。
+您的應用行為顯示會在 {@link android.app.Activity#onActivityResult onActivityResult()} 回呼中接收該結果。
+</p>
+
+<p class="note"><strong>注意:</strong>呼叫 {@link android.app.Activity#startActivityForResult startActivityForResult()} 時,您可以使用明確或隱含的意圖。
+啟動您的其中一個應用行為顯示以接收結果時,您應使用明確的意圖,以確保收到預期結果。
+
+</p>
+
+
+<h2 id="StartActivity">啟動應用行為顯示</h2>
+
+<p>啟動應用行為顯示以接收結果時,您使用的 {@link android.content.Intent} 物件沒有任何特殊之處,但是您需要將附加整數引數傳遞至 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 方法。
+</p>
+
+<p>該整數引數是識別您要求的「要求代碼」。在您接收結果 {@link android.content.Intent} 時,回呼會提供同一要求代碼,以便您的應用程式可以正確識別結果並判斷如何處理結果。
+
+</p>
+
+<p>例如,以下展示了如何啟動應用行為顯示 (使用者可藉此挑選連絡人):</p>
+
+<pre>
+static final int PICK_CONTACT_REQUEST = 1;  // The request code
+...
+private void pickContact() {
+    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
+    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
+    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
+}
+</pre>
+
+
+<h2 id="ReceiveResult">接收結果</h2>
+
+<p>使用者處理隨後的應用行為顯示並返回時,系統會呼叫應用行為顯示的 {@link android.app.Activity#onActivityResult onActivityResult()} 方法。
+此方法包括三個引數:
+</p>
+
+<ul>
+  <li>您傳遞至 {@link
+android.app.Activity#startActivityForResult startActivityForResult()} 的要求代碼。</li>
+  <li>由第二個應用行為顯示指定的結果代碼。此代碼是 {@link
+android.app.Activity#RESULT_OK} (若操作成功) 或 {@link
+android.app.Activity#RESULT_CANCELED} (若因故使用者退出或操作失敗)。
+</li>
+  <li>攜帶結果資料的 {@link android.content.Intent}。</li>
+</ul>
+
+<p>例如,以下為您展示了如何處理「挑選連絡人」意圖的結果:</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // The user picked a contact.
+            // The Intent's data Uri identifies which contact was selected.
+
+            // Do something with the contact here (bigger example below)
+        }
+    }
+}
+</pre>
+
+<p>在此範例中,由 Android 的連絡人或人員應用程式傳回的結果 {@link android.content.Intent} 可提供內容 {@link android.net.Uri} (能識別使用者所選取的連絡人)。
+
+</p>
+
+<p>若要成功處理結果,您必須了解結果 {@link android.content.Intent} 將採用的格式。
+若傳回結果的應用行為顯示是您的其中一個應用行為顯示,上述作業會非常簡單。
+Android 平台隨附的應用程式會針對特定結果資料提供您可以依賴的 API。
+例如,人員應用程式 (某些舊版上的連絡人應用程式) 會始終傳回含內容 URI (可識別選取的連絡人) 的結果,相機應用程式會在 {@code "data"} 額外項目中傳回 {@link android.graphics.Bitmap} (請參閱有關<a href="{@docRoot}training/camera/index.html">拍攝相片</a>的課程)。
+
+
+</p>
+
+
+<h4>額外說明:讀取連絡人資料</h4>
+
+<p>上述程式碼展示如何從人員應用程式取得結果,並未詳述如何實際讀取結果的資料,因為這需要進行更高級的
+<a href="{@docRoot}guide/topics/providers/content-providers.html">內容提供者</a>相關討論。
+
+但是,若您對此感到好奇,以下提供了另外一些程式碼,這些程式碼會展示如何查詢結果資料,以便取得所選連絡人的電話號碼:
+</p>
+
+<pre>
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // Check which request it is that we're responding to
+    if (requestCode == PICK_CONTACT_REQUEST) {
+        // Make sure the request was successful
+        if (resultCode == RESULT_OK) {
+            // Get the URI that points to the selected contact
+            Uri contactUri = data.getData();
+            // We only need the NUMBER column, because there will be only one row in the result
+            String[] projection = {Phone.NUMBER};
+
+            // Perform the query on the contact to get the NUMBER column
+            // We don't need a selection or sort order (there's only one result for the given URI)
+            // CAUTION: The query() method should be called from a separate thread to avoid blocking
+            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
+            // Consider using {@link android.content.CursorLoader} to perform the query.
+            Cursor cursor = getContentResolver()
+                    .query(contactUri, projection, null, null, null);
+            cursor.moveToFirst();
+
+            // Retrieve the phone number from the NUMBER column
+            int column = cursor.getColumnIndex(Phone.NUMBER);
+            String number = cursor.getString(column);
+
+            // Do something with the phone number...
+        }
+    }
+}
+</pre>
+
+<p class="note"><strong>注意:</strong>在 Android 2.3 (API 級別為 9) 版之前,若在 {@link android.provider.ContactsContract.Contacts Contacts Provider} (例如以上所示) 上執行查詢,需要您的應用程式宣告 {@link
+android.Manifest.permission#READ_CONTACTS} 權限 (請參閱<a href="{@docRoot}guide/topics/security/security.html">安全性與權限</a>)。
+
+但是,從 Android 2.3 版開始,在連絡人提供者傳回結果時,連絡人/人員應用程式會為您的應用程式授予讀取連絡人提供者的臨時權限。
+
+該臨時權限僅適用於要求的特定連絡人,因此除非您已宣告 {@link
+android.Manifest.permission#READ_CONTACTS} 權限,否則無法查詢並非由意圖的 {@link android.net.Uri} 指定的連絡人。
+
+</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/sending.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/sending.jd
new file mode 100644
index 0000000..70e8316
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/basics/intents/sending.jd
@@ -0,0 +1,256 @@
+page.title=將使用者傳送至其他應用程式
+page.tags=意圖
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+  <div id="tb">
+
+<h2>本課程示範</h2>
+<ol>
+  <li><a href="#Build">建置隱含意圖</a></li>
+  <li><a href="#Verify">驗證存在接收意圖的應用程式</a></li>
+  <li><a href="#StartActivity">使用意圖啟動應用行為顯示</a></li>
+  <li><a href="#AppChooser">顯示應用程式選擇器</a></li>
+</ol>
+
+<h2>您也應該閱讀</h2>
+<ul>
+    <li><a href="{@docRoot}training/sharing/index.html">共用簡單資料</a></li>
+</ul>
+
+  </div>
+</div>
+
+<p>應用程式可以根據將要執行的「行為」,將使用者傳送至其他應用程式
+,這是 Android 最重要的功能之一。例如,若您希望在地圖上顯示應用程式中的企業地址,不必在應用程式中建置顯示地圖的應用行為顯示。
+
+您可以改為使用 {@link android.content.Intent} 建立檢視地址的要求。
+隨後,Android 系統會啟動能在地圖上顯示地址的應用程式。
+</p>
+
+<p>正如第一課<a href="{@docRoot}training/basics/firstapp/index.html">建置您的第一個應用程式</a>中所述,您必須使用意圖在您應用程式中的應用行為顯示之間進行導覽。您執行此作業時通常具有<em>明確意圖</em>,該意圖可定義您希望啟動的元件的確切類別名稱。
+
+
+但是,若您希望使用單獨的應用程式執行諸如「檢視地圖」等行為,則必須使用<em>隱含意圖</em>。
+</p>
+
+<p>本課程將為您展示如何針對特定行為建立隱含意圖,以及如何使用該意圖啟動在其他應用程式中執行該行為的應用行為顯示。
+</p>
+
+
+
+<h2 id="Build">建置隱含意圖</h2>
+
+<p>隱含意圖不會宣告要啟動元件的類別名稱,而是宣告要執行的行為。
+該行為將指定您希望執行的動作,例如<em>檢視</em>、<em>編輯</em>、<em>傳送</em>或<em>取得</em>項目。
+意圖通常還包括與行為關聯的資料,例如您希望檢視的地址或希望傳送的電子郵件。視您希望建立的意圖而定,該資料可能是 {@link android.net.Uri} 或其他多種資料類型的其中之一,意圖也可能完全不需要資料。
+
+
+</p>
+
+<p>若您的資料是 {@link android.net.Uri},可以使用簡單的 {@link
+android.content.Intent#Intent(String,Uri) Intent()} 建構函式來定義行為與資料。
+</p>
+
+<p>例如,以下範例將展示如何建立啟動電話的意圖 (使用 {@link
+android.net.Uri} 資料指定電話號碼):</p>
+
+<pre>
+Uri number = Uri.parse("tel:5551234");
+Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
+</pre>
+
+<p>您的應用程式透過呼叫 {@link android.app.Activity#startActivity
+startActivity()} 來呼叫該意圖時,電話應用程式會啟動對指定電話號碼的撥號。</p>
+
+<p>以下將展示其他一些意圖及其行為與 {@link android.net.Uri} 資料配對:
+</p>
+
+<ul>
+  <li>檢視地圖:
+<pre>
+// Map point based on address
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+// Or map point based on latitude/longitude
+// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+</pre>
+  </li>
+  <li>檢視網頁:
+<pre>
+Uri webpage = Uri.parse("http://www.android.com");
+Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
+</pre>
+  </li>
+</ul>
+
+<p>其他類型的隱含意圖需要「額外」資料提供其他資料類型 (例如字串)。
+您可以使用各種 {@link
+android.content.Intent#putExtra(String,String) putExtra()} 方法新增一或多項額外資料。</p>
+
+<p>依預設,系統會根據包括的 {@link android.net.Uri} 資料,判斷意圖所需的相應 MIME 類型。
+若您未將 {@link android.net.Uri} 包括在意圖中,通常應使用 {@link android.content.Intent#setType setType()} 指定意圖所關聯資料的類型。
+
+設定 MIME 類型會進一步指定哪些類型的應用行為顯示應接收意圖。
+</p>
+
+<p>以下展示的一些意圖將新增額外資料以指定所需行為:</p>
+
+<ul>
+  <li>傳送具有附件的電子郵件:
+<pre>
+Intent emailIntent = new Intent(Intent.ACTION_SEND);
+// The intent does not have a URI, so declare the "text/plain" MIME type
+emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
+emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
+emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
+emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
+emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
+// You can also attach multiple items by passing an ArrayList of Uris
+</pre>
+  </li>
+  <li>建立行事曆事件:
+<pre>
+Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
+Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
+Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
+calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
+calendarIntent.putExtra(Events.TITLE, "Ninja class");
+calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
+</pre>
+<p class="note"><strong>注意:</strong>針對行事曆事件的這一意圖僅支援至少為 14 的 API 級別。
+</p>
+  </li>
+</ul>
+
+<p class="note"><strong>注意:</strong>請儘可能具體地定義 {@link
+android.content.Intent},這一點非常重要。例如,若您希望使用 {@link android.content.Intent#ACTION_VIEW} 意圖顯示影像,應將 MIME 類型指定為 {@code image/*}。
+
+如此可防止意圖觸發能「檢視」其他類型資料的應用程式 (例如地圖應用程式)。
+</p>
+
+
+
+<h2 id="Verify">驗證存在接收意圖的應用程式</h2>
+
+<p>雖然 Android 平台保證特定意圖將解析為內建應用程式 (例如電話、電子郵件或日曆應用程式) 的其中之一,但您應一律先納入驗證步驟,然後再呼叫意圖。
+
+</p>
+
+<p class="caution"><strong>注意:</strong>若您呼叫意圖,而裝置上不提供能處理該意圖的任何應用程式,
+則您的應用程式將當機。</p>
+
+<p>若要驗證存在可回應意圖的應用行為顯示,請呼叫 {@link
+android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} 以取得能處理 {@link android.content.Intent} 的應用行為顯示清單。
+若傳回的 {@link
+java.util.List} 非空,您可以安全使用意圖。例如:</p>
+
+<pre>
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List<ResolveInfo> activities = packageManager.queryIntentActivities(intent,
+        PackageManager.MATCH_DEFAULT_ONLY);
+boolean isIntentSafe = activities.size() > 0;
+</pre>
+
+<p>若 <code>isIntentSafe</code> 為 <code>true</code>,則至少有一個應用程式將回應意圖。
+若其為 <code>false</code>,則沒有任何應用程式能處理該意圖。</p>
+
+<p class="note"><strong>注意:</strong>對於使用該意圖的功能,若您需要在使用者嘗試使用該功能之前停用該功能,應在您的應用行為顯示第一次啟動時,執行這項檢查。
+
+若您知道能處理該意圖的特定應用程式,還可為使用者提供應用程式下載連結 (請參閱如何<a href="{@docRoot}distribute/tools/promote/linking.html">在 Google
+Play 上連結您的產品</a>)。
+</p>
+
+
+<h2 id="StartActivity">使用意圖啟動應用行為顯示</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intents-choice.png" alt="" />
+  <p class="img-caption"><strong>圖 1.</strong>選取對話方塊 (在多個應用程式可處理意圖時顯示) 的範例。
+</p>
+</div>
+
+<p>在您建立 {@link android.content.Intent} 並設定額外資訊後,請呼叫 {@link
+android.app.Activity#startActivity startActivity()} 將其傳送至系統。若系統識別出有多個應用行為顯示可以處理意圖,會顯示對話方塊,供使用者選取要使用的應用程式,如圖 1 所示。
+
+若只有一個應用行為顯示可以處理該意圖,系統會立即啟動該應用行為顯示。
+</p>
+
+<pre>
+startActivity(intent);
+</pre>
+
+<p>以下所示的完整範例將展示如何建立檢視地圖的意圖、驗證存在處理該意圖的應用程式,然後啟動該應用程式:
+</p>
+
+<pre>
+// Build the intent
+Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
+Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
+
+// Verify it resolves
+PackageManager packageManager = {@link android.content.Context#getPackageManager()};
+List&lt;ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
+boolean isIntentSafe = activities.size() > 0;
+
+// Start an activity if it's safe
+if (isIntentSafe) {
+    startActivity(mapIntent);
+}
+</pre>
+
+
+
+<h2 id="AppChooser">顯示應用程式選擇器</h2>
+
+<div class="figure" style="width:200px;margin-top:-10px">
+  <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="" />
+  <p class="img-caption"><strong>圖 2.</strong>選擇器對話方塊。</p>
+</div>
+
+<p>請注意,若您將 {@link android.content.Intent} 傳遞至 {@link
+android.app.Activity#startActivity startActivity()} 以啟動應用行為顯示,且有多個應用程式回應該意圖,則使用者可以選取依預設要使用的應用程式 (透過選取對話方塊底部的核取方塊,請參閱圖 1)。
+
+若在執行行為時使用者通常希望每次使用同一應用程式,例如開啟網頁 (使用者可能只使用一個網頁瀏覽器) 或拍攝相片 (使用者可能更喜歡使用一個相機),則此功能非常有用。
+
+</p>
+
+<p>但是,若有多個應用程式可以處理要執行的行為,且使用者可能更希望每次使用不同的應用程式 (例如對於「共用」行為,使用者可能會透過多個應用程式來共用項目),您應明確顯示選擇器對話方塊,如圖 2 所示。
+
+
+選擇器對話方塊會強制使用者選取行為每次使用的應用程式 (使用者無法選取行為的預設應用程式)。
+
+</p>
+
+<p>若要顯示選擇器,請使用 {@link
+android.content.Intent#createChooser createChooser()} 建立 {@link android.content.Intent},並將其傳遞至 {@link
+android.app.Activity#startActivity startActivity()}。例如:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+...
+
+// Always use string resources for UI text.
+// This says something like "Share this photo with"
+String title = getResources().getString(R.string.chooser_title);
+// Create intent to show chooser
+Intent chooser = Intent.createChooser(intent, title);
+
+// Verify the intent will resolve to at least one activity
+if (intent.resolveActivity(getPackageManager()) != null) {
+    startActivity(chooser);
+}
+</pre>
+
+<p>以上範例會顯示對話方塊 (將回應意圖的應用程式清單傳遞至 {@link
+android.content.Intent#createChooser createChooser()} 方法),並使用提供的文字作為對話方塊的標題。
+</p>
+
+
+
diff --git a/docs/html/design/design_toc.cs b/docs/html/design/design_toc.cs
index 85569ef..477eb23 100644
--- a/docs/html/design/design_toc.cs
+++ b/docs/html/design/design_toc.cs
@@ -3,13 +3,29 @@
   <li class="nav-section">
     <div class="nav-section-header"><a href="<?cs var:toroot ?>design/get-started/creative-vision.html">Creative Vision</a></div>
     <ul>
-      <li><a href="<?cs var:toroot ?>design/get-started/principles.html">Design Principles</a></li>
+      <li><a href="<?cs var:toroot ?>design/get-started/principles.html"
+       es-lang="Principios de diseño para Android"
+       ja-lang="Android デザイン指針"
+       ko-lang="Android 디자인 원칙"
+       pt-br-lang="Princípios de projeto para Android"
+       ru-lang="Принципы проектирования Android"
+       zh-cn-lang="Android 设计原则"
+       zh-tw-lang="Android 設計原則">
+       Design Principles</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/new.html">New in Android</a></li>
     </ul>
   </li>
 
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>design/material/index.html">Material for Android</a></div>
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>design/material/index.html"
+       es-lang="Material Design"
+       ja-lang="マテリアル デザイン"
+       ko-lang="머티어리얼 디자인"
+       pt-br-lang="Material Design"
+       ru-lang="Material Design"
+       zh-cn-lang="材料设计"
+       zh-tw-lang="材料設計">
+    Material for Android</a></div>
   </li>
 
   <li class="nav-section">
@@ -47,12 +63,39 @@
     <ul>
       <li><a href="<?cs var:toroot ?>design/style/devices-displays.html">Devices and Displays</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/app-structure.html">App Structure</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/navigation.html">Navigation</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/notifications.html">Notifications</a></li>
+      <li><a href="<?cs var:toroot ?>design/patterns/navigation.html"
+       es-lang="Navegación con los botones Back y Up"
+       ja-lang="Back と Up を使用したナビゲーション"
+       ko-lang="뒤로 및 위로 탐색 기능이 포함된 탐색"
+       pt-br-lang="Navegação com Voltar e Para cima"
+       ru-lang="Навигация с помощью кнопок \"Назад\" и \"Вверх\""
+       zh-cn-lang="使用返回和向上导航"
+       zh-tw-lang="使用 [返回] 及 [上一層] 導覽">
+       Navigation</a></li>
+
+      <li><a href="<?cs var:toroot ?>design/patterns/notifications.html"
+       es-lang="Notificaciones"
+       ja-lang="通知"
+       ko-lang="알림"
+       pt-br-lang="Notificações"
+       ru-lang="Уведомления"
+       zh-cn-lang="通知"
+       zh-tw-lang="通知">
+       Notifications</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/widgets.html">Widgets</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/swipe-views.html">Swipe Views</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/fullscreen.html">Full Screen</a></li>
-      <li><a href="<?cs var:toroot ?>design/patterns/confirming-acknowledging.html">Confirming &amp; Acknowledging</a></li>
+
+      <li><a href="<?cs var:toroot ?>design/patterns/confirming-acknowledging.html"
+       es-lang="Confirmación y reconocimiento"
+       ja-lang="確認と通知"
+       ko-lang="확인 및 승인하기"
+       pt-br-lang="Confirmação e reconhecimento"
+       ru-lang="Подтверждение и уведомление"
+       zh-cn-lang="确认和确知"
+       zh-tw-lang="確認及確認完成">
+       Confirming &amp; Acknowledging</a></li>
+
       <li><a href="<?cs var:toroot ?>design/patterns/pure-android.html">Pure Android</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/compatibility.html">Compatibility</a></li>
       <li><a href="<?cs var:toroot ?>design/patterns/accessibility.html">Accessibility</a></li>
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/distribute/googleplay/googleplay_toc.cs b/docs/html/distribute/googleplay/googleplay_toc.cs
index d55271b..60da6d2 100644
--- a/docs/html/distribute/googleplay/googleplay_toc.cs
+++ b/docs/html/distribute/googleplay/googleplay_toc.cs
@@ -1,48 +1,104 @@
 <ul id="nav">
 
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/about.html">
-            <span class="en">The Google Play Opportunity</span></a>
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/about.html"
+       es-lang="La oportunidad de Google Play"
+       ja-lang="Google Play の可能性"
+       ko-lang="Google Play 활용 기회"
+       pt-br-lang="A oportunidade do Google Play"
+       ru-lang="Возможности Google Play"
+       zh-cn-lang="Google Play 蕴藏的机会"
+       zh-tw-lang="Google Play商機"
+            >The Google Play Opportunity</span></a>
     </div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/start.html">
-            <span class="en">Get Started <br />with Publishing</span>
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/start.html"
+       es-lang="Comienza a publicar"
+       ja-lang="アプリを公開する"
+       ko-lang="게시 시작하기"
+       pt-br-lang="Introdução à publicação"
+       ru-lang="Первые шаги в публикациях"
+       zh-cn-lang="开始发布"
+       zh-tw-lang="開始發行">
+            Get Started <br />with Publishing
           </a>
     </div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/developer-console.html">
-          <span class="en">Developer Console</span>
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/developer-console.html"
+       es-lang="Consola para desarrolladores"
+       ja-lang="デベロッパー コンソール"
+       ko-lang="개발자 콘솔"
+       pt-br-lang="Console do Desenvolvedor"
+       ru-lang="Консоль разработчика"
+       zh-cn-lang="开发者控制台"
+       zh-tw-lang="Developer Console">
+          Developer Console
         </a>
     </div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/guide.html">
-    <span class="en">Find Success on <span style="white-space:nowrap">Google Play</span></span>
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/guide.html"
+       es-lang="Cómo tener éxito en Google Play"
+       ja-lang="Google Play で成功を手にする"
+       ko-lang="Google Play에서 성공 모색"
+       pt-br-lang="Obtendo sucesso no Google Play"
+       ru-lang="Найдите свой путь к успеху в Google Play"
+       zh-cn-lang="在 Google Play 上取得成功"
+       zh-tw-lang="在 Google Play 上尋找成功">
+           Find Success on <span style="white-space:nowrap">Google Play
         </a>
     </div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/wear.html">
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/wear.html"
+       es-lang="Distribución para Android Wear"
+       ja-lang="Android Wear への配布"
+       ko-lang="Android Wear에 배포"
+       pt-br-lang="Distribuindo para Android Wear"
+       ru-lang="Распространение приложений Android Wear"
+       zh-cn-lang="分发到 Android Wear"
+       zh-tw-lang="散佈至 Android Wear">
     <span class="en">Distribute to <br /><span style="white-space:nowrap">Android Wear</span></span>
         </a>
     </div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/tv.html">
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/tv.html"
+       es-lang="Distribución para Android TV"
+       ja-lang="Android TV への配布"
+       ko-lang="Android TV에 배포"
+       pt-br-lang="Distribuindo para Android TV"
+       ru-lang="Распространение приложений в Android TV"
+       zh-cn-lang="分发到 Android TV"
+       zh-tw-lang="散佈至 Android 電視">
           <span class="en">Distribute to <br /><span style="white-space:nowrap">Android TV</span></span>
         </a>
     </div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/auto.html">
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/auto.html"
+       es-lang="Distribución para Android Auto"
+       ja-lang="Android Auto への配布"
+       ko-lang="Android Auto에 배포"
+       pt-br-lang="Distribuindo para o Android Auto"
+       ru-lang="Распространение приложений для Android Auto"
+       zh-cn-lang="分发到 Android Auto"
+       zh-tw-lang="散佈至 Android Auto">
           <span class="en">Distribute to <br /><span style="white-space:nowrap">Android Auto</span></span>
         </a>
     </div>
   </li>
   <li class="nav-section">
-    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/families/about.html">
+    <div class="nav-section-header empty" style="font-weight:normal"><a href="<?cs var:toroot?>distribute/googleplay/families/about.html"
+       es-lang="Diseñado para la familia"
+       ja-lang="Designed for Families"
+       ko-lang="Designed for Families"
+       pt-br-lang="Designed for Families"
+       ru-lang="Для всей семьи"
+       zh-cn-lang="为家庭设计"
+       zh-tw-lang="Designed for Families">
           <span class="en">Designed for Families</span>
         </a>
     </div>
diff --git a/docs/html/google/google_toc.cs b/docs/html/google/google_toc.cs
index dd0e735..ffdc22d 100644
--- a/docs/html/google/google_toc.cs
+++ b/docs/html/google/google_toc.cs
@@ -47,8 +47,15 @@
   </li>
 
   <li class="nav-section">
-  <div class="nav-section-header empty"><a href="<?cs var:toroot ?>google/play/filters.html">
-          <span class="en">Filters on Google Play</span></a>
+  <div class="nav-section-header empty"><a href="<?cs var:toroot ?>google/play/filters.html"
+       es-lang="Filtros en Google Play"
+       ja-lang="Google Play 上のフィルタ"
+       ko-lang="Google Play 필터"
+       pt-br-lang="Filtros no Google Play"
+       ru-lang="Фильтры в Google Play"
+       zh-cn-lang="Google Play 上的筛选器"
+       zh-tw-lang="Google Play 上的篩選器">
+          Filters on Google Play</a>
       </div>
   </li>
 
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/images/tools/studio-globe-icon.png b/docs/html/images/tools/studio-globe-icon.png
new file mode 100644
index 0000000..0701dd2
--- /dev/null
+++ b/docs/html/images/tools/studio-globe-icon.png
Binary files differ
diff --git a/docs/html/images/tools/studio-setup-wizard.png b/docs/html/images/tools/studio-setup-wizard.png
deleted file mode 100644
index ccd92d3..0000000
--- a/docs/html/images/tools/studio-setup-wizard.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/preview/api-overview.jd b/docs/html/preview/api-overview.jd
index 1686d79..75b3c528 100644
--- a/docs/html/preview/api-overview.jd
+++ b/docs/html/preview/api-overview.jd
@@ -86,9 +86,11 @@
 <a href="{@docRoot}preview/features/app-linking.html">App Linking</a>.
 
 <h2 id="backup">Auto Backup for Apps</h2>
-<p>The system now performs automatic full data backup and restore for apps. This behavior is
-enabled by default for apps targeting M Preview; you do not need to add any additional code. If
-users delete their Google accounts, their backup data is deleted as well. To learn how this feature
+<p>The system now performs automatic full data backup and restore for apps. For the
+duration of the <a href="{@docRoot}preview/overview.html">M Developer Preview program</a>, all
+apps are backed up, independent of which SDK version they target. After the final M SDK release,
+your app must target M to enable this behavior; you do not need to add any additional code. If users
+delete their Google accounts, their backup data is deleted as well. To learn how this feature
 works and how to configure what to back up on the file system, see
 <a href="{@docRoot}preview/backup/index.html">Auto Backup for Apps</a>.</p>
 
@@ -152,10 +154,9 @@
 
 <p>To set the timeout duration for which the same key can be re-used after a user is successfully
 authenticated, call the new
-{@code android.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()}
+{@code android.security.keystore.KeyGenParameterSpec.Builder.setUserAuthenticationValidityDurationSeconds()}
 method when you set up a {@link javax.crypto.KeyGenerator} or
-{@link java.security.KeyPairGenerator}. This feature currently works for symmetric cryptographic
-operations.</p>
+{@link java.security.KeyPairGenerator}.</p>
 
 <p>Avoid showing the re-authentication dialog excessively -- your apps should try using the
 cryptographic object first and if the the timeout expires, use the
@@ -236,7 +237,7 @@
 <p>Your app can elect to not share the current context with the assistant by setting the
 {@link android.view.WindowManager.LayoutParams#FLAG_SECURE} flag. In addition to the
 standard set of information that the platform passes to the assistant, your app can share
-additional information by using the new {@code android.app.Activity.AssistContent} class.</p>
+additional information by using the new {@code android.app.assist.AssistContent} class.</p>
 
 <p>To provide the assistant with additional context from your app, follow these steps:</p>
 
@@ -273,7 +274,7 @@
 information from the touch screen is fused with pressure and button information from the stylus to
 provide a greater range of expression than with the touch screen alone. Your app can listen for
 stylus button presses and perform secondary actions, by registering the new
-{@code View.onStylusButtonPressListener} and {@code GestureDetector.OnStylusButtonPressListener}
+{@code View.onContextClickListener} and {@code GestureDetector.onContextClickListener}
 callbacks in your activity.</p>
 
 <p>Use the {@link android.view.MotionEvent} methods and constants to detect stylus button
@@ -284,11 +285,11 @@
 {@link android.view.MotionEvent#TOOL_TYPE_STYLUS}.</li>
 <li>For apps targeting M Preview, the
 {@link android.view.MotionEvent#getButtonState() getButtonState()}
-method returns {@code MotionEvent.STYLUS_BUTTON_PRIMARY} when the user
+method returns {@code MotionEvent.BUTTON_STYLUS_PRIMARY} when the user
 presses the primary stylus button. If the stylus has a second button, the same method returns
-{@code MotionEvent.STYLUS_BUTTON_SECONDARY} when the user presses it. If the user presses
+{@code MotionEvent.BUTTON_STYLUS_SECONDARY} when the user presses it. If the user presses
 both buttons simultaneously, the method returns both values OR'ed together
-({@code STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY}).</li>
+({@code BUTTON_STYLUS_PRIMARY|BUTTON_STYLUS_SECONDARY}).</li>
 <li>
 For apps targeting a lower platform version, the
 {@link android.view.MotionEvent#getButtonState() getButtonState()} method returns
@@ -314,7 +315,7 @@
 {@link android.net.wifi.WifiEnterpriseConfig} class, such as {@code setPlmn()} and
 {@code setRealm()}. In the {@link android.net.wifi.WifiConfiguration} object, you can set the
 {@link android.net.wifi.WifiConfiguration#FQDN} and the {@code providerFriendlyName} fields.
-The new {@code ScanResult.PasspointNetwork} property indicates if a detected
+The new {@code ScanResult.isPasspointNetwork()} method indicates if a detected
 network represents a Hotspot 2.0 access point.
 </p>
 
@@ -356,10 +357,10 @@
 TV. The system invokes the new {@code android.app.Activity.onSearchRequested()} callback when the
 user starts a search. To determine if the user's input device has a built-in microphone, retrieve
 the {@link android.view.InputDevice} object from that callback, then call the new
-{@code InputDevice.hasMic()} method.</li>
-  <li>New {@code android.media.AudioDevicesManager} class which lets you retrieve a list of all
-attached source and sink audio devices. You can also specify an
-{@code android.media.OnAudioDeviceConnectionListener} object if you want your app to be notified
+{@code InputDevice.hasMicrophone()} method.</li>
+  <li>New {@code AudioManager.getDevices() method which lets you retrieve a list of all
+    audio devices currently connected to the system. You can also register an
+{@code android.media.AudioDeviceCallback} object if you want your app to be notified
 when an audio device is connected or disconnected.</li>
 </ul>
 
@@ -407,14 +408,15 @@
 
 <h3 id="reprocessing">Reprocessing API</h3>
 <p>The {@link android.hardware.camera2 Camera2} API is extended to support YUV and private
-opaque format image reprocessing. Your app determine if the reprocessing capabilities are available
-via {@code CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES}. If a device supports reprocessing,
-you can create a reprocessable camera capture session by calling
+opaque format image reprocessing. To determine if these reprocessing capabilities are available,
+call {@link android.hardware.camera2.CameraManager#getCameraCharacteristics(java.lang.String)
+getCameraCharacteristics()} and check for the {@code REPROCESS_MAX_CAPTURE_STALL} key. If a
+device supports reprocessing, you can create a reprocessable camera capture session by calling
 {@code CameraDevice.createReprocessableCaptureSession()}, and create requests for input
 buffer reprocessing.</p>
 
-<p>Use the {@code ImageWriter} class to connect the input buffer flow to the camera reprocessing
-input. To get an empty buffer, follow this programming model:</p>
+<p>Use the {@code android.media.ImageWriter} class to connect the input buffer flow to the camera
+reprocessing input. To get an empty buffer, follow this programming model:</p>
 
 <ol>
 <li>Call the {@code ImageWriter.dequeueInputImage()} method.</li>
@@ -428,10 +430,10 @@
 {@code ImageWriter} by calling the {@code ImageWriter.queueInputImage()} method without any
 buffer copy.</p>
 
-<p>The {@code ImageReader} class now supports {@code android.graphics.ImageFormat.PRIVATE} format
-image streams. This support allows your app to maintain a circular image queue of
-{@code ImageReader} output images, select one or more images, and send them to the
-{@code ImageWriter} for camera reprocessing.</p>
+<p>The {@link android.media.ImageReader} class now supports
+{@code android.graphics.ImageFormat.PRIVATE} format image streams. This support allows your app to
+maintain a circular image queue of {@link android.media.ImageReader} output images, select one or
+more images, and send them to the {@code ImageWriter} for camera reprocessing.</p>
 
 <h2 id="afw">Android for Work Features</h2>
 <p>This preview includes the following new APIs for Android for Work:</p>
@@ -441,10 +443,10 @@
 Corporate-Owned, Single-Use (COSU) devices:
   <ul>
     <li>Disable or re-enable the keyguard with the
-{@code DevicePolicyManager.setKeyguardEnabledState()} method.</li>
+{@code DevicePolicyManager.setKeyguardDisabled()} method.</li>
     <li>Disable or re-enable the status bar (including quick settings, notifications, and the
 navigation swipe-up gesture that launches Google Now) with the
-{@code DevicePolicyManager.setStatusBarEnabledState()} method.</li>
+{@code DevicePolicyManager.setStatusBarDisabled()} method.</li>
     <li>Disable or re-enable safe boot with the {@link android.os.UserManager} constant
 {@code DISALLOW_SAFE_BOOT}.</li>
     <li>Prevent the screen from turning off while plugged in with the
@@ -489,16 +491,6 @@
 installKeyPair()}</li>
 </ul>
 </li>
-<li><strong>Enterprise factory reset protection:</strong> When provisioning a Device Owner, you can
-now configure parameters to unlock Factory Reset Protection (FRP) by setting the
-{@code DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS} bundle. An NFC Programmer
-app can provide these parameters after a device has been reset to unlock FRP and provision the device,
-without requiring the previously configured Google account. If you don't modify these parameters,
-FRP remains in-place and prevents the device from being activated without the previously activated
-Google credentials.
-<p>Additionally, by setting app restrictions on Google Play services, Device Owners can specify
-alternative Google accounts for unlocking FRP to replace the ones activated on the device.</p>
-</li>
 <img src="{@docRoot}preview/images/work-profile-screen.png"
 srcset="{@docRoot}preview/images/work-profile-screen.png 1x, {@docRoot}preview/images/work-profile-screen_2x.png 2x"
 style="float:right; margin:0 0 10px 20px" width="282" height="476" />
diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/preview/behavior-changes.jd
index 5ddac7a..6ee0af0 100644
--- a/docs/html/preview/behavior-changes.jd
+++ b/docs/html/preview/behavior-changes.jd
@@ -23,8 +23,9 @@
     <li><a href="#behavior-keystore">Android Keystore Changes</a></li>
     <li><a href="#behavior-network">Wi-Fi and Networking Changes</a></li>
     <li><a href="#behavior-camera">Camera Service Changes</a></li>
-    <li><a href="#behavior-art-runtime">ART Runtime</a></li>
+    <li><a href="#behavior-runtime">Runtime</a></li>
     <li><a href="#behavior-apk-validation">APK Validation</a></li>
+    <li><a href="#behavior-usb">USB Connection</a></li>
     <li><a href="#behavior-afw">Android for Work Changes</a></li>
 </ol>
 
@@ -46,8 +47,8 @@
 system changes and API behavior changes. This document highlights
 some of the key changes that you should understand and account for in your apps.</p>
 
-<p>If you have previously published an app for Android, be aware that your app
-  might be affected by these changes in the platform.</p>
+<p>If you have previously published an app for Android, be aware that these changes in the
+platform affect your app.</p>
 
 <h2 id="behavior-runtime-permissions">Runtime Permissions</h1>
 <p>This preview introduces a new permissions model, where users can now directly manage
@@ -55,11 +56,11 @@
 permissions, while streamlining the installation and auto-update processes for app developers.
 Users can grant or revoke permissions individually for installed apps. </p>
 
-<p>On your apps that target the M Preview, make sure to check and request for permissions at
-runtime. To determine if your app has been granted a permission, call the
-new {@code Context.checkSelfPermission()} method. To request for a permission, call the new
-{@code Activity.requestPermission()} method. Even if your app is not targeting M, you
-should test your app under the new permissions model.</p>
+<p>On your apps that target the M Preview release or higher, make sure to check for and request
+permissions at runtime. To determine if your app has been granted a permission, call the
+new {@code Context.checkSelfPermission()} method. To request a permission, call the new
+{@code Activity.requestPermission()} method. Even if your app is not targeting the M Preview
+release, you should test your app under the new permissions model.</p>
 
 <p>For details on supporting the new permissions model in your app, see the
 <a href="{@docRoot}preview/features/runtime-permissions.html">
@@ -329,7 +330,7 @@
 </li>
 </ul>
 
-<h2 id="behavior-art-runtime">ART Runtime</h2>
+<h2 id="behavior-runtime">Runtime</h2>
 <p>The ART runtime now properly implements access rules for the
 {@link java.lang.reflect.Constructor#newInstance(java.lang.Object...) newInstance()} method. This
 change fixes a problem where Dalvik was checking access rules incorrectly in previous versions.
@@ -362,14 +363,22 @@
 declared in the manifest but not present in the APK itself. An APK must be re-signed if any of the
 contents are removed.</p>
 
+<h2 id="behavior-usb">USB Connection</h2>
+<p>Device connections through the USB port are now set to charge-only mode by default. To access
+the device and its content over a USB connection, users must explicitly grant permission for such
+interactions. If your app supports user interactions with the device over a USB port, take into
+consideration that the interaction must be explicitly enabled.
+</p>
+
 <h2 id="behavior-afw">Android for Work Changes</h2>
 <p>This preview includes the following behavior changes for Android for Work:</p>
 <ul>
 <li><strong>Work contacts in personal contexts.</strong> The Google Dialer
 Call Log now displays work contacts when the user views past calls.
-Setting {@code DevicePolicyManager.setCrossProfileCallerIdDisabled()} to {@code true} hides the
-work profile contacts in the Google Dialer Call Log. Work contacts can be displayed along with
-personal contacts to devices over Bluetooth only if
+Setting
+{@link android.app.admin.DevicePolicyManager#setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean) setCrossProfileCallerIdDisabled()}
+to {@code true} hides the work profile contacts in the Google Dialer Call Log. Work contacts can be
+displayed along with personal contacts to devices over Bluetooth only if
 you set {@code DevicePolicyManager.setBluetoothContactSharingDisabled()} to {@code false}. By
 default, it is set to {@code true}.
 </li>
@@ -377,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 b4eed9a..765a3d5 100644
--- a/docs/html/preview/features/runtime-permissions.jd
+++ b/docs/html/preview/features/runtime-permissions.jd
@@ -22,7 +22,7 @@
       <li><a href="#overview">Overview</a></li>
       <li><a href="#coding">Coding for Runtime Permissions</a></li>
       <li><a href="#testing">Testing Runtime Permissions</a></li>
-      <li><a href="#best-practices">Best Practices</a></li>
+      <li><a href="#best-practices">Best Practices and Usage Notes</a></li>
     </ol>
 
 <!--
@@ -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
@@ -82,15 +93,17 @@
   <li>
     <p><strong>Limited Permissions Granted at Install Time:</strong> When the
     user installs or updates the app, the system grants the app all
-    permissions that the app requests that fall under {@link
+    permissions listed in the manifest that fall under {@link
     android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}.
     For example, alarm clock and internet permissions fall under {@link
     android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}, so
-    they are automatically granted at install time.
+    they are automatically granted at install time. For more information about
+    how normal permissions are handled, see <a href="#normal">Normal
+    Permissions</a>.
     </p>
 
-    <p>The system may also grant the app signature and system permissions, as
-    described in <a href="#system-apps">System apps and signature
+    <p>The system may also grant the app signature permissions, as
+    described in <a href="#system-apps">System components and signature
     permissions</a>. The user is <em>not</em> prompted to grant any permissions
     at install time.</p>
   </li>
@@ -98,9 +111,7 @@
   <li>
     <strong>User Grants Permissions at Run-Time:</strong> When the app requests
     a permission, the system shows a dialog to the user, then calls the app's
-    callback function to notify it whether the permission was granted. If a
-    user grants a permission, the app is given all permissions in that
-    permission's functional area that were declared in the app manifest.
+    callback function to notify it whether the user granted the permission.
   </li>
 
 </ul>
@@ -117,7 +128,9 @@
     <strong>Always Check for Permissions:</strong> When the app needs to
     perform any action that requires a permission, it should first check
     whether it has that permission already. If it does not, it requests to be
-    granted that permission.
+    granted that permission. You do not need to check for permissions that
+    fall under {@link
+    android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}.
   </li>
 
   <li>
@@ -164,38 +177,54 @@
   to access that data.
 </p>
 
+<h3 id="perm-groups">Permission groups</h3>
+
+<p>
+  Related permissions are divided into <em>permission groups</em> to
+  allow users to grant related permissions to an app in a single action.
+  The user only has to grant permission once per app for each permission group.
+  If the app subsequently requests a permission from the same permission
+  group, the system automatically grants the permission without any action from
+  the user. The system calls your app's <code>onRequestPermissionsResult()</code>
+  method just as if the user had granted permission through the dialog box.
+</p>
+
+<p>
+  For example, suppose an app lists in its manifest that it needs the
+  <code>SEND_SMS</code> and <code>RECEIVE_SMS</code> permissions, which both
+  belong to <code>android.permission-group.SMS</code>. When the app needs to
+  send a message, it requests the <code>SEND_SMS</code> permission. The system
+  shows the user a dialog box asking if the app can have access to SMS. If the
+  user agrees, the system grants the app the <code>SEND_SMS</code> permission it
+  requested. Later, the app requests <code>RECEIVE_SMS</code>. The
+  system automatically grants this permission, since the user had already
+  approved a permission in the same permission group.
+</p>
+
 <h3 id="system-apps">
-  System apps and signature permissions
+  System components and signature permissions
 </h3>
 
 <p>
   Ordinarily, when the user installs an app, the system only grants the app the
+  permissions listed in the manifest that fall under
   {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL
   PROTECTION_NORMAL}. However, under some circumstances the system grants the
   app more permissions:
 </p>
 
 <ul>
-  <li>If an app is part of the system image, it is automatically granted all
-  the permissions listed in its manifest.
+  <li>System components automatically receive all
+  the permissions listed in their manifests.
   </li>
 
   <li>If the app requests permissions in the manifest that fall under {@link
   android.content.pm.PermissionInfo#PROTECTION_SIGNATURE PROTECTION_SIGNATURE},
   and the app is signed with the same certificate as the app that declared
   those permissions, the system grants the requesting app those permissions on
-  installation.
-  </li>
+  installation. Apps cannot request signature permissions at runtime.</li>
 </ul>
 
-<p>
-  In both cases, the user can still revoke permissions at any time by going to
-  the system's <strong>Settings</strong> screen and choosing <strong>Apps
-  &gt;</strong> <i>app_name</i> <strong>&gt; Permissions</strong>. The app
-  should continue to check for permissions at run time and request them if
-  necessary.
-</p>
-
 <h3 id="compatibility">
   Forwards and backwards compatibility
 </h3>
@@ -545,8 +574,54 @@
     </td>
   </tr>
 
+  <tr>
+    <td>
+      <code>android.permission-group.STORAGE</code>
+    </td>
+    <td>
+      <ul>
+        <li>
+          <code>android.permission.READ_EXTERNAL_STORAGE</code>
+        </li>
+        <li>
+          <code>android.permission.WRITE_EXTERNAL_STORAGE</code>
+        </li>
+      </ul>
+    </td>
+  </tr>
+
 </table>
 
+<h4 id="explain-need">Explain why the app needs permissions</h4>
+
+<p>
+  In some circumstances, you might want to help the user understand why your
+  app needs a permission. For example, if a user launches a photography app,
+  the user probably won't be surprised that the app asks for permission to use
+  the camera. But if the user turns down that permission request, then launches
+  the photography app again, that might indicate that the user needs some help
+  understanding why the permission is needed.
+</p>
+
+<p>
+  To help find the situations where you need to provide extra explanation, the
+  system provides the
+  <code>Activity.shouldShowRequestPermissionRationale(String)</code>
+  method. This
+  method returns <code>true</code> if the app has requested this permission
+  previously and the user denied the request.
+  That indicates that you should probably explain to the
+  user why you need the permission.
+</p>
+
+<p>
+  If the user turned down the permission request in the
+  past and chose the <em>Don't ask again</em> option in the permission request system
+  dialog, this method returns <code>false</code>. The method also returns
+  <code>false</code> if the device policy prohibits the app from having that
+  permission.
+</p>
+
 <h4 id="request-permissions">Request permissions if necessary</h4>
 
 <p>If the app doesn't already have the permission it needs, the app calls the
@@ -564,6 +639,13 @@
 <pre>
 if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
         != PackageManager.PERMISSION_GRANTED) {
+
+    // Should we show an explanation?
+    if (shouldShowRequestPermissionRationale(
+            Manifest.permission.READ_CONTACTS)) {
+        // Explain to the user why we need to read the contacts
+    }
+
     requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
             MY_PERMISSIONS_REQUEST_READ_CONTACTS);
 
@@ -612,11 +694,10 @@
 }
 </pre>
 
-  <p>If the user grants a permission, the system gives the app all permissions
-  that the app manifest lists for that functional area. If the user denies the
-  request, you should take appropriate action. For example, you might disable
-  any menu actions that depend on this permission.
-  </li>
+<p>
+  If the user denies a permission request, your app should take appropriate
+  action. For example, your app might show a dialog explaining why it could not
+  perform the user's original request.
 </p>
 
 <p>
@@ -631,7 +712,6 @@
 
 <h2 id="testing">Testing Runtime Permissions</h2>
 
-
 <p>
   If your app targets the M Developer Preview, you must test that it
   handles permissions properly. You cannot assume that your app has any
@@ -706,7 +786,7 @@
 $ adb pm revoke &lt;package_name&gt; &lt;permission_name&gt;
 </pre>
 
-<h2 id="best-practices">Best Practices</h2>
+<h2 id="best-practices">Best Practices and Usage Notes</h2>
 
 <p>
   The new permissions model gives users a smoother experience, and makes it
@@ -794,3 +874,76 @@
   tutorial, so you still need to check for and request permissions during the
   app's normal operation.
 </p>
+
+<h3 id="normal">Normal Permissions</h3>
+
+<p>
+  Many permissions are designated as {@link
+  android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL},
+  which indicates that
+  there's no great risk to the user's privacy or security in letting apps have
+  those permissions. For example, users would reasonably want to know whether
+  an app can read their contact information, so users have to grant this
+  permission explicitly. By contrast, there's no great risk in allowing an app
+  to vibrate the device, so that permission is designated as <em>normal.</em>
+</p>
+
+<p>
+  If an app declares in its
+  manifest that it needs a normal permission, the system automatically grants
+  the app
+  that permission at install time. The system does not prompt the user
+  to grant normal
+  permissions, and users cannot revoke these permissions.
+</p>
+
+<p>
+  If your app declares that it needs normal permissions, the app does not need to
+  call <code>Activity.checkSelfPermission()</code> or
+  <code>Activity.requestPermissions()</code> for
+  those permissions. Since you declared the permissions in the manifest, you
+  can be sure your app was granted those permissions at install time.
+</p>
+
+<p>Currently, the following permissions are classified as {@link
+    android.content.pm.PermissionInfo#PROTECTION_NORMAL PROTECTION_NORMAL}:</p>
+
+<ul>
+  <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 d0aa55f..5cc2159 100644
--- a/docs/html/preview/preview_toc.cs
+++ b/docs/html/preview/preview_toc.cs
@@ -1,48 +1,126 @@
 <ul id="nav">
 
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html">
-      Program Overview</a></div>
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html"
+   es-lang="Información general del programa"
+   ja-lang="プログラム概要"
+   ko-lang="프로그램 개요"
+   pt-br-lang="Visão geral do programa"
+   ru-lang="Обзор программы"
+   zh-cn-lang="计划概览"
+   zh-tw-lang="程式總覽">
+   Program Overview</a></div>
   </li>
 
+
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/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>
 
   <li class="nav-section">
-    <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html">
-      API Overview</a></div>
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html"
+      es-lang="Información general de la API"
+      ja-lang="API の概要"
+      ko-lang="API 개요"
+      pt-br-lang="Visão geral da API"
+      ru-lang="Обзор API-интерфейсов"
+      zh-cn-lang="API 概览"
+      zh-tw-lang="API 總覽">API Overview
+      </a></div>
       <ul>
-        <li><a href="<?cs var:toroot ?>preview/features/runtime-permissions.html">
-          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/runtime-permissions.html"
+      es-lang="Permisos"
+      ja-lang="パーミッション"
+      ko-lang="권한"
+      pt-br-lang="Permissões"
+      ru-lang="Разрешения"
+      zh-cn-lang="权限"
+      zh-tw-lang="權限">Permissions
+          </a></li>
+        <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>
 
   <li class="nav-section">
-    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/behavior-changes.html">
-      Behavior Changes</a></div>
+    <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/behavior-changes.html"
+      es-lang="Cambios en los comportamientos"
+      ja-lang="動作の変更点"
+      ko-lang="동작 변경"
+      pt-br-lang="Mudanças de comportamento"
+      ru-lang="Изменения в работе"
+      zh-cn-lang="行为变更"
+      zh-tw-lang="行為變更">Behavior Changes
+       </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>
 
@@ -52,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 dd9736a..8a73481 100644
--- a/docs/html/preview/support.jd
+++ b/docs/html/preview/support.jd
@@ -1,68 +1,336 @@
 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, Revision 2</a> <em>(Month 2015)</em>
-  </p>
-
-  <div class="toggle-content-toggleme">
-
-    <dl>
-
-    <dt>Fix Category 1</dt>
-    <dd>
-      <ul>
-        <li>Fixed issue X.</li>
-        <li>Fixed issue Y.</li>
-        <li>Fixed issue Z.</li>
-      </ul>
-    </dd>
-
-    <dt>Fix Category 2</dt>
-    <dd>
-      <ul>
-        <li>Fixed issue X.</li>
-        <li>Fixed issue Y.</li>
-        <li>Fixed issue Z.</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 opened">
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
-      alt=""/>M Developer Preview, Revision 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>READ_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_COARSE</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 app data for system services</strong>, otherwise you will need to Factory
+      Reset your device</li>
+      <li>Remote control can experience intermittent connectivity issues. </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/docs/html/preview/testing/performance.jd b/docs/html/preview/testing/performance.jd
index abb41c4..6f0a5f1 100644
--- a/docs/html/preview/testing/performance.jd
+++ b/docs/html/preview/testing/performance.jd
@@ -112,10 +112,10 @@
 </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,
+0,27965466202353,27965466202353,27965449758000,27965461202353,27965467153286,27965471442505,27965471925682,27965474025318,27965474588547,27965474860786,27965475078599,27965479796151,27965480589068,
+0,27965482993342,27965482993342,27965465835000,27965477993342,27965483807401,27965486875630,27965487288443,27965489520682,27965490184380,27965490568703,27965491408078,27965496119641,27965496619641,
+0,27965499784331,27965499784331,27965481404000,27965494784331,27965500785318,27965503736099,27965504201151,27965506776568,27965507298443,27965507515005,27965508405474,27965513495318,27965514061984,
+0,27965516575320,27965516575320,27965497155000,27965511575320,27965517697349,27965521276151,27965521734797,27965524350474,27965524884536,27965525160578,27965526020891,27965531371203,27965532114484,
 </pre>
 
 <p>
@@ -283,6 +283,22 @@
     </ul>
   </li>
 
+  <li>SYNC_QUEUED
+    <ul>
+      <li>The time at which a sync request was sent to the RenderThread.
+      </li>
+
+      <li>This marks the point at which a message to start the sync
+      phase was sent to the RenderThread. If the time between this and
+      SYNC_START is substantial (&gt;0.1ms or so), it means that
+      the RenderThread was busy working on a different frame. Internally
+      this is used to differentiate between the frame doing too much work
+      and exceeding the 16ms budget and the frame being stalled due to
+      the previous frame exceeding the 16ms budget.
+      </li>
+    </ul>
+  </li>
+
   <li>SYNC_START
     <ul>
       <li>The time at which the sync phase of the drawing started.
diff --git a/docs/html/sdk/installing/migrate.jd b/docs/html/sdk/installing/migrate.jd
index d9829395..6dedad6 100644
--- a/docs/html/sdk/installing/migrate.jd
+++ b/docs/html/sdk/installing/migrate.jd
@@ -50,7 +50,7 @@
     <p>Android Studio uses a different project structure. Each Eclipse ADT
     project is called a module in Android Studio. Each instance of Android
     Studio contains a project with one or more app modules. For more information see,
-    <a href="{@docRoot}tools/studio/eclipse-migration-guide.html#project-structure">Project
+    <a href="{@docRoot}tools/studio/eclipse-transition-guide.html#project-structure">Project
     Structure</a>.</p></li>
 
   <li><strong>Manifest settings</strong>
@@ -59,14 +59,14 @@
     <code>build.gradle</code> file. These elements are still valid manifest entries and may
     appear in manifests from older projects, imported projects, dependencies, and libraries. For
     more information see,
-    <a href="{@docRoot}tools/studio/eclipse-migration-guide.html#manifest-settings">Manifest
+    <a href="{@docRoot}tools/studio/eclipse-transition-guide.html#manifest-settings">Manifest
     Settings</a>.</p></li>
 
   <li><strong>Dependencies</strong>
     <p>Library dependencies are handled differently in Android Studio, using Gradle dependency
     declarations and Maven dependencies for well-known local source and binary libraries with
     Maven coordinates.  For more information see,
-    <a href="{@docRoot}tools/studio/eclipse-migration-guide.html#dependencies">Dependencies</a></p>
+    <a href="{@docRoot}tools/studio/eclipse-transition-guide.html#dependencies">Dependencies</a></p>
     </li>
 
   <li><strong>Test code</strong>
@@ -261,7 +261,7 @@
 <a href="http://www.gradle.org">Gradle</a>-based build system to become familiar with the new
 project and module structure, flexible build settings, and other advanced Android development
 capabilities. For a comparison of Eclipse ADT and Android Studio features and usage, see
-<a href="{@docRoot}tools/studio/eclipse-migration-guide.html">Transitioning to Android Studio from
+<a href="{@docRoot}tools/studio/eclipse-transition-guide.html">Transitioning to Android Studio from
 Eclipse</a>. For specific Android Studio how-to documentation, see the pages in the
 <a href="{@docRoot}tools/workflow/index.html">Workflow</a> section.
 </p>
diff --git a/docs/html/sdk/installing/studio-tips.jd b/docs/html/sdk/installing/studio-tips.jd
index 4e732f0..7d37b1d 100644
--- a/docs/html/sdk/installing/studio-tips.jd
+++ b/docs/html/sdk/installing/studio-tips.jd
@@ -4,9 +4,16 @@
 <div id="qv-wrapper">
 <div id="qv">
 
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#productivity-features">Productivity Shortcuts</a></li>
+      <li><a href="#intellij">Working with IntelliJ</a></li>
+      <li><a href="#key-commands">Key Commands</a></li>
+    </ol>
+
   <h2>See also</h2>
   <ol>
-    <li><a href="{@docRoot}tools/sdk/index.html">Download Android Studio</a></li>
+    <li><a href="{@docRoot}sdk/index.html">Download Android Studio</a></li>
     <li><a href="http://wiki.jetbrains.net/intellij/Android">IntelliJ IDEA Android Tutorials</a></li>
     <li><a href="http://confluence.jetbrains.com/display/IntelliJIDEA/FAQ+on+Migrating+to+IntelliJ+IDEA">IntelliJ FAQ on migrating to IntelliJ IDEA</a></li>
   </ol>
@@ -19,170 +26,178 @@
 enhancements. </p>
 
 
-     <h2>Smart Rendering</h2>
-     <p>With smart rendering, Android Studio displays links for quick fixes to rendering errors.
-     For example, if you add a button to the layout without specifying the <em>width</em> and
-     <em>height</em> attributes, Android Studio displays the rendering message <em>Automatically
-     add all missing attributes</em>. Clicking the message adds the missing attributes to the layout.</p>
+<h2 id="productivity-features">Productivity Shortcuts</h2>
+
+<p>Android Studio includes a number of features to help you be more productive in your coding.
+This section notes a few of the key features to help you work quickly and efficiently.
+</p>
 
 
-     <h2> Bitmap rendering in the debugger</h2>
-     <p>While debugging, you can now right-click on bitmap variables in your app and invoke
-     <em>View Bitmap</em>. This fetches the associated data from the debugged process and renders
-     the bitmap in the debugger. </p>
-    <p><img src="{@docRoot}images/tools/studio-bitmap-rendering.png" style="width:350px"/></p>
-    <p class="img-caption"><strong>Figure 13.</strong> Bitmap Rendering/p>
+<h3>Smart Rendering</h3>
+<p>With smart rendering, Android Studio displays links for quick fixes to rendering errors.
+For example, if you add a button to the layout without specifying the <em>width</em> and
+<em>height</em> attributes, Android Studio displays the rendering message <em>Automatically
+add all missing attributes</em>. Clicking the message adds the missing attributes to the layout.</p>
 
 
-     <h2>Output window message filtering</h2>
-     <p>When checking build results, you can filter messages by <em>message type</em> to quickly
-     locate messages of interest.</p>
-     <img src="{@docRoot}images/tools/studio-outputwindowmsgfiltering.png" style="width:200px"style="width:200px" />
-     <p class="img-caption"><strong>Figure 14.</strong> Filter Build Messages</p>
+<h3> Bitmap rendering in the debugger</h3>
+<p>While debugging, you can now right-click on bitmap variables in your app and invoke
+<em>View Bitmap</em>. This fetches the associated data from the debugged process and renders
+the bitmap in the debugger. </p>
+<p><img src="{@docRoot}images/tools/studio-bitmap-rendering.png" style="width:350px"/></p>
+<p class="img-caption"><strong>Figure 1.</strong> Bitmap Rendering</p>
 
 
-    <h2>Hierarchical parent setting</h2>
-    <p>The activity parent can now be set in the Activity Wizard when creating a new
-    activity. Setting a <em>hierarchal parent</em> sets the {@code Up} button to automatically
-    appear in the app's Action bar when viewing a child activity, so the {@code Up}
-    button no longer needs to be manually specified in the <em>menu.xml</em> file.</p>
+<h3>Creating new files</h3>
+<p>You can quickly add new code and resource files by clicking the appropriate directory in the
+<strong>Project</strong> pane and pressing <code>ALT + INSERT</code> on Windows and Linux or
+<code>COMMAND + N</code> on Mac. Based on the type of directory selected, Android Studio
+offers to create the appropriate file type.</p>
+
+<p>For example, if you select a layout directory, press <code>ALT + INSERT</code> on Windows,
+and select <strong>Layout resource file</strong>, a dialog opens so you can name the file
+(you can exclude the {@code .xml} suffix) and choose a root view element. The editor then
+switches to the layout design editor so you can begin designing your layout.</p>
 
 
-    <h2>Creating layouts</h2>
-    <p>Android Studio offers an advanced layout editor that allows you to drag-and-drop widgets
-    into your layout and preview your layout while editing the XML.</p>
-
-    <p>While editing in the <strong>Text</strong> view, you can preview the layout on devices by
-    opening the <strong>Preview</strong> pane available on the right side of the window. Within the
-    Preview pane, you can modify the preview by changing various options at the top of the pane,
-    including the preview device, layout theme, platform version and more. To preview the layout on
-    multiple devices simultaneously, select <strong>Preview All Screen Sizes</strong> from the
-    device drop-down.</p>
-    <p><img src="{@docRoot}images/tools/studio-previewall.png" style="width:350px"/></p>
-    <p class="img-caption"><strong>Figure 15.</strong> Preview All Screens/p>
-
-    <p>You can switch to the graphical editor by clicking <strong>Design</strong> at the
-    bottom of the window. While editing in the Design view, you can show and hide the
-    widgets available to drag-and-drop by clicking <strong>Palette</strong> on the left side of the
-    window. Clicking <strong>Designer</strong> on the right side of the window reveals a panel
-    with a layout hierarchy and a list of properties for each view in the layout.</p>
+<h3>Output window message filtering</h3>
+<p>When checking build results, you can filter messages by <em>message type</em> to quickly
+locate messages of interest.</p>
+<img src="{@docRoot}images/tools/studio-outputwindowmsgfiltering.png" style="width:200px"style="width:200px" />
+<p class="img-caption"><strong>Figure 2.</strong> Filter Build Messages</p>
 
 
-   <h3>Annotations</h3>
-   <p>Android Studio provides coding assistance for using annotations from the
-   {@link android.support.annotation Support-Annotations} library, part of the
-   Support Repository. Adding a dependency for this library enables you to decorate your code with
-   annotations to help catch bugs, such as null pointer exceptions and resource type conflicts.
-   You can also create enumerated annotations to, for example, check that a passed parameter value
-   matches a value from a defined set of constants. For more information, see
-   <a href="{@docRoot}tools/debugging/annotations.html#annotations">Improving Code Inspection with
-   Annotations</a>. </p>
+<h3>Hierarchical parent setting</h3>
+<p>The activity parent can now be set in the Activity Wizard when creating a new
+activity. Setting a <em>hierarchal parent</em> sets the {@code Up} button to automatically
+appear in the app's Action bar when viewing a child activity, so the {@code Up}
+button no longer needs to be manually specified in the <em>menu.xml</em> file.</p>
 
 
-   <h3>Java class decompiling</h3>
-   <p>Android Studio allows you to look at what’s inside Java libraries when you don’t have access
-   to the source code. </p>
+<h3>Creating layouts</h3>
+<p>Android Studio offers an advanced layout editor that allows you to drag-and-drop widgets
+into your layout and preview your layout while editing the XML.</p>
 
-   <p>The decompiler is built into Android Studio for easy access. To use this feature, right-click
-   a class, method, or field from a library for which you do not have source file access and select
-   <strong>decompile</strong>.</p> The decompiled source code appears. </p>
+<p>While editing in the <strong>Text</strong> view, you can preview the layout on devices by
+opening the <strong>Preview</strong> pane available on the right side of the window. Within the
+Preview pane, you can modify the preview by changing various options at the top of the pane,
+including the preview device, layout theme, platform version and more. To preview the layout on
+multiple devices simultaneously, select <strong>Preview All Screen Sizes</strong> from the
+device drop-down.</p>
+<p><img src="{@docRoot}images/tools/studio-previewall.png" style="width:350px"/></p>
+<p class="img-caption"><strong>Figure 3.</strong> Preview All Screens</p>
 
-   <p>To adjust the Java decompiler settings, select
-   <strong>File > Settings > Other Settings > Java Decompiler</strong>. </p>
+<p>You can switch to the graphical editor by clicking <strong>Design</strong> at the
+bottom of the window. While editing in the Design view, you can show and hide the
+widgets available to drag-and-drop by clicking <strong>Palette</strong> on the left side of the
+window. Clicking <strong>Designer</strong> on the right side of the window reveals a panel
+with a layout hierarchy and a list of properties for each view in the layout.</p>
 
 
-   <h3>Debugging and performance enhancements</h3>
-   <p>Android Studio offers debugging and performance enhancements such as:</p>
-   <ul>
-    <li>Auto detect an expanded set of code styles. To modify the current code style, choose
-      <strong>File &gt; Settings &gt; Code Styles</strong>.  </li>
-    <li>Support for high density (Retina) displays on Windows and Linux.  </li>
-    <li>Scratch files for quick prototyping without creating any project files.
-      <p>Choose <strong>Tools &gt; New Scratch File</strong> to open a scratch file to quickly
-      build and run code prototypes. Together with Android Studio coding assistance, scratch
-      files allow you to quickly run and debug code updates with the support of all file operations.
-      By embedding code created with scripting languages, you can run your code from within the
-      scratch file.</p> 
-    </li>
-  </ul>
+<h3>Annotations</h3>
+<p>Android Studio provides coding assistance for using annotations from the
+{@link android.support.annotation Support-Annotations} library, part of the
+Support Repository.
+
+Adding a dependency for this library enables you to decorate your code with annotations to help
+catch bugs, such as null pointer exceptions and resource type conflicts. You can also create
+enumerated annotations to, for example, check that a passed parameter value matches a value from
+a defined set of constants. For more information, see
+<a href="{@docRoot}tools/debugging/annotations.html#annotations">Improving Code Inspection with
+Annotations</a>.
+</p>
+
+
+<h3>Java class decompiling</h3>
+<p>Android Studio allows you to look at what’s inside Java libraries when you don’t have access
+to the source code. </p>
+
+<p>The decompiler is built into Android Studio for easy access. To use this feature, right-click
+a class, method, or field from a library for which you do not have source file access and select
+<strong>decompile</strong>.</p> The decompiled source code appears. </p>
+
+<p>To adjust the Java decompiler settings, select
+<strong>File > Settings > Other Settings > Java Decompiler</strong>. </p>
+
+
+<h3>Debugging and performance enhancements</h3>
+<p>Android Studio offers debugging and performance enhancements such as:</p>
+<ul>
+  <li>Custom keymaps. To modify the current keymap, choose
+   <strong>File &gt; Settings &gt; Keymap</strong>.  </li>
+  <li>Support for high density (Retina) displays on Windows and Linux.  </li>
+  <li>Scratch files for quick prototyping without creating any project files.
+   <p>Choose <strong>Tools &gt; New Scratch File</strong> to open a scratch file to quickly
+   build and run code prototypes. Together with Android Studio coding assistance, scratch
+   files allow you to quickly run and debug code updates with the support of all file operations.
+   By embedding code created with scripting languages, you can run your code from within the
+   scratch file.</p> 
+  </li>
+</ul>
 
 
 
-<h2 id="intellij">Working with IntelliJ-based Coding Practices</h2>
+<h2 id="intellij">Working with IntelliJ-based Coding Practices</h3>
 
-     <p>This section list just a few of the code editing
-     practices you should consider using when creating Android Studio apps. </p>
+<p>This section list just a few of the code editing
+practices you should consider using when creating Android Studio apps. </p>
 
-     <p>For complete user documentation for the IntelliJ IDEA interface (upon which Android Studio
-     is based), refer to the
-     <a href="http://www.jetbrains.com/idea/documentation/index.jsp">IntelliJ IDEA documentation</a>.</p>
-
-     <h3><em>Alt + Enter</em> key binding</h3>
-     <p>For quick fixes to coding errors, the IntelliJ powered IDE implements the <em>Alt + Enter</em>
-     key binding to fix errors (missing imports, variable assignments, missing references, etc) when
-     possible, and if not, suggest the most probable solution. </p>
+<p>For complete user documentation for the IntelliJ IDEA interface (upon which Android Studio
+is based), refer to the
+<a href="http://www.jetbrains.com/idea/documentation/index.jsp">IntelliJ IDEA documentation</a>.</p>
 
 
-    <h3><em>Ctrl + D</em> key binding</h3>
-    <p>The <em>Ctrl + D</em> key binding is great for quickly duplicating code lines or fragments.
-    Simply select the desired line or fragment and enter this key binding. </p>
-
-    <h3>Navigate menu</h3>
-    <p>In case you're not familiar with an API class, file or symbol, the <em>Navigate</em> menu lets
-    you jump directly to the class of a method or field name without having to search through
-    individual classes. </p>
+<h3><em>Alt + Enter</em> key binding</h3>
+<p>For quick fixes to coding errors, the IntelliJ powered IDE implements the <em>Alt + Enter</em>
+key binding to fix errors (missing imports, variable assignments, missing references, etc) when
+possible, and if not, suggest the most probable solution. </p>
 
 
-    <h3>Inspection scopes</h3>
-    <p>Scopes set the color of code segments for easy code identification and location. For example,
-    you can set a scope to identify all code related to a specific action bar.   </p>
+<h3><em>Ctrl + D</em> key binding</h3>
+<p>The <em>Ctrl + D</em> key binding is great for quickly duplicating code lines or fragments.
+Simply select the desired line or fragment and enter this key binding. </p>
 
 
-
-    <h3>External annotations</h3>
-    <p>Specify annotations within the code or from an external annotation file. The Android Studio
-    IDE keeps track of the restrictions and validates compliance, for example setting the data type
-    of a string as not null.</p>
+<h3>Navigate menu</h3>
+<p>In case you're not familiar with an API class, file or symbol, the <em>Navigate</em> menu lets
+you jump directly to the class of a method or field name without having to search through
+individual classes. </p>
 
 
-    <h3>Injecting languages</h3>
-    <p>With language injection, the Android Studio IDE allows you to work with islands of different
-    languages embedded in the source code. This extends the syntax, error highlighting and coding
-    assistance to the embedded language. This can be especially useful for checking regular expression
-    values inline, and validating XML and SQL statements.</p>
-
-    <h3>Code folding</h3>
-    <p>This allows you to selectively hide and display sections of the code for readability. For
-    example, resource expressions or code for a nested class can be folded or hidden in to one line
-    to make the outer class structure easier to read. The inner class can be later expanded for
-    updates. </p>
+<h3>Inspection scopes</h3>
+<p>Scopes set the color of code segments for easy code identification and location. For example,
+you can set a scope to identify all code related to a specific action bar.   </p>
 
 
-    <h3>Image and color preview</h3>
-    <p>When referencing images and icons in your code, a preview of the image or icon appears
-    (in actual size at different densities) in the code margin to help you verify the image or icon
-    reference.  Pressing {@code F1} with the preview image or icon selected displays resource asset
-    details, such as the <em>dp</em> settings.   </p>
+<h3>Injecting languages</h3>
+<p>With language injection, the Android Studio IDE allows you to work with islands of different
+languages embedded in the source code. This extends the syntax, error highlighting and coding
+assistance to the embedded language. This can be especially useful for checking regular expression
+values inline, and validating XML and SQL statements.</p>
 
 
-    <h3>Quick F1 documentation</h3>
-    <p>You can now inspect theme attributes using <strong>View > Quick Documentation</strong>
-    (<strong>F1</strong>),
-    see the theme inheritance hierarchy, and resolve values for the various attributes.</p>
-
-    <p>If you invoke <strong> View > Quick Documentation</strong> (usually bound to F1) on the theme
-    attribute <em>?android:textAppearanceLarge</em>, you will see the theme inheritance hierarchy and
-    resolved values for the various attributes that are pulled in.</p>
+<h3>Code folding</h3>
+<p>This allows you to selectively hide and display sections of the code for readability. For
+example, resource expressions or code for a nested class can be folded or hidden in to one line
+to make the outer class structure easier to read. The inner class can be later expanded for
+updates. </p>
 
 
+<h3>Image and color preview</h3>
+<p>When referencing images and icons in your code, a preview of the image or icon appears
+(in actual size at different densities) in the code margin to help you verify the image or icon
+reference. Pressing {@code F1} with the preview image or icon selected displays resource asset
+details, such as the <em>dp</em> settings.   </p>
 
-     <h3>New Allocation Tracker integration in the Android/DDMS window</h3>
-     <p>You can now inspect theme attributes using <strong> View > Quick Documentation
-     </strong> <code>F1</code>, see the theme inheritance hierarchy, and resolved values for the
-     various attributes.</p>
-      <img src="{@docRoot}images/tools/studio-allocationtracker.png" style="width:300px" />
-      <p class="img-caption"><strong>Figure 16</strong> Allocation Tracker</p>
 
+<h3>Quick F1 documentation</h3>
+<p>You can now inspect theme attributes using <strong>View > Quick Documentation</strong>
+(<strong>F1</strong>),
+see the theme inheritance hierarchy, and resolve values for the various attributes.</p>
+
+<p>If you invoke <strong> View > Quick Documentation</strong> (usually bound to F1) on the theme
+attribute <em>?android:textAppearanceLarge</em>, you will see the theme inheritance hierarchy and
+resolved values for the various attributes that are pulled in.</p>
 
 
 
@@ -288,13 +303,5 @@
 </table>
 
 <p>For a complete keymap reference guide, see the
-<a href="http://www.jetbrains.com/idea/documentation/index.jsp">IntelliJ IDEA</a> documentation.</p>
-
-
-</div>
-
-
-</div>
-
-
-
+<a href="http://www.jetbrains.com/idea/documentation/index.jsp">IntelliJ IDEA</a>
+documentation.</p>
diff --git a/docs/html/tools/building/configuring-gradle.jd b/docs/html/tools/building/configuring-gradle.jd
index 7cca5b4..73a048b 100644
--- a/docs/html/tools/building/configuring-gradle.jd
+++ b/docs/html/tools/building/configuring-gradle.jd
@@ -198,6 +198,75 @@
 <code>proguard-rules.pro</code> at the root of the module, where you can add custom ProGuard
 rules.</p>
 
+
+
+<h3>Application ID for package identification </h3>
+<p>With the Android build system, the <em>applicationId</em> attribute is used to
+uniquely identify application packages for publishing. The application ID is set in the
+<em>android</em> section of the <code>build.gradle</code> file.
+</p>
+
+    <pre>
+    apply plugin: 'com.android.application'
+
+    android {
+        compileSdkVersion 19
+        buildToolsVersion "19.1"
+
+    defaultConfig {
+        <strong>applicationId "com.example.my.app"</strong>
+        minSdkVersion 15
+        targetSdkVersion 19
+        versionCode 1
+        versionName "1.0"
+    }
+    ...
+    </pre>
+
+<p class="note"><strong>Note:</strong> The <em>applicationId</em> is specified only in your
+{@code build.gradle} file, and not in the AndroidManifest.xml file.</p>
+
+<p>When using build variants, the build system enables you to uniquely identify different
+packages for each product flavors and build types. The application ID in the build type is added as
+a suffix to those specified for the product flavors. </p>
+
+   <pre>
+   productFlavors {
+        pro {
+            applicationId = "com.example.my.pkg.pro"
+        }
+        free {
+            applicationId = "com.example.my.pkg.free"
+        }
+    }
+
+    buildTypes {
+        debug {
+            applicationIdSuffix ".debug"
+        }
+    }
+    ....
+   </pre>
+
+<p>The package name must still be specified in the manifest file. It is used in your source code
+to refer to your R class and to resolve any relative activity/service registrations. </p>
+
+   <pre>
+   <?xml version="1.0" encoding="utf-8"?>
+   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+   <strong>package="com.example.app"</strong>>
+   </pre>
+
+<p class="note"><strong>Note:</strong> If you have multiple manifests (for example, a product
+flavor specific manifest and a build type manifest), the package name is optional in those manifests.
+If it is specified in those manifests, the package name must be identical to the package name
+specified in the manifest in the <code>src/main/</code> folder. </p>
+
+<p>For more information about the build files and process, see
+<a href="{@docRoot}sdk/installing/studio-build.html">Build System Overview</a>.</p>
+
+
+
 <h3 id="configureSigning">Configure signing settings</h3>
 
 <p>The debug and the release versions of the app differ on whether the application can be
diff --git a/docs/html/tools/studio/index.jd b/docs/html/tools/studio/index.jd
index fa6d987..5041b83 100644
--- a/docs/html/tools/studio/index.jd
+++ b/docs/html/tools/studio/index.jd
@@ -12,9 +12,6 @@
       <li><a href="#project-structure">Project and File Structure</a></li>
       <li><a href="#build-system">Android Build System</a></li>
       <li><a href="#debug-perf">Debug and Performance</a></li>
-      <li><a href="#install-updates">Installation, Setup, and Update Management</a></li>
-      <li><a href="#proxy">HTTP Proxy Settings</a></li>
-      <li><a href="#other">Other Highlights</a></li>
 
 
     </ol>
@@ -46,7 +43,6 @@
   <li>And much more</li>
 </ul>
 
-<p><b><a href="{@docRoot}sdk/index.html">Download Android Studio now</a></b>. </p>
 
 <p>If you're new to Android Studio or the IntelliJ IDEA interface, this
 page provides an introduction to some key Android
@@ -104,6 +100,7 @@
 from the <strong>Project</strong> drop-down. </p>
 
 
+
 <h3 id="other-views">Other Android Studio views</h3>
 <p>When you use the <em>Project</em> view in Android Studio, you
 should notice that the project structure appears different than you may be used to in Eclipse. Each
@@ -140,22 +137,7 @@
 
 
 
-<h3>Creating new files</h3>
-<p>You can quickly add new code and resource files by clicking the appropriate directory in the
-<strong>Project</strong> pane and pressing <code>ALT + INSERT</code> on Windows and Linux or
-<code>COMMAND + N</code> on Mac. Based on the type of directory selected, Android Studio
-offers to create the appropriate file type.</p>
-
-<p>For example, if you select a layout directory, press <code>ALT + INSERT</code> on Windows,
-and select <strong>Layout resource file</strong>, a dialog opens so you can name the file
-(you can exclude the {@code .xml} suffix) and choose a root view element. The editor then
-switches to the layout design editor so you can begin designing your layout.</p>
-
-
-
 <h2 id="build-system">Android Build System</h2>
-
-<h3>Android Build System</h3>
 <p>The Android build system is the toolkit you use to build, test, run and package
 your apps. This build system replaces the Ant system used with Eclipse ADT. It can run as an
 integrated tool from the Android Studio menu and independently from the command line. You can use
@@ -175,76 +157,11 @@
 <a href="{@docRoot}tools/building/configuring-gradle.html">Configuring Gradle Builds</a>.</p>
 
 
-<h3 id="app-id">Application ID for package identification </h3>
-<p>With the Android build system, the <em>applicationId</em> attribute is used to
-uniquely identify application packages for publishing. The application ID is set in the
-<em>android</em> section of the <code>build.gradle</code> file.
-</p>
-
-    <pre>
-    apply plugin: 'com.android.application'
-
-    android {
-        compileSdkVersion 19
-        buildToolsVersion "19.1"
-
-    defaultConfig {
-        <strong>applicationId "com.example.my.app"</strong>
-        minSdkVersion 15
-        targetSdkVersion 19
-        versionCode 1
-        versionName "1.0"
-    }
-    ...
-    </pre>
-
-<p class="note"><strong>Note:</strong> The <em>applicationId</em> is specified only in your
-{@code build.gradle} file, and not in the AndroidManifest.xml file.</p>
-
-<p>When using build variants, the build system enables you to uniquely identify different
-packages for each product flavors and build types. The application ID in the build type is added as
-a suffix to those specified for the product flavors. </p>
-
-   <pre>
-   productFlavors {
-        pro {
-            applicationId = "com.example.my.pkg.pro"
-        }
-        free {
-            applicationId = "com.example.my.pkg.free"
-        }
-    }
-
-    buildTypes {
-        debug {
-            applicationIdSuffix ".debug"
-        }
-    }
-    ....
-   </pre>
-
-<p>The package name must still be specified in the manifest file. It is used in your source code
-to refer to your R class and to resolve any relative activity/service registrations. </p>
-
-   <pre>
-   <?xml version="1.0" encoding="utf-8"?>
-   <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-   <strong>package="com.example.app"</strong>
-   </pre>
-
-<p class="note"><strong>Note:</strong> If you have multiple manifests (for example, a product
-flavor specific manifest and a build type manifest), the package name is optional in those manifests.
-If it is specified in those manifests, the package name must be identical to the package name
-specified in the manifest in the <code>src/main/</code> folder. </p>
-
-<p>For more information about the build files and process, see
-<a href="{@docRoot}sdk/installing/studio-build.html">Build System Overview</a>.</p>
-
-
-
 
 <h2 id="debug-perf">Debug and Performance</h2>
-
+<p>Android Studio provides a number of improvements to assist you in debugging and improving the
+performance of your code, including an improved virtual device management, inline debugging, and
+performance analysis tools.</p>
 
 <h3>Android Virtual Device (AVD) Manager</h3>
 <p>AVD Manager has updated screens with links to help you select the most popular device
@@ -349,7 +266,8 @@
 
 
 <p>You can also manage inspection profiles and configure inspections within Android Studio.
-Choose <strong>File &gt; Settings &gt; Project Settings</strong> and expand <strong>Editor</strong>.
+Choose <strong>File &gt; Settings &gt;</strong>, expand the <strong>Editor</strong> options,
+and select <strong>Inspections</strong>.
 The <em>Inspection Configuration</em> page appears with the supported inspections.</p>
 <p><img src="{@docRoot}images/tools/studio-inspections-config.png" alt="" /> </p>
 <p class="img-caption"><strong>Figure 5.</strong> Configure inspections.</p>
@@ -505,7 +423,7 @@
 
 <h3>Log messages</h3>
 <p>When you build and run your app with Android Studio, you can view adb and device log messages
-(logcat) in the DDMS pane by clicking <strong>Android</strong> at the bottom of the window.</p>
+(logcat) by clicking <strong>Android</strong> at the bottom of the window.</p>
 
 <p>If you want to debug your app with the
 <a href="{@docRoot}tools/help/monitor.html">Android Debug Monitor</a>, you can launch it by
@@ -519,231 +437,4 @@
 
 
 
-<h2 id="install-updates">Installation, Setup, and Update Management</h2>
-
-<h3>Android Studio installation and setup wizards</h3>
-<p>When you begin the installation process, an installation and setup wizard walks you through
-a step-by-step installation and setup process as the wizard checks for system requirements,
-such as the Java Development Kit (JDK) and available RAM, and then prompts for optional
-installation options, such as the Intel&#174; HAXM emulator accelerator.</p>
-
-<p>During the installation process, a setup wizard walks you through the setup processes as
-the wizard updates your system image and emulation requirements, such GPU, and then creates
-an optimized default Android Virtual Device (AVD) based on Android 5 (Lollipop) for speedy and
-reliable emulation. </p>
-<p><img src="{@docRoot}images/tools/studio-setup-wizard.png" /></p>
-<p class="img-caption"><strong>Figure 9.</strong> Installation and setup wizard.</p>
-
-
-<h3>Expanded template and form factor support</h3>
-<p>Android Studio supports templates for Google Services and expands the available device
-types. </p>
-
-    <h4> Android Wear and TV support</h4>
-    <p>For easy cross-platform development, the Project Wizard provides templates for
-    creating your apps for Android Wear and TV. </p>
-    <p><img src="{@docRoot}images/tools/studio-tvwearsupport.png"  />
-
-      <p class="img-caption"><strong>Figure 10.</strong> Supported form factors.</p>
-    <p>During app creation, the Project Wizard also displays an API Level dialog to help you choose
-    the best <em>minSdkVersion</em> for your project.</p>
-
-
-    <h4> Google App Engine integration (Google Cloud Platform/Messaging)</h4>
-    <p>Quick cloud integration. Using Google App Engine to connect to the Google cloud
-    and create a cloud end-point is as easy as selecting <em>File > New Module > App Engine Java
-    Servlet Module</em> and specifying the module, package, and client names. </p>
-    <p><img src="{@docRoot}images/tools/studio-cloudmodule.png" /></p>
-    <p class="img-caption"><strong>Figure 11.</strong> Google App Engine integration.</p>
-
-
-<h3>Easy access to project and file settings</h3>
-<p>Android Studio provides setting dialogs so you can manage the most important project and file
-settings from the <strong>File</strong> menus as well as the build and configuration files. For
-example, you can use the <strong>File &gt; Project Structure</strong> menu or
-the <code>build.gradle</code> file to update your <code>productFlavor</code> settings.
-Additional settings from the <strong>File</strong> menus include:
-<ul>
- <li>SDK and JDK location </li>
- <li>SDK version </li>
- <li>Gradle and Android Plugin for Gradle versions </li>
- <li>Build tools version </li>
- <li>Multidex setting</li>
- <li>Product flavors </li>
- <li>Build types </li>
- <li>Dependencies </li>
-</ul>
-</p>
-
-
-
-<h3>Update channels</h3>
-<p>Android Studio provides four update channels to keep Android Studio up-to-date based on your
-code-level preference:
-<ul>
-  <li><strong>Canary channel</strong>: Canary builds provide bleeding edge releases, updated
-  about weekly. While these builds do get tested, they are still subject to bugs, as we want
-  people to see what's new as soon as possible. This is not recommended for production.</li>
-  <li><strong>Dev channel</strong>: Dev builds are hand-picked older canary builds that survived
-  the test of time. They are updated roughly bi-weekly or monthly.</li>
-  <li><strong>Beta channel</strong>: Beta builds are used for beta-quality releases before a
-  production release.</li>
-  <li><strong>Stable channel</strong>: Used for stable, production-ready versions.</li>
-</ul>
-</p>
-
-<p>By default, Android Studio uses the <em>Stable</em> channel. Use
-<strong>File > Settings > Updates</strong> to change your channel setting. </p>
-
-
-
-<h2 id="proxy">Proxy Settings</h2>
-<p>Proxies serve as intermediary connection points between HTTP clients and web servers that add
-security and privacy to internet connections.</p>
-
-<p>To support running Android Studio behind a firewall, set the proxy settings for the
-Android Studio IDE and the SDK Manager. Use the Android Studio IDE HTTP Proxy settings page to set
-the HTTP proxy settings for Android Studio. The SDK Manager has a separate HTTP Proxy settings
-page.</p>
-
-<p>When running the Android Plugin for Gradle from the command line or on machines where
-Android Studio is not installed, such as continuous integration servers, set the proxy settings
-in the Gradle build file.</p>
-
-<p class="note"><strong>Note:</strong> After the initial installation of the Android Studio bundle,
-Android Studio can run with internet access or off-line. However, Android Studio requires an
-internet connection for Setup Wizard synchronization, 3rd-party library access, access to remote
-repositories, Gradle initialization and synchronization, and Android Studio version updates.</p>
-
-
-<h3>Setting up the Android Studio Proxy</h3>
-<p>Android Studio supports HTTP proxy settings so you can run Android Studio behind a firewall or
-secure network. To set the HTTP proxy settings in Android Studio:</p>
-<ol>
- <li>From the main menu choose <strong>File &gt; Settings &gt; Appearance & Behavior -- System
- Settings -- HTTP Proxy</strong>.
-
-<li>In Android Studio, open the IDE Settings dialog.
-  <ul>
-     <li>On Windows and Linux, choose
-     <strong>File &gt; Settings &gt; IDE Setting -- HTTP Proxy</strong>. </li>
-     <li>On Mac, choose
-     <strong>Android Studio &gt; Preferences &gt; IDE Setting -- HTTP Proxy</strong>. </li>
-   </ul>
- The HTTP Proxy page appears.</li>
- <li>Select <strong>auto-detection</strong> to use an auto-configuration URL to configure the
- proxy settings or <strong>manual</strong> to enter each of the settings. For a detailed explanation
- of these settings, see
- <a href="https://www.jetbrains.com/idea/help/http-proxy.html">HTTP Proxy</a>. </li>
- <li>Click <strong>Apply</strong> to enable the proxy settings. </li>
-</ol>
-
-<h3>Android Plugin for Gradle HTTP proxy settings</h3>
-When running the Android Plugin from the command line or on machines where Android Studio is not
-installed, set the Android Plugin for Gradle proxy settings in the Gradle build file.</p>
-
-<p>For application-specific HTTP proxy settings, set the proxy settings in the
-{@code build.gradle} file as required for each application module.</p>
-<pre>
-apply plugin: 'com.android.application'
-
-android {
-    ...
-
-    defaultConfig {
-        ...
-        systemProp.http.proxyHost=proxy.company.com
-        systemProp.http.proxyPort=443
-        systemProp.http.proxyUser=userid
-        systemProp.http.proxyPassword=password
-        systemProp.http.auth.ntlm.domain=domain
-    }
-    ...
-}
-</pre>
-
-
-
-<p>For project-wide HTTP proxy settings, set the proxy settings in the
-<code>gradle/gradle.properties</code> file. </p>
-
-<pre>
-# Project-wide Gradle settings.
-...
-
-systemProp.http.proxyHost=proxy.company.com
-systemProp.http.proxyPort=443
-systemProp.http.proxyUser=username
-systemProp.http.proxyPassword=password
-systemProp.http.auth.ntlm.domain=domain
-
-systemProp.https.proxyHost=proxy.company.com
-systemProp.https.proxyPort=443
-systemProp.https.proxyUser=username
-systemProp.https.proxyPassword=password
-systemProp.https.auth.ntlm.domain=domain
-
-...
-</pre>
-
-
-<p>For information about using Gradle properties for proxy settings, see the
- <a href="http://www.gradle.org/docs/current/userguide/build_environment.html">Gradle User Guide</a>.</p>
-
-<p class="note"><strong>Note:</strong> When using Android Studio, the settings in the Android
-Studio IDE HTTP proxy settings page override the HTTP proxy settings in the
-<strong>gradle.properties</strong> file.</p>
-
-
-
-<h3>SDK Manager HTTP Proxy Settings </h3>
-<p>SDK Manager proxy settings enable proxy internet access for Android package and library
-updates from SDK Manager packages. </p>
-
-<p>To set the SDK Manager settings for proxy internet access, start the SDK Manager and open the
-SDK Manager page. </p>
-
-<ul>
-   <li>On Windows, select <strong>Tools &gt; Options</strong> from the menu bar. </li>
-   <li>On Mac and Linux, choose <strong>Tools &gt; Options</strong> from the system menu bar. </li>
- </ul>
-
-<p>The Android SDK Manager page appears. Enter the settings and click <strong>Apply</strong>. </p>
-
-
-
-<h2 id="other">Other Highlights</h2>
-
-<h3 id="trans-editor"> Translations Editor</h3>
-<p>Multi-language support is enhanced with the Translations Editor plugin so you can easily add
-a variety of locales to the app's translation file. With
-<a href="https://tools.ietf.org/html/bcp47">BCP 47</a> support, the editor combines language and
-region codes into a single selection for targeted localizations. Color codes indicate whether a
-locale is complete or still missing string translations. </p>
-
-<p>To access the Translations Editor, open a <code>strings.xml</code> file and click the
-<strong>Open Editor</strong> link.  </p>
-
-    <img src="{@docRoot}images/tools/studio-translationeditoropen.png" />
-    <p class="img-caption"><strong>Figure 12.</strong> Add locales and strings in the
-    Translations Editor.</p>
-
-
-<h3> Editor support for the latest Android APIs</h3>
-<p>Android Studio supports the
-<a href="{@docRoot}design/material/index.html">Material Design</a></li> themes, widgets, and
-graphics, such as shadow layers and API version rendering (showing the layout across different
-UI versions). Also, the drawable XML tags and attributes, such as <code>&lt;ripple&gt;</code>
-and <code>&lt;animated-selector&gt;</code>, are supported.</p>
-
-
-<h3 id="git-samples"> Easy access to Android code samples on GitHub</h3>
-<p>Clicking <strong>Import Samples</strong> from the <strong>File</strong> menu or <em>Welcome</em>
-page provides seamless access to Google code samples on GitHub.</p>
-    <p><img src="{@docRoot}images/tools/studio-samples-githubaccess.png" /></p>
-    <p class="img-caption"><strong>Figure 13.</strong> Get code samples from GitHub.</p>
-
-    <p><img src="{@docRoot}images/tools/studio-sample-in-editor.png" /></p>
-    <p class="img-caption"><strong>Figure 14.</strong> Imported code sample.</p>
-
 
diff --git a/docs/html/tools/studio/studio-config.jd b/docs/html/tools/studio/studio-config.jd
new file mode 100644
index 0000000..f9646b8
--- /dev/null
+++ b/docs/html/tools/studio/studio-config.jd
@@ -0,0 +1,174 @@
+page.title=Configuration
+page.metaDescription=Learn about the Android Studio configuration.
+page.tags=studio, configuration
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#update-channel">Update Channels</a></li>
+      <li><a href="#proxy">Proxy Settings</a></li>
+    </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}sdk/installing/index.html?pkg=studio">Installing Android Studio</a></li>
+    <li><a href="{@docRoot}tools/workflow/index.html">Workflow</a></li>
+    <li><a href="{@docRoot}sdk/installing/studio-features.html">Build System</a></li>
+  </ol>
+
+</div>
+</div>
+
+
+<p>During installation, Android Studio provides wizards and templates that verify your system
+requirements, such as the Java Development Kit (JDK) and available RAM, and configure default
+settings, such as an optimized default Android Virtual Device (AVD) emulation and updated system
+images. This document describes additional configuration settings you may want to use to
+customize your use of Android Studio. </p>
+
+<p>For specific documentation about emulator and device setup and use, see
+<a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>,
+<a href="{@docRoot}tools/device.html">Using Hardware Devices</a>, and
+<a href="{@docRoot}tools/extras/oem-usb.html">OEM USB Drivers</a>. </p>
+
+
+
+<h2 id="update-channel">Update channels</h2>
+<p>Android Studio provides four update channels to keep Android Studio up-to-date based on your
+code-level preference:
+<ul>
+  <li><strong>Canary channel</strong>: Canary builds provide bleeding edge releases, updated
+  about weekly. While these builds do get tested, they are still subject to bugs, as we want
+  people to see what's new as soon as possible. This is not recommended for production.</li>
+  <li><strong>Dev channel</strong>: Dev builds are hand-picked older canary builds that survived
+  the test of time. They are updated roughly bi-weekly or monthly.</li>
+  <li><strong>Beta channel</strong>: Beta builds are used for beta-quality releases before a
+  production release.</li>
+  <li><strong>Stable channel</strong>: Used for stable, production-ready versions.</li>
+</ul>
+</p>
+
+<p>By default, Android Studio uses the <em>Stable</em> channel. Use
+<strong>File > Settings > Appearance & Behavior System Settings > Updates</strong> to change your
+channel setting. </p>
+
+
+
+<h2 id="proxy">Proxy Settings</h2>
+<p>Proxies serve as intermediary connection points between HTTP clients and web servers that add
+security and privacy to internet connections.</p>
+
+<p>To support running Android Studio behind a firewall, set the proxy settings for the
+Android Studio IDE and the SDK Manager. Use the Android Studio IDE HTTP Proxy settings page to set
+the HTTP proxy settings for Android Studio. The SDK Manager has a separate HTTP Proxy settings
+page.</p>
+
+<p>When running the Android Plugin for Gradle from the command line or on machines where
+Android Studio is not installed, such as continuous integration servers, set the proxy settings
+in the Gradle build file.</p>
+
+<p class="note"><strong>Note:</strong> After the initial installation of the Android Studio bundle,
+Android Studio can run with internet access or off-line. However, Android Studio requires an
+internet connection for Setup Wizard synchronization, 3rd-party library access, access to remote
+repositories, Gradle initialization and synchronization, and Android Studio version updates.</p>
+
+
+<h3>Setting up the Android Studio Proxy</h3>
+<p>Android Studio supports HTTP proxy settings so you can run Android Studio behind a firewall or
+secure network. To set the HTTP proxy settings in Android Studio:</p>
+<ol>
+ <li>From the main menu choose <strong>File &gt; Settings &gt; Appearance & Behavior -- System
+ Settings -- HTTP Proxy</strong>.
+
+<li>In Android Studio, open the IDE Settings dialog.
+  <ul>
+     <li>On Windows and Linux, choose
+     <strong>File &gt; Settings &gt; IDE Setting -- HTTP Proxy</strong>. </li>
+     <li>On Mac, choose
+     <strong>Android Studio &gt; Preferences &gt; IDE Setting -- HTTP Proxy</strong>. </li>
+   </ul>
+ The HTTP Proxy page appears.</li>
+ <li>Select <strong>auto-detection</strong> to use an auto-configuration URL to configure the
+ proxy settings or <strong>manual</strong> to enter each of the settings. For a detailed explanation
+ of these settings, see
+ <a href="https://www.jetbrains.com/idea/help/http-proxy.html">HTTP Proxy</a>. </li>
+ <li>Click <strong>Apply</strong> to enable the proxy settings. </li>
+</ol>
+
+<h3>Android Plugin for Gradle HTTP proxy settings</h3>
+When running the Android Plugin from the command line or on machines where Android Studio is not
+installed, set the Android Plugin for Gradle proxy settings in the Gradle build file.</p>
+
+<p>For application-specific HTTP proxy settings, set the proxy settings in the
+{@code build.gradle} file as required for each application module.</p>
+<pre>
+apply plugin: 'com.android.application'
+
+android {
+    ...
+
+    defaultConfig {
+        ...
+        systemProp.http.proxyHost=proxy.company.com
+        systemProp.http.proxyPort=443
+        systemProp.http.proxyUser=userid
+        systemProp.http.proxyPassword=password
+        systemProp.http.auth.ntlm.domain=domain
+    }
+    ...
+}
+</pre>
+
+
+
+<p>For project-wide HTTP proxy settings, set the proxy settings in the
+<code>gradle/gradle.properties</code> file. </p>
+
+<pre>
+# Project-wide Gradle settings.
+...
+
+systemProp.http.proxyHost=proxy.company.com
+systemProp.http.proxyPort=443
+systemProp.http.proxyUser=username
+systemProp.http.proxyPassword=password
+systemProp.http.auth.ntlm.domain=domain
+
+systemProp.https.proxyHost=proxy.company.com
+systemProp.https.proxyPort=443
+systemProp.https.proxyUser=username
+systemProp.https.proxyPassword=password
+systemProp.https.auth.ntlm.domain=domain
+
+...
+</pre>
+
+
+<p>For information about using Gradle properties for proxy settings, see the
+ <a href="http://www.gradle.org/docs/current/userguide/build_environment.html">Gradle User Guide</a>.</p>
+
+<p class="note"><strong>Note:</strong> When using Android Studio, the settings in the Android
+Studio IDE HTTP proxy settings page override the HTTP proxy settings in the
+<strong>gradle.properties</strong> file.</p>
+
+
+
+<h3>SDK Manager HTTP Proxy Settings </h3>
+<p>SDK Manager proxy settings enable proxy internet access for Android package and library
+updates from SDK Manager packages. </p>
+
+<p>To set the SDK Manager settings for proxy internet access, start the SDK Manager and open the
+SDK Manager page. </p>
+
+<ul>
+   <li>On Windows, select <strong>Tools &gt; Options</strong> from the menu bar. </li>
+   <li>On Mac and Linux, choose <strong>Tools &gt; Options</strong> from the system menu bar. </li>
+ </ul>
+
+<p>The Android SDK Manager page appears. Enter the settings and click <strong>Apply</strong>. </p>
+
+
+
diff --git a/docs/html/tools/studio/studio-features.jd b/docs/html/tools/studio/studio-features.jd
new file mode 100644
index 0000000..76eba10
--- /dev/null
+++ b/docs/html/tools/studio/studio-features.jd
@@ -0,0 +1,123 @@
+page.title=Features
+page.metaDescription=Learn about the Android Studio features.
+page.tags=studio, features
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#trans-editor">Translations Editor</a></li>
+      <li><a href="#git-samples">Android Code Samples on GitHub</a></li>
+      <li><a href="#template-support">Expanded Template and Form Factor Support</a></li>
+      <li><a href="#project-settings">Android Studio and Project Settings</a></li>
+      <li><a href="#support-apis">Editor Support for the Latest Android APIs</a></li>
+    </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/workflow/index.html">Workflow</a></li>
+    <li><a href="{@docRoot}sdk/installing/studio-build.html">Build System</a></li>
+    <li><a href="{@docRoot}sdk/installing/studio-tips.html">Android Studio Tip & Tricks</a></li>
+  </ol>
+
+</div>
+</div>
+
+
+<p>If you're new to Android Studio or exploring recent updates, this
+page provides an introduction to some key Android Studio features.</p>
+
+<p>For specific Android Studio how-to documentation, see the pages in the <a href=
+"{@docRoot}tools/workflow/index.html">Workflow</a> section, such as
+<a href="{@docRoot}sdk/installing/create-project.html">Managing Projects from Android Studio</a>
+and
+<a href="{@docRoot}tools/building/building-studio.html">Building and Running from Android Studio</a>. </p>
+
+
+
+<h2 id="trans-editor">Translations Editor</h2>
+<p>Multi-language support is enhanced with the Translations Editor plugin so you can easily add
+a variety of locales to the app's translation file. With
+<a href="https://tools.ietf.org/html/bcp47">BCP 47</a> support, the editor combines language and
+region codes into a single selection for targeted localizations. Color codes indicate whether a
+locale is complete or still missing string translations. </p>
+
+<p>To access the Translations Editor, open a <code>strings.xml</code> file and click the
+<strong>Open Editor</strong> link, or click the globe icon
+(<img src="{@docRoot}images/tools/studio-globe-icon.png" style="vertical-align:bottom;margin:0;height:19px" />) in the Design layout view.  </p>
+
+
+    <img src="{@docRoot}images/tools/studio-translationeditoropen.png" />
+    <p class="img-caption"><strong>Figure 1.</strong> Add locales and strings in the
+    Translations Editor.</p>
+
+
+
+<h2 id="git-samples">Android Code Samples on GitHub</h2>
+<p>Clicking <strong>Import Samples</strong> from the <strong>File</strong> menu or <em>Welcome</em>
+page provides seamless access to Google code samples on GitHub.</p>
+    <p><img src="{@docRoot}images/tools/studio-samples-githubaccess.png" /></p>
+    <p class="img-caption"><strong>Figure 2.</strong> Get code samples from GitHub.</p>
+
+
+    <p><img src="{@docRoot}images/tools/studio-sample-in-editor.png" /></p>
+    <p class="img-caption"><strong>Figure 3.</strong> Imported code sample.</p>
+
+
+
+<h2 id="template-support">Expanded Template and Form Factor Support</h2>
+<p>Android Studio supports templates for Google Services and expands the available device
+types. </p>
+
+    <h4> Android Wear and TV support</h4>
+    <p>For easy cross-platform development, the Project Wizard provides templates for
+    creating your apps for Android Wear and TV. </p>
+    <p><img src="{@docRoot}images/tools/studio-tvwearsupport.png"  />
+
+      <p class="img-caption"><strong>Figure 4.</strong> Supported form factors.</p>
+    <p>During app creation, the Project Wizard also displays an API Level dialog to help you choose
+    the best <em>minSdkVersion</em> for your project.</p>
+
+
+    <h4> Google App Engine integration (Google Cloud Platform/Messaging)</h4>
+    <p>Quick cloud integration. Using Google App Engine to connect to the Google cloud
+    and create a cloud end-point is as easy as selecting <em>File > New Module > App Engine Java
+    Servlet Module</em> and specifying the module, package, and client names. </p>
+    <p><img src="{@docRoot}images/tools/studio-cloudmodule.png" /></p>
+    <p class="img-caption"><strong>Figure 5</strong> Google App Engine integration.</p>
+
+
+<h2 id="project-settings">Android Studio and Project Settings</h2>
+<p>Android Studio provides setting dialogs so you can manage the most important Android Studio and
+project settings from the <strong>File &gt; Project Structure</strong> and
+<strong>File &gt; Settings</strong> menus. For example, you can use the
+<strong>File &gt; Project Structure</strong> menu or
+the <code>build.gradle</code> file to update your <code>productFlavor</code> settings.
+Additional settings from the <strong>File &gt; Project Structure</strong> menus include:
+<ul>
+ <li>SDK and JDK location </li>
+ <li>SDK version </li>
+ <li>Gradle and Android Plugin for Gradle versions </li>
+ <li>Build tools version </li>
+ <li>Multidex setting</li>
+ <li><code>buildTypes</code> </li>
+ <li>Dependencies </li>
+</ul>
+</p>
+
+<p>Use the <strong>File &gt; Settings</strong> menu to modify the Android Studio or project
+behavior, such a UI themes, system settings, and version control. </p>
+
+
+
+<h2 id="support-apis">Editor Support for the Latest Android APIs</h2>
+<p>Android Studio supports the
+<a href="{@docRoot}design/material/index.html">Material Design</a></li> themes, widgets, and
+graphics, such as shadow layers and API version rendering (showing the layout across different
+UI versions). Also, the drawable XML tags and attributes, such as <code>&lt;ripple&gt;</code>
+and <code>&lt;animated-selector&gt;</code>, are supported.</p>
+
+
+
diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs
index abfa030..db19d4f 100644
--- a/docs/html/tools/tools_toc.cs
+++ b/docs/html/tools/tools_toc.cs
@@ -20,6 +20,10 @@
       <a href="<?cs var:toroot?>tools/studio/index.html">Android Studio</a>
     </div>
     <ul>
+      <li><a href="<?cs var:toroot ?>tools/studio/studio-config.html">
+          Configuration</a></li>
+      <li><a href="<?cs var:toroot ?>tools/studio/studio-features.html">
+          Features</a></li>
       <li><a href="<?cs var:toroot ?>sdk/installing/studio-tips.html">
           Tips and Tricks</a></li>
     </ul>
@@ -196,6 +200,68 @@
       </ul>
   </li><!-- end of build system -->
 
+
+<!-- Performance Tools menu-->
+  <li class="nav-section">
+    <div class="nav-section-header">
+      <a href="<?cs var:toroot ?>tools/performance/index.html">Peformance Tools</a>
+    </div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>tools/performance/debug-gpu-overdraw/index.html">
+        Overdraw Debugger</a>
+      </li>
+      <li><a href="<?cs var:toroot ?>tools/performance/profile-gpu-rendering/index.html">
+        Rendering Profiler</a>
+      </li>
+      <li class="nav-section">
+        <div class="nav-section-header">
+          <a href="<?cs var:toroot ?>tools/performance/hierarchy-viewer/index.html">
+          Hierarchy Viewer</a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>tools/performance/hierarchy-viewer/setup.html"><span
+            class="en">Setup</span></a>
+          </li>
+          <li><a href="<?cs var:toroot ?>tools/performance/hierarchy-viewer/profiling.html"><span
+            class="en">Profiling</span></a>
+          </li>
+        </ul>
+      </li>
+      <li class="nav-section">
+        <div class="nav-section-header">
+          <a href="<?cs var:toroot ?>tools/performance/comparison.html">
+          Memory Profilers</a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>tools/performance/memory-monitor/index.html"><span
+            class="en">Memory Monitor</span></a>
+          </li>
+          <li><a href="<?cs var:toroot ?>tools/performance/heap-viewer/index.html"><span
+            class="en">Heap Viewer</span></a>
+          </li>
+          <li><a href="<?cs var:toroot ?>tools/performance/allocation-tracker/index.html"><span
+            class="en">Allocation Tracker</span></a>
+          </li>
+        </ul>
+      </li>
+      <li><a href="<?cs var:toroot ?>tools/performance/traceview/index.html">
+        Traceview</a>
+      </li>
+      <li><a href="<?cs var:toroot ?>tools/performance/systrace/index.html">
+        Systrace</a>
+      </li>
+      <li class="nav-section">
+        <div class="nav-section-header">
+          <a href="<?cs var:toroot ?>tools/performance/batterystats-battery-historian/index.html">
+          Battery Profilers</a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>tools/performance/batterystats-battery-historian/charts.html"><span
+            class="en">Historian Charts</span></a>
+          </li>
+        </ul>
+      </li>
+    </ul>
+  </li><!-- End Performance Tools menu-->
+
+
   <!-- Testing Tools menu-->
 
   <li class="nav-section">
diff --git a/docs/html/tools/workflow/index.jd b/docs/html/tools/workflow/index.jd
index a24a2b0..b32fa26 100644
--- a/docs/html/tools/workflow/index.jd
+++ b/docs/html/tools/workflow/index.jd
@@ -41,16 +41,16 @@
     <a href="{@docRoot}tools/projects/index.html">Create an Android project</a>.</p>
   </li>
   <li><strong>Building, Debugging and Testing</strong>
-    <p>During this phase you build your project into a debuggable <code>.apk</code> package(s) 
-    that you can install and run on the emulator or an Android-powered device. Android Studio uses 
-    a build system based on <a href="http://www.gradle.org/" target="_android">Gradle</a> 
-    that provides flexibility, customized build variants, dependency resolution, and much more. 
-    If you're using another IDE, you can build your project using Gradle and install it on a device 
+    <p>During this phase you build your project into a debuggable <code>.apk</code> package(s)
+    that you can install and run on the emulator or an Android-powered device. Android Studio uses
+    a build system based on <a href="http://www.gradle.org/" target="_android">Gradle</a>
+    that provides flexibility, customized build variants, dependency resolution, and much more.
+    If you're using another IDE, you can build your project using Gradle and install it on a device
     using <a href="{@docRoot}tools/help/adb.html">adb</a>. For more information, see
     <a href="{@docRoot}tools/building/index.html">Build and run your application</a>.</p>
     <p>Next, with Android Studio you debug your application using the
-    <a href="{@docRoot}tools/help/monitor.html">Android Debug Monitor</a> and device log messages
-    (<a href="{@docRoot}tools/help/logcat.html">logact</a>) along with the IntelliJ IDEA intelligent
+    <a href="{@docRoot}tools/help/monitor.html">Android Device Monitor</a> and device log messages
+    (<a href="{@docRoot}tools/help/logcat.html">logcat</a>) along with the IntelliJ IDEA intelligent
     coding features. You can also use a JDWP-compliant debugger along with the debugging and logging
     tools that are provided with the Android SDK. For more information see
     <a href="{@docRoot}tools/debugging/index.html">Debug your application with the SDK debugging and logging tools</a>.</p>
diff --git a/docs/html/training/material/animations.jd b/docs/html/training/material/animations.jd
index 86e91a7..6f263db 100644
--- a/docs/html/training/material/animations.jd
+++ b/docs/html/training/material/animations.jd
@@ -81,8 +81,8 @@
 View myView = findViewById(R.id.my_view);
 
 // get the center for the clipping circle
-int cx = (myView.getLeft() + myView.getRight()) / 2;
-int cy = (myView.getTop() + myView.getBottom()) / 2;
+int cx = myView.getWidth() / 2;
+int cy = myView.getHeight() / 2;
 
 // get the final radius for the clipping circle
 int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
@@ -103,8 +103,8 @@
 final View myView = findViewById(R.id.my_view);
 
 // get the center for the clipping circle
-int cx = (myView.getLeft() + myView.getRight()) / 2;
-int cy = (myView.getTop() + myView.getBottom()) / 2;
+int cx = myView.getWidth() / 2;
+int cy = myView.getHeight() / 2;
 
 // get the initial radius for the clipping circle
 int initialRadius = myView.getWidth();
diff --git a/docs/html/training/safetynet/index.jd b/docs/html/training/safetynet/index.jd
index 6090f41..6d822c6 100644
--- a/docs/html/training/safetynet/index.jd
+++ b/docs/html/training/safetynet/index.jd
@@ -325,7 +325,7 @@
 
   <li>Obtain your API key by expanding <strong>APIs &amp; auth</strong> and
     clicking <strong>Credentials</strong>.
-  Record the <strong>API KEY</strong> value on this page for later use.
+  Record the <strong>API KEY</strong> (<em>not</em> the <em>Android Key</em>) value on this page for later use.
   </li>
 </ol>
 
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index e1e6838..5279969 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -91,25 +91,60 @@
       <li class="nav-section">
         <div class="nav-section-header">
           <a href="<?cs var:toroot ?>training/basics/activity-lifecycle/index.html"
+             es-lang=""
+             ja-lang="アクティビティのライフサイクル 管理"
+             ko-lang="액티비티 수명 주기 관리하기"
+             pt-br-lang="Como gerenciar o ciclo de vida da atividade"
+             ru-lang="Управление жизненным циклом операций"
+             zh-cn-lang="管理活动生命周期"
+             zh-tw-lang="管理應用行為顯示生命週期"
              description=
              "How Android activities live and die and how to create
              a seamless user experience by implementing lifecycle callback methods."
             >Managing the Activity Lifecycle</a>
         </div>
         <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/starting.html">
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/starting.html"
+             es-lang=""
+             ja-lang="アクティビティを開始する"
+             ko-lang="액티비티 시작하기"
+             pt-br-lang="Iniciando uma atividade"
+             ru-lang="Запуск операции"
+             zh-cn-lang="开始活动"
+             zh-tw-lang="啟動應用行為顯示">
             Starting an Activity
           </a>
           </li>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/pausing.html">
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/pausing.html"
+             es-lang=""
+             ja-lang=""
+             ko-lang=""
+             pt-br-lang=""
+             ru-lang=""
+             zh-cn-lang=""
+             zh-tw-lang="">
             Pausing and Resuming an Activity
           </a>
           </li>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/stopping.html">
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/stopping.html"
+             es-lang=""
+             ja-lang="アクティビティの一時停止と再開"
+             ko-lang="액티비티 일시정지 및 재개하기"
+             pt-br-lang="Pausando e reiniciando uma atividade"
+             ru-lang="Приостановка и возобновление операции"
+             zh-cn-lang="暂停和继续活动"
+             zh-tw-lang="暫停並繼續應用行為顯示">
             Stopping and Restarting an Activity
           </a>
           </li>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/recreating.html">
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/recreating.html"
+             es-lang=""
+             ja-lang="アクティビティを再作成する"
+             ko-lang="액티비티 재생성하기"
+             pt-br-lang="Recriando uma atividade"
+             ru-lang="Воссоздание операции"
+             zh-cn-lang="重新创建活动"
+             zh-tw-lang="重新建立應用行為顯示">
             Recreating an Activity
           </a>
           </li>
@@ -144,21 +179,49 @@
 
       <li class="nav-section">
         <div class="nav-section-header"><a href="<?cs var:toroot?>training/basics/data-storage/index.html"
+             es-lang=""
+             ja-lang="データの保存"
+             ko-lang="데이터 저장하기"
+             pt-br-lang="Salvando dados"
+             ru-lang="Сохранение данных"
+             zh-cn-lang="保存数据"
+             zh-tw-lang="儲存資料"
              description=
              "How to save data on the device, whether it's temporary files, downloaded
              app assets, user media, structured data, or something else."
             >Saving Data</a>
         </div>
         <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/data-storage/shared-preferences.html">
+          <li><a href="<?cs var:toroot ?>training/basics/data-storage/shared-preferences.html"
+             es-lang=""
+             ja-lang="キー値セットを保存する"
+             ko-lang="키-값 세트 저장하기"
+             pt-br-lang="Salvando conjuntos de valor-chave"
+             ru-lang="Сохранение наборов "\"ключ-значение\""
+             zh-cn-lang="保存键值集"
+             zh-tw-lang="儲存索引鍵值組">
             Saving Key-Value Sets
           </a>
           </li>
-          <li><a href="<?cs var:toroot ?>training/basics/data-storage/files.html">
+          <li><a href="<?cs var:toroot ?>training/basics/data-storage/files.html"
+             es-lang=""
+             ja-lang="ファイルを保存する"
+             ko-lang="파일 저장하기"
+             pt-br-lang="Salvando arquivos"
+             ru-lang="Сохранение файлов"
+             zh-cn-lang="保存文件"
+             zh-tw-lang="儲存檔案">
             Saving Files
           </a>
           </li>
-          <li><a href="<?cs var:toroot ?>training/basics/data-storage/databases.html">
+          <li><a href="<?cs var:toroot ?>training/basics/data-storage/databases.html"
+             es-lang=""
+             ja-lang="SQL データベースにデータを保存する"
+             ko-lang="SQL 데이터베이스에 데이터 저장하기"
+             pt-br-lang="Salvando dados em bancos de dados do SQL"
+             ru-lang="Сохранение данных в базах данных SQL"
+             zh-cn-lang="在 SQL 数据库中保存数据"
+             zh-tw-lang="在 SQL 資料庫中儲存資料">
             Saving Data in SQL Databases
           </a>
           </li>
@@ -168,6 +231,13 @@
       <li class="nav-section">
         <div class="nav-section-header">
           <a href="<?cs var:toroot ?>training/basics/intents/index.html"
+             es-lang=""
+             ja-lang="他のアプリとの相互操作"
+             ko-lang="액티비티 수명 주기 관리하기"
+             pt-br-lang="Interagindo com outros aplicativos"
+             ru-lang="Взаимодействие с другими приложениями"
+             zh-cn-lang="与其他应用交互"
+             zh-tw-lang="與其他應用程式互動"
              description=
              "How to build a user experience that leverages other apps available
              on the device to perform advanced user tasks, such as capture a photo or view
@@ -175,15 +245,36 @@
             >Interacting with Other Apps</a>
         </div>
         <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/intents/sending.html">
+          <li><a href="<?cs var:toroot ?>training/basics/intents/sending.html"
+             es-lang=""
+             ja-lang="別のアプリにユーザーを送る"
+             ko-lang="다른 앱으로 사용자 보내기"
+             pt-br-lang="Enviando o usuário para outro aplicativo"
+             ru-lang="Направление пользователя в другое приложение"
+             zh-cn-lang="向另一个应用发送用户"
+             zh-tw-lang="將使用者傳送至其他應用程式">
             Sending the User to Another App
           </a>
           </li>
-          <li><a href="<?cs var:toroot ?>training/basics/intents/result.html">
+          <li><a href="<?cs var:toroot ?>training/basics/intents/result.html"
+             es-lang=""
+             ja-lang="アクティビティから結果を取得する"
+             ko-lang="액티비티로부터 결과 가져오기"
+             pt-br-lang="Obtendo resultados de uma atividade"
+             ru-lang="Получение результата операции"
+             zh-cn-lang="获取活动的结果"
+             zh-tw-lang="從應用行為顯示取得結果">
             Getting a Result from the Activity
           </a>
           </li>
-          <li><a href="<?cs var:toroot ?>training/basics/intents/filters.html">
+          <li><a href="<?cs var:toroot ?>training/basics/intents/filters.html"
+             es-lang=""
+             ja-lang="他のアプリからのアクティビティの開始を許可する"
+             ko-lang="다른 앱이 자신의 액티비티를 시작하도록 허용하기"
+             pt-br-lang="Permitindo que outros aplicativos iniciem sua atividade"
+             ru-lang="Разрешение другим приложениям на запуск вашей операции"
+             zh-cn-lang="允许其他应用开始您的活动"
+             zh-tw-lang="允許其他應用程式啟動您的應用行為顯示">
             Allowing Other Apps to Start Your Activity
           </a>
           </li>
diff --git a/docs/html/training/wearables/watch-faces/drawing.jd b/docs/html/training/wearables/watch-faces/drawing.jd
index 8b6de76..30a7a6f 100644
--- a/docs/html/training/wearables/watch-faces/drawing.jd
+++ b/docs/html/training/wearables/watch-faces/drawing.jd
@@ -457,9 +457,23 @@
 round devices. You can use this canvas to draw your watch face directly as follows:</p>
 
 <ol>
-<li>If this is the first invocation of the
-<a href="{@docRoot}reference/android/support/wearable/watchface/CanvasWatchFaceService.Engine.html#onDraw(android.graphics.Canvas, android.graphics.Rect)"><code>onDraw()</code></a>
-method, scale your background to fit.</li>
+<li>Override the
+<a href="{@docRoot}reference/android/support/wearable/watchface/CanvasWatchFaceService.Engine.html#onSurfaceChanged(android.view.SurfaceHolder, int, int, int)"><code>onSurfaceChanged()</code></a>
+method to scale your background to fit the device any time the view changes.
+<pre>
+&#64;Override
+public void onSurfaceChanged(
+        SurfaceHolder holder, int format, int width, int height) {
+    if (mBackgroundScaledBitmap == null
+            || mBackgroundScaledBitmap.getWidth() != width
+            || mBackgroundScaledBitmap.getHeight() != height) {
+        mBackgroundScaledBitmap = Bitmap.createScaledBitmap(mBackgroundBitmap,
+                width, height, true /* filter */);
+    }
+    super.onSurfaceChanged(holder, format, width, height);
+}
+</pre>
+</li>
 <li>Check whether the device is in ambient mode or interactive mode.</li>
 <li>Perform any required graphic computations.</li>
 <li>Draw your background bitmap on the canvas.</li>
@@ -482,13 +496,6 @@
     int width = bounds.width();
     int height = bounds.height();
 
-    // Draw the background, scaled to fit.
-    if (mBackgroundScaledBitmap == null
-        || mBackgroundScaledBitmap.getWidth() != width
-        || mBackgroundScaledBitmap.getHeight() != height) {
-        mBackgroundScaledBitmap = Bitmap.createScaledBitmap(mBackgroundBitmap,
-                                      width, height, true);
-    }
     canvas.drawBitmap(mBackgroundScaledBitmap, 0, 0, null);
 
     // Find the center. Ignore the window insets so that, on round watches
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index fcd7f63..cf91be1 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -219,7 +219,8 @@
         }
     }
 
-    private void setBitmap(Bitmap bitmap) {
+    /** @hide */
+    protected void setBitmap(Bitmap bitmap) {
         if (mBitmapState.mBitmap != bitmap) {
             mBitmapState.mBitmap = bitmap;
             computeBitmapSize();
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index f482bf0..7de26d6 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -17,6 +17,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.WorkerThread;
 import android.app.Activity;
 import android.app.PendingIntent;
 import android.content.ComponentName;
@@ -351,11 +352,15 @@
      * Returns the {@code PrivateKey} for the requested alias, or null
      * if no there is no result.
      *
-     * @param alias The alias of the desired private key, typically
-     * returned via {@link KeyChainAliasCallback#alias}.
+     * <p> This method may block while waiting for a connection to another process, and must never
+     * be called from the main thread.
+     *
+     * @param alias The alias of the desired private key, typically returned via
+     *              {@link KeyChainAliasCallback#alias}.
      * @throws KeyChainException if the alias was valid but there was some problem accessing it.
+     * @throws IllegalStateException if called from the main thread.
      */
-    @Nullable
+    @Nullable @WorkerThread
     public static PrivateKey getPrivateKey(@NonNull Context context, @NonNull String alias)
             throws KeyChainException, InterruptedException {
         if (alias == null) {
@@ -386,11 +391,15 @@
      * Returns the {@code X509Certificate} chain for the requested
      * alias, or null if no there is no result.
      *
+     * <p> This method may block while waiting for a connection to another process, and must never
+     * be called from the main thread.
+     *
      * @param alias The alias of the desired certificate chain, typically
      * returned via {@link KeyChainAliasCallback#alias}.
      * @throws KeyChainException if the alias was valid but there was some problem accessing it.
+     * @throws IllegalStateException if called from the main thread.
      */
-    @Nullable
+    @Nullable @WorkerThread
     public static X509Certificate[] getCertificateChain(@NonNull Context context,
             @NonNull String alias) throws KeyChainException, InterruptedException {
         if (alias == null) {
@@ -505,6 +514,7 @@
      *
      * Caller should call unbindService on the result when finished.
      */
+    @WorkerThread
     public static KeyChainConnection bind(@NonNull Context context) throws InterruptedException {
         return bindAsUser(context, Process.myUserHandle());
     }
@@ -512,6 +522,7 @@
     /**
      * @hide
      */
+    @WorkerThread
     public static KeyChainConnection bindAsUser(@NonNull Context context, UserHandle user)
             throws InterruptedException {
         if (context == null) {
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/AndroidKeyStoreKeyGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java
index 258133d..6a7930a 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java
@@ -239,6 +239,13 @@
                                 "At least one digest algorithm must be specified");
                     }
                 }
+
+                // Check that user authentication related parameters are acceptable. This method
+                // will throw an IllegalStateException if there are issues (e.g., secure lock screen
+                // not set up).
+                KeymasterUtils.addUserAuthArgs(new KeymasterArguments(),
+                        spec.isUserAuthenticationRequired(),
+                        spec.getUserAuthenticationValidityDurationSeconds());
             } catch (IllegalStateException | IllegalArgumentException e) {
                 throw new InvalidAlgorithmParameterException(e);
             }
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java
index 459514d..6b36a58 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java
@@ -310,7 +310,14 @@
                 } else {
                     mKeymasterDigests = EmptyArray.INT;
                 }
-            } catch (IllegalArgumentException e) {
+
+                // Check that user authentication related parameters are acceptable. This method
+                // will throw an IllegalStateException if there are issues (e.g., secure lock screen
+                // not set up).
+                KeymasterUtils.addUserAuthArgs(new KeymasterArguments(),
+                        mSpec.isUserAuthenticationRequired(),
+                        mSpec.getUserAuthenticationValidityDurationSeconds());
+            } catch (IllegalArgumentException | IllegalStateException e) {
                 throw new InvalidAlgorithmParameterException(e);
             }
 
diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java
index dc8f1e3..e9f19cd 100644
--- a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java
+++ b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java
@@ -484,8 +484,8 @@
                         spec.getKeyValidityForOriginationEnd());
                 importArgs.addDateIfNotNull(KeymasterDefs.KM_TAG_USAGE_EXPIRE_DATETIME,
                         spec.getKeyValidityForConsumptionEnd());
-            } catch (IllegalArgumentException e) {
-                throw new KeyStoreException("Invalid parameter", e);
+            } catch (IllegalArgumentException | IllegalStateException e) {
+                throw new KeyStoreException(e);
             }
         }
 
@@ -598,102 +598,100 @@
                     + " RAW format export");
         }
 
-        String keyAlgorithmString = key.getAlgorithm();
-        int keymasterAlgorithm;
-        int keymasterDigest;
-        try {
-            keymasterAlgorithm =
-                    KeyProperties.KeyAlgorithm.toKeymasterSecretKeyAlgorithm(keyAlgorithmString);
-            keymasterDigest = KeyProperties.KeyAlgorithm.toKeymasterDigest(keyAlgorithmString);
-        } catch (IllegalArgumentException e) {
-            throw new KeyStoreException("Unsupported secret key algorithm: " + keyAlgorithmString);
-        }
-
         KeymasterArguments args = new KeymasterArguments();
-        args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, keymasterAlgorithm);
+        try {
+            int keymasterAlgorithm =
+                    KeyProperties.KeyAlgorithm.toKeymasterSecretKeyAlgorithm(key.getAlgorithm());
+            args.addEnum(KeymasterDefs.KM_TAG_ALGORITHM, keymasterAlgorithm);
 
-        int[] keymasterDigests;
-        if (params.isDigestsSpecified()) {
-            // Digest(s) specified in parameters
-            keymasterDigests = KeyProperties.Digest.allToKeymaster(params.getDigests());
-            if (keymasterDigest != -1) {
-                // Digest also specified in the JCA key algorithm name.
-                if (!com.android.internal.util.ArrayUtils.contains(
-                        keymasterDigests, keymasterDigest)) {
-                    throw new KeyStoreException("Key digest mismatch"
-                            + ". Key: " + keyAlgorithmString
-                            + ", parameter spec: " + Arrays.asList(params.getDigests()));
-                }
-                // When the key is read back from keystore we reconstruct the JCA key algorithm
-                // name from the KM_TAG_ALGORITHM and the first KM_TAG_DIGEST. Thus we need to
-                // ensure that the digest reflected in the JCA key algorithm name is the first
-                // KM_TAG_DIGEST tag.
-                if (keymasterDigests[0] != keymasterDigest) {
-                    // The first digest is not the one implied by the JCA key algorithm name.
-                    // Swap the implied digest with the first one.
-                    for (int i = 0; i < keymasterDigests.length; i++) {
-                        if (keymasterDigests[i] == keymasterDigest) {
-                            keymasterDigests[i] = keymasterDigests[0];
-                            keymasterDigests[0] = keymasterDigest;
-                            break;
+            int[] keymasterDigests;
+            int keymasterDigest = KeyProperties.KeyAlgorithm.toKeymasterDigest(key.getAlgorithm());
+            if (params.isDigestsSpecified()) {
+                // Digest(s) specified in parameters
+                keymasterDigests = KeyProperties.Digest.allToKeymaster(params.getDigests());
+                if (keymasterDigest != -1) {
+                    // Digest also specified in the JCA key algorithm name.
+                    if (!com.android.internal.util.ArrayUtils.contains(
+                            keymasterDigests, keymasterDigest)) {
+                        throw new KeyStoreException("Digest specified in key algorithm "
+                                + key.getAlgorithm() + " not specified in protection parameters: "
+                                + Arrays.asList(params.getDigests()));
+                    }
+                    // When the key is read back from keystore we reconstruct the JCA key algorithm
+                    // name from the KM_TAG_ALGORITHM and the first KM_TAG_DIGEST. Thus we need to
+                    // ensure that the digest reflected in the JCA key algorithm name is the first
+                    // KM_TAG_DIGEST tag.
+                    if (keymasterDigests[0] != keymasterDigest) {
+                        // The first digest is not the one implied by the JCA key algorithm name.
+                        // Swap the implied digest with the first one.
+                        for (int i = 0; i < keymasterDigests.length; i++) {
+                            if (keymasterDigests[i] == keymasterDigest) {
+                                keymasterDigests[i] = keymasterDigests[0];
+                                keymasterDigests[0] = keymasterDigest;
+                                break;
+                            }
                         }
                     }
                 }
-            }
-        } else {
-            // No digest specified in parameters
-            if (keymasterDigest != -1) {
-                // Digest specified in the JCA key algorithm name.
-                keymasterDigests = new int[] {keymasterDigest};
             } else {
-                keymasterDigests = EmptyArray.INT;
-            }
-        }
-        args.addEnums(KeymasterDefs.KM_TAG_DIGEST, keymasterDigests);
-        if (keymasterAlgorithm == KeymasterDefs.KM_ALGORITHM_HMAC) {
-            if (keymasterDigests.length == 0) {
-                throw new KeyStoreException("At least one digest algorithm must be specified"
-                        + " for key algorithm " + keyAlgorithmString);
-            }
-        }
-
-        @KeyProperties.PurposeEnum int purposes = params.getPurposes();
-        int[] keymasterBlockModes =
-                KeyProperties.BlockMode.allToKeymaster(params.getBlockModes());
-        if (((purposes & KeyProperties.PURPOSE_ENCRYPT) != 0)
-                && (params.isRandomizedEncryptionRequired())) {
-            for (int keymasterBlockMode : keymasterBlockModes) {
-                if (!KeymasterUtils.isKeymasterBlockModeIndCpaCompatibleWithSymmetricCrypto(
-                        keymasterBlockMode)) {
-                    throw new KeyStoreException(
-                            "Randomized encryption (IND-CPA) required but may be violated by block"
-                            + " mode: "
-                            + KeyProperties.BlockMode.fromKeymaster(keymasterBlockMode)
-                            + ". See KeyProtection documentation.");
+                // No digest specified in parameters
+                if (keymasterDigest != -1) {
+                    // Digest specified in the JCA key algorithm name.
+                    keymasterDigests = new int[] {keymasterDigest};
+                } else {
+                    keymasterDigests = EmptyArray.INT;
                 }
             }
-        }
-        args.addEnums(KeymasterDefs.KM_TAG_PURPOSE, KeyProperties.Purpose.allToKeymaster(purposes));
-        args.addEnums(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockModes);
-        if (params.getSignaturePaddings().length > 0) {
-            throw new KeyStoreException("Signature paddings not supported for symmetric keys");
-        }
-        int[] keymasterPaddings = KeyProperties.EncryptionPadding.allToKeymaster(
-                params.getEncryptionPaddings());
-        args.addEnums(KeymasterDefs.KM_TAG_PADDING, keymasterPaddings);
-        KeymasterUtils.addUserAuthArgs(args,
-                params.isUserAuthenticationRequired(),
-                params.getUserAuthenticationValidityDurationSeconds());
-        args.addDateIfNotNull(KeymasterDefs.KM_TAG_ACTIVE_DATETIME, params.getKeyValidityStart());
-        args.addDateIfNotNull(KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME,
-                params.getKeyValidityForOriginationEnd());
-        args.addDateIfNotNull(KeymasterDefs.KM_TAG_USAGE_EXPIRE_DATETIME,
-                params.getKeyValidityForConsumptionEnd());
+            args.addEnums(KeymasterDefs.KM_TAG_DIGEST, keymasterDigests);
+            if (keymasterAlgorithm == KeymasterDefs.KM_ALGORITHM_HMAC) {
+                if (keymasterDigests.length == 0) {
+                    throw new KeyStoreException("At least one digest algorithm must be specified"
+                            + " for key algorithm " + key.getAlgorithm());
+                }
+            }
 
-        if (((purposes & KeyProperties.PURPOSE_ENCRYPT) != 0)
-                && (!params.isRandomizedEncryptionRequired())) {
-            // Permit caller-provided IV when encrypting with this key
-            args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
+            @KeyProperties.PurposeEnum int purposes = params.getPurposes();
+            int[] keymasterBlockModes =
+                    KeyProperties.BlockMode.allToKeymaster(params.getBlockModes());
+            if (((purposes & KeyProperties.PURPOSE_ENCRYPT) != 0)
+                    && (params.isRandomizedEncryptionRequired())) {
+                for (int keymasterBlockMode : keymasterBlockModes) {
+                    if (!KeymasterUtils.isKeymasterBlockModeIndCpaCompatibleWithSymmetricCrypto(
+                            keymasterBlockMode)) {
+                        throw new KeyStoreException(
+                                "Randomized encryption (IND-CPA) required but may be violated by"
+                                + " block mode: "
+                                + KeyProperties.BlockMode.fromKeymaster(keymasterBlockMode)
+                                + ". See KeyProtection documentation.");
+                    }
+                }
+            }
+            args.addEnums(KeymasterDefs.KM_TAG_PURPOSE,
+                    KeyProperties.Purpose.allToKeymaster(purposes));
+            args.addEnums(KeymasterDefs.KM_TAG_BLOCK_MODE, keymasterBlockModes);
+            if (params.getSignaturePaddings().length > 0) {
+                throw new KeyStoreException("Signature paddings not supported for symmetric keys");
+            }
+            int[] keymasterPaddings = KeyProperties.EncryptionPadding.allToKeymaster(
+                    params.getEncryptionPaddings());
+            args.addEnums(KeymasterDefs.KM_TAG_PADDING, keymasterPaddings);
+            KeymasterUtils.addUserAuthArgs(args,
+                    params.isUserAuthenticationRequired(),
+                    params.getUserAuthenticationValidityDurationSeconds());
+            args.addDateIfNotNull(KeymasterDefs.KM_TAG_ACTIVE_DATETIME,
+                    params.getKeyValidityStart());
+            args.addDateIfNotNull(KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME,
+                    params.getKeyValidityForOriginationEnd());
+            args.addDateIfNotNull(KeymasterDefs.KM_TAG_USAGE_EXPIRE_DATETIME,
+                    params.getKeyValidityForConsumptionEnd());
+
+            if (((purposes & KeyProperties.PURPOSE_ENCRYPT) != 0)
+                    && (!params.isRandomizedEncryptionRequired())) {
+                // Permit caller-provided IV when encrypting with this key
+                args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
+            }
+        } catch (IllegalArgumentException | IllegalStateException e) {
+            throw new KeyStoreException(e);
         }
 
         Credentials.deleteAllTypesForAlias(mKeyStore, entryAlias);
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/keystore/java/android/security/keystore/KeyProperties.java b/keystore/java/android/security/keystore/KeyProperties.java
index f9fe176..2b49297 100644
--- a/keystore/java/android/security/keystore/KeyProperties.java
+++ b/keystore/java/android/security/keystore/KeyProperties.java
@@ -210,10 +210,6 @@
                 int keymasterAlgorithm, int keymasterDigest) {
             switch (keymasterAlgorithm) {
                 case KeymasterDefs.KM_ALGORITHM_AES:
-                    if (keymasterDigest != -1) {
-                        throw new IllegalArgumentException("Digest not supported for AES key: "
-                                + Digest.fromKeymaster(keymasterDigest));
-                    }
                     return KEY_ALGORITHM_AES;
                 case KeymasterDefs.KM_ALGORITHM_HMAC:
                     switch (keymasterDigest) {
diff --git a/keystore/java/android/security/keystore/KeymasterUtils.java b/keystore/java/android/security/keystore/KeymasterUtils.java
index 3cd3f2a..92d636c 100644
--- a/keystore/java/android/security/keystore/KeymasterUtils.java
+++ b/keystore/java/android/security/keystore/KeymasterUtils.java
@@ -87,6 +87,10 @@
      * @param userAuthenticationValidityDurationSeconds duration of time (seconds) for which user
      *        authentication is valid as authorization for using the key or {@code -1} if every
      *        use of the key needs authorization.
+     *
+     * @throws IllegalStateException if user authentication is required but the system is in a wrong
+     *         state (e.g., secure lock screen not set up) for generating or importing keys that
+     *         require user authentication.
      */
     public static void addUserAuthArgs(KeymasterArguments args,
             boolean userAuthenticationRequired,
diff --git a/libs/hwui/Android.common.mk b/libs/hwui/Android.common.mk
index 9590595..38e8be9 100644
--- a/libs/hwui/Android.common.mk
+++ b/libs/hwui/Android.common.mk
@@ -119,6 +119,7 @@
 # Defaults for ATRACE_TAG and LOG_TAG for libhwui
 LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\"
 LOCAL_CFLAGS += -Wall -Wno-unused-parameter -Wunreachable-code
+LOCAL_CFLAGS += -ffast-math -O3
 
 # b/21698669
 ifneq ($(USE_CLANG_PLATFORM_BUILD),true)
diff --git a/libs/hwui/Canvas.h b/libs/hwui/Canvas.h
index 562bb80..160d9a8 100644
--- a/libs/hwui/Canvas.h
+++ b/libs/hwui/Canvas.h
@@ -80,6 +80,10 @@
     virtual void getMatrix(SkMatrix* outMatrix) const = 0;
     virtual void setMatrix(const SkMatrix& matrix) = 0;
 
+    /// Like setMatrix(), but to be translated into local / view-relative coordinates
+    /// rather than executed in global / device coordinates at rendering time.
+    virtual void setLocalMatrix(const SkMatrix& matrix) = 0;
+
     virtual void concat(const SkMatrix& matrix) = 0;
     virtual void rotate(float degrees) = 0;
     virtual void scale(float sx, float sy) = 0;
diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp
index b08187b..aeb1a3d 100644
--- a/libs/hwui/DisplayListCanvas.cpp
+++ b/libs/hwui/DisplayListCanvas.cpp
@@ -176,6 +176,11 @@
     mState.setMatrix(matrix);
 }
 
+void DisplayListCanvas::setLocalMatrix(const SkMatrix& matrix) {
+    addStateOp(new (alloc()) SetLocalMatrixOp(matrix));
+    mState.setMatrix(matrix);
+}
+
 void DisplayListCanvas::concat(const SkMatrix& matrix) {
     addStateOp(new (alloc()) ConcatMatrixOp(matrix));
     mState.concatMatrix(matrix);
diff --git a/libs/hwui/DisplayListCanvas.h b/libs/hwui/DisplayListCanvas.h
index edfda62..4982cc9 100644
--- a/libs/hwui/DisplayListCanvas.h
+++ b/libs/hwui/DisplayListCanvas.h
@@ -165,6 +165,7 @@
     // Matrix
     virtual void getMatrix(SkMatrix* outMatrix) const override { mState.getMatrix(outMatrix); }
     virtual void setMatrix(const SkMatrix& matrix) override;
+    virtual void setLocalMatrix(const SkMatrix& matrix) override;
 
     virtual void concat(const SkMatrix& matrix) override;
     virtual void rotate(float degrees) override;
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index fb2852a..8b4b4ba 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -29,6 +29,8 @@
 #include "utils/LinearAllocator.h"
 #include "utils/PaintUtils.h"
 
+#include <algorithm>
+
 #include <SkColor.h>
 #include <SkPath.h>
 #include <SkPathOps.h>
@@ -184,7 +186,7 @@
 
         // TODO: it would be nice if this could take scale into account, but scale isn't stable
         // since higher levels of the view hierarchy can change scale out from underneath it.
-        return fmaxf(mPaint->getStrokeWidth(), 1) * 0.5f;
+        return std::max(mPaint->getStrokeWidth(), 1.0f) * 0.5f;
     }
 
 protected:
@@ -235,10 +237,10 @@
     DrawBoundedOp(const float* points, int count, const SkPaint* paint)
             : DrawOp(paint), mLocalBounds(points[0], points[1], points[0], points[1]) {
         for (int i = 2; i < count; i += 2) {
-            mLocalBounds.left = fminf(mLocalBounds.left, points[i]);
-            mLocalBounds.right = fmaxf(mLocalBounds.right, points[i]);
-            mLocalBounds.top = fminf(mLocalBounds.top, points[i + 1]);
-            mLocalBounds.bottom = fmaxf(mLocalBounds.bottom, points[i + 1]);
+            mLocalBounds.left = std::min(mLocalBounds.left, points[i]);
+            mLocalBounds.right = std::max(mLocalBounds.right, points[i]);
+            mLocalBounds.top = std::min(mLocalBounds.top, points[i + 1]);
+            mLocalBounds.bottom = std::max(mLocalBounds.bottom, points[i + 1]);
         }
     }
 
@@ -487,6 +489,25 @@
     const SkMatrix mMatrix;
 };
 
+class SetLocalMatrixOp : public StateOp {
+public:
+    SetLocalMatrixOp(const SkMatrix& matrix)
+            : mMatrix(matrix) {}
+
+    virtual void applyState(OpenGLRenderer& renderer, int saveCount) const override {
+        renderer.setLocalMatrix(mMatrix);
+    }
+
+    virtual void output(int level, uint32_t logFlags) const override {
+        OP_LOG("SetLocalMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(&mMatrix));
+    }
+
+    virtual const char* name() override { return "SetLocalMatrix"; }
+
+private:
+    const SkMatrix mMatrix;
+};
+
 class ConcatMatrixOp : public StateOp {
 public:
     ConcatMatrixOp(const SkMatrix& matrix)
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/FrameInfo.cpp b/libs/hwui/FrameInfo.cpp
index 85998f1..41e2233 100644
--- a/libs/hwui/FrameInfo.cpp
+++ b/libs/hwui/FrameInfo.cpp
@@ -30,6 +30,7 @@
     "AnimationStart",
     "PerformTraversalsStart",
     "DrawStart",
+    "SyncQueued",
     "SyncStart",
     "IssueDrawCommandsStart",
     "SwapBuffers",
diff --git a/libs/hwui/FrameInfo.h b/libs/hwui/FrameInfo.h
index 23339ce..f8013ab 100644
--- a/libs/hwui/FrameInfo.h
+++ b/libs/hwui/FrameInfo.h
@@ -41,6 +41,8 @@
     DrawStart,
     // End of UI frame info
 
+    SyncQueued,
+
     SyncStart,
     IssueDrawCommandsStart,
     SwapBuffers,
@@ -117,8 +119,7 @@
     }
 
     inline int64_t operator[](FrameInfoIndex index) const {
-        if (index == FrameInfoIndex::NumIndexes) return 0;
-        return mFrameInfo[static_cast<int>(index)];
+        return get(index);
     }
 
     inline int64_t operator[](int index) const {
@@ -127,10 +128,20 @@
     }
 
     inline int64_t duration(FrameInfoIndex start, FrameInfoIndex end) const {
-        int64_t endtime = mFrameInfo[static_cast<int>(end)];
-        int64_t starttime = mFrameInfo[static_cast<int>(start)];
+        int64_t endtime = get(end);
+        int64_t starttime = get(start);
         int64_t gap = endtime - starttime;
         gap = starttime > 0 ? gap : 0;
+        if (end > FrameInfoIndex::SyncQueued &&
+                start < FrameInfoIndex::SyncQueued) {
+            // Need to subtract out the time spent in a stalled state
+            // as this will be captured by the previous frame's info
+            int64_t offset = get(FrameInfoIndex::SyncStart)
+                    - get(FrameInfoIndex::SyncQueued);
+            if (offset > 0) {
+                gap -= offset;
+            }
+        }
         return gap > 0 ? gap : 0;
     }
 
@@ -138,11 +149,16 @@
         return duration(FrameInfoIndex::IntendedVsync, FrameInfoIndex::FrameCompleted);
     }
 
-private:
     inline int64_t& set(FrameInfoIndex index) {
         return mFrameInfo[static_cast<int>(index)];
     }
 
+    inline int64_t get(FrameInfoIndex index) const {
+        if (index == FrameInfoIndex::NumIndexes) return 0;
+        return mFrameInfo[static_cast<int>(index)];
+    }
+
+private:
     int64_t mFrameInfo[static_cast<int>(FrameInfoIndex::NumIndexes)];
 };
 
diff --git a/libs/hwui/FrameInfoVisualizer.cpp b/libs/hwui/FrameInfoVisualizer.cpp
index 7f9d9b9..b416615 100644
--- a/libs/hwui/FrameInfoVisualizer.cpp
+++ b/libs/hwui/FrameInfoVisualizer.cpp
@@ -189,7 +189,7 @@
         // Set the bottom to the old top (build upwards)
         rect[ri + 3] = rect[ri + 1];
         // Move the top up by the duration
-        rect[ri + 1] -= mVerticalUnit * duration(fi, start, end);
+        rect[ri + 1] -= mVerticalUnit * durationMS(fi, start, end);
     }
 }
 
@@ -253,10 +253,10 @@
         }
         mLastFrameLogged = mFrameSource[i][FrameInfoIndex::IntendedVsync];
         fprintf(file, "\t%3.2f\t%3.2f\t%3.2f\t%3.2f\n",
-                duration(i, FrameInfoIndex::IntendedVsync, FrameInfoIndex::SyncStart),
-                duration(i, FrameInfoIndex::SyncStart, FrameInfoIndex::IssueDrawCommandsStart),
-                duration(i, FrameInfoIndex::IssueDrawCommandsStart, FrameInfoIndex::SwapBuffers),
-                duration(i, FrameInfoIndex::SwapBuffers, FrameInfoIndex::FrameCompleted));
+                durationMS(i, FrameInfoIndex::IntendedVsync, FrameInfoIndex::SyncStart),
+                durationMS(i, FrameInfoIndex::SyncStart, FrameInfoIndex::IssueDrawCommandsStart),
+                durationMS(i, FrameInfoIndex::IssueDrawCommandsStart, FrameInfoIndex::SwapBuffers),
+                durationMS(i, FrameInfoIndex::SwapBuffers, FrameInfoIndex::FrameCompleted));
     }
 
     fflush(file);
diff --git a/libs/hwui/FrameInfoVisualizer.h b/libs/hwui/FrameInfoVisualizer.h
index f1dc954..cf877c4 100644
--- a/libs/hwui/FrameInfoVisualizer.h
+++ b/libs/hwui/FrameInfoVisualizer.h
@@ -59,10 +59,8 @@
     void drawGraph(OpenGLRenderer* canvas);
     void drawThreshold(OpenGLRenderer* canvas);
 
-    inline float duration(size_t index, FrameInfoIndex start, FrameInfoIndex end) {
-        nsecs_t ns_start = mFrameSource[index][start];
-        nsecs_t ns_end = mFrameSource[index][end];
-        float duration = ((ns_end - ns_start) * 0.000001f);
+    inline float durationMS(size_t index, FrameInfoIndex start, FrameInfoIndex end) {
+        float duration = mFrameSource[index].duration(start, end) * 0.000001f;
         // Clamp to large to avoid spiking off the top of the screen
         duration = duration > 50.0f ? 50.0f : duration;
         return duration > 0.0f ? duration : 0.0f;
diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp
index 5c0801e..eb9b55f 100644
--- a/libs/hwui/JankTracker.cpp
+++ b/libs/hwui/JankTracker.cpp
@@ -31,7 +31,7 @@
         "High input latency",
         "Slow UI thread",
         "Slow bitmap uploads",
-        "Slow draw",
+        "Slow issue draw commands",
 };
 
 struct Comparison {
@@ -223,7 +223,7 @@
     mData->jankFrameCount++;
 
     for (int i = 0; i < NUM_BUCKETS; i++) {
-        int64_t delta = frame[COMPARISONS[i].end] - frame[COMPARISONS[i].start];
+        int64_t delta = frame.duration(COMPARISONS[i].start, COMPARISONS[i].end);
         if (delta >= mThresholds[i] && delta < IGNORE_EXCEEDING) {
             mData->jankTypeCounts[i]++;
         }
diff --git a/libs/hwui/Matrix.cpp b/libs/hwui/Matrix.cpp
index 061d26a..06e67c0 100644
--- a/libs/hwui/Matrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -155,8 +155,7 @@
 }
 
 void Matrix4::load(const Matrix4& v) {
-    memcpy(data, v.data, sizeof(data));
-    mType = v.getType();
+    *this = v;
 }
 
 void Matrix4::load(const SkMatrix& v) {
diff --git a/libs/hwui/Matrix.h b/libs/hwui/Matrix.h
index c152789..ed54a25 100644
--- a/libs/hwui/Matrix.h
+++ b/libs/hwui/Matrix.h
@@ -85,10 +85,6 @@
         load(v);
     }
 
-    Matrix4(const Matrix4& v) {
-        load(v);
-    }
-
     Matrix4(const SkMatrix& v) {
         load(v);
     }
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 3d48fa69..2292ef4 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -1626,10 +1626,10 @@
             ColorTextureVertex::set(vertex++, vertices[bx], vertices[by], u1, v1, colors[bx / 2]);
             ColorTextureVertex::set(vertex++, vertices[cx], vertices[cy], u2, v1, colors[cx / 2]);
 
-            left = fminf(left, fminf(vertices[ax], fminf(vertices[bx], vertices[cx])));
-            top = fminf(top, fminf(vertices[ay], fminf(vertices[by], vertices[cy])));
-            right = fmaxf(right, fmaxf(vertices[ax], fmaxf(vertices[bx], vertices[cx])));
-            bottom = fmaxf(bottom, fmaxf(vertices[ay], fmaxf(vertices[by], vertices[cy])));
+            left = std::min(left, std::min(vertices[ax], std::min(vertices[bx], vertices[cx])));
+            top = std::min(top, std::min(vertices[ay], std::min(vertices[by], vertices[cy])));
+            right = std::max(right, std::max(vertices[ax], std::max(vertices[bx], vertices[cx])));
+            bottom = std::max(bottom, std::max(vertices[ay], std::max(vertices[by], vertices[cy])));
         }
     }
 
@@ -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;
@@ -2127,8 +2127,8 @@
     float sx, sy;
     transform.decomposeScale(sx, sy);
     outMatrix->setScale(
-            roundf(fmaxf(1.0f, sx)),
-            roundf(fmaxf(1.0f, sy)));
+            roundf(std::max(1.0f, sx)),
+            roundf(std::max(1.0f, sy)));
     return true;
 }
 
@@ -2148,6 +2148,7 @@
     mState.restoreToCount(saveCount);
 }
 
+
 void OpenGLRenderer::translate(float dx, float dy, float dz) {
     mState.translate(dx, dy, dz);
 }
@@ -2168,6 +2169,11 @@
     mState.setMatrix(matrix);
 }
 
+void OpenGLRenderer::setLocalMatrix(const SkMatrix& matrix) {
+    mState.setMatrix(mBaseTransform);
+    mState.concatMatrix(matrix);
+}
+
 void OpenGLRenderer::concatMatrix(const Matrix4& matrix) {
     mState.concatMatrix(matrix);
 }
@@ -2450,7 +2456,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;
@@ -2551,10 +2557,10 @@
         Vertex::set(vertex++, l, b);
         Vertex::set(vertex++, r, b);
 
-        left = fminf(left, l);
-        top = fminf(top, t);
-        right = fmaxf(right, r);
-        bottom = fmaxf(bottom, b);
+        left = std::min(left, l);
+        top = std::min(top, t);
+        right = std::max(right, r);
+        bottom = std::max(bottom, b);
     }
 
     if (clip && quickRejectSetupScissor(left, top, right, bottom)) {
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 800a9f9..402f6ed 100755
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -368,6 +368,7 @@
 
     void getMatrix(SkMatrix* outMatrix) const { mState.getMatrix(outMatrix); }
     void setMatrix(const SkMatrix& matrix) { mState.setMatrix(matrix); }
+    void setLocalMatrix(const SkMatrix& matrix);
     void concatMatrix(const SkMatrix& matrix) { mState.concatMatrix(matrix); }
 
     void translate(float dx, float dy, float dz = 0.0f);
@@ -418,6 +419,8 @@
         return returnPath;
     }
 
+    void setBaseTransform(const Matrix4& matrix) { mBaseTransform = matrix; }
+
 protected:
     /**
      * Perform the setup specific to a frame. This method does not
@@ -877,6 +880,16 @@
     // Paths kept alive for the duration of the frame
     std::vector<std::unique_ptr<SkPath>> mTempPaths;
 
+    /**
+     * Initial transform for a rendering pass; transform from global device
+     * coordinates to the current RenderNode's drawing content coordinates,
+     * with the RenderNode's RenderProperty transforms already applied.
+     * Calling setMatrix(mBaseTransform) will result in drawing at the origin
+     * of the DisplayList's recorded surface prior to any Canvas
+     * transformation.
+     */
+    Matrix4 mBaseTransform;
+
     friend class Layer;
     friend class TextDrawFunctor;
     friend class DrawBitmapOp;
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index f673c6a..6a7dfb3 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -81,9 +81,9 @@
         }
         const float xStretchTex = stretchSize;
         const float fixed = bitmapWidth - stretchSize;
-        const float xStretch = fmaxf(width - fixed, 0.0f);
+        const float xStretch = std::max(width - fixed, 0.0f);
         stretchX = xStretch / xStretchTex;
-        rescaleX = fixed == 0.0f ? 0.0f : fminf(fmaxf(width, 0.0f) / fixed, 1.0f);
+        rescaleX = fixed == 0.0f ? 0.0f : std::min(std::max(width, 0.0f) / fixed, 1.0f);
     }
 
     if (yStretchCount > 0) {
@@ -93,9 +93,9 @@
         }
         const float yStretchTex = stretchSize;
         const float fixed = bitmapHeight - stretchSize;
-        const float yStretch = fmaxf(height - fixed, 0.0f);
+        const float yStretch = std::max(height - fixed, 0.0f);
         stretchY = yStretch / yStretchTex;
-        rescaleY = fixed == 0.0f ? 0.0f : fminf(fmaxf(height, 0.0f) / fixed, 1.0f);
+        rescaleY = fixed == 0.0f ? 0.0f : std::min(std::max(height, 0.0f) / fixed, 1.0f);
     }
 
     uint32_t quadCount = 0;
@@ -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/Rect.h b/libs/hwui/Rect.h
index c82082f..4c4cd3d 100644
--- a/libs/hwui/Rect.h
+++ b/libs/hwui/Rect.h
@@ -18,6 +18,7 @@
 #define ANDROID_HWUI_RECT_H
 
 #include <cmath>
+#include <algorithm>
 #include <SkRect.h>
 
 #include <utils/Log.h>
@@ -246,17 +247,17 @@
     }
 
     void expandToCoverVertex(float x, float y) {
-        left = fminf(left, x);
-        top = fminf(top, y);
-        right = fmaxf(right, x);
-        bottom = fmaxf(bottom, y);
+        left = std::min(left, x);
+        top = std::min(top, y);
+        right = std::max(right, x);
+        bottom = std::max(bottom, y);
     }
 
     void expandToCoverRect(float otherLeft, float otherTop, float otherRight, float otherBottom) {
-        left = fminf(left, otherLeft);
-        top = fminf(top, otherTop);
-        right = fmaxf(right, otherRight);
-        bottom = fmaxf(bottom, otherBottom);
+        left = std::min(left, otherLeft);
+        top = std::min(top, otherTop);
+        right = std::max(right, otherRight);
+        bottom = std::max(bottom, otherBottom);
     }
 
     SkRect toSkRect() const {
@@ -273,18 +274,18 @@
 
 private:
     void intersectWith(Rect& tmp) const {
-        tmp.left = fmaxf(left, tmp.left);
-        tmp.top = fmaxf(top, tmp.top);
-        tmp.right = fminf(right, tmp.right);
-        tmp.bottom = fminf(bottom, tmp.bottom);
+        tmp.left = std::max(left, tmp.left);
+        tmp.top = std::max(top, tmp.top);
+        tmp.right = std::min(right, tmp.right);
+        tmp.bottom = std::min(bottom, tmp.bottom);
     }
 
     Rect intersectWith(float l, float t, float r, float b) const {
         Rect tmp;
-        tmp.left = fmaxf(left, l);
-        tmp.top = fmaxf(top, t);
-        tmp.right = fminf(right, r);
-        tmp.bottom = fminf(bottom, b);
+        tmp.left = std::max(left, l);
+        tmp.top = std::max(top, t);
+        tmp.right = std::min(right, r);
+        tmp.bottom = std::min(bottom, b);
         return tmp;
     }
 
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index fc18491..80f349a 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -887,6 +887,7 @@
             && renderer.quickRejectConservative(0, 0, properties().getWidth(), properties().getHeight());
     if (!quickRejected) {
         Matrix4 initialTransform(*(renderer.currentTransform()));
+        renderer.setBaseTransform(initialTransform);
 
         if (drawLayer) {
             handler(new (alloc) DrawLayerOp(mLayer, 0, 0),
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 6cf66cd..644a4f3 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -67,6 +67,7 @@
 
     virtual void getMatrix(SkMatrix* outMatrix) const override;
     virtual void setMatrix(const SkMatrix& matrix) override;
+    virtual void setLocalMatrix(const SkMatrix& matrix) override { this->setMatrix(matrix); }
     virtual void concat(const SkMatrix& matrix) override;
     virtual void rotate(float degrees) override;
     virtual void scale(float sx, float sy) override;
diff --git a/libs/hwui/SkiaCanvasProxy.cpp b/libs/hwui/SkiaCanvasProxy.cpp
index 8a6c8c5..d96ca2a 100644
--- a/libs/hwui/SkiaCanvasProxy.cpp
+++ b/libs/hwui/SkiaCanvasProxy.cpp
@@ -115,7 +115,7 @@
 void SkiaCanvasProxy::onDrawSprite(const SkBitmap& bitmap, int left, int top,
         const SkPaint* paint) {
     mCanvas->save(SkCanvas::kMatrixClip_SaveFlag);
-    mCanvas->setMatrix(SkMatrix::I());
+    mCanvas->setLocalMatrix(SkMatrix::I());
     mCanvas->drawBitmap(bitmap, left, top, paint);
     mCanvas->restore();
 }
@@ -165,7 +165,9 @@
 }
 
 void SkiaCanvasProxy::didSetMatrix(const SkMatrix& matrix) {
-    mCanvas->setMatrix(matrix);
+    // SkCanvas setMatrix() is relative to the Canvas origin, but OpenGLRenderer's
+    // setMatrix() is relative to device origin; call setLocalMatrix() instead.
+    mCanvas->setLocalMatrix(matrix);
 }
 
 void SkiaCanvasProxy::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
diff --git a/libs/hwui/SpotShadow.cpp b/libs/hwui/SpotShadow.cpp
index db3c2d9..b8c9804 100644
--- a/libs/hwui/SpotShadow.cpp
+++ b/libs/hwui/SpotShadow.cpp
@@ -48,6 +48,7 @@
 #define TRANSFORMED_PENUMBRA_ALPHA 1.0f
 #define TRANSFORMED_UMBRA_ALPHA 0.0f
 
+#include <algorithm>
 #include <math.h>
 #include <stdlib.h>
 #include <utils/Log.h>
@@ -145,7 +146,10 @@
  * @param pointsLength the number of vertices of the polygon.
  */
 void SpotShadow::xsort(Vector2* points, int pointsLength) {
-    quicksortX(points, 0, pointsLength - 1);
+    auto cmp = [](const Vector2& a, const Vector2& b) -> bool {
+        return a.x < b.x;
+    };
+    std::sort(points, points + pointsLength, cmp);
 }
 
 /**
@@ -273,35 +277,6 @@
 }
 
 /**
- * Sort points by x axis
- *
- * @param points points to sort
- * @param low start index
- * @param high end index
- */
-void SpotShadow::quicksortX(Vector2* points, int low, int high) {
-    int i = low, j = high;
-    int p = low + (high - low) / 2;
-    float pivot = points[p].x;
-    while (i <= j) {
-        while (points[i].x < pivot) {
-            i++;
-        }
-        while (points[j].x > pivot) {
-            j--;
-        }
-
-        if (i <= j) {
-            swap(points, i, j);
-            i++;
-            j--;
-        }
-    }
-    if (low < j) quicksortX(points, low, j);
-    if (i < high) quicksortX(points, i, high);
-}
-
-/**
  * Test whether a point is inside the polygon.
  *
  * @param testPoint the point to test
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/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index 5147e98..fe1b7fd 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -93,7 +93,7 @@
 }
 
 void TextureCache::setFlushRate(float flushRate) {
-    mFlushRate = fmaxf(0.0f, fminf(1.0f, flushRate));
+    mFlushRate = std::max(0.0f, std::min(1.0f, flushRate));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
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/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index b88f30e..260fb6f 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -160,7 +160,7 @@
     return info && ((*info)[FrameInfoIndex::Flags] & FrameInfoFlags::SkippedFrame);
 }
 
-void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo) {
+void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo, int64_t syncQueued) {
     mRenderThread.removeFrameCallback(this);
 
     // If the previous frame was dropped we don't need to hold onto it, so
@@ -169,6 +169,7 @@
         mCurrentFrameInfo = &mFrames.next();
     }
     mCurrentFrameInfo->importUiThreadInfo(uiFrameInfo);
+    mCurrentFrameInfo->set(FrameInfoIndex::SyncQueued) = syncQueued;
     mCurrentFrameInfo->markSyncStart();
 
     info.damageAccumulator = &mDamageAccumulator;
@@ -293,7 +294,7 @@
                 mRenderThread.timeLord().latestVsync());
 
     TreeInfo info(TreeInfo::MODE_RT_ONLY, mRenderThread.renderState());
-    prepareTree(info, frameInfo);
+    prepareTree(info, frameInfo, systemTime(CLOCK_MONOTONIC));
     if (info.out.canDrawThisFrame) {
         draw();
     }
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index 10e66e9..f2fa9cd 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -78,7 +78,7 @@
     void setOpaque(bool opaque);
     void makeCurrent();
     void processLayerUpdate(DeferredLayerUpdater* layerUpdater);
-    void prepareTree(TreeInfo& info, int64_t* uiFrameInfo);
+    void prepareTree(TreeInfo& info, int64_t* uiFrameInfo, int64_t syncQueued);
     void draw();
     void destroy();
 
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
index 008e297..6507ce8 100644
--- a/libs/hwui/renderthread/DrawFrameTask.cpp
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -69,6 +69,7 @@
     LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!");
 
     mSyncResult = kSync_OK;
+    mSyncQueued = systemTime(CLOCK_MONOTONIC);
     postAndWait();
 
     return mSyncResult;
@@ -119,7 +120,7 @@
         mContext->processLayerUpdate(mLayers[i].get());
     }
     mLayers.clear();
-    mContext->prepareTree(info, mFrameInfo);
+    mContext->prepareTree(info, mFrameInfo, mSyncQueued);
 
     // This is after the prepareTree so that any pending operations
     // (RenderNode tree state, prefetched layers, etc...) will be flushed.
diff --git a/libs/hwui/renderthread/DrawFrameTask.h b/libs/hwui/renderthread/DrawFrameTask.h
index 8039643..ebefcba 100644
--- a/libs/hwui/renderthread/DrawFrameTask.h
+++ b/libs/hwui/renderthread/DrawFrameTask.h
@@ -85,6 +85,7 @@
     std::vector< sp<DeferredLayerUpdater> > mLayers;
 
     int mSyncResult;
+    int64_t mSyncQueued;
 
     int64_t mFrameInfo[UI_THREAD_FRAME_INFO_SIZE];
 };
diff --git a/libs/hwui/tests/main.cpp b/libs/hwui/tests/main.cpp
index ceee953..80d7029 100644
--- a/libs/hwui/tests/main.cpp
+++ b/libs/hwui/tests/main.cpp
@@ -111,8 +111,6 @@
         for (int i = 0; i < animation.getFrameCount(); i++) {
             testContext.waitForVsync();
 
-            // workaround b/20853441
-            proxy->fence();
             ATRACE_NAME("UI-Draw Frame");
             nsecs_t vsync = systemTime(CLOCK_MONOTONIC);
             UiFrameInfoBuilder(proxy->frameInfo())
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/IRingtonePlayer.aidl b/media/java/android/media/IRingtonePlayer.aidl
index 7c011e6..aa5fde3 100644
--- a/media/java/android/media/IRingtonePlayer.aidl
+++ b/media/java/android/media/IRingtonePlayer.aidl
@@ -25,9 +25,10 @@
  */
 interface IRingtonePlayer {
     /** Used for Ringtone.java playback */
-    void play(IBinder token, in Uri uri, in AudioAttributes aa);
+    void play(IBinder token, in Uri uri, in AudioAttributes aa, float volume, boolean looping);
     void stop(IBinder token);
     boolean isPlaying(IBinder token);
+    void setPlaybackProperties(IBinder token, float volume, boolean looping);
 
     /** Used for Notification sound playback. */
     void playAsync(in Uri uri, in UserHandle user, boolean looping, in AudioAttributes aa);
diff --git a/media/java/android/media/ImageUtils.java b/media/java/android/media/ImageUtils.java
index 2763d1d..ba3949a 100644
--- a/media/java/android/media/ImageUtils.java
+++ b/media/java/android/media/ImageUtils.java
@@ -21,6 +21,8 @@
 import android.media.Image.Plane;
 import android.util.Size;
 
+import libcore.io.Memory;
+
 import java.nio.ByteBuffer;
 
 /**
@@ -109,12 +111,50 @@
         ByteBuffer srcBuffer = null;
         ByteBuffer dstBuffer = null;
         for (int i = 0; i < srcPlanes.length; i++) {
+            int srcRowStride = srcPlanes[i].getRowStride();
+            int dstRowStride = dstPlanes[i].getRowStride();
             srcBuffer = srcPlanes[i].getBuffer();
+            dstBuffer = dstPlanes[i].getBuffer();
+            if (!(srcBuffer.isDirect() && dstBuffer.isDirect())) {
+                throw new IllegalArgumentException("Source and destination ByteBuffers must be"
+                        + " direct byteBuffer!");
+            }
+            if (srcPlanes[i].getPixelStride() != dstPlanes[i].getPixelStride()) {
+                throw new IllegalArgumentException("Source plane image pixel stride " +
+                        srcPlanes[i].getPixelStride() +
+                        " must be same as destination image pixel stride " +
+                        dstPlanes[i].getPixelStride());
+            }
+
             int srcPos = srcBuffer.position();
             srcBuffer.rewind();
-            dstBuffer = dstPlanes[i].getBuffer();
             dstBuffer.rewind();
-            dstBuffer.put(srcBuffer);
+            if (srcRowStride == dstRowStride) {
+                // Fast path, just copy the content if the byteBuffer all together.
+                dstBuffer.put(srcBuffer);
+            } else {
+                // Source and destination images may have different alignment requirements,
+                // therefore may have different strides. Copy row by row for such case.
+                int srcOffset = srcBuffer.position();
+                int dstOffset = dstBuffer.position();
+                Size effectivePlaneSize = getEffectivePlaneSizeForImage(src, i);
+                int srcByteCount = effectivePlaneSize.getWidth() * srcPlanes[i].getPixelStride();
+                for (int row = 0; row < effectivePlaneSize.getHeight(); row++) {
+                    if (row == effectivePlaneSize.getHeight() - 1) {
+                        // Special case for NV21 backed YUV420_888: need handle the last row
+                        // carefully to avoid memory corruption. Check if we have enough bytes to
+                        // copy.
+                        int remainingBytes = srcBuffer.remaining() - srcOffset;
+                        if (srcByteCount > remainingBytes) {
+                            srcByteCount = remainingBytes;
+                        }
+                    }
+                    directByteBufferCopy(srcBuffer, srcOffset, dstBuffer, dstOffset, srcByteCount);
+                    srcOffset += srcRowStride;
+                    dstOffset += dstRowStride;
+                }
+            }
+
             srcBuffer.position(srcPos);
             dstBuffer.rewind();
         }
@@ -175,4 +215,44 @@
 
         return (int)(width * height * estimatedBytePerPixel * numImages);
     }
+
+    private static Size getEffectivePlaneSizeForImage(Image image, int planeIdx) {
+        switch (image.getFormat()) {
+            case ImageFormat.YV12:
+            case ImageFormat.YUV_420_888:
+            case ImageFormat.NV21:
+                if (planeIdx == 0) {
+                    return new Size(image.getWidth(), image.getHeight());
+                } else {
+                    return new Size(image.getWidth() / 2, image.getHeight() / 2);
+                }
+            case ImageFormat.NV16:
+                if (planeIdx == 0) {
+                    return new Size(image.getWidth(), image.getHeight());
+                } else {
+                    return new Size(image.getWidth(), image.getHeight() / 2);
+                }
+            case PixelFormat.RGB_565:
+            case PixelFormat.RGBA_8888:
+            case PixelFormat.RGBX_8888:
+            case PixelFormat.RGB_888:
+            case ImageFormat.JPEG:
+            case ImageFormat.YUY2:
+            case ImageFormat.Y8:
+            case ImageFormat.Y16:
+            case ImageFormat.RAW_SENSOR:
+            case ImageFormat.RAW10:
+                return new Size(image.getWidth(), image.getHeight());
+            case ImageFormat.PRIVATE:
+                return new Size(0, 0);
+            default:
+                throw new UnsupportedOperationException(
+                        String.format("Invalid image format %d", image.getFormat()));
+        }
+    }
+
+    private static void directByteBufferCopy(ByteBuffer srcBuffer, int srcOffset,
+            ByteBuffer dstBuffer, int dstOffset, int srcByteCount) {
+        Memory.memmove(dstBuffer, dstOffset, srcBuffer, srcOffset, srcByteCount);
+    }
 }
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/MediaCodec.java b/media/java/android/media/MediaCodec.java
index a79dd04..5f60891 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -2029,12 +2029,21 @@
          */
         public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4;
 
+        /**
+         * This indicates that decryption was attempted on a session that is
+         * not opened, which could be due to a failure to open the session,
+         * closing the session prematurely, or the session being reclaimed
+         * by the resource manager.
+         */
+        public static final int ERROR_SESSION_NOT_OPENED = 5;
+
         /** @hide */
         @IntDef({
             ERROR_NO_KEY,
             ERROR_KEY_EXPIRED,
             ERROR_RESOURCE_BUSY,
             ERROR_INSUFFICIENT_OUTPUT_PROTECTION,
+            ERROR_SESSION_NOT_OPENED,
         })
         @Retention(RetentionPolicy.SOURCE)
         public @interface CryptoErrorCode {}
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index 166ff38..faeebe6 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -76,6 +76,10 @@
             .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
             .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
             .build();
+    // playback properties, use synchronized with mPlaybackSettingsLock
+    private boolean mIsLooping = false;
+    private float mVolume = 1.0f;
+    private final Object mPlaybackSettingsLock = new Object();
 
     /** {@hide} */
     public Ringtone(Context context, boolean allowRemote) {
@@ -136,6 +140,52 @@
     }
 
     /**
+     * @hide
+     * Sets the player to be looping or non-looping.
+     * @param looping whether to loop or not
+     */
+    public void setLooping(boolean looping) {
+        synchronized (mPlaybackSettingsLock) {
+            mIsLooping = looping;
+            applyPlaybackProperties_sync();
+        }
+    }
+
+    /**
+     * @hide
+     * Sets the volume on this player.
+     * @param volume a raw scalar in range 0.0 to 1.0, where 0.0 mutes this player, and 1.0
+     *   corresponds to no attenuation being applied.
+     */
+    public void setVolume(float volume) {
+        synchronized (mPlaybackSettingsLock) {
+            if (volume < 0.0f) { volume = 0.0f; }
+            if (volume > 1.0f) { volume = 1.0f; }
+            mVolume = volume;
+            applyPlaybackProperties_sync();
+        }
+    }
+
+    /**
+     * Must be called synchronized on mPlaybackSettingsLock
+     */
+    private void applyPlaybackProperties_sync() {
+        if (mLocalPlayer != null) {
+            mLocalPlayer.setVolume(mVolume);
+            mLocalPlayer.setLooping(mIsLooping);
+        } else if (mAllowRemote && (mRemotePlayer != null)) {
+            try {
+                mRemotePlayer.setPlaybackProperties(mRemoteToken, mVolume, mIsLooping);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem setting playback properties: ", e);
+            }
+        } else {
+            Log.w(TAG,
+                    "Neither local nor remote player available when applying playback properties");
+        }
+    }
+
+    /**
      * Returns a human-presentable title for ringtone. Looks in media
      * content provider. If not in either, uses the filename
      * 
@@ -221,6 +271,9 @@
         try {
             mLocalPlayer.setDataSource(mContext, mUri);
             mLocalPlayer.setAudioAttributes(mAudioAttributes);
+            synchronized (mPlaybackSettingsLock) {
+                applyPlaybackProperties_sync();
+            }
             mLocalPlayer.prepare();
 
         } catch (SecurityException | IOException e) {
@@ -257,8 +310,14 @@
             }
         } else if (mAllowRemote && (mRemotePlayer != null)) {
             final Uri canonicalUri = mUri.getCanonicalUri();
+            final boolean looping;
+            final float volume;
+            synchronized (mPlaybackSettingsLock) {
+                looping = mIsLooping;
+                volume = mVolume;
+            }
             try {
-                mRemotePlayer.play(mRemoteToken, canonicalUri, mAudioAttributes);
+                mRemotePlayer.play(mRemoteToken, canonicalUri, mAudioAttributes, volume, looping);
             } catch (RemoteException e) {
                 if (!playFallbackRingtone()) {
                     Log.w(TAG, "Problem playing ringtone: " + e);
@@ -349,6 +408,9 @@
                                     afd.getDeclaredLength());
                         }
                         mLocalPlayer.setAudioAttributes(mAudioAttributes);
+                        synchronized (mPlaybackSettingsLock) {
+                            applyPlaybackProperties_sync();
+                        }
                         mLocalPlayer.prepare();
                         startLocalPlayer();
                         afd.close();
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/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index ce7f7e5..218a117 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -64,6 +64,7 @@
     jint cryptoErrorKeyExpired;
     jint cryptoErrorResourceBusy;
     jint cryptoErrorInsufficientOutputProtection;
+    jint cryptoErrorSessionNotOpened;
 } gCryptoErrorCodes;
 
 static struct CodecActionCodes {
@@ -843,6 +844,9 @@
         case ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION:
             err = gCryptoErrorCodes.cryptoErrorInsufficientOutputProtection;
             break;
+        case ERROR_DRM_SESSION_NOT_OPENED:
+            err = gCryptoErrorCodes.cryptoErrorSessionNotOpened;
+            break;
         default:  /* Other negative DRM error codes go out as is. */
             break;
     }
@@ -1689,6 +1693,11 @@
     gCryptoErrorCodes.cryptoErrorInsufficientOutputProtection =
         env->GetStaticIntField(clazz.get(), field);
 
+    field = env->GetStaticFieldID(clazz.get(), "ERROR_SESSION_NOT_OPENED", "I");
+    CHECK(field != NULL);
+    gCryptoErrorCodes.cryptoErrorSessionNotOpened =
+        env->GetStaticIntField(clazz.get(), field);
+
     clazz.reset(env->FindClass("android/media/MediaCodec$CodecException"));
     CHECK(clazz.get() != NULL);
     field = env->GetStaticFieldID(clazz.get(), "ACTION_TRANSIENT", "I");
diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
index ddbcd78..a489f94 100644
--- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
+++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
+import android.net.CaptivePortal;
 import android.net.ConnectivityManager;
 import android.net.ConnectivityManager.NetworkCallback;
 import android.net.Network;
@@ -62,7 +63,7 @@
 
     private URL mURL;
     private Network mNetwork;
-    private String mResponseToken;
+    private CaptivePortal mCaptivePortal;
     private NetworkCallback mNetworkCallback;
     private ConnectivityManager mCm;
     private boolean mLaunchBrowser = false;
@@ -83,7 +84,7 @@
             done(Result.WANTED_AS_IS);
         }
         mNetwork = getIntent().getParcelableExtra(ConnectivityManager.EXTRA_NETWORK);
-        mResponseToken = getIntent().getStringExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL_TOKEN);
+        mCaptivePortal = getIntent().getParcelableExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL);
 
         // Also initializes proxy system properties.
         mCm.bindProcessToNetwork(mNetwork);
@@ -155,13 +156,13 @@
         }
         switch (result) {
             case DISMISSED:
-                mCm.reportCaptivePortalDismissed(mNetwork, mResponseToken);
+                mCaptivePortal.reportCaptivePortalDismissed();
                 break;
             case UNWANTED:
-                mCm.ignoreNetworkWithCaptivePortal(mNetwork, mResponseToken);
+                mCaptivePortal.ignoreNetwork();
                 break;
             case WANTED_AS_IS:
-                mCm.useNetworkWithCaptivePortal(mNetwork, mResponseToken);
+                mCaptivePortal.useNetwork();
                 break;
         }
         finish();
diff --git a/packages/DefaultContainerService/AndroidManifest.xml b/packages/DefaultContainerService/AndroidManifest.xml
index 14777a9..6a72d83 100644
--- a/packages/DefaultContainerService/AndroidManifest.xml
+++ b/packages/DefaultContainerService/AndroidManifest.xml
@@ -5,10 +5,10 @@
     <uses-permission android:name="android.permission.ASEC_DESTROY"/>
     <uses-permission android:name="android.permission.ASEC_MOUNT_UNMOUNT"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    <!-- Used to improve MeasureUtils performance on emulated storage -->
+    <!-- Used to improve MeasureUtils performance on emulated storage, and to
+         view storage for all users -->
     <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
-    <uses-permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE" />
 
     <application android:label="@string/service_name"
                  android:allowBackup="false">
diff --git a/packages/DocumentsUI/res/layout-sw720dp/activity.xml b/packages/DocumentsUI/res/layout-sw720dp/activity.xml
index 2a273f4..221de13 100644
--- a/packages/DocumentsUI/res/layout-sw720dp/activity.xml
+++ b/packages/DocumentsUI/res/layout-sw720dp/activity.xml
@@ -55,6 +55,7 @@
             android:layout_height="match_parent"
             android:layout_weight="1"
             android:orientation="vertical"
+            android:background="@color/material_grey_50"
             android:elevation="8dp">
 
             <com.android.documentsui.DirectoryContainerView
@@ -67,6 +68,7 @@
                 android:id="@+id/container_save"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:background="@color/material_grey_50"
                 android:elevation="8dp" />
 
         </LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/activity.xml b/packages/DocumentsUI/res/layout/activity.xml
index 43fdaf2..32431e3 100644
--- a/packages/DocumentsUI/res/layout/activity.xml
+++ b/packages/DocumentsUI/res/layout/activity.xml
@@ -51,6 +51,7 @@
             android:id="@+id/container_save"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:background="@color/material_grey_50"
             android:elevation="8dp" />
 
     </LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml
index 2c08e72..4717839 100644
--- a/packages/DocumentsUI/res/layout/fragment_directory.xml
+++ b/packages/DocumentsUI/res/layout/fragment_directory.xml
@@ -16,7 +16,8 @@
 
 <com.android.documentsui.DirectoryView xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:background="@color/material_grey_50">
 
     <TextView
         android:id="@android:id/empty"
diff --git a/packages/DocumentsUI/res/values-bn-rBD/strings.xml b/packages/DocumentsUI/res/values-bn-rBD/strings.xml
index a999300..4167194 100644
--- a/packages/DocumentsUI/res/values-bn-rBD/strings.xml
+++ b/packages/DocumentsUI/res/values-bn-rBD/strings.xml
@@ -22,7 +22,7 @@
     <string name="menu_create_dir" msgid="5947289605844398389">"ফোল্ডার তৈরি করুন"</string>
     <string name="menu_grid" msgid="6878021334497835259">"গ্রিড দৃশ্য"</string>
     <string name="menu_list" msgid="7279285939892417279">"তালিকা দৃশ্য"</string>
-    <string name="menu_sort" msgid="7677740407158414452">"এর দ্বারা সাজান"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"এই অনুসারে বাছুন"</string>
     <string name="menu_search" msgid="3816712084502856974">"অনুসন্ধান করুন"</string>
     <string name="menu_settings" msgid="6008033148948428823">"সেটিংস"</string>
     <string name="menu_open" msgid="432922957274920903">"খুলুন"</string>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
index 14f82ce..03f09ff 100644
--- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml
+++ b/packages/DocumentsUI/res/values-fr-rCA/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">"Documents"</string>
-    <string name="title_open" msgid="4353228937663917801">"Ouvert à partir de"</string>
+    <string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string>
     <string name="title_save" msgid="2433679664882857999">"Enregistrer dans"</string>
     <string name="menu_create_dir" msgid="5947289605844398389">"Créer un dossier"</string>
     <string name="menu_grid" msgid="6878021334497835259">"Grille"</string>
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-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml
index 2b79f8e..84e5495 100644
--- a/packages/DocumentsUI/res/values-pl/strings.xml
+++ b/packages/DocumentsUI/res/values-pl/strings.xml
@@ -56,7 +56,7 @@
     <string name="empty" msgid="7858882803708117596">"Brak elementów"</string>
     <string name="toast_no_application" msgid="1339885974067891667">"Nie można otworzyć pliku"</string>
     <string name="toast_failed_delete" msgid="2180678019407244069">"Nie można usunąć niektórych dokumentów"</string>
-    <string name="share_via" msgid="8966594246261344259">"Udostępnij przez"</string>
+    <string name="share_via" msgid="8966594246261344259">"Udostępnij przez:"</string>
     <string name="copy_notification_title" msgid="6374299806748219777">"Kopiowanie plików"</string>
     <string name="copy_remaining" msgid="6283790937387975095">"Pozostało: <xliff:g id="DURATION">%s</xliff:g>"</string>
     <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml
index 65e857b..c753c57 100644
--- a/packages/DocumentsUI/res/values-sl/strings.xml
+++ b/packages/DocumentsUI/res/values-sl/strings.xml
@@ -17,8 +17,8 @@
 <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">"Dokumenti"</string>
-    <string name="title_open" msgid="4353228937663917801">"Odpiranje iz"</string>
-    <string name="title_save" msgid="2433679664882857999">"Shranjevanje v"</string>
+    <string name="title_open" msgid="4353228937663917801">"Odpri iz mape"</string>
+    <string name="title_save" msgid="2433679664882857999">"Shrani v"</string>
     <string name="menu_create_dir" msgid="5947289605844398389">"Ustvarjanje mape"</string>
     <string name="menu_grid" msgid="6878021334497835259">"Mrežni pogled"</string>
     <string name="menu_list" msgid="7279285939892417279">"Pogled seznama"</string>
@@ -30,7 +30,7 @@
     <string name="menu_share" msgid="3075149983979628146">"Skupna raba"</string>
     <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
     <string name="menu_select_all" msgid="8323579667348729928">"Izberi vse"</string>
-    <string name="menu_copy" msgid="3612326052677229148">"Kopiranje v …"</string>
+    <string name="menu_copy" msgid="3612326052677229148">"Kopiraj v …"</string>
     <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Pokaži notranjo shrambo"</string>
     <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Pokaži kartico SD"</string>
     <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Skrij notranjo shrambo"</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/DocumentsUI/res/values/colors.xml b/packages/DocumentsUI/res/values/colors.xml
index 2b839d4..ba8d69f 100644
--- a/packages/DocumentsUI/res/values/colors.xml
+++ b/packages/DocumentsUI/res/values/colors.xml
@@ -15,6 +15,7 @@
 -->
 
 <resources>
+    <color name="material_grey_50">#fffafafa</color>
     <color name="material_grey_300">#ffeeeeee</color>
 
     <color name="item_doc_grid_background">@color/material_grey_300</color>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
index f4be9c5..006f6e9 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java
@@ -50,6 +50,8 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.CancellationSignal;
+import android.os.Handler;
+import android.os.Looper;
 import android.os.OperationCanceledException;
 import android.os.Parcelable;
 import android.provider.DocumentsContract;
@@ -135,6 +137,8 @@
 
     private final int mLoaderId = 42;
 
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+
     public static void showNormal(FragmentManager fm, RootInfo root, DocumentInfo doc, int anim) {
         show(fm, TYPE_NORMAL, root, doc, null, anim);
     }
@@ -297,6 +301,21 @@
 
             @Override
             public void onLoadFinished(Loader<DirectoryResult> loader, DirectoryResult result) {
+                if (result == null || result.exception != null) {
+                    // onBackPressed does a fragment transaction, which can't be done inside
+                    // onLoadFinished
+                    mHandler.post(new Runnable() {
+                        @Override
+                        public void run() {
+                            final Activity activity = getActivity();
+                            if (activity != null) {
+                                activity.onBackPressed();
+                            }
+                        }
+                    });
+                    return;
+                }
+
                 if (!isAdded()) return;
 
                 mAdapter.swapResult(result);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
index 8e4ec8c..a8a61d2 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
@@ -31,7 +31,10 @@
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.CancellationSignal;
+import android.os.Handler;
+import android.os.Looper;
 import android.os.OperationCanceledException;
+import android.os.RemoteException;
 import android.provider.DocumentsContract;
 import android.provider.DocumentsContract.Document;
 import android.util.Log;
@@ -163,6 +166,10 @@
 
             cursor = client.query(
                     mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal);
+            if (cursor == null) {
+                throw new RemoteException("Provider returned null");
+            }
+
             cursor.registerContentObserver(mObserver);
 
             cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1);
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 4143e15..4f0c6a41 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -62,6 +62,9 @@
 
     public static final String AUTHORITY = "com.android.externalstorage.documents";
 
+    private static final Uri BASE_URI =
+            new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY).build();
+
     // docId format: root:path/to/file
 
     private static final String[] DEFAULT_ROOT_PROJECTION = new String[] {
@@ -170,8 +173,10 @@
 
         Log.d(TAG, "After updating volumes, found " + mRoots.size() + " active roots");
 
-        getContext().getContentResolver()
-                .notifyChange(DocumentsContract.buildRootsUri(AUTHORITY), null, false);
+        // Note this affects content://com.android.externalstorage.documents/root/39BD-07C5
+        // as well as content://com.android.externalstorage.documents/document/*/children,
+        // so just notify on content://com.android.externalstorage.documents/.
+        getContext().getContentResolver().notifyChange(BASE_URI, null, false);
     }
 
     private static String[] resolveRootProjection(String[] projection) {
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-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml
index 3ee70f0..8c38901 100644
--- a/packages/Keyguard/res/values-el/strings.xml
+++ b/packages/Keyguard/res/values-el/strings.xml
@@ -28,7 +28,7 @@
     <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_wrong_pin_code" msgid="2422225591006134936">"Λανθασμένος κωδικός PIN."</string>
     <string name="keyguard_charged" msgid="3272223906073492454">"Φορτίστηκε"</string>
     <string name="keyguard_plugged_in" msgid="9087497435553252863">"Φόρτιση"</string>
     <string name="keyguard_low_battery" msgid="8143808018719173859">"Συνδέστε τον φορτιστή."</string>
@@ -57,8 +57,8 @@
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <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_password" msgid="2333281762128113157">"Λανθασμένος κωδικός πρόσβασης"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"Λανθασμένος κωδικός PIN"</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 SIM"</string>
@@ -92,15 +92,15 @@
     <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> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το tablet σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\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 κάρτας SIM. Θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Λανθασμένος κωδικός PIN κάρτας SIM. Θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249">
-      <item quantity="other">Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες. </item>
-      <item quantity="one">Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας.</item>
+      <item quantity="other">Λανθασμένος κωδικός PIN κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες. </item>
+      <item quantity="one">Λανθασμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%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="other">Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item>
-      <item quantity="one">Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item>
+      <item quantity="other">Λανθασμένος κωδικός PUK κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item>
+      <item quantity="one">Λανθασμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item>
     </plurals>
     <string name="kg_password_pin_failed" msgid="6268288093558031564">"Αποτυχία λειτουργίας κωδικού PIN κάρτας SIM!"</string>
     <string name="kg_password_puk_failed" msgid="2838824369502455984">"Αποτυχία λειτουργίας κωδικού PUK κάρτας SIM!"</string>
diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml
index 6c4ecee..7f516a7 100644
--- a/packages/Keyguard/res/values-fa/strings.xml
+++ b/packages/Keyguard/res/values-fa/strings.xml
@@ -52,7 +52,7 @@
     <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"قسمت پین"</string>
     <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"قسمت پین سیم‌کارت"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"‏قسمت PUK سیم‌کارت"</string>
-    <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"زنگ هشدار بعدی برای <xliff:g id="ALARM">%1$s</xliff:g> تنظیم شد"</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">"Delete"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"الگو را فراموش کرده‌اید"</string>
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-uz-rUZ/strings.xml b/packages/Keyguard/res/values-uz-rUZ/strings.xml
index 756c0a7..daf5318 100644
--- a/packages/Keyguard/res/values-uz-rUZ/strings.xml
+++ b/packages/Keyguard/res/values-uz-rUZ/strings.xml
@@ -22,36 +22,36 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN-kodni kiriting"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"SIM karta PUK kodi va yangi PIN kodni tering"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM karta PUK kodi"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Yangi SIM karta PIN kodi"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"SIM-karta PUK kodi va yangi PIN kodni tering"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM-karta PUK kodi"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Yangi SIM-karta PIN kodi"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Parolni kiritish uchun bosing"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Qulfni ochish uchun parolni kiriting"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Qulfni ochish uchun PIN-kodni kiriting"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Noto‘g‘ri PIN kod."</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Noto‘g‘ri PIN-kod."</string>
     <string name="keyguard_charged" msgid="3272223906073492454">"Batareya quvvati to‘ldi"</string>
     <string name="keyguard_plugged_in" msgid="9087497435553252863">"Quvvat olmoqda"</string>
     <string name="keyguard_low_battery" msgid="8143808018719173859">"Zaryadlagichni ulang."</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Qulfni ochish uchun \"Menyu\"ga bosing."</string>
     <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Tarmoq qulflangan"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM karta yo‘q"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Ushbu planshetda SIM karta yo‘q."</string>
-    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Ushbu telefonda SIM karta yo‘q."</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM-karta yo‘q"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Ushbu planshetda SIM-karta yo‘q."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Ushbu telefonda SIM-karta yo‘q."</string>
     <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Telefonga SIM kartani joylashtiring."</string>
-    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM karta qo‘yilmagan yoki o‘qib bo‘lmayapti. SIM kartani joylashtiring."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-karta qo‘yilmagan yoki o‘qib bo‘lmayapti. SIM-kartani joylashtiring."</string>
     <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM kartadan foydalanib bo‘lmaydi."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM kartangiz butunlay o‘chirilgan.\n Boshqa SIM karta olish uchun aloqa operatori bilan bog‘laning."</string>
-    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karta qulflangan."</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karta PUK kod bilan qulflangan."</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM karta qulfi ochilmoqda…"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kartangiz butunlay o‘chirilgan.\n Boshqa SIM-karta olish uchun aloqa operatori bilan bog‘laning."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-karta qulflangan."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-karta PUK kod bilan qulflangan."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-karta qulfi ochilmoqda…"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Chizmali qulfni ochish."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin qulfini ochish."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parolli qulfni ochish."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Chizmali qulf maydoni."</string>
     <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Maydonni silang"</string>
-    <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN kod maydoni"</string>
-    <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM karta PIN kodi maydoni"</string>
-    <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM karta PUK kodi maydoni"</string>
+    <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-kod maydoni"</string>
+    <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM-karta PIN kodi maydoni"</string>
+    <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM-karta PUK kodi maydoni"</string>
     <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"Uyg‘otkich signali <xliff:g id="ALARM">%1$s</xliff:g> da chalinadi."</string>
     <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"O‘chirish"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Kiritish"</string>
@@ -65,11 +65,11 @@
     <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"“<xliff:g id="CARRIER">%1$s</xliff:g>” SIM kartasi uchun PIN kodni kiriting"</string>
     <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN kodni tering"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"Parol kiriting"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM karta hozir o‘chirilgan. Davom etish uchun PUK kodni kiriting. To‘liqroq ma’lumot olish uchun tarmoq operatori bilan bog‘laning."</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-karta hozir o‘chirilgan. Davom etish uchun PUK kodni kiriting. To‘liqroq ma’lumot olish uchun tarmoq operatori bilan bog‘laning."</string>
     <string name="kg_puk_enter_puk_hint_multi" msgid="363822494559783025">"“<xliff:g id="CARRIER">%1$s</xliff:g>” SIM kartasi o‘chirib qo‘yildi. Davom etish uchun PUK kodni kiriting. Tafsilotlar uchun aloqa operatoringizga murojaat qiling."</string>
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"So‘ralgan PIN kodni kiriting"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"So‘ralgan PIN kodni tasdiqlang"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM karta qulfi ochilmoqda…"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-karta qulfi ochilmoqda…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4 tadan 8 ta raqamgacha bo‘lgan PIN kodni kiriting."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kod kamida 8 ta raqam bo‘lishi shart."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"To‘g‘ri PUK kodni qayta kiriting. Qayta-qayta urinishlar SIM kartani butunlay o‘chirib qo‘yadi."</string>
@@ -92,18 +92,18 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4951507352869831265">"Siz telefonni qulfdan chiqarish uchun <xliff:g id="NUMBER">%d</xliff:g> marta noto‘g‘ri urinish qildingiz. Endi, ishchi profil o‘chirib tashlanadi va undagi barcha ma’lumotlar ham o‘chib ketadi."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz chizmali kalitni  <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri kiritdingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, planshet qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz chizmali kalitni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri chizdingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, telefon qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string>
-    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM karta PIN kodi noto‘g‘ri. Qurilma qulfini ochish uchun aloqa operatoringiz bilan bog‘laning."</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM-karta PIN kodi noto‘g‘ri. Qurilma qulfini ochish uchun aloqa operatoringiz bilan bog‘laning."</string>
     <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249">
       <item quantity="other">SIM kartaning PIN kodi noto‘g‘ri. Sizda yana <xliff:g id="NUMBER_1">%d</xliff:g> ta urinish qoldi.</item>
       <item quantity="one">SIM kartaning PIN kodi noto‘g‘ri. Qurilmani qulfdan chiqarish uchun sizda yana <xliff:g id="NUMBER_0">%d</xliff:g> ta urinish qoldi.</item>
     </plurals>
     <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kartadan foydalanib bo‘lmaydi. Aloqa operatoringiz bilan bog‘laning."</string>
     <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780">
-      <item quantity="other">SIM kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta butunlay ishdan chiqadi.</item>
-      <item quantity="one">SIM kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_0">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta butunlay ishdan chiqadi.</item>
+      <item quantity="other">SIM-kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM-karta butunlay ishdan chiqadi.</item>
+      <item quantity="one">SIM-kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_0">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM-karta butunlay ishdan chiqadi.</item>
     </plurals>
-    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM karta PIN jarayoni amalga oshmadi!"</string>
-    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM karta PUK jarayoni amalga oshmadi!"</string>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM-karta PIN jarayoni amalga oshmadi!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM-karta PUK jarayoni amalga oshmadi!"</string>
     <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod qabul qilindi!"</string>
     <string name="keyguard_carrier_default" msgid="8700650403054042153">"Aloqa yo‘q."</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Kiritish uslubi tugmasini almashtirish."</string>
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/PrintSpooler/res/values-cs/strings.xml b/packages/PrintSpooler/res/values-cs/strings.xml
index 9e164da..99ed75d 100644
--- a/packages/PrintSpooler/res/values-cs/strings.xml
+++ b/packages/PrintSpooler/res/values-cs/strings.xml
@@ -20,7 +20,7 @@
     <string name="more_options_button" msgid="2243228396432556771">"Další možnosti"</string>
     <string name="label_destination" msgid="9132510997381599275">"Cíl"</string>
     <string name="label_copies" msgid="3634531042822968308">"Kopie"</string>
-    <string name="label_copies_summary" msgid="3861966063536529540">"Počet kopií:"</string>
+    <string name="label_copies_summary" msgid="3861966063536529540">"Kopie:"</string>
     <string name="label_paper_size" msgid="908654383827777759">"Velikost papíru"</string>
     <string name="label_paper_size_summary" msgid="5668204981332138168">"Velikost papíru:"</string>
     <string name="label_color" msgid="1108690305218188969">"Barva"</string>
diff --git a/packages/PrintSpooler/res/values-it/strings.xml b/packages/PrintSpooler/res/values-it/strings.xml
index 238211d..b052341 100644
--- a/packages/PrintSpooler/res/values-it/strings.xml
+++ b/packages/PrintSpooler/res/values-it/strings.xml
@@ -21,8 +21,8 @@
     <string name="label_destination" msgid="9132510997381599275">"Destinazione"</string>
     <string name="label_copies" msgid="3634531042822968308">"Copie"</string>
     <string name="label_copies_summary" msgid="3861966063536529540">"Copie:"</string>
-    <string name="label_paper_size" msgid="908654383827777759">"Dimensioni carta"</string>
-    <string name="label_paper_size_summary" msgid="5668204981332138168">"Dimensioni carta:"</string>
+    <string name="label_paper_size" msgid="908654383827777759">"Formato carta"</string>
+    <string name="label_paper_size_summary" msgid="5668204981332138168">"Formato carta:"</string>
     <string name="label_color" msgid="1108690305218188969">"A colori"</string>
     <string name="label_duplex" msgid="5370037254347072243">"Con doppia funzione"</string>
     <string name="label_orientation" msgid="2853142581990496477">"Orientamento"</string>
diff --git a/packages/PrintSpooler/res/values-kn-rIN/strings.xml b/packages/PrintSpooler/res/values-kn-rIN/strings.xml
index b16960e..72e0bac 100644
--- a/packages/PrintSpooler/res/values-kn-rIN/strings.xml
+++ b/packages/PrintSpooler/res/values-kn-rIN/strings.xml
@@ -35,7 +35,7 @@
     <string name="printing_app_crashed" msgid="854477616686566398">"ಮುದ್ರಣದ ಅಪ್ಲಿಕೇಶನ್ ಕ್ರ್ಯಾಶ್ ಆಗಿದೆ"</string>
     <string name="generating_print_job" msgid="3119608742651698916">"ಮುದ್ರಣ ಕಾರ್ಯ ರಚಿಸಲಾಗುತ್ತಿದೆ"</string>
     <string name="save_as_pdf" msgid="5718454119847596853">"PDF ರೂಪದಲ್ಲಿ ಉಳಿಸಿ"</string>
-    <string name="all_printers" msgid="5018829726861876202">"ಎಲ್ಲಾ ಮುದ್ರಕಗಳು…"</string>
+    <string name="all_printers" msgid="5018829726861876202">"ಎಲ್ಲಾ ಪ್ರಿಂಟರ್‌ಗಳು…"</string>
     <string name="print_dialog" msgid="32628687461331979">"ಮುದ್ರಣ ಸಂವಾದ"</string>
     <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
     <string name="page_description_template" msgid="6831239682256197161">"ಪುಟ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> / <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
@@ -47,7 +47,7 @@
     <string name="print_options_expanded" msgid="6944679157471691859">"ಪ್ರಿಂಟ್ ಆಯ್ಕೆಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ"</string>
     <string name="print_options_collapsed" msgid="7455930445670414332">"ಪ್ರಿಂಟ್ ಆಯ್ಕೆಗಳನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"</string>
     <string name="search" msgid="5421724265322228497">"ಹುಡುಕು"</string>
-    <string name="all_printers_label" msgid="3178848870161526399">"ಎಲ್ಲಾ ಮುದ್ರಕಗಳು"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"ಎಲ್ಲಾ ಪ್ರಿಂಟರ್‌ಗಳು"</string>
     <string name="add_print_service_label" msgid="5356702546188981940">"ಸೇವೆಯನ್ನು ಸೇರಿಸು"</string>
     <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ಹುಡುಕಾಟ ಪೆಟ್ಟಿಗೆಯನ್ನು ತೋರಿಸಲಾಗಿದೆ"</string>
     <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"ಹುಡುಕಾಟ ಪೆಟ್ಟಿಗೆಯನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ"</string>
diff --git a/packages/PrintSpooler/res/values-sk/strings.xml b/packages/PrintSpooler/res/values-sk/strings.xml
index 5b522e3f..3e82076 100644
--- a/packages/PrintSpooler/res/values-sk/strings.xml
+++ b/packages/PrintSpooler/res/values-sk/strings.xml
@@ -20,7 +20,7 @@
     <string name="more_options_button" msgid="2243228396432556771">"Ďalšie možnosti"</string>
     <string name="label_destination" msgid="9132510997381599275">"Cieľ"</string>
     <string name="label_copies" msgid="3634531042822968308">"Kópie"</string>
-    <string name="label_copies_summary" msgid="3861966063536529540">"Počet kópií:"</string>
+    <string name="label_copies_summary" msgid="3861966063536529540">"Kópie:"</string>
     <string name="label_paper_size" msgid="908654383827777759">"Veľkosť papiera"</string>
     <string name="label_paper_size_summary" msgid="5668204981332138168">"Veľkosť papiera:"</string>
     <string name="label_color" msgid="1108690305218188969">"Farba"</string>
diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml
index 394dd04..58e9622 100644
--- a/packages/PrintSpooler/res/values-sr/strings.xml
+++ b/packages/PrintSpooler/res/values-sr/strings.xml
@@ -20,7 +20,7 @@
     <string name="more_options_button" msgid="2243228396432556771">"Још опција"</string>
     <string name="label_destination" msgid="9132510997381599275">"Одредиште"</string>
     <string name="label_copies" msgid="3634531042822968308">"Копије"</string>
-    <string name="label_copies_summary" msgid="3861966063536529540">"Копије:"</string>
+    <string name="label_copies_summary" msgid="3861966063536529540">"Копија:"</string>
     <string name="label_paper_size" msgid="908654383827777759">"Величина папира"</string>
     <string name="label_paper_size_summary" msgid="5668204981332138168">"Величина папира:"</string>
     <string name="label_color" msgid="1108690305218188969">"Боја"</string>
diff --git a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
index 804c72e..8e41a34 100644
--- a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
+++ b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml
@@ -34,8 +34,8 @@
     <string name="install_for_print_preview" msgid="6366303997385509332">"PDF ko‘rsatuvchi dasturni o‘rnatish"</string>
     <string name="printing_app_crashed" msgid="854477616686566398">"Chop etish dasturi buzildi"</string>
     <string name="generating_print_job" msgid="3119608742651698916">"Chop etish buyrug‘i yaratilyapti"</string>
-    <string name="save_as_pdf" msgid="5718454119847596853">"PDF formatda saqlash"</string>
-    <string name="all_printers" msgid="5018829726861876202">"Barcha printerlar…"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF formatida saqlash"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Barcha printerlar"</string>
     <string name="print_dialog" msgid="32628687461331979">"Chop etish oynasi"</string>
     <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
     <string name="page_description_template" msgid="6831239682256197161">"Sahifa: <xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
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/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
index ef08e19..33f993e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
@@ -176,10 +176,7 @@
             mScanner = new Scanner();
         }
 
-        mScanResultCache.clear();
-        mSeenBssids.clear();
-        mScanId = 0;
-
+        mWorkHandler.sendEmptyMessage(WorkHandler.MSG_RESUME);
         if (mWifiManager.isWifiEnabled()) {
             mScanner.resume();
         }
@@ -251,6 +248,12 @@
         }
     }
 
+    private void handleResume() {
+        mScanResultCache.clear();
+        mSeenBssids.clear();
+        mScanId = 0;
+    }
+
     private Collection<ScanResult> fetchScanResults() {
         mScanId++;
         final List<ScanResult> newResults = mWifiManager.getScanResults();
@@ -544,6 +547,7 @@
     private final class WorkHandler extends Handler {
         private static final int MSG_UPDATE_ACCESS_POINTS = 0;
         private static final int MSG_UPDATE_NETWORK_INFO = 1;
+        private static final int MSG_RESUME = 2;
 
         public WorkHandler(Looper looper) {
             super(looper);
@@ -558,6 +562,9 @@
                 case MSG_UPDATE_NETWORK_INFO:
                     updateNetworkInfo((NetworkInfo) msg.obj);
                     break;
+                case MSG_RESUME:
+                    handleResume();
+                    break;
             }
         }
     }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 41043eb..8d9f3fd 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -1774,6 +1774,26 @@
             Uri uri = getNotificationUriFor(key, name);
 
             sendNotify(uri, userId);
+            if (isSecureSettingsKey(key)) {
+                maybeNotifyProfiles(userId, uri, name, sSecureCloneToManagedSettings);
+            } else if (isSystemSettingsKey(key)) {
+                maybeNotifyProfiles(userId, uri, name, sSystemCloneToManagedSettings);
+            }
+        }
+
+        private void maybeNotifyProfiles(int userId, Uri uri, String name,
+                Set<String> keysCloned) {
+            if (keysCloned.contains(name)) {
+                List<UserInfo> profiles = mUserManager.getProfiles(userId);
+                int size = profiles.size();
+                for (int i = 0; i < size; i++) {
+                    UserInfo profile = profiles.get(i);
+                    // the notification for userId has already been sent.
+                    if (profile.id != userId) {
+                        sendNotify(uri, profile.id);
+                    }
+                }
+            }
         }
 
         private int makeKey(int type, int userId) {
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index c259573..b41e1ac 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -25,7 +25,8 @@
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE" />
+    <!-- Used to read storage for all users -->
+    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
 
     <uses-permission android:name="android.permission.INJECT_EVENTS" />
@@ -51,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" />
@@ -177,10 +179,6 @@
                   android:label="@*android:string/usb_storage_activity_title"
                   android:excludeFromRecents="true">
         </activity>
-        <activity android:name="com.android.internal.app.ExternalMediaFormatActivity"
-                android:theme="@*android:style/Theme.Dialog.Alert"
-                android:excludeFromRecents="true">
-        </activity>
 
         <activity android:name=".tuner.TunerActivity"
                   android:enabled="false"
diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
index 38ea6e1..0bef513 100644
--- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
+++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
@@ -36,6 +36,7 @@
         android:layout_gravity="center_vertical"
         android:layout_weight="1"
         android:contentDescription="@string/accessibility_brightness"
+        android:importantForAccessibility="no"
         systemui:text="@string/status_bar_settings_auto_brightness_label" />
 
 </LinearLayout>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 49b9a36..29a8163 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -24,7 +24,7 @@
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Elimina de la llista"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informació de l\'aplicació"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Aquí es mostren les teves pantalles recents."</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Omet les aplicacions recents"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignora les aplicacions recents"</string>
     <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
       <item quantity="other">%d pantalles en la visió general</item>
       <item quantity="one">1 pantalla en la visió general</item>
@@ -169,7 +169,7 @@
     <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mode silenci."</string>
     <!-- no translation found for accessibility_casting (6887382141726543668) -->
     <skip />
-    <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descarta <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignora <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"S\'ha omès <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"S\'han descartat totes les aplicacions recents."</string>
     <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"S\'està iniciant <xliff:g id="APP">%s</xliff:g>."</string>
@@ -302,7 +302,7 @@
     <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixació de pantalla"</string>
     <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string>
     <string name="recents_launch_error_message" msgid="2969287838120550506">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string>
-    <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Descarta totes les aplicacions"</string>
+    <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ignora totes les aplicacions"</string>
     <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisió horitzontal"</string>
     <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisió vertical"</string>
     <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisió personalitzada"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 895da77d..37aa1cc 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -417,7 +417,7 @@
     <string name="status_bar_work" msgid="6022553324802866373">"Arbejdsprofil"</string>
     <string name="status_bar_airplane" msgid="7057575501472249002">"Flytilstand"</string>
     <string name="add_tile" msgid="2995389510240786221">"Tilføj et felt"</string>
-    <string name="broadcast_tile" msgid="3894036511763289383">"Felt for udsendelser"</string>
+    <string name="broadcast_tile" msgid="3894036511763289383">"Broadcast-ikon"</string>
     <string name="zen_alarm_warning_indef" msgid="3482966345578319605">"Du vil ikke kunne høre din næste alarm <xliff:g id="WHEN">%1$s</xliff:g>, medmindre du slår funktionen fra inden da"</string>
     <string name="zen_alarm_warning" msgid="444533119582244293">"Du vil ikke kunne høre din næste alarm <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="alarm_template" msgid="3980063409350522735">"kl. <xliff:g id="WHEN">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 3f28569..a0afec3 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -20,7 +20,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="7164937344850004466">"UI συστήματ."</string>
-    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Εκκαθάριση"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Διαγραφή"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Κατάργηση από τη λίστα"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Πληροφορίες εφαρμογής"</string>
     <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Οι πρόσφατες οθόνες σας εμφανίζονται εδώ"</string>
@@ -79,7 +79,7 @@
     <string name="use_ptp_button_title" msgid="7517127540301625751">"Προσάρτηση ως κάμερας (PTP)"</string>
     <string name="installer_cd_button_title" msgid="2312667578562201583">"Εγκατάστ. της εφαρμ. μεταφ.αρχείων Android για Mac"</string>
     <string name="accessibility_back" msgid="567011538994429120">"Πίσω"</string>
-    <string name="accessibility_home" msgid="8217216074895377641">"Αρχική σελίδα"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Αρχική οθόνη"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Μενού"</string>
     <string name="accessibility_recent" msgid="5208608566793607626">"Επισκόπηση"</string>
     <string name="accessibility_search_light" msgid="1103867596330271848">"Αναζήτηση"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 65d3866..f9b279f 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -60,7 +60,7 @@
     <string name="label_view" msgid="6304565553218192990">"مشاهده"</string>
     <string name="always_use_device" msgid="1450287437017315906">"‏استفاده به صورت پیش‌فرض برای این دستگاه USB"</string>
     <string name="always_use_accessory" msgid="1210954576979621596">"‏استفاده به صورت پیش‌فرض برای این دستگاه USB"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"‏اجازه به اشکال‌زدایی USB؟"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"‏اشکال‌زدایی USB مجاز است؟"</string>
     <string name="usb_debugging_message" msgid="2220143855912376496">"‏اثر انگشت کلید RSA رایانه: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"همیشه از این رایانه انجام شود"</string>
     <string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"‏اشکال‌زدایی USB مجاز نیست"</string>
@@ -399,8 +399,8 @@
     <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"دفعه بعد که آن را روشن کنید، در تنظیمات نشان داده می‌شود."</string>
     <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"پنهان کردن"</string>
     <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> می‌خواهد کنترل‌کننده صدا باشد."</string>
-    <string name="volumeui_prompt_allow" msgid="7954396902482228786">"مجاز"</string>
-    <string name="volumeui_prompt_deny" msgid="5720663643411696731">"رد کردن"</string>
+    <string name="volumeui_prompt_allow" msgid="7954396902482228786">"مجاز است"</string>
+    <string name="volumeui_prompt_deny" msgid="5720663643411696731">"اجازه ندارد"</string>
     <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> کنترل‌کننده صدا است"</string>
     <string name="volumeui_notification_text" msgid="1826889705095768656">"برای بازیابی کنترل‌کننده اصلی، لمس کنید."</string>
     <string name="managed_profile_foreground_toast" msgid="5421487114739245972">"درحال استفاده از نمایه کاری‌تان هستید"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 2f4f5a1..e54eba4 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -44,7 +44,7 @@
     <string name="battery_saver_start_action" msgid="5576697451677486320">"Ota virransäästö käyttöön"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Asetukset"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
-    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Kierrä näyttöä automaattisesti"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Näytön automaattinen kierto"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"ÄÄNET."</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
     <string name="status_bar_settings_notifications" msgid="397146176280905137">"Ilmoitukset"</string>
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-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 52da800..0703066 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -345,7 +345,7 @@
     <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"להסיר אורח?"</string>
     <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"כל האפליקציות והנתונים בפעילות זו באתר יימחקו."</string>
     <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"הסר"</string>
-    <string name="guest_wipe_session_title" msgid="6419439912885956132">"ברוך שובך, אורח!"</string>
+    <string name="guest_wipe_session_title" msgid="6419439912885956132">"שמחים לראותך שוב!"</string>
     <string name="guest_wipe_session_message" msgid="8476238178270112811">"האם ברצונך להמשיך בפעילות באתר?"</string>
     <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"התחל מחדש"</string>
     <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"כן, המשך"</string>
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-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index a971aaf..bfe4c1b 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -151,7 +151,7 @@
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rouming"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
-    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM karta yo‘q."</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM-karta yo‘q."</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth modem"</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"Parvoz rejimi"</string>
     <string name="accessibility_no_sims" msgid="3957997018324995781">"Hech qanday SIM-karta yo‘q."</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/media/RingtonePlayer.java b/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java
index 7eed7f2..e9a256c 100644
--- a/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java
+++ b/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java
@@ -92,7 +92,8 @@
 
     private IRingtonePlayer mCallback = new IRingtonePlayer.Stub() {
         @Override
-        public void play(IBinder token, Uri uri, AudioAttributes aa) throws RemoteException {
+        public void play(IBinder token, Uri uri, AudioAttributes aa, float volume, boolean looping)
+                throws RemoteException {
             if (LOGD) {
                 Log.d(TAG, "play(token=" + token + ", uri=" + uri + ", uid="
                         + Binder.getCallingUid() + ")");
@@ -107,6 +108,8 @@
                     mClients.put(token, client);
                 }
             }
+            client.mRingtone.setLooping(looping);
+            client.mRingtone.setVolume(volume);
             client.mRingtone.play();
         }
 
@@ -138,6 +141,19 @@
         }
 
         @Override
+        public void setPlaybackProperties(IBinder token, float volume, boolean looping) {
+            Client client;
+            synchronized (mClients) {
+                client = mClients.get(token);
+            }
+            if (client != null) {
+                client.mRingtone.setVolume(volume);
+                client.mRingtone.setLooping(looping);
+            }
+            // else no client for token when setting playback properties but will be set at play()
+        }
+
+        @Override
         public void playAsync(Uri uri, UserHandle user, boolean looping, AudioAttributes aa) {
             if (LOGD) Log.d(TAG, "playAsync(uri=" + uri + ", user=" + user + ")");
             if (Binder.getCallingUid() != Process.SYSTEM_UID) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 4b1453d..2ded919 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -472,6 +472,7 @@
             rows = r + 1;
         }
 
+        View previousView = mBrightnessView;
         for (TileRecord record : mRecords) {
             if (record.tileView.setDual(record.tile.supportsDualTargets())) {
                 record.tileView.handleStateChanged(record.tile.getState());
@@ -480,6 +481,7 @@
             final int cw = record.row == 0 ? mLargeCellWidth : mCellWidth;
             final int ch = record.row == 0 ? mLargeCellHeight : mCellHeight;
             record.tileView.measure(exactly(cw), exactly(ch));
+            previousView = record.tileView.updateAccessibilityOrder(previousView);
         }
         int h = rows == 0 ? brightnessHeight : (getRowTop(rows) + mPanelPaddingBottom);
         if (mFooter.hasFooter()) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
index af9d3a5..6d26a3b 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
@@ -83,6 +83,7 @@
         setClipChildren(false);
 
         mTopBackgroundView = new View(context);
+        mTopBackgroundView.setId(View.generateViewId());
         addView(mTopBackgroundView);
 
         mIcon = createIcon();
@@ -95,8 +96,8 @@
         addView(mDivider);
 
         setClickable(true);
-
         updateTopPadding();
+        setId(View.generateViewId());
     }
 
     private void updateTopPadding() {
@@ -137,7 +138,7 @@
         final Resources res = mContext.getResources();
         if (mDual) {
             mDualLabel = new QSDualTileLabel(mContext);
-            mDualLabel.setId(android.R.id.title);
+            mDualLabel.setId(View.generateViewId());
             mDualLabel.setBackgroundResource(R.drawable.btn_borderless_rect);
             mDualLabel.setFirstLineCaret(mContext.getDrawable(R.drawable.qs_dual_tile_caret));
             mDualLabel.setTextColor(mContext.getColor(R.color.qs_tile_text));
@@ -155,9 +156,9 @@
                 mDualLabel.setContentDescription(labelDescription);
             }
             addView(mDualLabel);
+            mDualLabel.setAccessibilityTraversalAfter(mTopBackgroundView.getId());
         } else {
             mLabel = new TextView(mContext);
-            mLabel.setId(android.R.id.title);
             mLabel.setTextColor(mContext.getColor(R.color.qs_tile_text));
             mLabel.setGravity(Gravity.CENTER_HORIZONTAL);
             mLabel.setMinLines(2);
@@ -328,6 +329,26 @@
         mHandler.obtainMessage(H.STATE_CHANGED, state).sendToTarget();
     }
 
+    /**
+     * Update the accessibility order for this view.
+     *
+     * @param previousView the view which should be before this one
+     * @return the last view in this view which is accessible
+     */
+    public View updateAccessibilityOrder(View previousView) {
+        View firstView;
+        View lastView;
+        if (mDual) {
+            lastView = mDualLabel;
+            firstView = mTopBackgroundView;
+        } else {
+            firstView = this;
+            lastView = this;
+        }
+        firstView.setAccessibilityTraversalAfter(previousView.getId());
+        return lastView;
+    }
+
     private class H extends Handler {
         private static final int STATE_CHANGED = 1;
         public H() {
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/Constants.java b/packages/SystemUI/src/com/android/systemui/recents/Constants.java
index 18c213d..a4acf83 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Constants.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Constants.java
@@ -20,6 +20,14 @@
  * Constants
  */
 public class Constants {
+
+    public static class Metrics {
+        // DO NOT MODIFY THE ORDER OF THESE METRICS
+        public static final int DismissSourceKeyboard = 0;
+        public static final int DismissSourceSwipeGesture = 1;
+        public static final int DismissSourceHeaderButton = 2;
+    }
+
     public static class DebugFlags {
         // Enable this with any other debug flag to see more info
         public static final boolean Verbose = false;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
index 6a45369..8c2ac88 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
@@ -39,6 +39,8 @@
 import android.view.Display;
 import android.view.LayoutInflater;
 import android.view.View;
+
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.RecentsComponent;
@@ -453,6 +455,9 @@
             return;
         }
 
+        // Keep track of actually launched affiliated tasks
+        MetricsLogger.count(mContext, "overview_affiliated_task_launch", 1);
+
         // Launch the task
         if (toTask.isActive) {
             // Bring an active task to the foreground
@@ -465,11 +470,15 @@
 
     @Override
     public void showNextAffiliatedTask() {
+        // Keep track of when the affiliated task is triggered
+        MetricsLogger.count(mContext, "overview_affiliated_task_next", 1);
         showRelativeAffiliatedTask(true);
     }
 
     @Override
     public void showPrevAffiliatedTask() {
+        // Keep track of when the affiliated task is triggered
+        MetricsLogger.count(mContext, "overview_affiliated_task_prev", 1);
         showRelativeAffiliatedTask(false);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index bf15c68..789457da 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -33,6 +33,8 @@
 import android.view.ViewStub;
 import android.widget.Toast;
 
+import com.android.internal.logging.MetricsConstants;
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.recents.misc.Console;
@@ -224,6 +226,7 @@
 
         // Mark the task that is the launch target
         int taskStackCount = stacks.size();
+        int launchTaskIndexInStack = 0;
         if (mConfig.launchedToTaskId != -1) {
             for (int i = 0; i < taskStackCount; i++) {
                 TaskStack stack = stacks.get(i);
@@ -233,6 +236,7 @@
                     Task t = tasks.get(j);
                     if (t.key.id == mConfig.launchedToTaskId) {
                         t.isLaunchTarget = true;
+                        launchTaskIndexInStack = tasks.size() - j - 1;
                         break;
                     }
                 }
@@ -259,6 +263,28 @@
 
         // Animate the SystemUI scrims into view
         mScrimViews.prepareEnterRecentsAnimation();
+
+        // Keep track of whether we launched from the nav bar button or via alt-tab
+        if (mConfig.launchedWithAltTab) {
+            MetricsLogger.count(this, "overview_trigger_alttab", 1);
+        } else {
+            MetricsLogger.count(this, "overview_trigger_nav_btn", 1);
+        }
+        // Keep track of whether we launched from an app or from home
+        if (mConfig.launchedFromAppWithThumbnail) {
+            MetricsLogger.count(this, "overview_source_app", 1);
+            // If from an app, track the stack index of the app in the stack (for affiliated tasks)
+            MetricsLogger.histogram(this, "overview_source_app_index", launchTaskIndexInStack);
+        } else {
+            MetricsLogger.count(this, "overview_source_home", 1);
+        }
+        // Keep track of the total stack task count
+        int taskCount = 0;
+        for (int i = 0; i < stacks.size(); i++) {
+            TaskStack stack = stacks.get(i);
+            taskCount += stack.getTaskCount();
+        }
+        MetricsLogger.histogram(this, "overview_task_count", taskCount);
     }
 
     /** Dismisses recents if we are already visible and the intent is to toggle the recents view */
@@ -374,6 +400,7 @@
     @Override
     protected void onStart() {
         super.onStart();
+        MetricsLogger.visible(this, MetricsLogger.OVERVIEW_ACTIVITY);
         RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
         SystemServicesProxy ssp = loader.getSystemServicesProxy();
         Recents.notifyVisibilityChanged(this, ssp, true);
@@ -414,6 +441,7 @@
     @Override
     protected void onStop() {
         super.onStop();
+        MetricsLogger.hidden(this, MetricsLogger.OVERVIEW_ACTIVITY);
         RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
         SystemServicesProxy ssp = loader.getSystemServicesProxy();
         Recents.notifyVisibilityChanged(this, ssp, false);
@@ -498,6 +526,9 @@
             case KeyEvent.KEYCODE_DEL:
             case KeyEvent.KEYCODE_FORWARD_DEL: {
                 mRecentsView.dismissFocusedTask();
+                // Keep track of deletions by keyboard
+                MetricsLogger.histogram(this, "overview_task_dismissed_source",
+                        Constants.Metrics.DismissSourceKeyboard);
                 return true;
             }
             default:
@@ -591,6 +622,8 @@
         RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
         SystemServicesProxy ssp = loader.getSystemServicesProxy();
         Recents.startScreenPinning(this, ssp);
+
+        MetricsLogger.count(this, "overview_screen_pinned", 1);
     }
 
     @Override
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/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index 6cb11b1..947c19c 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -37,6 +37,7 @@
 import android.view.WindowManagerGlobal;
 import android.widget.FrameLayout;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.recents.Constants;
 import com.android.systemui.recents.RecentsAppWidgetHostView;
@@ -589,11 +590,22 @@
                         if (mCb != null) {
                             mCb.onTaskLaunchFailed();
                         }
+
+                        // Keep track of failed launches
+                        MetricsLogger.count(getContext(), "overview_task_launch_failed", 1);
                     }
                 }
             }
         };
 
+        // Keep track of the index of the task launch
+        int taskIndexFromFront = 0;
+        int taskIndex = stack.indexOfTask(task);
+        if (taskIndex > -1) {
+            taskIndexFromFront = stack.getTaskCount() - taskIndex - 1;
+        }
+        MetricsLogger.histogram(getContext(), "overview_task_launch_index", taskIndexFromFront);
+
         // Launch the app right away if there is no task view, otherwise, animate the icon out first
         if (tv == null) {
             launchRunnable.run();
@@ -644,6 +656,9 @@
         }
 
         mCb.onAllTaskViewsDismissed();
+
+        // Keep track of all-deletions
+        MetricsLogger.count(getContext(), "overview_task_all_dismissed", 1);
     }
 
     /** Final callback after Recents is finally hidden. */
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index ebfc796..abdebf3 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -29,6 +29,8 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.FrameLayout;
+
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.recents.Constants;
 import com.android.systemui.recents.RecentsConfiguration;
@@ -1361,6 +1363,9 @@
     public void onTaskViewAppInfoClicked(TaskView tv) {
         if (mCb != null) {
             mCb.onTaskViewAppInfoClicked(tv.getTask());
+
+            // Keep track of app-info invocations
+            MetricsLogger.count(getContext(), "overview_app_info", 1);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
index 13bdbd2..78b3512 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
@@ -23,6 +23,7 @@
 import android.view.View;
 import android.view.ViewConfiguration;
 import android.view.ViewParent;
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.recents.Constants;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.RecentsConfiguration;
@@ -452,6 +453,9 @@
         tv.setTouchEnabled(true);
         // Remove the task view from the stack
         mSv.onTaskViewDismissed(tv);
+        // Keep track of deletions by keyboard
+        MetricsLogger.histogram(tv.getContext(), "overview_task_dismissed_source",
+                Constants.Metrics.DismissSourceSwipeGesture);
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
index 5906ef1..cbfe842 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -27,6 +27,7 @@
 import android.view.ViewOutlineProvider;
 import android.view.animation.AccelerateInterpolator;
 import android.widget.FrameLayout;
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.recents.Constants;
 import com.android.systemui.recents.RecentsConfiguration;
@@ -741,6 +742,9 @@
                         }
                     } else if (v == mHeaderView.mDismissButton) {
                         dismissTask();
+                        // Keep track of deletions by the dismiss button
+                        MetricsLogger.histogram(getContext(), "overview_task_dismissed_source",
+                                Constants.Metrics.DismissSourceHeaderButton);
                     } else if (v == mHeaderView.mMoveTaskButton) {
                         if (mCb != null) {
                             mCb.onTaskResize(tv);
diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java
index a0a5561..8829794 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java
@@ -19,9 +19,13 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
+import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.SeekBar;
 
 public class ToggleSeekBar extends SeekBar {
+    private String mAccessibilityLabel;
+
     public ToggleSeekBar(Context context) {
         super(context);
     }
@@ -42,4 +46,16 @@
 
         return super.onTouchEvent(event);
     }
+
+    public void setAccessibilityLabel(String label) {
+        mAccessibilityLabel = label;
+    }
+
+    @Override
+    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+        super.onInitializeAccessibilityNodeInfo(info);
+        if (mAccessibilityLabel != null) {
+            info.setText(mAccessibilityLabel);
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
index d247711..b263707 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
@@ -43,7 +43,7 @@
     private boolean mTracking;
 
     private CompoundButton mToggle;
-    private SeekBar mSlider;
+    private ToggleSeekBar mSlider;
     private TextView mLabel;
 
     private ToggleSlider mMirror;
@@ -69,13 +69,13 @@
         mToggle = (CompoundButton) findViewById(R.id.toggle);
         mToggle.setOnCheckedChangeListener(mCheckListener);
 
-        mSlider = (SeekBar) findViewById(R.id.slider);
+        mSlider = (ToggleSeekBar) findViewById(R.id.slider);
         mSlider.setOnSeekBarChangeListener(mSeekListener);
 
         mLabel = (TextView) findViewById(R.id.label);
         mLabel.setText(a.getString(R.styleable.ToggleSlider_text));
 
-        setLabelFor(R.id.slider); // use our a11y text to annotate, not replace, the slider's
+        mSlider.setAccessibilityLabel(getContentDescription().toString());
 
         a.recycle();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 3e66907..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;
@@ -1623,7 +1622,13 @@
                 boolean clearNotificationEffects = !isPanelFullyCollapsed() &&
                     (mShowLockscreenNotifications ||
                         (mState == StatusBarState.SHADE || mState == StatusBarState.SHADE_LOCKED));
-                mBarService.onPanelRevealed(clearNotificationEffects);
+                int notificationLoad = mNotificationData.getActiveNotifications().size();
+                if (mHeadsUpManager.hasPinnedHeadsUp() && isPanelFullyCollapsed())  {
+                    notificationLoad = 1;
+                } else {
+                    MetricsLogger.histogram(mContext, "note_load", notificationLoad);
+                }
+                mBarService.onPanelRevealed(clearNotificationEffects, notificationLoad);
             } else {
                 mBarService.onPanelHidden();
             }
@@ -2119,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/KeyguardAffordanceHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java
index 0877ff9..6670ae0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java
@@ -68,25 +68,11 @@
     private View mTargetedView;
     private boolean mTouchSlopExeeded;
     private AnimatorListenerAdapter mFlingEndListener = new AnimatorListenerAdapter() {
-        public boolean mCancelled;
-
         @Override
         public void onAnimationEnd(Animator animation) {
             mSwipeAnimator = null;
             mSwipingInProgress = false;
-            if (!mCancelled) {
-                mTargetedView = null;
-            }
-        }
-
-        @Override
-        public void onAnimationCancel(Animator animation) {
-            mCancelled = true;
-        }
-
-        @Override
-        public void onAnimationStart(Animator animation) {
-            mCancelled = false;
+            mTargetedView = null;
         }
     };
     private Runnable mAnimationEndRunnable = new Runnable() {
@@ -290,7 +276,6 @@
      * Phase 2: Move back.
      */
     private void startUnlockHintAnimationPhase2(boolean right, final Runnable onFinishedListener) {
-        final KeyguardAffordanceView targetView = right ? mRightIcon : mLeftIcon;
         ValueAnimator animator = getAnimatorToRadius(right, 0);
         animator.addListener(new AnimatorListenerAdapter() {
             @Override
@@ -513,9 +498,7 @@
     }
 
     public void reset(boolean animate) {
-        if (mSwipeAnimator != null) {
-            mSwipeAnimator.cancel();
-        }
+        cancelAnimation();
         setTranslation(0.0f, true, animate);
         mMotionCancelled = true;
         if (mSwipingInProgress) {
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/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index c89a37d..094b9b5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -721,7 +721,6 @@
         if (mListenForHeadsUp && !mHeadsUpTouchHelper.isTrackingHeadsUp()
                 && mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
             mIsExpansionFromHeadsUp = true;
-            MetricsLogger.count(mContext, COUNTER_PANEL_OPEN, 1);
             MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_PEEK, 1);
         }
         if ((!mIsExpanding || mHintAnimationRunning)
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 3678cf1..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();
@@ -1180,6 +1172,7 @@
                         notification.getKey());
                 notification.getNotification().fullScreenIntent.send();
                 shadeEntry.notifyFullScreenIntentLaunched();
+                MetricsLogger.count(mContext, "note_fullscreen", 1);
             } catch (PendingIntent.CanceledException e) {
             }
         }
@@ -2144,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;
@@ -2913,6 +2908,7 @@
         updateRowStates();
         mIconController.updateResources();
         mScreenPinningRequest.onConfigurationChanged();
+        mNetworkController.handleConfigurationChanged();
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
index 98bbe7c..63f5711 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
@@ -29,6 +29,7 @@
 import android.view.ViewTreeObserver;
 import android.view.accessibility.AccessibilityEvent;
 
+import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
 import com.android.systemui.statusbar.ExpandableNotificationRow;
 import com.android.systemui.statusbar.NotificationData;
@@ -82,6 +83,7 @@
     private final View mStatusBarWindowView;
     private final int mStatusBarHeight;
     private final int mNotificationsTopPadding;
+    private final Context mContext;
     private PhoneStatusBar mBar;
     private int mSnoozeLengthMs;
     private ContentObserver mSettingsObserver;
@@ -101,7 +103,8 @@
     private boolean mIsObserving;
 
     public HeadsUpManager(final Context context, View statusBarWindowView) {
-        Resources resources = context.getResources();
+        mContext = context;
+        Resources resources = mContext.getResources();
         mTouchAcceptanceDelay = resources.getInteger(R.integer.touch_acceptance_delay);
         mSnoozedPackages = new ArrayMap<>();
         mDefaultSnoozeLengthMs = resources.getInteger(R.integer.heads_up_default_snooze_length_ms);
@@ -165,6 +168,7 @@
      */
     public void showNotification(NotificationData.Entry headsUp) {
         if (DEBUG) Log.v(TAG, "showNotification");
+        MetricsLogger.count(mContext, "note_peek", 1);
         addHeadsUpEntry(headsUp);
         updateNotification(headsUp, true);
         headsUp.setInterruption();
@@ -522,7 +526,6 @@
         });
     }
 
-
     /**
      * This represents a notification and how long it is in a heads up mode. It also manages its
      * lifecycle automatically when created.
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/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index ff0e8a3..24e3c78 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -340,7 +340,6 @@
                 action.equals(ConnectivityManager.INET_CONDITION_ACTION)) {
             updateConnectivity();
         } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) {
-            mConfig = Config.readConfig(mContext);
             handleConfigurationChanged();
         } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
             refreshLocale();
@@ -374,8 +373,8 @@
         }
     }
 
-    @VisibleForTesting
-    void handleConfigurationChanged() {
+    public void handleConfigurationChanged() {
+        mConfig = Config.readConfig(mContext);
         for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) {
             mobileSignalController.setConfiguration(mConfig);
         }
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 7040864..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
@@ -1764,6 +1763,7 @@
     }
 
     private void onViewAddedInternal(View child) {
+        updateHideSensitiveForChild(child);
         mStackScrollAlgorithm.notifyChildrenChanged(this);
         ((ExpandableView) child).setOnHeightChangedListener(this);
         generateAddAnimation(child, false /* fromMoreCard */);
@@ -1776,6 +1776,13 @@
         }
     }
 
+    private void updateHideSensitiveForChild(View child) {
+        if (mAmbientState.isHideSensitive() && child instanceof ExpandableView) {
+            ExpandableView expandableView = (ExpandableView) child;
+            expandableView.setHideSensitiveForIntrinsicHeight(true);
+        }
+    }
+
     public void notifyGroupChildRemoved(View row) {
         onViewRemovedInternal(row);
     }
@@ -2602,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/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
index 92cfaa1..180d918 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
@@ -499,8 +499,10 @@
         final PendingIntent intent;
         if (privateVol != null && privateVol.getDisk() != null) {
             intent = buildWizardReadyPendingIntent(privateVol.getDisk());
-        } else {
+        } else if (privateVol != null) {
             intent = buildVolumeSettingsPendingIntent(privateVol);
+        } else {
+            intent = null;
         }
 
         final Notification notif = new Notification.Builder(mContext)
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java
index 3964820..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);
 
@@ -462,6 +463,9 @@
     }
 
     protected void dismissH(int reason) {
+        if (mMotion.isAnimating()) {
+            return;
+        }
         mHandler.removeMessages(H.DISMISS);
         mHandler.removeMessages(H.SHOW);
         if (!mShowing) return;
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/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index ed48f91..bf41f0f 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -7514,7 +7514,10 @@
                 // of it is process-local and therefore synchronous.  That means that the
                 // next-state message (RUNNING_QUEUE) is already enqueued.  Only if we're
                 // unable to proceed with running the queue do we remove that pending
-                // message and jump straight to the FINAL state.
+                // message and jump straight to the FINAL state.  Because this was
+                // synchronous we also know that we should cancel the pending timeout
+                // message.
+                mBackupHandler.removeMessages(MSG_TIMEOUT);
 
                 // Verify that the backup set includes metadata.  If not, we can't do
                 // signature/version verification etc, so we simply do not proceed with
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index 79c66b9..f0fc399 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -116,6 +116,8 @@
     public final static class Op {
         public final int uid;
         public final String packageName;
+        public int proxyUid = -1;
+        public String proxyPackageName;
         public final int op;
         public int mode;
         public int duration;
@@ -289,7 +291,8 @@
             for (int j=0; j<pkgOps.size(); j++) {
                 Op curOp = pkgOps.valueAt(j);
                 resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
-                        curOp.rejectTime, curOp.duration));
+                        curOp.rejectTime, curOp.duration, curOp.proxyUid,
+                        curOp.proxyPackageName));
             }
         } else {
             for (int j=0; j<ops.length; j++) {
@@ -299,7 +302,8 @@
                         resOps = new ArrayList<AppOpsManager.OpEntry>();
                     }
                     resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
-                            curOp.rejectTime, curOp.duration));
+                            curOp.rejectTime, curOp.duration, curOp.proxyUid,
+                            curOp.proxyPackageName));
                 }
             }
         }
@@ -659,9 +663,28 @@
     }
 
     @Override
+    public int noteProxyOperation(int code, String proxyPackageName,
+            int proxiedUid, String proxiedPackageName) {
+        verifyIncomingOp(code);
+        final int proxyMode = noteOperationUnchecked(code, Binder.getCallingUid(),
+                proxyPackageName, -1, null);
+        if (proxyMode != AppOpsManager.MODE_ALLOWED || Binder.getCallingUid() == proxiedUid) {
+            return proxyMode;
+        }
+        return noteOperationUnchecked(code, proxiedUid, proxiedPackageName,
+                Binder.getCallingUid(), proxyPackageName);
+
+    }
+
+    @Override
     public int noteOperation(int code, int uid, String packageName) {
         verifyIncomingUid(uid);
         verifyIncomingOp(code);
+        return noteOperationUnchecked(code, uid, packageName, 0, null);
+    }
+
+    private int noteOperationUnchecked(int code, int uid, String packageName,
+            int proxyUid, String proxyPackageName) {
         synchronized (this) {
             Ops ops = getOpsLocked(uid, packageName, true);
             if (ops == null) {
@@ -690,6 +713,8 @@
                     + " package " + packageName);
             op.time = System.currentTimeMillis();
             op.rejectTime = 0;
+            op.proxyUid = proxyUid;
+            op.proxyPackageName = proxyPackageName;
             return AppOpsManager.MODE_ALLOWED;
         }
     }
@@ -1051,6 +1076,14 @@
                 if (dur != null) {
                     op.duration = Integer.parseInt(dur);
                 }
+                String proxyUid = parser.getAttributeValue(null, "pu");
+                if (proxyUid != null) {
+                    op.proxyUid = Integer.parseInt(proxyUid);
+                }
+                String proxyPackageName = parser.getAttributeValue(null, "pp");
+                if (proxyPackageName != null) {
+                    op.proxyPackageName = proxyPackageName;
+                }
                 HashMap<String, Ops> pkgOps = mUidOps.get(uid);
                 if (pkgOps == null) {
                     pkgOps = new HashMap<String, Ops>();
@@ -1132,6 +1165,14 @@
                             if (dur != 0) {
                                 out.attribute(null, "d", Integer.toString(dur));
                             }
+                            int proxyUid = op.getProxyUid();
+                            if (proxyUid != -1) {
+                                out.attribute(null, "pu", Integer.toString(proxyUid));
+                            }
+                            String proxyPackageName = op.getProxyPackageName();
+                            if (proxyPackageName != null) {
+                                out.attribute(null, "pp", proxyPackageName);
+                            }
                             out.endTag(null, "op");
                         }
                         out.endTag(null, "uid");
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 25f8872..b9f62e6 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -60,6 +60,7 @@
 import java.io.PrintWriter;
 import java.util.HashMap;
 import java.util.Map;
+
 class BluetoothManagerService extends IBluetoothManager.Stub {
     private static final String TAG = "BluetoothManagerService";
     private static final boolean DBG = false;
@@ -234,25 +235,6 @@
                         sendEnableMsg(mQuietEnableExternal);
                     }
                 }
-            } else if (Intent.ACTION_USER_SWITCHED.equals(action)) {
-                if (DBG) Log.d(TAG, "Bluetooth user switched");
-                mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_USER_SWITCHED,
-                       intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0), 0));
-            } else if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
-                if (DBG) Log.d(TAG, "Bluetooth boot completed");
-                synchronized(mReceiver) {
-                    if (mEnableExternal && isBluetoothPersistedStateOnBluetooth()) {
-                        //Enable
-                        if (DBG) Log.d(TAG, "Auto-enabling Bluetooth.");
-                        sendEnableMsg(mQuietEnableExternal);
-                    }
-                    if (!isNameAndAddressSet()) {
-                        // Sync the Bluetooth name and address from the
-                        // Bluetooth Adapter
-                        if (DBG) Log.d(TAG, "Retrieving Bluetooth Adapter name and address...");
-                        getNameAndAddress();
-                    }
-                }
             }
         }
     };
@@ -277,9 +259,7 @@
         registerForBleScanModeChange();
         mCallbacks = new RemoteCallbackList<IBluetoothManagerCallback>();
         mStateChangeCallbacks = new RemoteCallbackList<IBluetoothStateChangeCallback>();
-        IntentFilter filter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
-        filter.addAction(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
-        filter.addAction(Intent.ACTION_USER_SWITCHED);
+        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED);
         registerForAirplaneMode(filter);
         filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
         mContext.registerReceiver(mReceiver, filter);
@@ -790,6 +770,31 @@
     }
 
     /**
+     * Send enable message and set adapter name and address. Called when the boot phase becomes
+     * PHASE_SYSTEM_SERVICES_READY.
+     */
+    public void handleOnBootPhase() {
+        if (DBG) Log.d(TAG, "Bluetooth boot completed");
+        if (mEnableExternal && isBluetoothPersistedStateOnBluetooth()) {
+            if (DBG) Log.d(TAG, "Auto-enabling Bluetooth.");
+            sendEnableMsg(mQuietEnableExternal);
+        }
+        if (!isNameAndAddressSet()) {
+            // Sync the Bluetooth name and address from the Bluetooth Adapter
+            if (DBG) Log.d(TAG, "Retrieving Bluetooth Adapter name and address...");
+            getNameAndAddress();
+        }
+    }
+
+    /**
+     * Called when switching to a different foreground user.
+     */
+    public void handleOnSwitchUser(int userHandle) {
+        if (DBG) Log.d(TAG, "Bluetooth user switched");
+        mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_USER_SWITCHED, userHandle, 0));
+    }
+
+    /**
      * This class manages the clients connected to a given ProfileService
      * and maintains the connection with that service.
      */
diff --git a/services/core/java/com/android/server/BluetoothService.java b/services/core/java/com/android/server/BluetoothService.java
new file mode 100644
index 0000000..73e8c52
--- /dev/null
+++ b/services/core/java/com/android/server/BluetoothService.java
@@ -0,0 +1,51 @@
+/*
+ * 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.server;
+
+import android.bluetooth.BluetoothAdapter;
+import android.content.Context;
+import android.util.Log;
+
+class BluetoothService extends SystemService {
+    private static final String TAG = "BluetoothService";
+    private BluetoothManagerService mBluetoothManagerService;
+
+    public BluetoothService(Context context) {
+        super(context);
+        mBluetoothManagerService = new BluetoothManagerService(context);
+    }
+
+    @Override
+    public void onStart() {
+        Log.d(TAG, "onStart: publishing BluetoothManagerService");
+        publishBinderService(BluetoothAdapter.BLUETOOTH_MANAGER_SERVICE, mBluetoothManagerService);
+    }
+
+    @Override
+    public void onBootPhase(int phase) {
+        if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
+            Log.d(TAG, "onBootPhase: PHASE_SYSTEM_SERVICES_READY");
+            mBluetoothManagerService.handleOnBootPhase();
+        }
+    }
+
+    @Override
+    public void onSwitchUser(int userHandle) {
+        Log.d(TAG, "onSwitchUser: switching to user " + userHandle);
+        mBluetoothManagerService.handleOnSwitchUser(userHandle);
+    }
+}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index d95b233..3a184c7 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -483,10 +483,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);
             }
@@ -510,8 +510,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);
             }
         }
 
@@ -528,17 +528,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);
             }
         }
 
@@ -550,6 +552,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) ?
@@ -2645,16 +2662,6 @@
         }
     }
 
-    public void captivePortalAppResponse(Network network, int response, String actionToken) {
-        if (response == ConnectivityManager.CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS) {
-            enforceConnectivityInternalPermission();
-        }
-        final NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network);
-        if (nai == null) return;
-        nai.networkMonitor.sendMessage(NetworkMonitor.CMD_CAPTIVE_PORTAL_APP_FINISHED, response, 0,
-                actionToken);
-    }
-
     private ProxyInfo getDefaultProxy() {
         // this information is already available as a world read/writable jvm property
         // so this API change wouldn't have a benifit.  It also breaks the passing
@@ -4407,6 +4414,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;
@@ -4464,8 +4472,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) {
@@ -4477,6 +4484,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);
         }
     }
 
@@ -4512,7 +4530,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
@@ -4521,11 +4539,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/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java
index dc203ff..fde1490 100644
--- a/services/core/java/com/android/server/DeviceIdleController.java
+++ b/services/core/java/com/android/server/DeviceIdleController.java
@@ -158,15 +158,20 @@
     private final ArrayMap<String, Integer> mPowerSaveWhitelistUserApps = new ArrayMap<>();
 
     /**
+     * App IDs of built-in system apps that have been white-listed.
+     */
+    private final SparseBooleanArray mPowerSaveWhitelistSystemAppIds = new SparseBooleanArray();
+
+    /**
      * App IDs that have been white-listed to opt out of power save restrictions.
      */
-    private final SparseBooleanArray mPowerSaveWhitelistAppIds = new SparseBooleanArray();
+    private final SparseBooleanArray mPowerSaveWhitelistAllAppIds = new SparseBooleanArray();
 
     /**
      * Current app IDs that are in the complete power save white list.  This array can
      * be shared with others because it will not be modified once set.
      */
-    private int[] mPowerSaveWhitelistAppIdArray = new int[0];
+    private int[] mPowerSaveWhitelistAllAppIdArray = new int[0];
 
     /**
      * List of end times for UIDs that are temporarily marked as being allowed to access
@@ -478,6 +483,7 @@
                     handleWriteConfigFile();
                 } break;
                 case MSG_REPORT_IDLE_ON: {
+                    EventLogTags.writeDeviceIdleOnStart();
                     mLocalPowerManager.setDeviceIdleMode(true);
                     try {
                         mNetworkPolicyManager.setDeviceIdleMode(true);
@@ -485,8 +491,10 @@
                     } catch (RemoteException e) {
                     }
                     getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL);
+                    EventLogTags.writeDeviceIdleOnComplete();
                 } break;
                 case MSG_REPORT_IDLE_OFF: {
+                    EventLogTags.writeDeviceIdleOffStart("unknown");
                     mLocalPowerManager.setDeviceIdleMode(false);
                     try {
                         mNetworkPolicyManager.setDeviceIdleMode(false);
@@ -494,11 +502,14 @@
                     } catch (RemoteException e) {
                     }
                     getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL);
+                    EventLogTags.writeDeviceIdleOffComplete();
                 } break;
                 case MSG_REPORT_ACTIVE: {
                     String activeReason = (String)msg.obj;
                     int activeUid = msg.arg1;
                     boolean needBroadcast = msg.arg2 != 0;
+                    EventLogTags.writeDeviceIdleOffStart(
+                            activeReason != null ? activeReason : "unknown");
                     mLocalPowerManager.setDeviceIdleMode(false);
                     try {
                         mNetworkPolicyManager.setDeviceIdleMode(false);
@@ -508,6 +519,7 @@
                     if (needBroadcast) {
                         getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL);
                     }
+                    EventLogTags.writeDeviceIdleOffComplete();
                 } break;
                 case MSG_TEMP_APP_WHITELIST_TIMEOUT: {
                     int uid = msg.arg1;
@@ -557,17 +569,18 @@
             getContext().enforceCallingPermission(
                     Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST,
                     "No permission to change device idle whitelist");
+            final int callingUid = Binder.getCallingUid();
             userId = ActivityManagerNative.getDefault().handleIncomingUser(
                     Binder.getCallingPid(),
-                    Binder.getCallingUid(),
+                    callingUid,
                     userId,
                     /*allowAll=*/ false,
                     /*requireFull=*/ false,
                     "addPowerSaveTempWhitelistApp", null);
             final long token = Binder.clearCallingIdentity();
             try {
-                DeviceIdleController.this.addPowerSaveTempWhitelistAppInternal(packageName,
-                        duration, userId);
+                DeviceIdleController.this.addPowerSaveTempWhitelistAppInternal(callingUid,
+                        packageName, duration, userId);
             } finally {
                 Binder.restoreCallingIdentity(token);
             }
@@ -586,7 +599,7 @@
 
     public final class LocalService {
         public void addPowerSaveTempWhitelistAppDirect(int appId, long duration) {
-            DeviceIdleController.this.addPowerSaveTempWhitelistAppDirectInternal(appId, duration);
+            addPowerSaveTempWhitelistAppDirectInternal(0, appId, duration);
         }
     }
 
@@ -614,8 +627,9 @@
                 try {
                     ApplicationInfo ai = pm.getApplicationInfo(pkg, 0);
                     if ((ai.flags&ApplicationInfo.FLAG_SYSTEM) != 0) {
-                        mPowerSaveWhitelistApps.put(ai.packageName,
-                                UserHandle.getAppId(ai.uid));
+                        int appid = UserHandle.getAppId(ai.uid);
+                        mPowerSaveWhitelistApps.put(ai.packageName, appid);
+                        mPowerSaveWhitelistSystemAppIds.put(appid, true);
                     }
                 } catch (PackageManager.NameNotFoundException e) {
                 }
@@ -667,14 +681,15 @@
                 mSensingAlarmIntent = PendingIntent.getBroadcast(getContext(), 0, intentSensing, 0);
 
                 mIdleIntent = new Intent(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
-                mIdleIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+                mIdleIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
+                        | Intent.FLAG_RECEIVER_FOREGROUND);
 
                 IntentFilter filter = new IntentFilter();
                 filter.addAction(Intent.ACTION_BATTERY_CHANGED);
                 filter.addAction(ACTION_STEP_IDLE_STATE);
                 getContext().registerReceiver(mReceiver, filter);
 
-                mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAppIdArray);
+                mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
 
                 mDisplayManager.registerDisplayListener(mDisplayListener, null);
                 updateDisplayLocked();
@@ -747,7 +762,7 @@
 
     public int[] getAppIdWhitelistInternal() {
         synchronized (this) {
-            return mPowerSaveWhitelistAppIdArray;
+            return mPowerSaveWhitelistAllAppIdArray;
         }
     }
 
@@ -761,12 +776,12 @@
      * Adds an app to the temporary whitelist and resets the endTime for granting the
      * app an exemption to access network and acquire wakelocks.
      */
-    public void addPowerSaveTempWhitelistAppInternal(String packageName, long duration,
-            int userId) {
+    public void addPowerSaveTempWhitelistAppInternal(int callingUid, String packageName,
+            long duration, int userId) {
         try {
             int uid = getContext().getPackageManager().getPackageUid(packageName, userId);
             int appId = UserHandle.getAppId(uid);
-            addPowerSaveTempWhitelistAppDirectInternal(appId, duration);
+            addPowerSaveTempWhitelistAppDirectInternal(callingUid, appId, duration);
         } catch (NameNotFoundException e) {
         }
     }
@@ -775,9 +790,17 @@
      * Adds an app to the temporary whitelist and resets the endTime for granting the
      * app an exemption to access network and acquire wakelocks.
      */
-    public void addPowerSaveTempWhitelistAppDirectInternal(int appId, long duration) {
+    public void addPowerSaveTempWhitelistAppDirectInternal(int callingUid, int appId,
+            long duration) {
         final long timeNow = SystemClock.elapsedRealtime();
         synchronized (this) {
+            int callingAppId = UserHandle.getAppId(callingUid);
+            if (callingAppId >= Process.FIRST_APPLICATION_UID) {
+                if (!mPowerSaveWhitelistSystemAppIds.get(callingAppId)) {
+                    throw new SecurityException("Calling app " + UserHandle.formatUid(callingUid)
+                            + " is not on whitelist");
+                }
+            }
             duration = Math.min(duration, mConstants.MAX_TEMP_APP_WHITELIST_DURATION);
             long currentEndTime = mTempWhitelistAppIdEndTimes.get(appId);
             // Set the new end time
@@ -1026,25 +1049,25 @@
     }
 
     private void updateWhitelistAppIdsLocked() {
-        mPowerSaveWhitelistAppIds.clear();
+        mPowerSaveWhitelistAllAppIds.clear();
         for (int i=0; i<mPowerSaveWhitelistApps.size(); i++) {
-            mPowerSaveWhitelistAppIds.put(mPowerSaveWhitelistApps.valueAt(i), true);
+            mPowerSaveWhitelistAllAppIds.put(mPowerSaveWhitelistApps.valueAt(i), true);
         }
         for (int i=0; i<mPowerSaveWhitelistUserApps.size(); i++) {
-            mPowerSaveWhitelistAppIds.put(mPowerSaveWhitelistUserApps.valueAt(i), true);
+            mPowerSaveWhitelistAllAppIds.put(mPowerSaveWhitelistUserApps.valueAt(i), true);
         }
-        int size = mPowerSaveWhitelistAppIds.size();
+        int size = mPowerSaveWhitelistAllAppIds.size();
         int[] appids = new int[size];
         for (int i = 0; i < size; i++) {
-            appids[i] = mPowerSaveWhitelistAppIds.keyAt(i);
+            appids[i] = mPowerSaveWhitelistAllAppIds.keyAt(i);
         }
-        mPowerSaveWhitelistAppIdArray = appids;
+        mPowerSaveWhitelistAllAppIdArray = appids;
         if (mLocalPowerManager != null) {
             if (DEBUG) {
                 Slog.d(TAG, "Setting wakelock whitelist to "
-                        + Arrays.toString(mPowerSaveWhitelistAppIdArray));
+                        + Arrays.toString(mPowerSaveWhitelistAllAppIdArray));
             }
-            mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAppIdArray);
+            mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
         }
     }
 
@@ -1213,6 +1236,8 @@
         pw.println("    Re-enable device idle mode after it had previously been disabled.");
         pw.println("  enabled");
         pw.println("    Print 1 if device idle mode is currently enabled, else 0.");
+        pw.println("  whitelist");
+        pw.println("    Print currently whitelisted apps.");
         pw.println("  whitelist [package ...]");
         pw.println("    Add (prefix with +) or remove (prefix with -) packages.");
         pw.println("  tempwhitelist [package ..]");
@@ -1245,25 +1270,40 @@
                     // Ignore, we always dump all.
                 } else if ("step".equals(arg)) {
                     synchronized (this) {
-                        stepIdleStateLocked();
-                        pw.print("Stepped to: "); pw.println(stateToString(mState));
+                        long token = Binder.clearCallingIdentity();
+                        try {
+                            stepIdleStateLocked();
+                            pw.print("Stepped to: "); pw.println(stateToString(mState));
+                        } finally {
+                            Binder.restoreCallingIdentity(token);
+                        }
                     }
                     return;
                 } else if ("disable".equals(arg)) {
                     synchronized (this) {
-                        if (mEnabled) {
-                            mEnabled = false;
-                            becomeActiveLocked("disabled", Process.myUid());
-                            pw.println("Idle mode disabled");
+                        long token = Binder.clearCallingIdentity();
+                        try {
+                            if (mEnabled) {
+                                mEnabled = false;
+                                becomeActiveLocked("disabled", Process.myUid());
+                                pw.println("Idle mode disabled");
+                            }
+                        } finally {
+                            Binder.restoreCallingIdentity(token);
                         }
                     }
                     return;
                 } else if ("enable".equals(arg)) {
                     synchronized (this) {
-                        if (!mEnabled) {
-                            mEnabled = true;
-                            becomeInactiveIfAppropriateLocked();
-                            pw.println("Idle mode enabled");
+                        long token = Binder.clearCallingIdentity();
+                        try {
+                            if (!mEnabled) {
+                                mEnabled = true;
+                                becomeInactiveIfAppropriateLocked();
+                                pw.println("Idle mode enabled");
+                            }
+                        } finally {
+                            Binder.restoreCallingIdentity(token);
                         }
                     }
                     return;
@@ -1273,40 +1313,67 @@
                     }
                     return;
                 } else if ("whitelist".equals(arg)) {
-                    i++;
-                    while (i < args.length) {
-                        arg = args[i];
+                    long token = Binder.clearCallingIdentity();
+                    try {
                         i++;
-                        if (arg.length() < 1 || (arg.charAt(0) != '-'
-                                && arg.charAt(0) != '+')) {
-                            pw.println("Package must be prefixed with + or -: " + arg);
-                            return;
-                        }
-                        char op = arg.charAt(0);
-                        String pkg = arg.substring(1);
-                        if (op == '+') {
-                            if (addPowerSaveWhitelistAppInternal(pkg)) {
-                                pw.println("Added: " + pkg);
-                            } else {
-                                pw.println("Unknown package: " + pkg);
+                        if (i < args.length) {
+                            while (i < args.length) {
+                                arg = args[i];
+                                i++;
+                                if (arg.length() < 1 || (arg.charAt(0) != '-'
+                                        && arg.charAt(0) != '+')) {
+                                    pw.println("Package must be prefixed with + or -: " + arg);
+                                    return;
+                                }
+                                char op = arg.charAt(0);
+                                String pkg = arg.substring(1);
+                                if (op == '+') {
+                                    if (addPowerSaveWhitelistAppInternal(pkg)) {
+                                        pw.println("Added: " + pkg);
+                                    } else {
+                                        pw.println("Unknown package: " + pkg);
+                                    }
+                                } else {
+                                    if (removePowerSaveWhitelistAppInternal(pkg)) {
+                                        pw.println("Removed: " + pkg);
+                                    }
+                                }
                             }
                         } else {
-                            if (removePowerSaveWhitelistAppInternal(pkg)) {
-                                pw.println("Removed: " + pkg);
+                            synchronized (this) {
+                                for (int j=0; j<mPowerSaveWhitelistApps.size(); j++) {
+                                    pw.print("system,");
+                                    pw.print(mPowerSaveWhitelistApps.keyAt(j));
+                                    pw.print(",");
+                                    pw.println(mPowerSaveWhitelistApps.valueAt(j));
+                                }
+                                for (int j=0; j<mPowerSaveWhitelistUserApps.size(); j++) {
+                                    pw.print("user,");
+                                    pw.print(mPowerSaveWhitelistUserApps.keyAt(j));
+                                    pw.print(",");
+                                    pw.println(mPowerSaveWhitelistUserApps.valueAt(j));
+                                }
                             }
                         }
+                    } finally {
+                        Binder.restoreCallingIdentity(token);
                     }
                     return;
                 } else if ("tempwhitelist".equals(arg)) {
-                    i++;
-                    if (i >= args.length) {
-                        pw.println("At least one package name must be specified");
-                        return;
-                    }
-                    while (i < args.length) {
-                        arg = args[i];
+                    long token = Binder.clearCallingIdentity();
+                    try {
                         i++;
-                        addPowerSaveTempWhitelistAppInternal(arg, 10000L, userId);
+                        if (i >= args.length) {
+                            pw.println("At least one package name must be specified");
+                            return;
+                        }
+                        while (i < args.length) {
+                            arg = args[i];
+                            i++;
+                            addPowerSaveTempWhitelistAppInternal(0, arg, 10000L, userId);
+                        }
+                    } finally {
+                        Binder.restoreCallingIdentity(token);
                     }
                 } else if (arg.length() > 0 && arg.charAt(0) == '-'){
                     pw.println("Unknown option: " + arg);
@@ -1337,12 +1404,12 @@
                     pw.println(mPowerSaveWhitelistUserApps.keyAt(i));
                 }
             }
-            size = mPowerSaveWhitelistAppIds.size();
+            size = mPowerSaveWhitelistAllAppIds.size();
             if (size > 0) {
-                pw.println("  Whitelist app ids:");
+                pw.println("  Whitelist all app ids:");
                 for (int i = 0; i < size; i++) {
                     pw.print("    ");
-                    pw.print(mPowerSaveWhitelistAppIds.keyAt(i));
+                    pw.print(mPowerSaveWhitelistAllAppIds.keyAt(i));
                     pw.println();
                 }
             }
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags
index 43b640b..7aebc1a 100644
--- a/services/core/java/com/android/server/EventLogTags.logtags
+++ b/services/core/java/com/android/server/EventLogTags.logtags
@@ -60,7 +60,7 @@
 2752 notification_cancel_all (uid|1|5),(pid|1|5),(pkg|3),(userid|1|5),(required_flags|1),(forbidden_flags|1),(reason|1|5),(listener|3)
 # when the notification panel is shown
 # Note: New tag range starts here since 2753+ have been used below.
-27500 notification_panel_revealed
+27500 notification_panel_revealed (items|1)
 # when the notification panel is hidden
 27501 notification_panel_hidden
 # when notifications are newly displayed on screen, or disappear from screen
@@ -183,6 +183,12 @@
 34000 device_idle (state|1|5), (reason|3)
 34001 device_idle_step
 34002 device_idle_wake_from_idle (is_idle|1|5), (reason|3)
+34003 device_idle_on_start
+34004 device_idle_on_phase (what|3)
+34005 device_idle_on_complete
+34006 device_idle_off_start (reason|3)
+34007 device_idle_off_phase (what|3)
+34008 device_idle_off_complete
 
 # ---------------------------
 # DisplayManagerService.java
@@ -224,8 +230,8 @@
 # ---------------------------
 # IdleMaintenanceService.java
 # ---------------------------
-2753 idle_maintenance_window_start (time|2|3), (lastUserActivity|2|3), (batteryLevel|1|6), (batteryCharging|1|5)
-2754 idle_maintenance_window_finish (time|2|3), (lastUserActivity|2|3), (batteryLevel|1|6), (batteryCharging|1|5)
+51500 idle_maintenance_window_start (time|2|3), (lastUserActivity|2|3), (batteryLevel|1|6), (batteryCharging|1|5)
+51501 idle_maintenance_window_finish (time|2|3), (lastUserActivity|2|3), (batteryLevel|1|6), (batteryCharging|1|5)
 
 # ---------------------------
 # MountService.java
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index b4fa46d..da552dd 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -18,16 +18,20 @@
 
 import static com.android.internal.util.XmlUtils.readBooleanAttribute;
 import static com.android.internal.util.XmlUtils.readIntAttribute;
+import static com.android.internal.util.XmlUtils.readLongAttribute;
 import static com.android.internal.util.XmlUtils.readStringAttribute;
 import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
 import static com.android.internal.util.XmlUtils.writeIntAttribute;
+import static com.android.internal.util.XmlUtils.writeLongAttribute;
 import static com.android.internal.util.XmlUtils.writeStringAttribute;
 import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
 import static org.xmlpull.v1.XmlPullParser.START_TAG;
 
 import android.Manifest;
+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;
@@ -36,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;
@@ -50,7 +54,6 @@
 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;
@@ -71,12 +74,15 @@
 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;
 import android.util.ArrayMap;
 import android.util.AtomicFile;
 import android.util.Log;
 import android.util.Slog;
+import android.util.TimeUtils;
 import android.util.Xml;
 
 import libcore.io.IoUtils;
@@ -111,9 +117,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.KeySpec;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -125,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;
@@ -174,7 +179,6 @@
         }
     }
 
-    private static final boolean LOCAL_LOGD = false;
     private static final boolean DEBUG_EVENTS = false;
     private static final boolean DEBUG_OBB = false;
 
@@ -182,7 +186,9 @@
     private static final boolean WATCHDOG_ENABLE = false;
 
     private static final String TAG = "MountService";
+
     private static final String TAG_STORAGE_BENCHMARK = "storage_benchmark";
+    private static final String TAG_STORAGE_TRIM = "storage_trim";
 
     private static final String VOLD_TAG = "VoldConnector";
     private static final String CRYPTD_TAG = "CryptdConnector";
@@ -231,6 +237,7 @@
         public static final int DISK_SIZE_CHANGED = 641;
         public static final int DISK_LABEL_CHANGED = 642;
         public static final int DISK_SCANNED = 643;
+        public static final int DISK_SYS_PATH_CHANGED = 644;
         public static final int DISK_DESTROYED = 649;
 
         public static final int VOLUME_CREATED = 650;
@@ -244,11 +251,7 @@
 
         public static final int MOVE_STATUS = 660;
         public static final int BENCHMARK_RESULT = 661;
-
-        /*
-         * 700 series - fstrim
-         */
-        public static final int FstrimCompleted                = 700;
+        public static final int TRIM_RESULT = 662;
     }
 
     private static final int VERSION_INIT = 1;
@@ -265,6 +268,9 @@
     private static final String ATTR_PART_GUID = "partGuid";
     private static final String ATTR_NICKNAME = "nickname";
     private static final String ATTR_USER_FLAGS = "userFlags";
+    private static final String ATTR_CREATED_MILLIS = "createdMillis";
+    private static final String ATTR_LAST_TRIM_MILLIS = "lastTrimMillis";
+    private static final String ATTR_LAST_BENCH_MILLIS = "lastBenchMillis";
 
     private final AtomicFile mSettingsFile;
 
@@ -311,7 +317,7 @@
         throw new IllegalArgumentException("No disk found for ID " + id);
     }
 
-    private VolumeInfo findVolumeById(String id) {
+    private VolumeInfo findVolumeByIdOrThrow(String id) {
         synchronized (mLock) {
             final VolumeInfo vol = mVolumes.get(id);
             if (vol != null) {
@@ -321,8 +327,7 @@
         throw new IllegalArgumentException("No volume found for ID " + id);
     }
 
-    @Deprecated
-    private String findVolumeIdForPath(String path) {
+    private String findVolumeIdForPathOrThrow(String path) {
         synchronized (mLock) {
             for (int i = 0; i < mVolumes.size(); i++) {
                 final VolumeInfo vol = mVolumes.valueAt(i);
@@ -334,10 +339,35 @@
         throw new IllegalArgumentException("No volume found for path " + path);
     }
 
-    private VolumeInfo findStorageForUuid(String volumeUuid) {
+    private VolumeRecord findRecordForPath(String path) {
+        synchronized (mLock) {
+            for (int i = 0; i < mVolumes.size(); i++) {
+                final VolumeInfo vol = mVolumes.valueAt(i);
+                if (vol.path != null && path.startsWith(vol.path)) {
+                    return mRecords.get(vol.fsUuid);
+                }
+            }
+        }
+        return null;
+    }
+
+    private String scrubPath(String path) {
+        if (path.startsWith(Environment.getDataDirectory().getAbsolutePath())) {
+            return "internal";
+        }
+        final VolumeRecord rec = findRecordForPath(path);
+        if (rec == null || rec.createdMillis == 0) {
+            return "unknown";
+        } else {
+            return "ext:" + (int) ((System.currentTimeMillis() - rec.createdMillis)
+                    / DateUtils.WEEK_IN_MILLIS) + "w";
+        }
+    }
+
+    private @Nullable VolumeInfo findStorageForUuid(String volumeUuid) {
         final StorageManager storage = mContext.getSystemService(StorageManager.class);
         if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, volumeUuid)) {
-            return findVolumeById(VolumeInfo.ID_EMULATED_INTERNAL);
+            return storage.findVolumeById(VolumeInfo.ID_EMULATED_INTERNAL);
         } else if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, volumeUuid)) {
             return storage.getPrimaryPhysicalVolume();
         } else {
@@ -345,6 +375,24 @@
         }
     }
 
+    private boolean shouldBenchmark() {
+        final long benchInterval = Settings.Global.getLong(mContext.getContentResolver(),
+                Settings.Global.STORAGE_BENCHMARK_INTERVAL, DateUtils.WEEK_IN_MILLIS);
+        synchronized (mLock) {
+            for (int i = 0; i < mVolumes.size(); i++) {
+                final VolumeInfo vol = mVolumes.valueAt(i);
+                final VolumeRecord rec = mRecords.get(vol.fsUuid);
+                if (vol.isMountedReadable() && rec != null) {
+                    final long benchAge = System.currentTimeMillis() - rec.lastBenchMillis;
+                    if (benchAge >= benchInterval) {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
+    }
+
     private CountDownLatch findOrCreateDiskScanLatch(String diskId) {
         synchronized (mLock) {
             CountDownLatch latch = mDiskScanLatches.get(diskId);
@@ -356,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 */
@@ -563,16 +601,17 @@
                         Slog.e(TAG, "Unable to record last fstrim!");
                     }
 
+                    final boolean shouldBenchmark = shouldBenchmark();
                     try {
                         // This method must be run on the main (handler) thread,
                         // so it is safe to directly call into vold.
-                        mConnector.execute("fstrim", "dotrim");
-                        EventLogTags.writeFstrimStart(SystemClock.elapsedRealtime());
+                        mConnector.execute("fstrim", shouldBenchmark ? "dotrimbench" : "dotrim");
                     } catch (NativeDaemonConnectorException ndce) {
                         Slog.e(TAG, "Failed to run fstrim!");
                     }
 
                     // invoke the completion callback, if any
+                    // TODO: fstrim is non-blocking, so remove this useless callback
                     Runnable callback = (Runnable) msg.obj;
                     if (callback != null) {
                         callback.run();
@@ -655,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)) {
@@ -666,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");
+            }
         }
     }
 
@@ -686,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);
@@ -896,6 +968,14 @@
                 }
                 break;
             }
+            case VoldResponseCode.DISK_SYS_PATH_CHANGED: {
+                if (cooked.length != 3) break;
+                final DiskInfo disk = mDisks.get(cooked[1]);
+                if (disk != null) {
+                    disk.sysPath = cooked[2];
+                }
+                break;
+            }
             case VoldResponseCode.DISK_DESTROYED: {
                 if (cooked.length != 2) break;
                 final DiskInfo disk = mDisks.remove(cooked[1]);
@@ -912,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;
@@ -984,17 +1063,46 @@
                 onMoveStatusLocked(status);
                 break;
             }
-
             case VoldResponseCode.BENCHMARK_RESULT: {
+                if (cooked.length != 7) break;
+                final String path = cooked[1];
+                final String ident = cooked[2];
+                final long create = Long.parseLong(cooked[3]);
+                final long drop = Long.parseLong(cooked[4]);
+                final long run = Long.parseLong(cooked[5]);
+                final long destroy = Long.parseLong(cooked[6]);
+
                 final DropBoxManager dropBox = mContext.getSystemService(DropBoxManager.class);
-                dropBox.addText(TAG_STORAGE_BENCHMARK, raw);
+                dropBox.addText(TAG_STORAGE_BENCHMARK, scrubPath(path)
+                        + " " + ident + " " + create + " " + run + " " + destroy);
+
+                final VolumeRecord rec = findRecordForPath(path);
+                if (rec != null) {
+                    rec.lastBenchMillis = System.currentTimeMillis();
+                    writeSettingsLocked();
+                }
+
+                break;
+            }
+            case VoldResponseCode.TRIM_RESULT: {
+                if (cooked.length != 4) break;
+                final String path = cooked[1];
+                final long bytes = Long.parseLong(cooked[2]);
+                final long time = Long.parseLong(cooked[3]);
+
+                final DropBoxManager dropBox = mContext.getSystemService(DropBoxManager.class);
+                dropBox.addText(TAG_STORAGE_TRIM, scrubPath(path)
+                        + " " + bytes + " " + time);
+
+                final VolumeRecord rec = findRecordForPath(path);
+                if (rec != null) {
+                    rec.lastTrimMillis = System.currentTimeMillis();
+                    writeSettingsLocked();
+                }
+
                 break;
             }
 
-            case VoldResponseCode.FstrimCompleted: {
-                EventLogTags.writeFstrimFinish(SystemClock.elapsedRealtime());
-                break;
-            }
             default: {
                 Slog.d(TAG, "Unhandled vold event " + code);
             }
@@ -1106,6 +1214,7 @@
             if (rec == null) {
                 rec = new VolumeRecord(vol.type, vol.fsUuid);
                 rec.partGuid = vol.partGuid;
+                rec.createdMillis = System.currentTimeMillis();
                 if (vol.type == VolumeInfo.TYPE_PRIVATE) {
                     rec.nickname = vol.disk.getDescription();
                 }
@@ -1385,6 +1494,9 @@
         meta.partGuid = readStringAttribute(in, ATTR_PART_GUID);
         meta.nickname = readStringAttribute(in, ATTR_NICKNAME);
         meta.userFlags = readIntAttribute(in, ATTR_USER_FLAGS);
+        meta.createdMillis = readLongAttribute(in, ATTR_CREATED_MILLIS);
+        meta.lastTrimMillis = readLongAttribute(in, ATTR_LAST_TRIM_MILLIS);
+        meta.lastBenchMillis = readLongAttribute(in, ATTR_LAST_BENCH_MILLIS);
         return meta;
     }
 
@@ -1395,6 +1507,9 @@
         writeStringAttribute(out, ATTR_PART_GUID, rec.partGuid);
         writeStringAttribute(out, ATTR_NICKNAME, rec.nickname);
         writeIntAttribute(out, ATTR_USER_FLAGS, rec.userFlags);
+        writeLongAttribute(out, ATTR_CREATED_MILLIS, rec.createdMillis);
+        writeLongAttribute(out, ATTR_LAST_TRIM_MILLIS, rec.lastTrimMillis);
+        writeLongAttribute(out, ATTR_LAST_BENCH_MILLIS, rec.lastBenchMillis);
         out.endTag(null, TAG_VOLUME);
     }
 
@@ -1447,18 +1562,18 @@
 
     @Override
     public int mountVolume(String path) {
-        mount(findVolumeIdForPath(path));
+        mount(findVolumeIdForPathOrThrow(path));
         return 0;
     }
 
     @Override
     public void unmountVolume(String path, boolean force, boolean removeEncryption) {
-        unmount(findVolumeIdForPath(path));
+        unmount(findVolumeIdForPathOrThrow(path));
     }
 
     @Override
     public int formatVolume(String path) {
-        format(findVolumeIdForPath(path));
+        format(findVolumeIdForPathOrThrow(path));
         return 0;
     }
 
@@ -1467,7 +1582,7 @@
         enforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);
         waitForReady();
 
-        final VolumeInfo vol = findVolumeById(volId);
+        final VolumeInfo vol = findVolumeByIdOrThrow(volId);
         if (vol.type == VolumeInfo.TYPE_PUBLIC || vol.type == VolumeInfo.TYPE_PRIVATE) {
             enforceUserRestriction(UserManager.DISALLOW_MOUNT_PHYSICAL_MEDIA);
         }
@@ -1483,7 +1598,7 @@
         enforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);
         waitForReady();
 
-        final VolumeInfo vol = findVolumeById(volId);
+        final VolumeInfo vol = findVolumeByIdOrThrow(volId);
 
         // TODO: expand PMS to know about multiple volumes
         if (vol.isPrimaryPhysical()) {
@@ -1512,7 +1627,7 @@
         enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS);
         waitForReady();
 
-        final VolumeInfo vol = findVolumeById(volId);
+        final VolumeInfo vol = findVolumeByIdOrThrow(volId);
         try {
             mConnector.execute("volume", "format", vol.id, "auto");
         } catch (NativeDaemonConnectorException e) {
@@ -1526,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;
@@ -1543,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
@@ -1558,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
@@ -1573,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
@@ -1739,10 +1862,18 @@
                 resetIfReadyAndConnectedLocked();
 
             } else {
-                final VolumeInfo from = Preconditions.checkNotNull(
-                        findStorageForUuid(mPrimaryStorageUuid));
-                final VolumeInfo to = Preconditions.checkNotNull(
-                        findStorageForUuid(volumeUuid));
+                final VolumeInfo from = findStorageForUuid(mPrimaryStorageUuid);
+                final VolumeInfo to = findStorageForUuid(volumeUuid);
+
+                if (from == null) {
+                    Slog.w(TAG, "Failing move due to missing from volume " + mPrimaryStorageUuid);
+                    onMoveStatusLocked(PackageManager.MOVE_FAILED_INTERNAL_ERROR);
+                    return;
+                } else if (to == null) {
+                    Slog.w(TAG, "Failing move due to missing to volume " + volumeUuid);
+                    onMoveStatusLocked(PackageManager.MOVE_FAILED_INTERNAL_ERROR);
+                    return;
+                }
 
                 try {
                     mConnector.execute("volume", "move_storage", from.id, to.id);
@@ -2505,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));
         }
@@ -2741,7 +2872,8 @@
                 Slog.i(TAG, "Trying to bind to DefaultContainerService");
 
             Intent service = new Intent().setComponent(DEFAULT_CONTAINER_COMPONENT);
-            if (mContext.bindService(service, mDefContainerConn, Context.BIND_AUTO_CREATE)) {
+            if (mContext.bindServiceAsUser(service, mDefContainerConn, Context.BIND_AUTO_CREATE,
+                    UserHandle.OWNER)) {
                 mBound = true;
                 return true;
             }
@@ -3232,11 +3364,9 @@
         mConnector.dump(fd, pw, args);
         pw.decreaseIndent();
 
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
         pw.println();
         pw.print("Last maintenance: ");
-        pw.println(sdf.format(new Date(mLastMaintenance)));
+        pw.println(TimeUtils.formatForLogging(mLastMaintenance));
     }
 
     /** {@inheritDoc} */
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/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 7afb192..0e3134d 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -1473,7 +1473,6 @@
             WifiConfiguration wifiConfig, String wlanIface) {
         mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
         try {
-            wifiFirmwareReload(wlanIface, "AP");
             if (wifiConfig == null) {
                 mConnector.execute("softap", "set", wlanIface);
             } else {
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/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 50d311f..a270974 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -86,7 +86,6 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.text.SimpleDateFormat;
@@ -115,7 +114,6 @@
         implements RegisteredServicesCacheListener<AuthenticatorDescription> {
     private static final String TAG = "AccountManagerService";
 
-    private static final int TIMEOUT_DELAY_MS = 1000 * 60;
     private static final String DATABASE_NAME = "accounts.db";
     private static final int DATABASE_VERSION = 8;
 
@@ -216,7 +214,7 @@
                 new HashMap<Account, HashMap<String, String>>();
 
         /** protected by the {@link #cacheLock} */
-        private final HashMap<Account, WeakReference<TokenCache>> accountTokenCaches = new HashMap<>();
+        private final TokenCache accountTokenCaches = new TokenCache();
 
         /**
          * protected by the {@link #cacheLock}
@@ -529,7 +527,7 @@
                     + ", pid " + Binder.getCallingPid());
         }
         if (account == null) throw new IllegalArgumentException("account is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot get secrets for accounts of type: %s",
                     callingUid,
@@ -627,7 +625,7 @@
         }
         if (account == null) throw new IllegalArgumentException("account is null");
         if (key == null) throw new IllegalArgumentException("key is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot get user data for accounts of type: %s",
                     callingUid,
@@ -645,15 +643,22 @@
 
     @Override
     public AuthenticatorDescription[] getAuthenticatorTypes(int userId) {
+        int callingUid = Binder.getCallingUid();
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.v(TAG, "getAuthenticatorTypes: "
                     + "for user id " + userId
-                    + "caller's uid " + Binder.getCallingUid()
+                    + "caller's uid " + callingUid
                     + ", pid " + Binder.getCallingPid());
         }
         // Only allow the system process to read accounts of other users
-        enforceCrossUserPermission(userId, "User " + UserHandle.getCallingUserId()
-                + " trying get authenticator types for " + userId);
+        if (isCrossUser(callingUid, userId)) {
+            throw new SecurityException(
+                    String.format(
+                            "User %s tying to get authenticator types for %s" ,
+                            UserHandle.getCallingUserId(),
+                            userId));
+        }
+
         final long identityToken = clearCallingIdentity();
         try {
             Collection<AccountAuthenticatorCache.ServiceInfo<AuthenticatorDescription>>
@@ -672,14 +677,12 @@
         }
     }
 
-    private void enforceCrossUserPermission(int userId, String errorMessage) {
-        if (userId != UserHandle.getCallingUserId()
-                && Binder.getCallingUid() != Process.myUid()
+    private boolean isCrossUser(int callingUid, int userId) {
+        return (userId != UserHandle.getCallingUserId()
+                && callingUid != Process.myUid()
                 && mContext.checkCallingOrSelfPermission(
-                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
-                    != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException(errorMessage);
-        }
+                        android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
+                                != PackageManager.PERMISSION_GRANTED);
     }
 
     @Override
@@ -691,7 +694,7 @@
                     + ", pid " + Binder.getCallingPid());
         }
         if (account == null) throw new IllegalArgumentException("account is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot explicitly add accounts of type: %s",
                     callingUid,
@@ -720,8 +723,11 @@
     @Override
     public void copyAccountToUser(final IAccountManagerResponse response, final Account account,
             int userFrom, int userTo) {
-        enforceCrossUserPermission(UserHandle.USER_ALL, "Calling copyAccountToUser requires "
+        int callingUid = Binder.getCallingUid();
+        if (isCrossUser(callingUid, UserHandle.USER_ALL)) {
+            throw new SecurityException("Calling copyAccountToUser requires "
                     + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL);
+        }
         final UserAccounts fromAccounts = getUserAccounts(userFrom);
         final UserAccounts toAccounts = getUserAccounts(userTo);
         if (fromAccounts == null || toAccounts == null) {
@@ -784,7 +790,7 @@
         if (account == null) {
             throw new IllegalArgumentException("account is null");
         }
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot notify authentication for accounts of type: %s",
                     callingUid,
@@ -957,17 +963,18 @@
     @Override
     public void hasFeatures(IAccountManagerResponse response,
             Account account, String[] features) {
+        int callingUid = Binder.getCallingUid();
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.v(TAG, "hasFeatures: " + account
                     + ", response " + response
                     + ", features " + stringArrayToString(features)
-                    + ", caller's uid " + Binder.getCallingUid()
+                    + ", caller's uid " + callingUid
                     + ", pid " + Binder.getCallingPid());
         }
         if (response == null) throw new IllegalArgumentException("response is null");
         if (account == null) throw new IllegalArgumentException("account is null");
         if (features == null) throw new IllegalArgumentException("features is null");
-        checkReadAccountsPermission();
+        checkReadAccountsPermitted(callingUid, account.type);
         UserAccounts accounts = getUserAccountsForCaller();
         long identityToken = clearCallingIdentity();
         try {
@@ -1043,7 +1050,7 @@
                 + ", pid " + Binder.getCallingPid());
         }
         if (accountToRename == null) throw new IllegalArgumentException("account is null");
-        if (!isAccountOwnedByCallingUid(accountToRename.type, callingUid)) {
+        if (!isAccountManagedByCaller(accountToRename.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot rename accounts of type: %s",
                     callingUid,
@@ -1053,8 +1060,7 @@
         UserAccounts accounts = getUserAccountsForCaller();
         long identityToken = clearCallingIdentity();
         try {
-            Account resultingAccount = renameAccountInternal(accounts, accountToRename, newName,
-                    callingUid);
+            Account resultingAccount = renameAccountInternal(accounts, accountToRename, newName);
             Bundle result = new Bundle();
             result.putString(AccountManager.KEY_ACCOUNT_NAME, resultingAccount.name);
             result.putString(AccountManager.KEY_ACCOUNT_TYPE, resultingAccount.type);
@@ -1069,7 +1075,7 @@
     }
 
     private Account renameAccountInternal(
-            UserAccounts accounts, Account accountToRename, String newName, int callingUid) {
+            UserAccounts accounts, Account accountToRename, String newName) {
         Account resultAccount = null;
         /*
          * Cancel existing notifications. Let authenticators
@@ -1179,16 +1185,20 @@
         }
         if (response == null) throw new IllegalArgumentException("response is null");
         if (account == null) throw new IllegalArgumentException("account is null");
-
         // Only allow the system process to modify accounts of other users
-        enforceCrossUserPermission(userId, "User " + UserHandle.getCallingUserId()
-                    + " trying to remove account for " + userId);
+        if (isCrossUser(callingUid, userId)) {
+            throw new SecurityException(
+                    String.format(
+                            "User %s tying remove account for %s" ,
+                            UserHandle.getCallingUserId(),
+                            userId));
+        }
         /*
          * Only the system or authenticator should be allowed to remove accounts for that
          * authenticator.  This will let users remove accounts (via Settings in the system) but not
          * arbitrary applications (like competing authenticators).
          */
-        if (!isAccountOwnedByCallingUid(account.type, callingUid) && !isSystemUid(callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid) && !isSystemUid(callingUid)) {
             String msg = String.format(
                     "uid %s cannot remove accounts of type: %s",
                     callingUid,
@@ -1252,7 +1262,7 @@
              */
             Log.e(TAG, "account is null");
             return false;
-        } else if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        } else if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot explicitly add accounts of type: %s",
                     callingUid,
@@ -1398,16 +1408,7 @@
             return;
         }
         // Also wipe out cached token in memory.
-        for (Account a : accounts.accountTokenCaches.keySet()) {
-            if (a.type.equals(accountType)) {
-                WeakReference<TokenCache> tokenCacheRef =
-                        accounts.accountTokenCaches.get(a);
-                TokenCache cache = null;
-                if (tokenCacheRef != null && (cache = tokenCacheRef.get()) != null) {
-                    cache.remove(authToken);
-                }
-            }
-        }
+        accounts.accountTokenCaches.remove(accountType, authToken);
     }
 
     private void invalidateAuthTokenLocked(UserAccounts accounts, SQLiteDatabase db,
@@ -1459,11 +1460,8 @@
         cancelNotification(getSigninRequiredNotificationId(accounts, account),
                 new UserHandle(accounts.userId));
         synchronized (accounts.cacheLock) {
-            TokenCache cache = getTokenCacheForAccountLocked(accounts, account);
-            if (cache != null) {
-                cache.put(token, tokenType, callerPkg, callerSigDigest, expiryMillis);
-            }
-            return;
+            accounts.accountTokenCaches.put(
+                    account, token, tokenType, callerPkg, callerSigDigest, expiryMillis);
         }
     }
 
@@ -1512,7 +1510,7 @@
         }
         if (account == null) throw new IllegalArgumentException("account is null");
         if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot peek the authtokens associated with accounts of type: %s",
                     callingUid,
@@ -1539,7 +1537,7 @@
         }
         if (account == null) throw new IllegalArgumentException("account is null");
         if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot set auth tokens associated with accounts of type: %s",
                     callingUid,
@@ -1564,7 +1562,7 @@
                     + ", pid " + Binder.getCallingPid());
         }
         if (account == null) throw new IllegalArgumentException("account is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot set secrets for accounts of type: %s",
                     callingUid,
@@ -1627,7 +1625,7 @@
                     + ", pid " + Binder.getCallingPid());
         }
         if (account == null) throw new IllegalArgumentException("account is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot clear passwords for accounts of type: %s",
                     callingUid,
@@ -1654,7 +1652,7 @@
         }
         if (key == null) throw new IllegalArgumentException("key is null");
         if (account == null) throw new IllegalArgumentException("account is null");
-        if (!isAccountOwnedByCallingUid(account.type, callingUid)) {
+        if (!isAccountManagedByCaller(account.type, callingUid)) {
             String msg = String.format(
                     "uid %s cannot set user data for accounts of type: %s",
                     callingUid,
@@ -1780,7 +1778,6 @@
             final boolean notifyOnAuthFailure,
             final boolean expectActivityLaunch,
             final Bundle loginOptions) {
-
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.v(TAG, "getAuthToken: " + account
                     + ", response " + response
@@ -1877,6 +1874,9 @@
                         callerPkg,
                         callerPkgSigDigest);
                 if (token != null) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "getAuthToken: cache hit ofr custom token authenticator.");
+                    }
                     Bundle result = new Bundle();
                     result.putString(AccountManager.KEY_AUTHTOKEN, token);
                     result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
@@ -1914,10 +1914,11 @@
                 public void onResult(Bundle result) {
                     if (result != null) {
                         if (result.containsKey(AccountManager.KEY_AUTH_TOKEN_LABEL)) {
-                            Intent intent = newGrantCredentialsPermissionIntent(account, callerUid,
+                            Intent intent = newGrantCredentialsPermissionIntent(
+                                    account,
+                                    callerUid,
                                     new AccountAuthenticatorResponse(this),
-                                    authTokenType,
-                                    result.getString(AccountManager.KEY_AUTH_TOKEN_LABEL));
+                                    authTokenType);
                             Bundle bundle = new Bundle();
                             bundle.putParcelable(AccountManager.KEY_INTENT, intent);
                             onResult(bundle);
@@ -1995,9 +1996,6 @@
                 GrantCredentialsPermissionActivity.EXTRAS_REQUESTING_UID, -1);
         String authTokenType = intent.getStringExtra(
                 GrantCredentialsPermissionActivity.EXTRAS_AUTH_TOKEN_TYPE);
-        String authTokenLabel = intent.getStringExtra(
-                GrantCredentialsPermissionActivity.EXTRAS_AUTH_TOKEN_LABEL);
-
         final String titleAndSubtitle =
                 mContext.getString(R.string.permission_request_notification_with_subtitle,
                 account.name);
@@ -2025,7 +2023,7 @@
     }
 
     private Intent newGrantCredentialsPermissionIntent(Account account, int uid,
-            AccountAuthenticatorResponse response, String authTokenType, String authTokenLabel) {
+            AccountAuthenticatorResponse response, String authTokenType) {
 
         Intent intent = new Intent(mContext, GrantCredentialsPermissionActivity.class);
         // See FLAG_ACTIVITY_NEW_TASK docs for limitations and benefits of the flag.
@@ -2149,6 +2147,7 @@
     public void addAccountAsUser(final IAccountManagerResponse response, final String accountType,
             final String authTokenType, final String[] requiredFeatures,
             final boolean expectActivityLaunch, final Bundle optionsIn, int userId) {
+        int callingUid = Binder.getCallingUid();
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.v(TAG, "addAccount: accountType " + accountType
                     + ", response " + response
@@ -2161,10 +2160,14 @@
         }
         if (response == null) throw new IllegalArgumentException("response is null");
         if (accountType == null) throw new IllegalArgumentException("accountType is null");
-
         // Only allow the system process to add accounts of other users
-        enforceCrossUserPermission(userId, "User " + UserHandle.getCallingUserId()
-                    + " trying to add account for " + userId);
+        if (isCrossUser(callingUid, userId)) {
+            throw new SecurityException(
+                    String.format(
+                            "User %s trying to add account for %s" ,
+                            UserHandle.getCallingUserId(),
+                            userId));
+        }
 
         // Is user disallowed from modifying accounts?
         if (!canUserModifyAccounts(userId)) {
@@ -2235,20 +2238,28 @@
     }
 
     @Override
-    public void confirmCredentialsAsUser(IAccountManagerResponse response,
-            final Account account, final Bundle options, final boolean expectActivityLaunch,
+    public void confirmCredentialsAsUser(
+            IAccountManagerResponse response,
+            final Account account,
+            final Bundle options,
+            final boolean expectActivityLaunch,
             int userId) {
-        // Only allow the system process to read accounts of other users
-        enforceCrossUserPermission(userId, "User " + UserHandle.getCallingUserId()
-                    + " trying to confirm account credentials for " + userId);
-
+        int callingUid = Binder.getCallingUid();
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.v(TAG, "confirmCredentials: " + account
                     + ", response " + response
                     + ", expectActivityLaunch " + expectActivityLaunch
-                    + ", caller's uid " + Binder.getCallingUid()
+                    + ", caller's uid " + callingUid
                     + ", pid " + Binder.getCallingPid());
         }
+        // Only allow the system process to read accounts of other users
+        if (isCrossUser(callingUid, userId)) {
+            throw new SecurityException(
+                    String.format(
+                            "User %s trying to confirm account credentials for %s" ,
+                            UserHandle.getCallingUserId(),
+                            userId));
+        }
         if (response == null) throw new IllegalArgumentException("response is null");
         if (account == null) throw new IllegalArgumentException("account is null");
         UserAccounts accounts = getUserAccounts(userId);
@@ -2324,7 +2335,7 @@
         }
         if (response == null) throw new IllegalArgumentException("response is null");
         if (accountType == null) throw new IllegalArgumentException("accountType is null");
-        if (!isAccountOwnedByCallingUid(accountType, callingUid) && !isSystemUid(callingUid)) {
+        if (!isAccountManagedByCaller(accountType, callingUid) && !isSystemUid(callingUid)) {
             String msg = String.format(
                     "uid %s cannot edit authenticator properites for account type: %s",
                     callingUid,
@@ -2457,9 +2468,11 @@
      * @hide
      */
     public Account[] getAccounts(int userId) {
-        checkReadAccountsPermission();
         UserAccounts accounts = getUserAccounts(userId);
         int callingUid = Binder.getCallingUid();
+        if (!isReadAccountsPermitted(callingUid, null)) {
+            return new Account[0];
+        }
         long identityToken = clearCallingIdentity();
         try {
             synchronized (accounts.cacheLock) {
@@ -2519,7 +2532,10 @@
         return getAccountsAsUser(type, userId, null, -1);
     }
 
-    private Account[] getAccountsAsUser(String type, int userId, String callingPackage,
+    private Account[] getAccountsAsUser(
+            String type,
+            int userId,
+            String callingPackage,
             int packageUid) {
         int callingUid = Binder.getCallingUid();
         // Only allow the system process to read accounts of other users
@@ -2542,7 +2558,12 @@
         if (packageUid != -1 && UserHandle.isSameApp(callingUid, Process.myUid())) {
             callingUid = packageUid;
         }
-        checkReadAccountsPermission();
+
+        // Authenticators should be able to see their own accounts regardless of permissions.
+        if (TextUtils.isEmpty(type) && !isReadAccountsPermitted(callingUid, type)) {
+            return new Account[0];
+        }
+
         long identityToken = clearCallingIdentity();
         try {
             UserAccounts accounts = getUserAccounts(userId);
@@ -2593,7 +2614,7 @@
             logRecord(db, DebugDbHelper.ACTION_ACCOUNT_RENAME, TABLE_SHARED_ACCOUNTS,
                     sharedTableAccountId, accounts, callingUid);
             // Recursively rename the account.
-            renameAccountInternal(accounts, account, newName, callingUid);
+            renameAccountInternal(accounts, account, newName);
         }
         return r > 0;
     }
@@ -2663,7 +2684,6 @@
 
     @Override
     public Account[] getAccountsByTypeForPackage(String type, String packageName) {
-        checkBinderPermission(android.Manifest.permission.INTERACT_ACROSS_USERS);
         int packageUid = -1;
         try {
             packageUid = AppGlobals.getPackageManager().getPackageUid(
@@ -2676,20 +2696,31 @@
     }
 
     @Override
-    public void getAccountsByFeatures(IAccountManagerResponse response,
-            String type, String[] features) {
+    public void getAccountsByFeatures(
+            IAccountManagerResponse response,
+            String type,
+            String[] features) {
+        int callingUid = Binder.getCallingUid();
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.v(TAG, "getAccounts: accountType " + type
                     + ", response " + response
                     + ", features " + stringArrayToString(features)
-                    + ", caller's uid " + Binder.getCallingUid()
+                    + ", caller's uid " + callingUid
                     + ", pid " + Binder.getCallingPid());
         }
         if (response == null) throw new IllegalArgumentException("response is null");
         if (type == null) throw new IllegalArgumentException("accountType is null");
-        checkReadAccountsPermission();
+        if (!isReadAccountsPermitted(callingUid, type)) {
+            Bundle result = new Bundle();
+            result.putParcelableArray(AccountManager.KEY_ACCOUNTS, new Account[0]);
+            try {
+                response.onResult(result);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Cannot respond to caller do to exception." , e);
+            }
+            return;
+        }
         UserAccounts userAccounts = getUserAccountsForCaller();
-        int callingUid = Binder.getCallingUid();
         long identityToken = clearCallingIdentity();
         try {
             if (features == null || features.length == 0) {
@@ -2872,11 +2903,6 @@
             }
         }
 
-        public void scheduleTimeout() {
-            mMessageHandler.sendMessageDelayed(
-                    mMessageHandler.obtainMessage(MESSAGE_TIMED_OUT, this), TIMEOUT_DELAY_MS);
-        }
-
         public void cancelTimeout() {
             mMessageHandler.removeMessages(MESSAGE_TIMED_OUT, this);
         }
@@ -3181,12 +3207,9 @@
         // who called.
         private static String ACTION_CALLED_ACCOUNT_ADD = "action_called_account_add";
         private static String ACTION_CALLED_ACCOUNT_REMOVE = "action_called_account_remove";
-        private static String ACTION_CALLED_ACCOUNT_RENAME = "action_called_account_rename";
 
         private static SimpleDateFormat dateFromat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
-        private static String UPDATE_WHERE_CLAUSE = KEY + "=?";
-
         private static void createDebugTable(SQLiteDatabase db) {
             db.execSQL("CREATE TABLE " + TABLE_DEBUG + " ( "
                     + ACCOUNTS_ID + " INTEGER,"
@@ -3421,7 +3444,7 @@
         }
     }
 
-    public IBinder onBind(Intent intent) {
+    public IBinder onBind(@SuppressWarnings("unused") Intent intent) {
         return asBinder();
     }
 
@@ -3576,21 +3599,29 @@
         }
     }
 
-    /** Succeeds if any of the specified permissions are granted. */
-    private void checkBinderPermission(String... permissions) {
-        final int uid = Binder.getCallingUid();
-
+    private boolean isPermitted(int callingUid, String... permissions) {
         for (String perm : permissions) {
             if (mContext.checkCallingOrSelfPermission(perm) == PackageManager.PERMISSION_GRANTED) {
                 if (Log.isLoggable(TAG, Log.VERBOSE)) {
-                    Log.v(TAG, "  caller uid " + uid + " has " + perm);
+                    Log.v(TAG, "  caller uid " + callingUid + " has " + perm);
                 }
-                return;
+                return true;
             }
         }
-        String msg = "caller uid " + uid + " lacks any of " + TextUtils.join(",", permissions);
-        Log.w(TAG, "  " + msg);
-        throw new SecurityException(msg);
+        return false;
+    }
+
+    /** Succeeds if any of the specified permissions are granted. */
+    private void checkBinderPermission(String... permissions) {
+        final int callingUid = Binder.getCallingUid();
+        if (isPermitted(callingUid, permissions)) {
+            String msg = String.format(
+                    "caller uid %s  lacks any of %s",
+                    callingUid,
+                    TextUtils.join(",", permissions));
+            Log.w(TAG, "  " + msg);
+            throw new SecurityException(msg);
+        }
     }
 
     private int handleIncomingUser(int userId) {
@@ -3646,6 +3677,9 @@
     }
 
     private boolean isAccountManagedByCaller(String accountType, int callingUid) {
+        if (accountType == null) {
+            return false;
+        }
         final int callingUserId = UserHandle.getUserId(callingUid);
         for (RegisteredServicesCache.ServiceInfo<AuthenticatorDescription> serviceInfo :
                 mAuthenticatorCache.getAllServices(callingUserId)) {
@@ -3723,20 +3757,34 @@
         return false;
     }
 
-    private boolean isAccountOwnedByCallingUid(String accountType, int callingUid) {
-        if (!isAccountManagedByCaller(accountType, callingUid)) {
-            String msg = "caller uid " + callingUid + " is different than the authenticator's uid";
-            Log.w(TAG, msg);
-            return false;
-        }
-        if (Log.isLoggable(TAG, Log.VERBOSE)) {
-            Log.v(TAG, "caller uid " + callingUid + " is the same as the authenticator's uid");   
-        }
-        return true;
+    private boolean isReadAccountsPermitted(int callingUid, String accountType) {
+        /*
+         * Settings app (which is in the same uid as AcocuntManagerService), apps with the
+         * GET_ACCOUNTS permission or authenticators that own the account type should be able to
+         * access accounts of the specified account.
+         */
+        boolean isPermitted =
+                isPermitted(callingUid, Manifest.permission.GET_ACCOUNTS);
+        boolean isAccountManagedByCaller = isAccountManagedByCaller(accountType, callingUid);
+        Log.w(TAG, String.format(
+                "isReadAccountPermitted: isPermitted: %s, isAM: %s",
+                isPermitted,
+                isAccountManagedByCaller));
+        return isPermitted || isAccountManagedByCaller;
     }
 
-    private void checkReadAccountsPermission() {
-        checkBinderPermission(Manifest.permission.GET_ACCOUNTS);
+    /** Succeeds if any of the specified permissions are granted. */
+    private void checkReadAccountsPermitted(
+            int callingUid,
+            String accountType) {
+        if (!isReadAccountsPermitted(callingUid, accountType)) {
+            String msg = String.format(
+                    "caller uid %s cannot access %s accounts",
+                    callingUid,
+                    accountType);
+            Log.w(TAG, "  " + msg);
+            throw new SecurityException(msg);
+        }
     }
 
     private boolean canUserModifyAccounts(int userId) {
@@ -4008,8 +4056,8 @@
             String callingPackage,
             byte[] pkgSigDigest) {
         synchronized (accounts.cacheLock) {
-            TokenCache cache = getTokenCacheForAccountLocked(accounts, account);
-            return cache.get(tokenType, callingPackage, pkgSigDigest);
+            return accounts.accountTokenCaches.get(
+                    account, tokenType, callingPackage, pkgSigDigest);
         }
     }
 
@@ -4094,17 +4142,6 @@
         return authTokensForAccount;
     }
 
-    protected TokenCache getTokenCacheForAccountLocked(UserAccounts accounts, Account account) {
-        WeakReference<TokenCache> cacheRef = accounts.accountTokenCaches.get(account);
-        TokenCache cache;
-        if (cacheRef == null || (cache = cacheRef.get()) == null) {
-            cache = new TokenCache();
-            cacheRef = new WeakReference<>(cache);
-            accounts.accountTokenCaches.put(account, cacheRef);
-        }
-        return cache;
-    }
-
     private Context getContextForUser(UserHandle user) {
         try {
             return mContext.createPackageContextAsUser(mContext.getPackageName(), 0, user);
diff --git a/services/core/java/com/android/server/accounts/TokenCache.java b/services/core/java/com/android/server/accounts/TokenCache.java
index 70a7010..be91f98 100644
--- a/services/core/java/com/android/server/accounts/TokenCache.java
+++ b/services/core/java/com/android/server/accounts/TokenCache.java
@@ -16,6 +16,12 @@
 
 package com.android.server.accounts;
 
+import android.accounts.Account;
+import android.util.LruCache;
+import android.util.Pair;
+
+import com.android.internal.util.Preconditions;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -23,10 +29,12 @@
 import java.util.Objects;
 
 /**
- * TokenCaches manage tokens associated with an account in memory.
+ * TokenCaches manage time limited authentication tokens in memory. 
  */
 /* default */ class TokenCache {
 
+    private static final int MAX_CACHE_CHARS = 64000;
+
     private static class Value {
         public final String token;
         public final long expiryEpochMillis;
@@ -38,11 +46,13 @@
     }
 
     private static class Key {
+        public final Account account;
         public final String packageName;
         public final String tokenType;
         public final byte[] sigDigest;
 
-        public Key(String tokenType, String packageName, byte[] sigDigest) {
+        public Key(Account account, String tokenType, String packageName, byte[] sigDigest) {
+            this.account = account;
             this.tokenType = tokenType;
             this.packageName = packageName;
             this.sigDigest = sigDigest;
@@ -52,7 +62,8 @@
         public boolean equals(Object o) {
             if (o != null && o instanceof Key) {
                 Key cacheKey = (Key) o;
-                return Objects.equals(packageName, cacheKey.packageName)
+                return Objects.equals(account, cacheKey.account)
+                        && Objects.equals(packageName, cacheKey.packageName)
                         && Objects.equals(tokenType, cacheKey.tokenType)
                         && Arrays.equals(sigDigest, cacheKey.sigDigest);
             } else {
@@ -62,7 +73,99 @@
 
         @Override
         public int hashCode() {
-            return packageName.hashCode() ^ tokenType.hashCode() ^ Arrays.hashCode(sigDigest);
+            return account.hashCode()
+                    ^ packageName.hashCode()
+                    ^ tokenType.hashCode()
+                    ^ Arrays.hashCode(sigDigest);
+        }
+    }
+
+    private static class TokenLruCache extends LruCache<Key, Value> {
+
+        private class Evictor {
+            private final List<Key> mKeys;
+
+            public Evictor() {
+                mKeys = new ArrayList<>();
+            }
+
+            public void add(Key k) {
+                mKeys.add(k);
+            }
+
+            public void evict() {
+                for (Key k : mKeys) {
+                    TokenLruCache.this.remove(k);
+                }
+            }
+        }
+
+        /**
+         * Map associated tokens with an Evictor that will manage evicting the token from the
+         * cache. This reverse lookup is needed because very little information is given at token
+         * invalidation time.
+         */
+        private HashMap<Pair<String, String>, Evictor> mTokenEvictors = new HashMap<>();
+        private HashMap<Account, Evictor> mAccountEvictors = new HashMap<>();
+
+        public TokenLruCache() {
+            super(MAX_CACHE_CHARS);
+        }
+
+        @Override
+        protected int sizeOf(Key k, Value v) {
+            return v.token.length();
+        }
+
+        @Override
+        protected void entryRemoved(boolean evicted, Key k, Value oldVal, Value newVal) {
+            // When a token has been removed, clean up the associated Evictor.
+            if (oldVal != null && newVal == null) {
+                /*
+                 * This is recursive, but it won't spiral out of control because LruCache is
+                 * thread safe and the Evictor can only be removed once.
+                 */
+                Evictor evictor = mTokenEvictors.remove(oldVal.token);
+                if (evictor != null) {
+                    evictor.evict();
+                }
+            }
+        }
+
+        public void putToken(Key k, Value v) {
+            // Prepare for removal by token string.
+            Evictor tokenEvictor = mTokenEvictors.get(v.token);
+            if (tokenEvictor == null) {
+                tokenEvictor = new Evictor();
+            }
+            tokenEvictor.add(k);
+            mTokenEvictors.put(new Pair<>(k.account.type, v.token), tokenEvictor);
+
+            // Prepare for removal by associated account.
+            Evictor accountEvictor = mAccountEvictors.get(k.account);
+            if (accountEvictor == null) {
+                accountEvictor = new Evictor();
+            }
+            accountEvictor.add(k);
+            mAccountEvictors.put(k.account, tokenEvictor);
+
+            // Only cache the token once we can remove it directly or by account.
+            put(k, v);
+        }
+
+        public void evict(String accountType, String token) {
+            Evictor evictor = mTokenEvictors.get(new Pair<>(accountType, token));
+            if (evictor != null) {
+                evictor.evict();
+            }
+            
+        }
+
+        public void evict(Account account) {
+            Evictor evictor = mAccountEvictors.get(account);
+            if (evictor != null) {
+                evictor.evict();
+            }
         }
     }
 
@@ -70,36 +173,7 @@
      * Map associating basic token lookup information with with actual tokens (and optionally their
      * expiration times). 
      */
-    private HashMap<Key, Value> mCachedTokens = new HashMap<>();
-
-    /**
-     * Map associated tokens with an Evictor that will manage evicting the token from the cache.
-     * This reverse lookup is needed because very little information is given at token invalidation
-     * time.
-     */
-    private HashMap<String, Evictor> mTokenEvictors = new HashMap<>();
-
-    private class Evictor {
-        private final String mToken;
-        private final List<Key> mKeys;
-
-        public Evictor(String token) {
-            mKeys = new ArrayList<>();
-            mToken = token;
-        }
-
-        public void add(Key k) {
-            mKeys.add(k);
-        }
-
-        public void evict() {
-            for (Key k : mKeys) {
-                mCachedTokens.remove(k);
-            }
-            // Clear out the evictor reference.
-            mTokenEvictors.remove(mToken);
-        }
-    }
+    private TokenLruCache mCachedTokens = new TokenLruCache();
 
     /**
      * Caches the specified token until the specified expiryMillis. The token will be associated
@@ -112,51 +186,44 @@
      * @param expiryMillis
      */
     public void put(
+            Account account,
             String token,
             String tokenType,
             String packageName,
             byte[] sigDigest,
             long expiryMillis) {
+        Preconditions.checkNotNull(account);
         if (token == null || System.currentTimeMillis() > expiryMillis) {
             return;
         }
-        Key k = new Key(tokenType, packageName, sigDigest);
-        // Prep evictor. No token should be cached without a corresponding evictor.
-        Evictor evictor = mTokenEvictors.get(token);
-        if (evictor == null) {
-            evictor = new Evictor(token);
-        }
-        evictor.add(k);
-        mTokenEvictors.put(token, evictor);
-        // Then cache values.
+        Key k = new Key(account, tokenType, packageName, sigDigest);
         Value v = new Value(token, expiryMillis);
-        mCachedTokens.put(k, v);
+        mCachedTokens.putToken(k, v);
     }
 
     /**
      * Evicts the specified token from the cache. This should be called as part of a token
      * invalidation workflow.
      */
-    public void remove(String token) {
-        Evictor evictor = mTokenEvictors.get(token);
-        if (evictor == null) {
-            // This condition is expected if the token isn't cached.
-            return;
-        }
-        evictor.evict();
+    public void remove(String accountType, String token) {
+        mCachedTokens.evict(accountType, token);
+    }
+
+    public void remove(Account account) {
+        mCachedTokens.evict(account);
     }
 
     /**
      * Gets a token from the cache if possible.
      */
-    public String get(String tokenType, String packageName, byte[] sigDigest) {
-        Key k = new Key(tokenType, packageName, sigDigest);
+    public String get(Account account, String tokenType, String packageName, byte[] sigDigest) {
+        Key k = new Key(account, tokenType, packageName, sigDigest);
         Value v = mCachedTokens.get(k);
         long currentTime = System.currentTimeMillis();
         if (v != null && currentTime < v.expiryEpochMillis) {
             return v.token;
         } else if (v != null) {
-            remove(v.token);
+            remove(account.type, v.token);
         }
         return null;
     }
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 333db5d..899139f 100755
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -29,6 +29,7 @@
 import java.util.Set;
 
 import android.app.ActivityThread;
+import android.app.AppOpsManager;
 import android.os.Build;
 import android.os.DeadObjectException;
 import android.os.Handler;
@@ -302,8 +303,8 @@
         return getServiceMap(callingUser).mServicesByName;
     }
 
-    ComponentName startServiceLocked(IApplicationThread caller, Intent service,
-            String resolvedType, int callingPid, int callingUid, int userId)
+    ComponentName startServiceLocked(IApplicationThread caller, Intent service, String resolvedType,
+            int callingPid, int callingUid, String callingPackage, int userId)
             throws TransactionTooLargeException {
         if (DEBUG_DELAYED_STARTS) Slog.v(TAG_SERVICE, "startService: " + service
                 + " type=" + resolvedType + " args=" + service.getExtras());
@@ -324,7 +325,7 @@
 
 
         ServiceLookupResult res =
-            retrieveServiceLocked(service, resolvedType,
+            retrieveServiceLocked(service, resolvedType, callingPackage,
                     callingPid, callingUid, userId, true, callerFg);
         if (res == null) {
             return null;
@@ -490,7 +491,7 @@
         }
 
         // If this service is active, make sure it is stopped.
-        ServiceLookupResult r = retrieveServiceLocked(service, resolvedType,
+        ServiceLookupResult r = retrieveServiceLocked(service, resolvedType, null,
                 Binder.getCallingPid(), Binder.getCallingUid(), userId, false, false);
         if (r != null) {
             if (r.record != null) {
@@ -508,8 +509,8 @@
         return 0;
     }
 
-    IBinder peekServiceLocked(Intent service, String resolvedType) {
-        ServiceLookupResult r = retrieveServiceLocked(service, resolvedType,
+    IBinder peekServiceLocked(Intent service, String resolvedType, String callingPackage) {
+        ServiceLookupResult r = retrieveServiceLocked(service, resolvedType, callingPackage,
                 Binder.getCallingPid(), Binder.getCallingUid(),
                 UserHandle.getCallingUserId(), false, false);
 
@@ -694,8 +695,8 @@
     }
 
     int bindServiceLocked(IApplicationThread caller, IBinder token, Intent service,
-            String resolvedType, IServiceConnection connection, int flags, int userId)
-            throws TransactionTooLargeException {
+            String resolvedType, IServiceConnection connection, int flags,
+            String callingPackage, int userId) throws TransactionTooLargeException {
         if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "bindService: " + service
                 + " type=" + resolvedType + " conn=" + connection.asBinder()
                 + " flags=0x" + Integer.toHexString(flags));
@@ -746,7 +747,7 @@
         final boolean callerFg = callerApp.setSchedGroup != Process.THREAD_GROUP_BG_NONINTERACTIVE;
 
         ServiceLookupResult res =
-            retrieveServiceLocked(service, resolvedType,
+            retrieveServiceLocked(service, resolvedType, callingPackage,
                     Binder.getCallingPid(), Binder.getCallingUid(), userId, true, callerFg);
         if (res == null) {
             return 0;
@@ -1022,7 +1023,7 @@
     }
 
     private ServiceLookupResult retrieveServiceLocked(Intent service,
-            String resolvedType, int callingPid, int callingUid, int userId,
+            String resolvedType, String callingPackage, int callingPid, int callingUid, int userId,
             boolean createIfNeeded, boolean callingFromFg) {
         ServiceRecord r = null;
         if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "retrieveServiceLocked: " + service
@@ -1112,7 +1113,18 @@
                         + ", uid=" + callingUid
                         + " requires " + r.permission);
                 return new ServiceLookupResult(null, r.permission);
+            } else if (r.permission != null && callingPackage != null) {
+                final int opCode = AppOpsManager.permissionToOpCode(r.permission);
+                if (opCode != AppOpsManager.OP_NONE && mAm.mAppOpsService.noteOperation(
+                        opCode, callingUid, callingPackage) != AppOpsManager.MODE_ALLOWED) {
+                    Slog.w(TAG, "Appop Denial: Accessing service " + r.name
+                            + " from pid=" + callingPid
+                            + ", uid=" + callingUid
+                            + " requires appop " + AppOpsManager.opToName(opCode));
+                    return null;
+                }
             }
+
             if (!mAm.mIntentFirewall.checkService(r.name, service, callingUid, callingPid,
                     resolvedType, r.appInfo)) {
                 return null;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 959fd37..6e94647 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -18,9 +18,7 @@
 
 import static android.Manifest.permission.INTERACT_ACROSS_USERS;
 import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
-import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
 import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
-import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static com.android.internal.util.XmlUtils.readBooleanAttribute;
 import static com.android.internal.util.XmlUtils.readIntAttribute;
@@ -500,13 +498,11 @@
         @Override
         public void run() {
             Slog.w(TAG, "getAssistContextExtras failed: timeout retrieving from " + activity);
-            synchronized (ActivityManagerService.this) {
-                synchronized (this) {
-                    haveResult = true;
-                    notifyAll();
-                }
-                pendingAssistExtrasTimedOutLocked(this);
+            synchronized (this) {
+                haveResult = true;
+                notifyAll();
             }
+            pendingAssistExtrasTimedOut(this);
         }
     }
 
@@ -1355,6 +1351,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;
@@ -2016,6 +2013,9 @@
                 AppTimeTracker tracker = (AppTimeTracker)msg.obj;
                 tracker.deliverResult(mContext);
             } break;
+            case REPORT_USER_SWITCH_COMPLETE_MSG: {
+                dispatchUserSwitchComplete(msg.arg1);
+            } break;
             }
         }
     };
@@ -10751,9 +10751,13 @@
         }
     }
 
-    void pendingAssistExtrasTimedOutLocked(PendingAssistExtras pae) {
-        mPendingAssistExtras.remove(pae);
-        if (pae.receiver != null) {
+    void pendingAssistExtrasTimedOut(PendingAssistExtras pae) {
+        IResultReceiver receiver;
+        synchronized (this) {
+            mPendingAssistExtras.remove(pae);
+            receiver = pae.receiver;
+        }
+        if (receiver != null) {
             // Caller wants result sent back to them.
             try {
                 pae.receiver.send(0, null);
@@ -15554,13 +15558,18 @@
 
     @Override
     public ComponentName startService(IApplicationThread caller, Intent service,
-            String resolvedType, int userId) throws TransactionTooLargeException {
+            String resolvedType, String callingPackage, int userId)
+            throws TransactionTooLargeException {
         enforceNotIsolatedCaller("startService");
         // Refuse possible leaked file descriptors
         if (service != null && service.hasFileDescriptors() == true) {
             throw new IllegalArgumentException("File descriptors passed in Intent");
         }
 
+        if (callingPackage == null) {
+            throw new IllegalArgumentException("callingPackage cannot be null");
+        }
+
         if (DEBUG_SERVICE) Slog.v(TAG_SERVICE,
                 "startService: " + service + " type=" + resolvedType);
         synchronized(this) {
@@ -15568,20 +15577,21 @@
             final int callingUid = Binder.getCallingUid();
             final long origId = Binder.clearCallingIdentity();
             ComponentName res = mServices.startServiceLocked(caller, service,
-                    resolvedType, callingPid, callingUid, userId);
+                    resolvedType, callingPid, callingUid, callingPackage, userId);
             Binder.restoreCallingIdentity(origId);
             return res;
         }
     }
 
-    ComponentName startServiceInPackage(int uid, Intent service, String resolvedType, int userId)
+    ComponentName startServiceInPackage(int uid, Intent service, String resolvedType,
+            String callingPackage, int userId)
             throws TransactionTooLargeException {
         synchronized(this) {
             if (DEBUG_SERVICE) Slog.v(TAG_SERVICE,
                     "startServiceInPackage: " + service + " type=" + resolvedType);
             final long origId = Binder.clearCallingIdentity();
             ComponentName res = mServices.startServiceLocked(null, service,
-                    resolvedType, -1, uid, userId);
+                    resolvedType, -1, uid, callingPackage, userId);
             Binder.restoreCallingIdentity(origId);
             return res;
         }
@@ -15602,14 +15612,19 @@
     }
 
     @Override
-    public IBinder peekService(Intent service, String resolvedType) {
+    public IBinder peekService(Intent service, String resolvedType, String callingPackage) {
         enforceNotIsolatedCaller("peekService");
         // Refuse possible leaked file descriptors
         if (service != null && service.hasFileDescriptors() == true) {
             throw new IllegalArgumentException("File descriptors passed in Intent");
         }
+
+        if (callingPackage == null) {
+            throw new IllegalArgumentException("callingPackage cannot be null");
+        }
+
         synchronized(this) {
-            return mServices.peekServiceLocked(service, resolvedType);
+            return mServices.peekServiceLocked(service, resolvedType, callingPackage);
         }
     }
 
@@ -15779,8 +15794,8 @@
     }
 
     public int bindService(IApplicationThread caller, IBinder token, Intent service,
-            String resolvedType, IServiceConnection connection, int flags, int userId)
-            throws TransactionTooLargeException {
+            String resolvedType, IServiceConnection connection, int flags, String callingPackage,
+            int userId) throws TransactionTooLargeException {
         enforceNotIsolatedCaller("bindService");
 
         // Refuse possible leaked file descriptors
@@ -15788,9 +15803,13 @@
             throw new IllegalArgumentException("File descriptors passed in Intent");
         }
 
+        if (callingPackage == null) {
+            throw new IllegalArgumentException("callingPackage cannot be null");
+        }
+
         synchronized(this) {
-            return mServices.bindServiceLocked(caller, token, service, resolvedType,
-                    connection, flags, userId);
+            return mServices.bindServiceLocked(caller, token, service,
+                    resolvedType, connection, flags, callingPackage, userId);
         }
     }
 
@@ -19897,7 +19916,7 @@
             }
         }
 
-        completeSwitchAndInitalize(uss, newUserId, true, false);
+        completeSwitchAndInitialize(uss, newUserId, true, false);
     }
 
     void moveUserToForeground(UserState uss, int oldUserId, int newUserId) {
@@ -19913,10 +19932,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) {
@@ -19933,18 +19952,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.
      */
@@ -20329,8 +20355,9 @@
         if (info == null) return null;
         ApplicationInfo newInfo = new ApplicationInfo(info);
         newInfo.uid = applyUserId(info.uid, userId);
-        newInfo.dataDir = PackageManager.getDataDirForUser(info.volumeUuid, info.packageName,
-                userId).getAbsolutePath();
+        newInfo.dataDir = Environment
+                .getDataUserPackageDirectory(info.volumeUuid, userId, info.packageName)
+                .getAbsolutePath();
         return newInfo;
     }
 
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 0714d36..31cdcd5 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -2829,7 +2829,7 @@
                     + " res=" + resultCode + " data=" + resultData);
             if (resultTo.userId != r.userId) {
                 if (resultData != null) {
-                    resultData.setContentUserHint(r.userId);
+                    resultData.prepareToLeaveUser(r.userId);
                 }
             }
             if (r.info.applicationInfo.uid > 0) {
@@ -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/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 4ce5c7e..c12aff6 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -187,12 +187,12 @@
                 Manifest.permission.CALL_PHONE);
     }
 
-    /** Action not restricted for the calling package. */
-    private static final int ACTION_RESTRICTION_NONE = 0;
-    /** Action restricted for the calling package by not granting a used permission. */
-    private static final int ACTION_RESTRICTION_PERMISSION = 1;
-    /** Action restricted for the calling package by not allowing a used permission's app op. */
-    private static final int ACTION_RESTRICTION_APPOP = 2;
+    /** Action restriction: launching the activity is not restricted. */
+    private static final int ACTIVITY_RESTRICTION_NONE = 0;
+    /** Action restriction: launching the activity is restricted by a permission. */
+    private static final int ACTIVITY_RESTRICTION_PERMISSION = 1;
+    /** Action restriction: launching the activity is restricted by an app op. */
+    private static final int ACTIVITY_RESTRICTION_APPOP = 2;
 
     /** Status Bar Service **/
     private IBinder mToken = new Binder();
@@ -1539,51 +1539,61 @@
             return err;
         }
 
-        final int startAnyPerm = mService.checkPermission(
-                START_ANY_ACTIVITY, callingPid, callingUid);
-        final int componentPerm = mService.checkComponentPermission(aInfo.permission, callingPid,
-                callingUid, aInfo.applicationInfo.uid, aInfo.exported);
-        final int actionRestriction = getActionRestrictionForCallingPackage(
-                intent.getAction(), callingPackage, callingPid, callingUid);
-
-        if (startAnyPerm != PERMISSION_GRANTED && (componentPerm != PERMISSION_GRANTED
-                || actionRestriction == ACTION_RESTRICTION_PERMISSION)) {
-            if (resultRecord != null) {
-                resultStack.sendActivityResultLocked(-1,
-                    resultRecord, resultWho, requestCode,
-                    Activity.RESULT_CANCELED, null);
-            }
-            String msg;
-            if (actionRestriction == ACTION_RESTRICTION_PERMISSION) {
-                msg = "Permission Denial: starting " + intent.toString()
-                        + " from " + callerApp + " (pid=" + callingPid
-                        + ", uid=" + callingUid + ")" + " with revoked permission "
-                        + ACTION_TO_RUNTIME_PERMISSION.get(intent.getAction());
-            } else if (!aInfo.exported) {
-                msg = "Permission Denial: starting " + intent.toString()
-                        + " from " + callerApp + " (pid=" + callingPid
-                        + ", uid=" + callingUid + ")"
-                        + " not exported from uid " + aInfo.applicationInfo.uid;
-            } else {
-                msg = "Permission Denial: starting " + intent.toString()
-                        + " from " + callerApp + " (pid=" + callingPid
-                        + ", uid=" + callingUid + ")"
-                        + " requires " + aInfo.permission;
-            }
-            Slog.w(TAG, msg);
-            throw new SecurityException(msg);
-        }
-
         boolean abort = false;
 
-        if (startAnyPerm != PERMISSION_GRANTED
-                && actionRestriction == ACTION_RESTRICTION_APPOP) {
-            String msg = "Permission Denial: starting " + intent.toString()
-                    + " from " + callerApp + " (pid=" + callingPid
-                    + ", uid=" + callingUid + ")"
-                    + " requires " + aInfo.permission;
-            Slog.w(TAG, msg);
-            abort = true;
+        final int startAnyPerm = mService.checkPermission(
+                START_ANY_ACTIVITY, callingPid, callingUid);
+
+        if (startAnyPerm != PERMISSION_GRANTED) {
+            final int componentRestriction = getComponentRestrictionForCallingPackage(
+                    aInfo, callingPackage, callingPid, callingUid);
+            final int actionRestriction = getActionRestrictionForCallingPackage(
+                    intent.getAction(), callingPackage, callingPid, callingUid);
+
+            if (componentRestriction == ACTIVITY_RESTRICTION_PERMISSION
+                    || actionRestriction == ACTIVITY_RESTRICTION_PERMISSION) {
+                if (resultRecord != null) {
+                    resultStack.sendActivityResultLocked(-1,
+                            resultRecord, resultWho, requestCode,
+                            Activity.RESULT_CANCELED, null);
+                }
+                String msg;
+                if (actionRestriction == ACTIVITY_RESTRICTION_PERMISSION) {
+                    msg = "Permission Denial: starting " + intent.toString()
+                            + " from " + callerApp + " (pid=" + callingPid
+                            + ", uid=" + callingUid + ")" + " with revoked permission "
+                            + ACTION_TO_RUNTIME_PERMISSION.get(intent.getAction());
+                } else if (!aInfo.exported) {
+                    msg = "Permission Denial: starting " + intent.toString()
+                            + " from " + callerApp + " (pid=" + callingPid
+                            + ", uid=" + callingUid + ")"
+                            + " not exported from uid " + aInfo.applicationInfo.uid;
+                } else {
+                    msg = "Permission Denial: starting " + intent.toString()
+                            + " from " + callerApp + " (pid=" + callingPid
+                            + ", uid=" + callingUid + ")"
+                            + " requires " + aInfo.permission;
+                }
+                Slog.w(TAG, msg);
+                throw new SecurityException(msg);
+            }
+
+            if (actionRestriction == ACTIVITY_RESTRICTION_APPOP) {
+                String message = "Appop Denial: starting " + intent.toString()
+                        + " from " + callerApp + " (pid=" + callingPid
+                        + ", uid=" + callingUid + ")"
+                        + " requires " + AppOpsManager.permissionToOp(
+                                ACTION_TO_RUNTIME_PERMISSION.get(intent.getAction()));
+                Slog.w(TAG, message);
+                abort = true;
+            } else if (componentRestriction == ACTIVITY_RESTRICTION_APPOP) {
+                String message = "Appop Denial: starting " + intent.toString()
+                        + " from " + callerApp + " (pid=" + callingPid
+                        + ", uid=" + callingUid + ")"
+                        + " requires appop " + AppOpsManager.permissionToOp(aInfo.permission);
+                Slog.w(TAG, message);
+                abort = true;
+            }
         }
 
         abort |= !mService.mIntentFirewall.checkStartActivity(intent, callingUid,
@@ -1664,15 +1674,40 @@
         return err;
     }
 
+    private int getComponentRestrictionForCallingPackage(ActivityInfo activityInfo,
+            String callingPackage, int callingPid, int callingUid) {
+        if (activityInfo.permission == null) {
+            return ACTIVITY_RESTRICTION_NONE;
+        }
+
+        if (mService.checkComponentPermission(activityInfo.permission, callingPid, callingUid,
+                activityInfo.applicationInfo.uid, activityInfo.exported)
+                == PackageManager.PERMISSION_DENIED) {
+            return ACTIVITY_RESTRICTION_PERMISSION;
+        }
+
+        final int opCode = AppOpsManager.permissionToOpCode(activityInfo.permission);
+        if (opCode == AppOpsManager.OP_NONE) {
+            return ACTIVITY_RESTRICTION_NONE;
+        }
+
+        if (mService.mAppOpsService.noteOperation(opCode, callingUid,
+                callingPackage) != AppOpsManager.MODE_ALLOWED) {
+            return ACTIVITY_RESTRICTION_APPOP;
+        }
+
+        return ACTIVITY_RESTRICTION_NONE;
+    }
+
     private int getActionRestrictionForCallingPackage(String action,
             String callingPackage, int callingPid, int callingUid) {
         if (action == null) {
-            return ACTION_RESTRICTION_NONE;
+            return ACTIVITY_RESTRICTION_NONE;
         }
 
         String permission = ACTION_TO_RUNTIME_PERMISSION.get(action);
         if (permission == null) {
-            return ACTION_RESTRICTION_NONE;
+            return ACTIVITY_RESTRICTION_NONE;
         }
 
         final PackageInfo packageInfo;
@@ -1681,29 +1716,29 @@
                     .getPackageInfo(callingPackage, PackageManager.GET_PERMISSIONS);
         } catch (PackageManager.NameNotFoundException e) {
             Slog.i(TAG, "Cannot find package info for " + callingPackage);
-            return ACTION_RESTRICTION_NONE;
+            return ACTIVITY_RESTRICTION_NONE;
         }
 
         if (!ArrayUtils.contains(packageInfo.requestedPermissions, permission)) {
-            return ACTION_RESTRICTION_NONE;
+            return ACTIVITY_RESTRICTION_NONE;
         }
 
         if (mService.checkPermission(permission, callingPid, callingUid) ==
                 PackageManager.PERMISSION_DENIED) {
-            return ACTION_RESTRICTION_PERMISSION;
+            return ACTIVITY_RESTRICTION_PERMISSION;
         }
 
         final int opCode = AppOpsManager.permissionToOpCode(permission);
         if (opCode == AppOpsManager.OP_NONE) {
-            return ACTION_RESTRICTION_NONE;
+            return ACTIVITY_RESTRICTION_NONE;
         }
 
         if (mService.mAppOpsService.noteOperation(opCode, callingUid,
                 callingPackage) != AppOpsManager.MODE_ALLOWED) {
-            return ACTION_RESTRICTION_APPOP;
+            return ACTIVITY_RESTRICTION_APPOP;
         }
 
-        return ACTION_RESTRICTION_NONE;
+        return ACTIVITY_RESTRICTION_NONE;
     }
 
     ActivityStack computeStackFocus(ActivityRecord r, boolean newTask) {
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 6cc1b11..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;
@@ -41,6 +42,7 @@
 import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.SignalStrength;
 import android.telephony.TelephonyManager;
+import android.util.IntArray;
 import android.util.Slog;
 
 import android.util.TimeUtils;
@@ -82,6 +84,7 @@
         public static final int MSG_SYNC_EXTERNAL_STATS = 1;
         public static final int MSG_WRITE_TO_DISK = 2;
         private int mUpdateFlags = 0;
+        private IntArray mUidsToRemove = new IntArray();
 
         public BatteryStatsHandler(Looper looper) {
             super(looper);
@@ -98,6 +101,15 @@
                         mUpdateFlags = 0;
                     }
                     updateExternalStats((String)msg.obj, updateFlags);
+                    synchronized (this) {
+                        synchronized (mStats) {
+                            final int numUidsToRemove = mUidsToRemove.size();
+                            for (int i = 0; i < numUidsToRemove; i++) {
+                                mStats.removeIsolatedUidLocked(mUidsToRemove.get(i));
+                            }
+                        }
+                        mUidsToRemove.clear();
+                    }
                     break;
 
                 case MSG_WRITE_TO_DISK:
@@ -111,22 +123,32 @@
 
         @Override
         public void scheduleSync(String reason) {
-            scheduleSyncImpl(reason, UPDATE_ALL);
+            synchronized (this) {
+                scheduleSyncLocked(reason, UPDATE_ALL);
+            }
         }
 
         @Override
         public void scheduleWifiSync(String reason) {
-            scheduleSyncImpl(reason, UPDATE_WIFI);
+            synchronized (this) {
+                scheduleSyncLocked(reason, UPDATE_WIFI);
+            }
         }
 
-        private void scheduleSyncImpl(String reason, int updateFlags) {
+        @Override
+        public void scheduleCpuSyncDueToRemovedUid(int uid) {
             synchronized (this) {
-                if (mUpdateFlags == 0) {
-                    sendMessage(Message.obtain(this, MSG_SYNC_EXTERNAL_STATS, reason));
-                }
-                mUpdateFlags |= updateFlags;
+                scheduleSyncLocked("remove-uid", UPDATE_CPU);
+                mUidsToRemove.add(uid);
             }
         }
+
+        private void scheduleSyncLocked(String reason, int updateFlags) {
+            if (mUpdateFlags == 0) {
+                sendMessage(Message.obtain(this, MSG_SYNC_EXTERNAL_STATS, reason));
+            }
+            mUpdateFlags |= updateFlags;
+        }
     }
 
     BatteryStatsService(File systemDir, Handler handler) {
@@ -220,7 +242,7 @@
 
     void removeIsolatedUid(int isolatedUid, int appUid) {
         synchronized (mStats) {
-            mStats.removeIsolatedUidLocked(isolatedUid, appUid);
+            mStats.scheduleRemoveIsolatedUidLocked(isolatedUid, appUid);
         }
     }
 
@@ -1092,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/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 2335071..30aa411 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -463,7 +463,7 @@
         }
     }
 
-    private final void deliverToRegisteredReceiverLocked(BroadcastRecord r,
+    private void deliverToRegisteredReceiverLocked(BroadcastRecord r,
             BroadcastFilter filter, boolean ordered) {
         boolean skip = false;
         if (filter.requiredPermission != null) {
@@ -477,9 +477,23 @@
                         + " requires " + filter.requiredPermission
                         + " due to registered receiver " + filter);
                 skip = true;
+            } else {
+                final int opCode = AppOpsManager.permissionToOpCode(filter.requiredPermission);
+                if (opCode != AppOpsManager.OP_NONE
+                        && mService.mAppOpsService.noteOperation(opCode, r.callingUid,
+                                r.callerPackage) != AppOpsManager.MODE_ALLOWED) {
+                    Slog.w(TAG, "Appop Denial: broadcasting "
+                            + r.intent.toString()
+                            + " from " + r.callerPackage + " (pid="
+                            + r.callingPid + ", uid=" + r.callingUid + ")"
+                            + " requires appop " + AppOpsManager.permissionToOp(
+                                    filter.requiredPermission)
+                            + " due to registered receiver " + filter);
+                    skip = true;
+                }
             }
         }
-        if (!skip && r.requiredPermission != null) {
+        if (!skip) {
             int perm = mService.checkComponentPermission(r.requiredPermission,
                     filter.receiverList.pid, filter.receiverList.uid, -1, true);
             if (perm != PackageManager.PERMISSION_GRANTED) {
@@ -493,17 +507,42 @@
                         + " (uid " + r.callingUid + ")");
                 skip = true;
             }
-        }
-        if (r.appOp != AppOpsManager.OP_NONE) {
-            int mode = mService.mAppOpsService.noteOperation(r.appOp,
-                    filter.receiverList.uid, filter.packageName);
-            if (mode != AppOpsManager.MODE_ALLOWED) {
-                if (DEBUG_BROADCAST)  Slog.v(TAG_BROADCAST,
-                        "App op " + r.appOp + " not allowed for broadcast to uid "
-                        + filter.receiverList.uid + " pkg " + filter.packageName);
-                skip = true;
+            int appOp = AppOpsManager.OP_NONE;
+            if (r.requiredPermission != null) {
+                appOp = AppOpsManager.permissionToOpCode(r.requiredPermission);
+                if (appOp != AppOpsManager.OP_NONE
+                        && mService.mAppOpsService.noteOperation(appOp,
+                            filter.receiverList.uid, filter.packageName)
+                                != AppOpsManager.MODE_ALLOWED) {
+                    Slog.w(TAG, "Appop Denial: receiving "
+                            + r.intent.toString()
+                            + " to " + filter.receiverList.app
+                            + " (pid=" + filter.receiverList.pid
+                            + ", uid=" + filter.receiverList.uid + ")"
+                            + " requires appop " + AppOpsManager.permissionToOp(
+                                    r.requiredPermission)
+                            + " due to sender " + r.callerPackage
+                            + " (uid " + r.callingUid + ")");
+                    skip = true;
+                }
+            }
+            if (!skip && r.appOp != appOp && r.appOp != AppOpsManager.OP_NONE
+                    && mService.mAppOpsService.noteOperation(r.appOp,
+                            filter.receiverList.uid, filter.packageName)
+                                    != AppOpsManager.MODE_ALLOWED) {
+                    Slog.w(TAG, "Appop Denial: receiving "
+                            + r.intent.toString()
+                            + " to " + filter.receiverList.app
+                            + " (pid=" + filter.receiverList.pid
+                            + ", uid=" + filter.receiverList.uid + ")"
+                            + " requires appop " + AppOpsManager.permissionToOp(
+                            r.requiredPermission)
+                            + " due to sender " + r.callerPackage
+                            + " (uid " + r.callingUid + ")");
+                    skip = true;
             }
         }
+
         if (!skip) {
             skip = !mService.mIntentFirewall.checkBroadcast(r.intent, r.callingUid,
                     r.callingPid, r.resolvedType, filter.receiverList.uid);
@@ -804,8 +843,23 @@
                             + " due to receiver " + component.flattenToShortString());
                 }
                 skip = true;
+            } else if (info.activityInfo.permission != null) {
+                final int opCode = AppOpsManager.permissionToOpCode(info.activityInfo.permission);
+                if (opCode != AppOpsManager.OP_NONE
+                        && mService.mAppOpsService.noteOperation(opCode, r.callingUid,
+                                r.callerPackage) != AppOpsManager.MODE_ALLOWED) {
+                    Slog.w(TAG, "Appop Denial: broadcasting "
+                            + r.intent.toString()
+                            + " from " + r.callerPackage + " (pid="
+                            + r.callingPid + ", uid=" + r.callingUid + ")"
+                            + " requires appop " + AppOpsManager.permissionToOp(
+                                    info.activityInfo.permission)
+                            + " due to registered receiver "
+                            + component.flattenToShortString());
+                    skip = true;
+                }
             }
-            if (info.activityInfo.applicationInfo.uid != Process.SYSTEM_UID &&
+            if (!skip && info.activityInfo.applicationInfo.uid != Process.SYSTEM_UID &&
                 r.requiredPermission != null) {
                 try {
                     perm = AppGlobals.getPackageManager().
@@ -825,17 +879,36 @@
                     skip = true;
                 }
             }
-            if (r.appOp != AppOpsManager.OP_NONE) {
-                int mode = mService.mAppOpsService.noteOperation(r.appOp,
-                        info.activityInfo.applicationInfo.uid, info.activityInfo.packageName);
-                if (mode != AppOpsManager.MODE_ALLOWED) {
-                    if (DEBUG_BROADCAST)  Slog.v(TAG_BROADCAST,
-                            "App op " + r.appOp + " not allowed for broadcast to uid "
-                            + info.activityInfo.applicationInfo.uid + " pkg "
-                            + info.activityInfo.packageName);
+            int appOp = AppOpsManager.OP_NONE;
+            if (!skip && r.requiredPermission != null) {
+                appOp = AppOpsManager.permissionToOpCode(r.requiredPermission);
+                if (appOp != AppOpsManager.OP_NONE
+                        && mService.mAppOpsService.noteOperation(appOp,
+                               info.activityInfo.applicationInfo.uid, info.activityInfo.packageName)
+                                        != AppOpsManager.MODE_ALLOWED) {
+                    Slog.w(TAG, "Appop Denial: receiving "
+                            + r.intent + " to "
+                            + component.flattenToShortString()
+                            + " requires appop " + AppOpsManager.permissionToOp(
+                            r.requiredPermission)
+                            + " due to sender " + r.callerPackage
+                            + " (uid " + r.callingUid + ")");
                     skip = true;
                 }
             }
+            if (!skip && r.appOp != appOp && r.appOp != AppOpsManager.OP_NONE
+                    && mService.mAppOpsService.noteOperation(r.appOp,
+                            info.activityInfo.applicationInfo.uid, info.activityInfo.packageName)
+                                    != AppOpsManager.MODE_ALLOWED) {
+                Slog.w(TAG, "Appop Denial: receiving "
+                        + r.intent + " to "
+                        + component.flattenToShortString()
+                        + " requires appop " + AppOpsManager.permissionToOp(
+                        r.requiredPermission)
+                        + " due to sender " + r.callerPackage
+                        + " (uid " + r.callingUid + ")");
+                skip = true;
+            }
             if (!skip) {
                 skip = !mService.mIntentFirewall.checkBroadcast(r.intent, r.callingUid,
                         r.callingPid, r.resolvedType, info.activityInfo.applicationInfo.uid);
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index ece3ffb..5b46799 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -305,7 +305,8 @@
                         break;
                     case ActivityManager.INTENT_SENDER_SERVICE:
                         try {
-                            owner.startServiceInPackage(uid, finalIntent, resolvedType, userId);
+                            owner.startServiceInPackage(uid, finalIntent,
+                                    resolvedType, key.packageName, userId);
                         } catch (RuntimeException e) {
                             Slog.w(TAG, "Unable to send startService intent", 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/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index 5e098d4..2633939 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -16,6 +16,10 @@
 
 package com.android.server.connectivity;
 
+import static android.net.CaptivePortal.APP_RETURN_DISMISSED;
+import static android.net.CaptivePortal.APP_RETURN_UNWANTED;
+import static android.net.CaptivePortal.APP_RETURN_WANTED_AS_IS;
+
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -23,7 +27,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.net.CaptivePortal;
 import android.net.ConnectivityManager;
+import android.net.ICaptivePortal;
 import android.net.NetworkRequest;
 import android.net.ProxyInfo;
 import android.net.TrafficStats;
@@ -160,12 +166,12 @@
 
     /**
      * Message to self indicating captive portal app finished.
-     * arg1 = one of: CAPTIVE_PORTAL_APP_RETURN_DISMISSED,
-     *                CAPTIVE_PORTAL_APP_RETURN_UNWANTED,
-     *                CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS
+     * arg1 = one of: APP_RETURN_DISMISSED,
+     *                APP_RETURN_UNWANTED,
+     *                APP_RETURN_WANTED_AS_IS
      * obj = mCaptivePortalLoggedInResponseToken as String
      */
-    public static final int CMD_CAPTIVE_PORTAL_APP_FINISHED = BASE + 9;
+    private static final int CMD_CAPTIVE_PORTAL_APP_FINISHED = BASE + 9;
 
     /**
      * Request ConnectivityService display provisioning notification.
@@ -234,7 +240,6 @@
     private final State mLingeringState = new LingeringState();
 
     private CustomIntentReceiver mLaunchCaptivePortalAppBroadcastReceiver = null;
-    private String mCaptivePortalLoggedInResponseToken = null;
 
     private final LocalLog validationLogs = new LocalLog(20); // 20 lines
 
@@ -268,8 +273,6 @@
         mIsCaptivePortalCheckEnabled = Settings.Global.getInt(mContext.getContentResolver(),
                 Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 1) == 1;
 
-        mCaptivePortalLoggedInResponseToken = String.valueOf(new Random().nextLong());
-
         start();
     }
 
@@ -314,22 +317,18 @@
                     transitionTo(mEvaluatingState);
                     return HANDLED;
                 case CMD_CAPTIVE_PORTAL_APP_FINISHED:
-                    if (!mCaptivePortalLoggedInResponseToken.equals((String)message.obj))
-                        return HANDLED;
                     log("CaptivePortal App responded with " + message.arg1);
-                    // Previous token was sent out, come up with a new one.
-                    mCaptivePortalLoggedInResponseToken = String.valueOf(new Random().nextLong());
                     switch (message.arg1) {
-                        case ConnectivityManager.CAPTIVE_PORTAL_APP_RETURN_DISMISSED:
+                        case APP_RETURN_DISMISSED:
                             sendMessage(CMD_FORCE_REEVALUATION, 0 /* no UID */, 0);
                             break;
-                        case ConnectivityManager.CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS:
+                        case APP_RETURN_WANTED_AS_IS:
                             mDontDisplaySigninNotification = true;
                             // TODO: Distinguish this from a network that actually validates.
                             // Displaying the "!" on the system UI icon may still be a good idea.
                             transitionTo(mValidatedState);
                             break;
-                        case ConnectivityManager.CAPTIVE_PORTAL_APP_RETURN_UNWANTED:
+                        case APP_RETURN_UNWANTED:
                             mDontDisplaySigninNotification = true;
                             mUserDoesNotWant = true;
                             mConnectivityServiceHandler.sendMessage(obtainMessage(
@@ -380,8 +379,18 @@
                     final Intent intent = new Intent(
                             ConnectivityManager.ACTION_CAPTIVE_PORTAL_SIGN_IN);
                     intent.putExtra(ConnectivityManager.EXTRA_NETWORK, mNetworkAgentInfo.network);
-                    intent.putExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL_TOKEN,
-                            mCaptivePortalLoggedInResponseToken);
+                    intent.putExtra(ConnectivityManager.EXTRA_CAPTIVE_PORTAL,
+                            new CaptivePortal(new ICaptivePortal.Stub() {
+                                @Override
+                                public void appResponse(int response) {
+                                    if (response == APP_RETURN_WANTED_AS_IS) {
+                                        mContext.enforceCallingPermission(
+                                                android.Manifest.permission.CONNECTIVITY_INTERNAL,
+                                                "CaptivePortal");
+                                    }
+                                    sendMessage(CMD_CAPTIVE_PORTAL_APP_FINISHED, response);
+                                }
+                            }));
                     intent.setFlags(
                             Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
                     mContext.startActivityAsUser(intent, UserHandle.CURRENT);
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index e1ec8a6..2846185 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -1135,7 +1135,7 @@
                 final ConnectivityManager cm = ConnectivityManager.from(mContext);
                 for (Network network : cm.getAllNetworks()) {
                     final LinkProperties lp = cm.getLinkProperties(network);
-                    if (lp != null && mOuterInterface.equals(lp.getInterfaceName())) {
+                    if (lp != null && lp.getAllInterfaceNames().contains(mOuterInterface)) {
                         final NetworkInfo networkInfo = cm.getNetworkInfo(network);
                         if (networkInfo != null) mOuterConnection.set(networkInfo.getType());
                     }
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index 2c57833..c13401f 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -31,6 +31,7 @@
 import android.content.SyncRequest;
 import android.content.SyncStatusInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManagerInternal;
 import android.database.IContentObserver;
 import android.database.sqlite.SQLiteException;
 import android.net.Uri;
@@ -46,6 +47,7 @@
 import android.util.Log;
 import android.util.Slog;
 import android.util.SparseIntArray;
+import com.android.server.LocalServices;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -153,6 +155,18 @@
     /*package*/ ContentService(Context context, boolean factoryTest) {
         mContext = context;
         mFactoryTest = factoryTest;
+
+        // Let the package manager query for the sync adapters for a given authority
+        // as we grant default permissions to sync adapters for specifix authorities.
+        PackageManagerInternal packageManagerInternal = LocalServices.getService(
+                PackageManagerInternal.class);
+        packageManagerInternal.setSyncAdapterPackagesprovider(
+                new PackageManagerInternal.SyncAdapterPackagesProvider() {
+            @Override
+            public String[] getPackages(String authority, int userId) {
+                return getSyncAdapterPackagesForAuthorityAsUser(authority, userId);
+            }
+        });
     }
 
     public void systemReady() {
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 9ee3bc2..4d8d105 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -23,6 +23,7 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
 import android.os.Binder;
 import android.os.Environment;
 import android.os.Handler;
@@ -36,6 +37,7 @@
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.util.Slog;
 
 import com.android.server.SystemService;
@@ -299,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);
@@ -418,9 +434,22 @@
                 "Must have " + permission + " permission.");
     }
 
+    boolean isCurrentUserOrProfile(int userId) {
+        UserManager um = UserManager.get(mContext);
+
+        // Allow current user or profiles of the current user...
+        List<UserInfo> profiles = um.getEnabledProfiles(userId);
+        final int n = profiles.size();
+        for (int i = 0; i < n; i++) {
+            if (profiles.get(i).id == userId) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private boolean canUseFingerprint(String opPackageName) {
         checkPermission(USE_FINGERPRINT);
-
         return mAppOps.noteOp(AppOpsManager.OP_USE_FINGERPRINT, Binder.getCallingUid(),
                 opPackageName) == AppOpsManager.MODE_ALLOWED;
     }
@@ -524,8 +553,8 @@
                 }
             } else {
                 result = true; // client not listening
-            }
-            if (fpId <= 0) {
+	    }
+	    if (fpId == 0) {
                 FingerprintUtils.vibrateFingerprintError(getContext());
                 result |= handleFailedAttempt(this);
             } else {
@@ -620,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);
@@ -664,8 +699,12 @@
         public void authenticate(final IBinder token, final long opId, final int groupId,
                 final IFingerprintServiceReceiver receiver, final int flags,
                 final String opPackageName) {
-
+            if (!isCurrentUserOrProfile(UserHandle.getCallingUserId())) {
+                Slog.w(TAG, "Can't authenticate non-current user");
+                return;
+            }
             if (!canUseFingerprint(opPackageName)) {
+                Slog.w(TAG, "Calling not granted permission to use fingerprint");
                 return;
             }
             final boolean restricted = isRestricted();
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/location/GpsLocationProvider.java b/services/core/java/com/android/server/location/GpsLocationProvider.java
index 45a4829..ba5f516 100644
--- a/services/core/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/core/java/com/android/server/location/GpsLocationProvider.java
@@ -481,7 +481,7 @@
     };
 
     private void subscriptionOrSimChanged(Context context) {
-        Log.d(TAG, "received SIM realted action: ");
+        Log.d(TAG, "received SIM related action: ");
         TelephonyManager phone = (TelephonyManager)
                 mContext.getSystemService(Context.TELEPHONY_SERVICE);
         String mccMnc = phone.getSimOperator();
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index d4b7256..f618c3e 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -146,6 +146,7 @@
 import android.util.TrustedTime;
 import android.util.Xml;
 
+import com.android.server.EventLogTags;
 import libcore.io.IoUtils;
 
 import com.android.internal.R;
@@ -1764,7 +1765,12 @@
             if (mDeviceIdleMode != enabled) {
                 mDeviceIdleMode = enabled;
                 if (mSystemReady) {
-                    updateRulesForGlobalChangeLocked(true);
+                    updateRulesForDeviceIdleLocked();
+                }
+                if (enabled) {
+                    EventLogTags.writeDeviceIdleOnPhase("net");
+                } else {
+                    EventLogTags.writeDeviceIdleOffPhase("net");
                 }
             }
         }
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/NotificationDelegate.java b/services/core/java/com/android/server/notification/NotificationDelegate.java
index 87b4f8c..6a1401c 100644
--- a/services/core/java/com/android/server/notification/NotificationDelegate.java
+++ b/services/core/java/com/android/server/notification/NotificationDelegate.java
@@ -28,7 +28,7 @@
     void onNotificationError(int callingUid, int callingPid,
             String pkg, String tag, int id,
             int uid, int initialPid, String message, int userId);
-    void onPanelRevealed(boolean clearEffects);
+    void onPanelRevealed(boolean clearEffects, int numItems);
     void onPanelHidden();
     void clearEffects();
     void onNotificationVisibilityChanged(
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index d6a7bf93..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;
@@ -567,8 +570,8 @@
         }
 
         @Override
-        public void onPanelRevealed(boolean clearEffects) {
-            EventLogTags.writeNotificationPanelRevealed();
+        public void onPanelRevealed(boolean clearEffects, int items) {
+            EventLogTags.writeNotificationPanelRevealed(items);
             if (clearEffects) {
                 clearEffects();
             }
@@ -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 d71904e..8e3334f 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -23,6 +23,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManagerInternal.PackagesProvider;
+import android.content.pm.PackageManagerInternal.SyncAdapterPackagesProvider;
 import android.content.pm.PackageParser;
 import android.content.pm.ProviderInfo;
 import android.content.pm.ResolveInfo;
@@ -32,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;
 
@@ -53,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<>();
@@ -126,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;
@@ -146,6 +134,7 @@
     private PackagesProvider mVoiceInteractionPackagesProvider;
     private PackagesProvider mSmsAppPackagesProvider;
     private PackagesProvider mDialerAppPackagesProvider;
+    private SyncAdapterPackagesProvider mSyncAdapterPackagesProvider;
 
     public DefaultPermissionGrantPolicy(PackageManagerService service) {
         mService = service;
@@ -171,6 +160,10 @@
         mDialerAppPackagesProvider = provider;
     }
 
+    public void setSyncAdapterPackagesProviderrLPw(SyncAdapterPackagesProvider provider) {
+        mSyncAdapterPackagesProvider = provider;
+    }
+
     public void grantDefaultPermissions(int userId) {
         grantPermissionsToSysComponentsAndPrivApps(userId);
         grantDefaultSystemHandlerPermissions(userId);
@@ -196,7 +189,8 @@
                             mService.grantRuntimePermission(pkg.packageName, permission, userId);
                             mService.updatePermissionFlags(permission, pkg.packageName,
                                     PackageManager.MASK_PERMISSION_FLAGS,
-                                    PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, userId);
+                                    PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
+                                    | PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, userId);
                             if (DEBUG) {
                                 Log.i(TAG, "Granted " + permission + " to system component "
                                         + pkg.packageName);
@@ -216,6 +210,7 @@
         final PackagesProvider voiceInteractionPackagesProvider;
         final PackagesProvider smsAppPackagesProvider;
         final PackagesProvider dialerAppPackagesProvider;
+        final SyncAdapterPackagesProvider syncAdapterPackagesProvider;
 
         synchronized (mService.mPackages) {
             imePackagesProvider = mImePackagesProvider;
@@ -223,6 +218,7 @@
             voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider;
             smsAppPackagesProvider = mSmsAppPackagesProvider;
             dialerAppPackagesProvider = mDialerAppPackagesProvider;
+            syncAdapterPackagesProvider = mSyncAdapterPackagesProvider;
         }
 
         String[] imePackageNames = (imePackagesProvider != null)
@@ -235,32 +231,26 @@
                 ? smsAppPackagesProvider.getPackages(userId) : null;
         String[] dialerAppPackageNames = (dialerAppPackagesProvider != null)
                 ? dialerAppPackagesProvider.getPackages(userId) : null;
+        String[] contactsSyncAdapterPackages = (syncAdapterPackagesProvider != null) ?
+                syncAdapterPackagesProvider.getPackages(ContactsContract.AUTHORITY, userId) : null;
+        String[] calendarSyncAdapterPackages = (syncAdapterPackagesProvider != null) ?
+                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
@@ -275,20 +265,6 @@
                 grantRuntimePermissionsLPw(setupPackage, SETTINGS_PERMISSIONS, userId);
             }
 
-            // Dialer
-            if (dialerAppPackageNames != null) {
-                for (String dialerAppPackageName : dialerAppPackageNames) {
-                    PackageParser.Package dialerPackage = getPackageLPr(dialerAppPackageName);
-                    if (dialerPackage != null
-                            && doesPackageSupportRuntimePermissions(dialerPackage)) {
-                        grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId);
-                        grantRuntimePermissionsLPw(dialerPackage, CONTACTS_PERMISSIONS, userId);
-                        grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId);
-                        grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId);
-                    }
-                }
-            }
-
             // Camera
             Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
             PackageParser.Package cameraPackage = getDefaultSystemHandlerActivityPackageLPr(
@@ -304,14 +280,14 @@
             PackageParser.Package mediaStorePackage = getDefaultProviderAuthorityPackageLPr(
                     MediaStore.AUTHORITY, userId);
             if (mediaStorePackage != null) {
-                grantRuntimePermissionsLPw(mediaStorePackage, STORAGE_PERMISSIONS, userId);
+                grantRuntimePermissionsLPw(mediaStorePackage, STORAGE_PERMISSIONS, true, userId);
             }
 
             // Downloads provider
             PackageParser.Package downloadsPackage = getDefaultProviderAuthorityPackageLPr(
                     "downloads", userId);
             if (downloadsPackage != null) {
-                grantRuntimePermissionsLPw(downloadsPackage, STORAGE_PERMISSIONS, userId);
+                grantRuntimePermissionsLPw(downloadsPackage, STORAGE_PERMISSIONS, true, userId);
             }
 
             // Downloads UI
@@ -320,7 +296,7 @@
                     downloadsUiIntent, userId);
             if (downloadsUiPackage != null
                     && doesPackageSupportRuntimePermissions(downloadsUiPackage)) {
-                grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, userId);
+                grantRuntimePermissionsLPw(downloadsUiPackage, STORAGE_PERMISSIONS, true, userId);
             }
 
             // Storage provider
@@ -330,19 +306,50 @@
                 grantRuntimePermissionsLPw(storagePackage, STORAGE_PERMISSIONS, userId);
             }
 
-            // SMS
-            if (smsAppPackageNames != null) {
-                for (String smsPackageName : smsAppPackageNames) {
-                    PackageParser.Package smsPackage = getPackageLPr(smsPackageName);
-                    if (smsPackage != null
-                            && doesPackageSupportRuntimePermissions(smsPackage)) {
-                        grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId);
-                        grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId);
-                        grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId);
+            // Dialer
+            if (dialerAppPackageNames == null) {
+                Intent dialerIntent = new Intent(Intent.ACTION_DIAL);
+                PackageParser.Package dialerPackage = getDefaultSystemHandlerActivityPackageLPr(
+                        dialerIntent, userId);
+                if (dialerPackage != null) {
+                    grantDefaultPermissionsToDefaultSystemDialerAppLPr(dialerPackage, userId);
+                }
+            } else {
+                for (String dialerAppPackageName : dialerAppPackageNames) {
+                    PackageParser.Package dialerPackage = getSystemPackageLPr(dialerAppPackageName);
+                    if (dialerPackage != null) {
+                        grantDefaultPermissionsToDefaultSystemDialerAppLPr(dialerPackage, userId);
                     }
                 }
             }
 
+            // SMS
+            if (smsAppPackageNames == null) {
+                Intent smsIntent = new Intent(Intent.ACTION_MAIN);
+                smsIntent.addCategory(Intent.CATEGORY_APP_MESSAGING);
+                PackageParser.Package smsPackage = getDefaultSystemHandlerActivityPackageLPr(
+                        smsIntent, userId);
+                if (smsPackage != null) {
+                   grantDefaultPermissionsToDefaultSystemSmsAppLPr(smsPackage, userId);
+                }
+            } else {
+                for (String smsPackageName : smsAppPackageNames) {
+                    PackageParser.Package smsPackage = getSystemPackageLPr(smsPackageName);
+                    if (smsPackage != null) {
+                        grantDefaultPermissionsToDefaultSystemSmsAppLPr(smsPackage, userId);
+                    }
+                }
+            }
+
+            // 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);
@@ -360,11 +367,24 @@
                     CalendarContract.AUTHORITY, userId);
             if (calendarProviderPackage != null) {
                 grantRuntimePermissionsLPw(calendarProviderPackage, CONTACTS_PERMISSIONS, userId);
-                grantRuntimePermissionsLPw(calendarProviderPackage, CALENDAR_PERMISSIONS, userId);
+                grantRuntimePermissionsLPw(calendarProviderPackage, CALENDAR_PERMISSIONS,
+                        true, userId);
                 grantRuntimePermissionsLPw(calendarProviderPackage, ACCOUNTS_PERMISSIONS, userId);
                 grantRuntimePermissionsLPw(calendarProviderPackage, STORAGE_PERMISSIONS, userId);
             }
 
+            // Calendar provider sync adapters
+            List<PackageParser.Package> calendarSyncAdapters = getHeadlessSyncAdapterPackagesLPr(
+                    calendarSyncAdapterPackages,
+                            userId);
+            final int calendarSyncAdapterCount = calendarSyncAdapters.size();
+            for (int i = 0; i < calendarSyncAdapterCount; i++) {
+                PackageParser.Package calendarSyncAdapter = calendarSyncAdapters.get(i);
+                if (doesPackageSupportRuntimePermissions(calendarSyncAdapter)) {
+                    grantRuntimePermissionsLPw(calendarSyncAdapter, CALENDAR_PERMISSIONS, userId);
+                }
+            }
+
             // Contacts
             Intent contactsIntent = new Intent(Intent.ACTION_MAIN);
             contactsIntent.addCategory(Intent.CATEGORY_APP_CONTACTS);
@@ -377,11 +397,26 @@
                 grantRuntimePermissionsLPw(contactsPackage, ACCOUNTS_PERMISSIONS, userId);
             }
 
+            // Contacts provider sync adapters
+            List<PackageParser.Package> contactsSyncAdapters = getHeadlessSyncAdapterPackagesLPr(
+                    contactsSyncAdapterPackages,
+                            userId);
+            final int contactsSyncAdapterCount = contactsSyncAdapters.size();
+            for (int i = 0; i < contactsSyncAdapterCount; i++) {
+                PackageParser.Package contactsSyncAdapter = contactsSyncAdapters.get(i);
+                if (doesPackageSupportRuntimePermissions(contactsSyncAdapter)) {
+                    grantRuntimePermissionsLPw(contactsSyncAdapter, CONTACTS_PERMISSIONS, userId);
+                }
+            }
+
             // Contacts provider
             PackageParser.Package contactsProviderPackage = getDefaultProviderAuthorityPackageLPr(
                     ContactsContract.AUTHORITY, userId);
             if (contactsProviderPackage != null) {
-                grantRuntimePermissionsLPw(contactsProviderPackage, CONTACTS_PERMISSIONS, userId);
+                grantRuntimePermissionsLPw(contactsProviderPackage, CONTACTS_PERMISSIONS,
+                        true, userId);
+                grantRuntimePermissionsLPw(contactsProviderPackage, PHONE_PERMISSIONS,
+                        true, userId);
                 grantRuntimePermissionsLPw(contactsProviderPackage, ACCOUNTS_PERMISSIONS, userId);
                 grantRuntimePermissionsLPw(contactsProviderPackage, STORAGE_PERMISSIONS, userId);
             }
@@ -393,7 +428,7 @@
                     getDefaultSystemHandlerActivityPackageLPr(deviceProvisionIntent, userId);
             if (deviceProvisionPackage != null
                     && doesPackageSupportRuntimePermissions(deviceProvisionPackage)) {
-                grantRuntimePermissionsLPw(contactsPackage, ACCOUNTS_PERMISSIONS, userId);
+                grantRuntimePermissionsLPw(deviceProvisionPackage, ACCOUNTS_PERMISSIONS, userId);
             }
 
             // Maps
@@ -406,6 +441,16 @@
                 grantRuntimePermissionsLPw(mapsPackage, LOCATION_PERMISSIONS, userId);
             }
 
+            // Gallery
+            Intent galleryIntent = new Intent(Intent.ACTION_MAIN);
+            galleryIntent.addCategory(Intent.CATEGORY_APP_GALLERY);
+            PackageParser.Package galleryPackage = getDefaultSystemHandlerActivityPackageLPr(
+                    galleryIntent, userId);
+            if (galleryPackage != null
+                    && doesPackageSupportRuntimePermissions(galleryPackage)) {
+                grantRuntimePermissionsLPw(galleryPackage, STORAGE_PERMISSIONS, userId);
+            }
+
             // Email
             Intent emailIntent = new Intent(Intent.ACTION_MAIN);
             emailIntent.addCategory(Intent.CATEGORY_APP_EMAIL);
@@ -478,7 +523,8 @@
                         grantRuntimePermissionsLPw(locationPackage, MICROPHONE_PERMISSIONS, userId);
                         grantRuntimePermissionsLPw(locationPackage, PHONE_PERMISSIONS, userId);
                         grantRuntimePermissionsLPw(locationPackage, SMS_PERMISSIONS, userId);
-                        grantRuntimePermissionsLPw(locationPackage, LOCATION_PERMISSIONS, userId);
+                        grantRuntimePermissionsLPw(locationPackage, LOCATION_PERMISSIONS,
+                                true, userId);
                         grantRuntimePermissionsLPw(locationPackage, CAMERA_PERMISSIONS, userId);
                         grantRuntimePermissionsLPw(locationPackage, SENSORS_PERMISSIONS, userId);
                         grantRuntimePermissionsLPw(locationPackage, STORAGE_PERMISSIONS, userId);
@@ -502,6 +548,27 @@
         }
     }
 
+    private void grantDefaultPermissionsToDefaultSystemDialerAppLPr(
+            PackageParser.Package dialerPackage, int userId) {
+        if (doesPackageSupportRuntimePermissions(dialerPackage)) {
+            grantRuntimePermissionsLPw(dialerPackage, PHONE_PERMISSIONS, userId);
+            grantRuntimePermissionsLPw(dialerPackage, CONTACTS_PERMISSIONS, userId);
+            grantRuntimePermissionsLPw(dialerPackage, SMS_PERMISSIONS, userId);
+            grantRuntimePermissionsLPw(dialerPackage, MICROPHONE_PERMISSIONS, userId);
+        }
+    }
+
+
+    private void grantDefaultPermissionsToDefaultSystemSmsAppLPr(
+            PackageParser.Package smsPackage, int userId) {
+        if (doesPackageSupportRuntimePermissions(smsPackage)) {
+            grantRuntimePermissionsLPw(smsPackage, PHONE_PERMISSIONS, userId);
+            grantRuntimePermissionsLPw(smsPackage, CONTACTS_PERMISSIONS, userId);
+            grantRuntimePermissionsLPw(smsPackage, SMS_PERMISSIONS, userId);
+        }
+    }
+
+
     public void grantDefaultPermissionsToDefaultSmsAppLPr(String packageName, int userId) {
         Log.i(TAG, "Granting permissions to default sms app for user:" + userId);
         if (packageName == null) {
@@ -557,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);
@@ -603,6 +641,31 @@
         return null;
     }
 
+    private List<PackageParser.Package> getHeadlessSyncAdapterPackagesLPr(
+            String[] syncAdapterPackageNames, int userId) {
+        List<PackageParser.Package> syncAdapterPackages = new ArrayList<>();
+
+        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
+        homeIntent.addCategory(Intent.CATEGORY_HOME);
+
+        for (String syncAdapterPackageName : syncAdapterPackageNames) {
+            homeIntent.setPackage(syncAdapterPackageName);
+
+            List<ResolveInfo> homeActivities = mService.queryIntentActivities(homeIntent,
+                    homeIntent.resolveType(mService.mContext.getContentResolver()), 0, userId);
+            if (!homeActivities.isEmpty()) {
+                continue;
+            }
+
+            PackageParser.Package syncAdapterPackage = getSystemPackageLPr(syncAdapterPackageName);
+            if (syncAdapterPackage != null) {
+                syncAdapterPackages.add(syncAdapterPackage);
+            }
+        }
+
+        return syncAdapterPackages;
+    }
+
     private PackageParser.Package getDefaultProviderAuthorityPackageLPr(
             String authority, int userId) {
         ProviderInfo provider = mService.resolveContentProvider(authority, 0, userId);
@@ -624,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,
@@ -665,41 +719,13 @@
                                 + pkg.packageName);
                     }
 
+                    int newFlags = PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
                     if (systemFixed) {
-                        mService.updatePermissionFlags(permission, pkg.packageName,
-                                PackageManager.FLAG_PERMISSION_SYSTEM_FIXED,
-                                PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, userId);
+                        newFlags |= PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
                     }
-                }
-            }
-        }
-    }
 
-    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);
-                    }
+                    mService.updatePermissionFlags(permission, pkg.packageName,
+                            newFlags, newFlags, userId);
                 }
             }
         }
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index 8dc4bd3..b59b4b2 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -264,9 +264,9 @@
         return mInstaller.execute(builder.toString());
     }
 
-    public int moveCompleteApp(String fromUuid, String toUuid, String packageName,
+    public int copyCompleteApp(String fromUuid, String toUuid, String packageName,
             String dataAppName, int appId, String seinfo) {
-        StringBuilder builder = new StringBuilder("mvcompleteapp");
+        StringBuilder builder = new StringBuilder("cpcompleteapp");
         builder.append(' ');
         builder.append(escapeNull(fromUuid));
         builder.append(' ');
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index ca24e3a..2abd924 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -219,29 +219,17 @@
         synchronized (mSessions) {
             readSessionsLocked();
 
-            final File internalStagingDir = buildInternalStagingDir();
-            final ArraySet<File> unclaimedStages = Sets.newArraySet(
-                    internalStagingDir.listFiles(sStageFilter));
+            reconcileStagesLocked(StorageManager.UUID_PRIVATE_INTERNAL);
+
             final ArraySet<File> unclaimedIcons = Sets.newArraySet(
                     mSessionsDir.listFiles());
 
             // Ignore stages and icons claimed by active sessions
             for (int i = 0; i < mSessions.size(); i++) {
                 final PackageInstallerSession session = mSessions.valueAt(i);
-                unclaimedStages.remove(session.stageDir);
                 unclaimedIcons.remove(buildAppIconFile(session.sessionId));
             }
 
-            // Clean up orphaned staging directories
-            for (File stage : unclaimedStages) {
-                Slog.w(TAG, "Deleting orphan stage " + stage);
-                if (stage.isDirectory()) {
-                    mPm.mInstaller.rmPackageDir(stage.getAbsolutePath());
-                } else {
-                    stage.delete();
-                }
-            }
-
             // Clean up orphaned icons
             for (File icon : unclaimedIcons) {
                 Slog.w(TAG, "Deleting orphan icon " + icon);
@@ -255,6 +243,36 @@
         mStorage = mContext.getSystemService(StorageManager.class);
     }
 
+    private void reconcileStagesLocked(String volumeUuid) {
+        final File stagingDir = buildStagingDir(volumeUuid);
+        final ArraySet<File> unclaimedStages = Sets.newArraySet(
+                stagingDir.listFiles(sStageFilter));
+
+        // Ignore stages claimed by active sessions
+        for (int i = 0; i < mSessions.size(); i++) {
+            final PackageInstallerSession session = mSessions.valueAt(i);
+            unclaimedStages.remove(session.stageDir);
+        }
+
+        // Clean up orphaned staging directories
+        for (File stage : unclaimedStages) {
+            Slog.w(TAG, "Deleting orphan stage " + stage);
+            synchronized (mPm.mInstallLock) {
+                if (stage.isDirectory()) {
+                    mPm.mInstaller.rmPackageDir(stage.getAbsolutePath());
+                } else {
+                    stage.delete();
+                }
+            }
+        }
+    }
+
+    public void onPrivateVolumeMounted(String volumeUuid) {
+        synchronized (mSessions) {
+            reconcileStagesLocked(volumeUuid);
+        }
+    }
+
     public void onSecureContainersAvailable() {
         synchronized (mSessions) {
             final ArraySet<String> unclaimed = new ArraySet<>();
@@ -713,25 +731,11 @@
         throw new IllegalStateException("Failed to allocate session ID");
     }
 
-    private File buildInternalStagingDir() {
-        return new File(Environment.getDataDirectory(), "app");
+    private File buildStagingDir(String volumeUuid) {
+        return Environment.getDataAppDirectory(volumeUuid);
     }
 
-    private File buildStagingDir(String volumeUuid) throws FileNotFoundException {
-        if (volumeUuid == null) {
-            return buildInternalStagingDir();
-        } else {
-            final VolumeInfo vol = mStorage.findVolumeByUuid(volumeUuid);
-            if (vol != null && vol.type == VolumeInfo.TYPE_PRIVATE
-                    && vol.isMountedWritable()) {
-                return new File(vol.path, "app");
-            } else {
-                throw new FileNotFoundException("Failed to find volume for UUID " + volumeUuid);
-            }
-        }
-    }
-
-    private File buildStageDir(String volumeUuid, int sessionId) throws FileNotFoundException {
+    private File buildStageDir(String volumeUuid, int sessionId) {
         final File stagingDir = buildStagingDir(volumeUuid);
         return new File(stagingDir, "vmdl" + sessionId + ".tmp");
     }
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 1385440..5e37df3 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -19,11 +19,18 @@
 import static android.Manifest.permission.GRANT_REVOKE_PERMISSIONS;
 import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
 import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
+import static android.Manifest.permission.WRITE_MEDIA_STORAGE;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
 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;
@@ -71,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;
@@ -191,6 +201,7 @@
 import libcore.util.EmptyArray;
 
 import com.android.internal.R;
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.app.IMediaContainerService;
 import com.android.internal.app.ResolverActivity;
 import com.android.internal.content.NativeLibraryHelper;
@@ -388,6 +399,15 @@
     /** Permission grant: grant as runtime a permission that was granted as an install time one. */
     private static final int GRANT_UPGRADE = 5;
 
+    /** Canonical intent used to identify what counts as a "web browser" app */
+    private static final Intent sBrowserIntent;
+    static {
+        sBrowserIntent = new Intent();
+        sBrowserIntent.setAction(Intent.ACTION_VIEW);
+        sBrowserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
+        sBrowserIntent.setData(Uri.parse("http:"));
+    }
+
     final ServiceThread mHandlerThread;
 
     final PackageHandler mHandler;
@@ -421,6 +441,7 @@
 
     // Used for privilege escalation. MUST NOT BE CALLED WITH mPackages
     // LOCK HELD.  Can be called with mInstallLock held.
+    @GuardedBy("mInstallLock")
     final Installer mInstaller;
 
     /** Directory where installed third-party apps stored */
@@ -448,6 +469,7 @@
     // Keys are String (package name), values are Package.  This also serves
     // as the lock for the global state.  Methods that must be called with
     // this lock held have the prefix "LP".
+    @GuardedBy("mPackages")
     final ArrayMap<String, PackageParser.Package> mPackages =
             new ArrayMap<String, PackageParser.Package>();
 
@@ -455,6 +477,13 @@
     final ArrayMap<String, ArrayMap<String, PackageParser.Package>> mOverlays =
         new ArrayMap<String, ArrayMap<String, PackageParser.Package>>();
 
+    /**
+     * Tracks new system packages [receiving in an OTA] that we expect to
+     * find updated user-installed versions. Keys are package name, values
+     * are package location.
+     */
+    final private ArrayMap<String, File> mExpectingBetter = new ArrayMap<>();
+
     final Settings mSettings;
     boolean mRestoredSettings;
 
@@ -687,7 +716,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) {
@@ -772,8 +802,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;
@@ -915,7 +943,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();
 
@@ -1302,6 +1331,7 @@
                         PackageInstalledInfo res = data.res;
 
                         if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
+                            final String packageName = res.pkg.applicationInfo.packageName;
                             res.removedInfo.sendBroadcast(false, true, false);
                             Bundle extras = new Bundle(1);
                             extras.putInt(Intent.EXTRA_UID, res.uid);
@@ -1348,22 +1378,18 @@
                                 }
                             }
                             sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
-                                    res.pkg.applicationInfo.packageName,
-                                    extras, null, null, firstUsers);
+                                    packageName, extras, null, null, firstUsers);
                             final boolean update = res.removedInfo.removedPackage != null;
                             if (update) {
                                 extras.putBoolean(Intent.EXTRA_REPLACING, true);
                             }
                             sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
-                                    res.pkg.applicationInfo.packageName,
-                                    extras, null, null, updateUsers);
+                                    packageName, extras, null, null, updateUsers);
                             if (update) {
                                 sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,
-                                        res.pkg.applicationInfo.packageName,
-                                        extras, null, null, updateUsers);
+                                        packageName, extras, null, null, updateUsers);
                                 sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,
-                                        null, null,
-                                        res.pkg.applicationInfo.packageName, null, updateUsers);
+                                        null, null, packageName, null, updateUsers);
 
                                 // treat asec-hosted packages like removable media on upgrade
                                 if (res.pkg.isForwardLocked() || isExternal(res.pkg)) {
@@ -1373,7 +1399,7 @@
                                     }
                                     int[] uidArray = new int[] { res.pkg.applicationInfo.uid };
                                     ArrayList<String> pkgList = new ArrayList<String>(1);
-                                    pkgList.add(res.pkg.applicationInfo.packageName);
+                                    pkgList.add(packageName);
                                     sendResourcesChangedBroadcast(true, true,
                                             pkgList,uidArray, null);
                                 }
@@ -1383,6 +1409,19 @@
                                 deleteOld = true;
                             }
 
+                            // If this app is a browser and it's newly-installed for some
+                            // users, clear any default-browser state in those users
+                            if (firstUsers.length > 0) {
+                                // the app's nature doesn't depend on the user, so we can just
+                                // check its browser nature in any user and generalize.
+                                if (packageIsBrowser(packageName, firstUsers[0])) {
+                                    synchronized (mPackages) {
+                                        for (int userId : firstUsers) {
+                                            mSettings.setDefaultBrowserPackageNameLPw(null, userId);
+                                        }
+                                    }
+                                }
+                            }
                             // Log current value of "unknown sources" setting
                             EventLog.writeEvent(EventLogTags.UNKNOWN_SOURCES_ENABLED,
                                 getUnknownSourcesSettings());
@@ -1588,9 +1627,19 @@
         public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) {
             if (vol.type == VolumeInfo.TYPE_PRIVATE) {
                 if (vol.state == VolumeInfo.STATE_MOUNTED) {
-                    // TODO: ensure that private directories exist for all active users
-                    // TODO: remove user data whose serial number doesn't match
+                    final String volumeUuid = vol.getFsUuid();
+
+                    // Clean up any users or apps that were removed or recreated
+                    // while this volume was missing
+                    reconcileUsers(volumeUuid);
+                    reconcileApps(volumeUuid);
+
+                    // Clean up any install sessions that expired or were
+                    // cancelled while this volume was missing
+                    mInstallerService.onPrivateVolumeMounted(volumeUuid);
+
                     loadPrivatePackages(vol);
+
                 } else if (vol.state == VolumeInfo.STATE_EJECTING) {
                     unloadPrivatePackages(vol);
                 }
@@ -1607,7 +1656,17 @@
 
         @Override
         public void onVolumeForgotten(String fsUuid) {
-            // TODO: remove all packages hosted on this uuid
+            // Remove any apps installed on the forgotten volume
+            synchronized (mPackages) {
+                final List<PackageSetting> packages = mSettings.getVolumePackagesLPr(fsUuid);
+                for (PackageSetting ps : packages) {
+                    Slog.d(TAG, "Destroying " + ps.name + " because volume was forgotten");
+                    deletePackage(ps.name, new LegacyPackageDeleteObserver(null).getBinder(),
+                            UserHandle.USER_OWNER, PackageManager.DELETE_ALL_USERS);
+                }
+
+                mSettings.writeLPr();
+            }
         }
     };
 
@@ -2001,7 +2060,6 @@
 
             // Prune any system packages that no longer exist.
             final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<String>();
-            final ArrayMap<String, File> expectingBetter = new ArrayMap<>();
             if (!mOnlyCore) {
                 Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator();
                 while (psit.hasNext()) {
@@ -2034,7 +2092,7 @@
                                     + ", versionCode=" + ps.versionCode + "; scanned versionCode="
                                     + scannedPkg.mVersionCode);
                             removePackageLI(ps, true);
-                            expectingBetter.put(ps.name, ps.codePath);
+                            mExpectingBetter.put(ps.name, ps.codePath);
                         }
 
                         continue;
@@ -2108,10 +2166,10 @@
                  * the userdata partition actually showed up. If they never
                  * appeared, crawl back and revive the system version.
                  */
-                for (int i = 0; i < expectingBetter.size(); i++) {
-                    final String packageName = expectingBetter.keyAt(i);
+                for (int i = 0; i < mExpectingBetter.size(); i++) {
+                    final String packageName = mExpectingBetter.keyAt(i);
                     if (!mPackages.containsKey(packageName)) {
-                        final File scanFile = expectingBetter.valueAt(i);
+                        final File scanFile = mExpectingBetter.valueAt(i);
 
                         logCriticalInfo(Log.WARN, "Expected better " + packageName
                                 + " but never showed up; reverting to system");
@@ -2146,6 +2204,7 @@
                     }
                 }
             }
+            mExpectingBetter.clear();
 
             // Now that we know all of the shared libraries, update all clients to have
             // the correct library paths.
@@ -2192,6 +2251,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
@@ -2206,7 +2266,6 @@
                 mSettings.mFingerprint = Build.FINGERPRINT;
             }
 
-            primeDomainVerificationsLPw();
             checkDefaultBrowser();
 
             // All the changes are done during package scanning.
@@ -2219,6 +2278,7 @@
                     SystemClock.uptimeMillis());
 
             mRequiredVerifierPackage = getRequiredVerifierLPr();
+            mRequiredInstallerPackage = getRequiredInstallerLPr();
 
             mInstallerService = new PackageInstallerService(context, this);
 
@@ -2285,6 +2345,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,
@@ -2325,54 +2418,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) {
@@ -2380,7 +2475,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) {
@@ -2405,14 +2500,9 @@
     }
 
     private List<String> resolveAllBrowserApps(int userId) {
-        // Match all generic http: browser apps
-        Intent intent = new Intent();
-        intent.setAction(Intent.ACTION_VIEW);
-        intent.addCategory(Intent.CATEGORY_BROWSABLE);
-        intent.setData(Uri.parse("http:"));
-
-        // Resolve that intent and check that the handleAllWebDataURI boolean is set
-        List<ResolveInfo> list = queryIntentActivities(intent, null, 0, userId);
+        // Resolve the canonical browser intent and check that the handleAllWebDataURI boolean is set
+        List<ResolveInfo> list = queryIntentActivities(sBrowserIntent, null,
+                PackageManager.MATCH_ALL, userId);
 
         final int count = list.size();
         List<String> result = new ArrayList<String>(count);
@@ -2430,6 +2520,19 @@
         return result;
     }
 
+    private boolean packageIsBrowser(String packageName, int userId) {
+        List<ResolveInfo> list = queryIntentActivities(sBrowserIntent, null,
+                PackageManager.MATCH_ALL, userId);
+        final int N = list.size();
+        for (int i = 0; i < N; i++) {
+            ResolveInfo info = list.get(i);
+            if (packageName.equals(info.activityInfo.packageName)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private void checkDefaultBrowser() {
         final int myUserId = UserHandle.myUserId();
         final String packageName = getDefaultBrowserPackageName(myUserId);
@@ -2629,7 +2732,9 @@
         if (Process.isIsolated(uid)) {
             return Zygote.MOUNT_EXTERNAL_NONE;
         } else {
-            if (checkUidPermission(WRITE_EXTERNAL_STORAGE, uid) == PERMISSION_GRANTED) {
+            if (checkUidPermission(WRITE_MEDIA_STORAGE, uid) == PERMISSION_GRANTED) {
+                return Zygote.MOUNT_EXTERNAL_DEFAULT;
+            } else if (checkUidPermission(WRITE_EXTERNAL_STORAGE, uid) == PERMISSION_GRANTED) {
                 return Zygote.MOUNT_EXTERNAL_WRITE;
             } else if (checkUidPermission(READ_EXTERNAL_STORAGE, uid) == PERMISSION_GRANTED) {
                 return Zygote.MOUNT_EXTERNAL_READ;
@@ -2745,8 +2850,9 @@
                 pkg.applicationInfo.packageName = packageName;
                 pkg.applicationInfo.flags = ps.pkgFlags | ApplicationInfo.FLAG_IS_DATA_ONLY;
                 pkg.applicationInfo.privateFlags = ps.pkgPrivateFlags;
-                pkg.applicationInfo.dataDir = PackageManager.getDataDirForUser(ps.volumeUuid,
-                        packageName, userId).getAbsolutePath();
+                pkg.applicationInfo.dataDir = Environment
+                        .getDataUserPackageDirectory(ps.volumeUuid, userId, packageName)
+                        .getAbsolutePath();
                 pkg.applicationInfo.primaryCpuAbi = ps.primaryCpuAbiString;
                 pkg.applicationInfo.secondaryCpuAbi = ps.secondaryCpuAbiString;
             }
@@ -3048,6 +3154,28 @@
         return PackageManager.PERMISSION_DENIED;
     }
 
+    @Override
+    public boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId) {
+        if (UserHandle.getCallingUserId() != userId) {
+            mContext.enforceCallingPermission(
+                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+                    "isPermissionRevokedByPolicy for user " + userId);
+        }
+
+        if (checkPermission(permission, packageName, userId)
+                == PackageManager.PERMISSION_GRANTED) {
+            return false;
+        }
+
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            final int flags = getPermissionFlags(permission, packageName, userId);
+            return (flags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0;
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
     /**
      * Checks if the request is from the system or an app that has INTERACT_ACROSS_USERS
      * or INTERACT_ACROSS_USERS_FULL permissions, if the userid is not for the caller.
@@ -3294,7 +3422,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);
@@ -4514,8 +4642,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());
         }
 
@@ -4528,9 +4656,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;
@@ -4544,11 +4672,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);
                     }
                 }
@@ -4596,17 +4733,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;
     }
@@ -5522,7 +5662,7 @@
                 if (pkg.mVersionCode <= ps.versionCode) {
                     // The system package has been updated and the code path does not match
                     // Ignore entry. Skip it.
-                    Slog.i(TAG, "Package " + ps.name + " at " + scanFile
+                    if (DEBUG_INSTALL) Slog.i(TAG, "Package " + ps.name + " at " + scanFile
                             + " ignored: updated version " + ps.versionCode
                             + " better than this " + pkg.mVersionCode);
                     if (!updatedPkg.codePath.equals(scanFile)) {
@@ -5535,7 +5675,10 @@
                         updatedPkg.resourcePathString = scanFile.toString();
                     }
                     updatedPkg.pkg = pkg;
-                    throw new PackageManagerException(INSTALL_FAILED_DUPLICATE_PACKAGE, null);
+                    throw new PackageManagerException(INSTALL_FAILED_DUPLICATE_PACKAGE,
+                            "Package " + ps.name + " at " + scanFile
+                                    + " ignored: updated version " + ps.versionCode
+                                    + " better than this " + pkg.mVersionCode);
                 } else {
                     // The current app on the system partition is better than
                     // what we have updated to on the data partition; switch
@@ -6318,20 +6461,29 @@
         // scanned APK is both already known and at the path previously established
         // for it.  Previously unknown packages we pick up normally, but if we have an
         // a priori expectation about this package's install presence, enforce it.
+        // With a singular exception for new system packages. When an OTA contains
+        // a new system package, we allow the codepath to change from a system location
+        // to the user-installed location. If we don't allow this change, any newer,
+        // user-installed version of the application will be ignored.
         if ((scanFlags & SCAN_REQUIRE_KNOWN) != 0) {
-            PackageSetting known = mSettings.peekPackageLPr(pkg.packageName);
-            if (known != null) {
-                if (DEBUG_PACKAGE_SCANNING) {
-                    Log.d(TAG, "Examining " + pkg.codePath
-                            + " and requiring known paths " + known.codePathString
-                            + " & " + known.resourcePathString);
-                }
-                if (!pkg.applicationInfo.getCodePath().equals(known.codePathString)
-                        || !pkg.applicationInfo.getResourcePath().equals(known.resourcePathString)) {
-                    throw new PackageManagerException(INSTALL_FAILED_PACKAGE_CHANGED,
-                            "Application package " + pkg.packageName
-                            + " found at " + pkg.applicationInfo.getCodePath()
-                            + " but expected at " + known.codePathString + "; ignoring.");
+            if (mExpectingBetter.containsKey(pkg.packageName)) {
+                logCriticalInfo(Log.WARN,
+                        "Relax SCAN_REQUIRE_KNOWN requirement for package " + pkg.packageName);
+            } else {
+                PackageSetting known = mSettings.peekPackageLPr(pkg.packageName);
+                if (known != null) {
+                    if (DEBUG_PACKAGE_SCANNING) {
+                        Log.d(TAG, "Examining " + pkg.codePath
+                                + " and requiring known paths " + known.codePathString
+                                + " & " + known.resourcePathString);
+                    }
+                    if (!pkg.applicationInfo.getCodePath().equals(known.codePathString)
+                            || !pkg.applicationInfo.getResourcePath().equals(known.resourcePathString)) {
+                        throw new PackageManagerException(INSTALL_FAILED_PACKAGE_CHANGED,
+                                "Application package " + pkg.packageName
+                                + " found at " + pkg.applicationInfo.getCodePath()
+                                + " but expected at " + known.codePathString + "; ignoring.");
+                    }
                 }
             }
         }
@@ -6590,8 +6742,8 @@
 
         } else {
             // This is a normal package, need to make its data directory.
-            dataPath = PackageManager.getDataDirForUser(pkg.volumeUuid, pkg.packageName,
-                    UserHandle.USER_OWNER);
+            dataPath = Environment.getDataUserPackageDirectory(pkg.volumeUuid,
+                    UserHandle.USER_OWNER, pkg.packageName);
 
             boolean uidError = false;
             if (dataPath.exists()) {
@@ -6745,6 +6897,18 @@
         if (DEBUG_INSTALL) Slog.i(TAG, "Linking native library dir for " + path);
         final int[] userIds = sUserManager.getUserIds();
         synchronized (mInstallLock) {
+            // Make sure all user data directories are ready to roll; we're okay
+            // if they already exist
+            if (!TextUtils.isEmpty(pkg.volumeUuid)) {
+                for (int userId : userIds) {
+                    if (userId != 0) {
+                        mInstaller.createUserData(pkg.volumeUuid, pkg.packageName,
+                                UserHandle.getUid(userId, pkg.applicationInfo.uid), userId,
+                                pkg.applicationInfo.seinfo);
+                    }
+                }
+            }
+
             // Create a native library symlink only if we have native libraries
             // and if the native libraries are 32 bit libraries. We do not provide
             // this symlink for 64 bit libraries.
@@ -8317,7 +8481,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.
@@ -8354,11 +8518,39 @@
                 }
             }
         }
-        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;
     }
@@ -9163,7 +9355,8 @@
         IActivityManager am = ActivityManagerNative.getDefault();
         if (am != null) {
             try {
-                am.startService(null, intent, null, UserHandle.USER_OWNER);
+                am.startService(null, intent, null, mContext.getOpPackageName(),
+                        UserHandle.USER_OWNER);
             } catch (RemoteException e) {
             }
         }
@@ -11203,7 +11396,7 @@
             if (DEBUG_INSTALL) Slog.d(TAG, "Moving " + move.packageName + " from "
                     + move.fromUuid + " to " + move.toUuid);
             synchronized (mInstaller) {
-                if (mInstaller.moveCompleteApp(move.fromUuid, move.toUuid, move.packageName,
+                if (mInstaller.copyCompleteApp(move.fromUuid, move.toUuid, move.packageName,
                         move.dataAppName, move.appId, move.seinfo) != 0) {
                     return PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
                 }
@@ -11218,14 +11411,14 @@
 
         int doPreInstall(int status) {
             if (status != PackageManager.INSTALL_SUCCEEDED) {
-                cleanUp();
+                cleanUp(move.toUuid);
             }
             return status;
         }
 
         boolean doRename(int status, PackageParser.Package pkg, String oldCodePath) {
             if (status != PackageManager.INSTALL_SUCCEEDED) {
-                cleanUp();
+                cleanUp(move.toUuid);
                 return false;
             }
 
@@ -11242,8 +11435,10 @@
         }
 
         int doPostInstall(int status, int uid) {
-            if (status != PackageManager.INSTALL_SUCCEEDED) {
-                cleanUp();
+            if (status == PackageManager.INSTALL_SUCCEEDED) {
+                cleanUp(move.fromUuid);
+            } else {
+                cleanUp(move.toUuid);
             }
             return status;
         }
@@ -11258,32 +11453,28 @@
             return (resourceFile != null) ? resourceFile.getAbsolutePath() : null;
         }
 
-        private boolean cleanUp() {
-            if (codeFile == null || !codeFile.exists()) {
-                return false;
+        private boolean cleanUp(String volumeUuid) {
+            final File codeFile = new File(Environment.getDataAppDirectory(volumeUuid),
+                    move.dataAppName);
+            Slog.d(TAG, "Cleaning up " + move.packageName + " on " + volumeUuid);
+            synchronized (mInstallLock) {
+                // Clean up both app data and code
+                removeDataDirsLI(volumeUuid, move.packageName);
+                if (codeFile.isDirectory()) {
+                    mInstaller.rmPackageDir(codeFile.getAbsolutePath());
+                } else {
+                    codeFile.delete();
+                }
             }
-
-            if (codeFile.isDirectory()) {
-                mInstaller.rmPackageDir(codeFile.getAbsolutePath());
-            } else {
-                codeFile.delete();
-            }
-
-            if (resourceFile != null && !FileUtils.contains(codeFile, resourceFile)) {
-                resourceFile.delete();
-            }
-
             return true;
         }
 
         void cleanUpResourcesLI() {
-            cleanUp();
+            throw new UnsupportedOperationException();
         }
 
         boolean doPostDeleteLI(boolean delete) {
-            // XXX err, shouldn't we respect the delete flag?
-            cleanUpResourcesLI();
-            return true;
+            throw new UnsupportedOperationException();
         }
     }
 
@@ -11407,8 +11598,8 @@
         String pkgName = pkg.packageName;
 
         if (DEBUG_INSTALL) Slog.d(TAG, "installNewPackageLI: " + pkg);
-        final boolean dataDirExists = PackageManager.getDataDirForUser(volumeUuid, pkgName,
-                UserHandle.USER_OWNER).exists();
+        final boolean dataDirExists = Environment
+                .getDataUserPackageDirectory(volumeUuid, UserHandle.USER_OWNER, pkgName).exists();
         synchronized(mPackages) {
             if (mSettings.mRenamedPackages.containsKey(pkgName)) {
                 // A package with the same name is already installed, though
@@ -12265,6 +12456,8 @@
             final IPackageDeleteObserver2 observer, final int userId, final int flags) {
         mContext.enforceCallingOrSelfPermission(
                 android.Manifest.permission.DELETE_PACKAGES, null);
+        Preconditions.checkNotNull(packageName);
+        Preconditions.checkNotNull(observer);
         final int uid = Binder.getCallingUid();
         if (UserHandle.getUserId(uid) != userId) {
             mContext.enforceCallingPermission(
@@ -12523,7 +12716,7 @@
                                                 KILL_APP_REASON_GIDS_CHANGED);
                                     }
                                 });
-                            break;
+                                break;
                             }
                         }
                     }
@@ -12639,8 +12832,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");
@@ -12801,8 +13000,7 @@
                 if (clearPackagePreferredActivitiesLPw(packageName, removeUser)) {
                     scheduleWritePackageRestrictionsLocked(removeUser);
                 }
-                revokeRuntimePermissionsAndClearAllFlagsLocked(ps.getPermissionsState(),
-                        removeUser);
+                resetUserChangesToRuntimePermissionsAndFlagsLocked(ps, removeUser);
             }
             return true;
         }
@@ -12963,8 +13161,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
@@ -12995,66 +13192,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();
+        }
     }
 
     /**
@@ -13484,6 +13733,7 @@
             clearPackagePreferredActivitiesLPw(null, userId);
             mSettings.applyDefaultPreferredAppsLPw(this, userId);
             applyFactoryDefaultBrowserLPw(userId);
+            primeDomainVerificationsLPw(userId);
 
             scheduleWritePackageRestrictionsLocked(userId);
         }
@@ -14598,7 +14848,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 = "  ";
@@ -14607,45 +14857,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();
                             }
                         }
@@ -14767,6 +15013,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;
 
@@ -15203,6 +15478,127 @@
         sendResourcesChangedBroadcast(false, false, unloaded, null);
     }
 
+    /**
+     * Examine all users present on given mounted volume, and destroy data
+     * belonging to users that are no longer valid, or whose user ID has been
+     * recycled.
+     */
+    private void reconcileUsers(String volumeUuid) {
+        final File[] files = Environment.getDataUserDirectory(volumeUuid).listFiles();
+        if (ArrayUtils.isEmpty(files)) {
+            Slog.d(TAG, "No users found on " + volumeUuid);
+            return;
+        }
+
+        for (File file : files) {
+            if (!file.isDirectory()) continue;
+
+            final int userId;
+            final UserInfo info;
+            try {
+                userId = Integer.parseInt(file.getName());
+                info = sUserManager.getUserInfo(userId);
+            } catch (NumberFormatException e) {
+                Slog.w(TAG, "Invalid user directory " + file);
+                continue;
+            }
+
+            boolean destroyUser = false;
+            if (info == null) {
+                logCriticalInfo(Log.WARN, "Destroying user directory " + file
+                        + " because no matching user was found");
+                destroyUser = true;
+            } else {
+                try {
+                    UserManagerService.enforceSerialNumber(file, info.serialNumber);
+                } catch (IOException e) {
+                    logCriticalInfo(Log.WARN, "Destroying user directory " + file
+                            + " because we failed to enforce serial number: " + e);
+                    destroyUser = true;
+                }
+            }
+
+            if (destroyUser) {
+                synchronized (mInstallLock) {
+                    mInstaller.removeUserDataDirs(volumeUuid, userId);
+                }
+            }
+        }
+
+        final UserManager um = mContext.getSystemService(UserManager.class);
+        for (UserInfo user : um.getUsers()) {
+            final File userDir = Environment.getDataUserDirectory(volumeUuid, user.id);
+            if (userDir.exists()) continue;
+
+            try {
+                UserManagerService.prepareUserDirectory(userDir);
+                UserManagerService.enforceSerialNumber(userDir, user.serialNumber);
+            } catch (IOException e) {
+                Log.wtf(TAG, "Failed to create user directory on " + volumeUuid, e);
+            }
+        }
+    }
+
+    /**
+     * Examine all apps present on given mounted volume, and destroy apps that
+     * aren't expected, either due to uninstallation or reinstallation on
+     * another volume.
+     */
+    private void reconcileApps(String volumeUuid) {
+        final File[] files = Environment.getDataAppDirectory(volumeUuid).listFiles();
+        if (ArrayUtils.isEmpty(files)) {
+            Slog.d(TAG, "No apps found on " + volumeUuid);
+            return;
+        }
+
+        for (File file : files) {
+            final boolean isPackage = (isApkFile(file) || file.isDirectory())
+                    && !PackageInstallerService.isStageName(file.getName());
+            if (!isPackage) {
+                // Ignore entries which are not packages
+                continue;
+            }
+
+            boolean destroyApp = false;
+            String packageName = null;
+            try {
+                final PackageLite pkg = PackageParser.parsePackageLite(file,
+                        PackageParser.PARSE_MUST_BE_APK);
+                packageName = pkg.packageName;
+
+                synchronized (mPackages) {
+                    final PackageSetting ps = mSettings.mPackages.get(packageName);
+                    if (ps == null) {
+                        logCriticalInfo(Log.WARN, "Destroying " + packageName + " on + "
+                                + volumeUuid + " because we found no install record");
+                        destroyApp = true;
+                    } else if (!TextUtils.equals(volumeUuid, ps.volumeUuid)) {
+                        logCriticalInfo(Log.WARN, "Destroying " + packageName + " on "
+                                + volumeUuid + " because we expected it on " + ps.volumeUuid);
+                        destroyApp = true;
+                    }
+                }
+
+            } catch (PackageParserException e) {
+                logCriticalInfo(Log.WARN, "Destroying " + file + " due to parse failure: " + e);
+                destroyApp = true;
+            }
+
+            if (destroyApp) {
+                synchronized (mInstallLock) {
+                    if (packageName != null) {
+                        removeDataDirsLI(volumeUuid, packageName);
+                    }
+                    if (file.isDirectory()) {
+                        mInstaller.rmPackageDir(file.getAbsolutePath());
+                    } else {
+                        file.delete();
+                    }
+                }
+            }
+        }
+    }
+
     private void unfreezePackage(String packageName) {
         synchronized (mPackages) {
             final PackageSetting ps = mSettings.mPackages.get(packageName);
@@ -15502,14 +15898,11 @@
             // Technically, we shouldn't be doing this with the package lock
             // held.  However, this is very rare, and there is already so much
             // other disk I/O going on, that we'll let it slide for now.
-            final StorageManager storage = StorageManager.from(mContext);
-            final List<VolumeInfo> vols = storage.getVolumes();
-            for (VolumeInfo vol : vols) {
-                if (vol.getType() == VolumeInfo.TYPE_PRIVATE && vol.isMountedWritable()) {
-                    final String volumeUuid = vol.getFsUuid();
-                    if (DEBUG_INSTALL) Slog.d(TAG, "Removing user data on volume " + volumeUuid);
-                    mInstaller.removeUserDataDirs(volumeUuid, userHandle);
-                }
+            final StorageManager storage = mContext.getSystemService(StorageManager.class);
+            for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
+                final String volumeUuid = vol.getFsUuid();
+                if (DEBUG_INSTALL) Slog.d(TAG, "Removing user data on volume " + volumeUuid);
+                mInstaller.removeUserDataDirs(volumeUuid, userHandle);
             }
         }
         mUserNeedsBadging.delete(userHandle);
@@ -15563,11 +15956,12 @@
     }
 
     /** Called by UserManagerService */
-    void createNewUserLILPw(int userHandle, File path) {
+    void createNewUserLILPw(int userHandle) {
         if (mInstaller != null) {
             mInstaller.createUserConfig(userHandle);
-            mSettings.createNewUserLILPw(this, mInstaller, userHandle, path);
+            mSettings.createNewUserLILPw(this, mInstaller, userHandle);
             applyFactoryDefaultBrowserLPw(userHandle);
+            primeDomainVerificationsLPw(userHandle);
         }
     }
 
@@ -15970,6 +16364,13 @@
         }
 
         @Override
+        public void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider) {
+            synchronized (mPackages) {
+                mDefaultPermissionPolicy.setSyncAdapterPackagesProviderrLPw(provider);
+            }
+        }
+
+        @Override
         public void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId) {
             synchronized (mPackages) {
                 mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultSmsAppLPr(
@@ -15990,8 +16391,13 @@
     public void grantDefaultPermissionsToEnabledCarrierApps(String[] packageNames, int userId) {
         enforceSystemOrPhoneCaller("grantPermissionsToEnabledCarrierApps");
         synchronized (mPackages) {
-            mDefaultPermissionPolicy.grantDefaultPermissionsToEnabledCarrierAppsLPr(
-                    packageNames, userId);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mDefaultPermissionPolicy.grantDefaultPermissionsToEnabledCarrierAppsLPr(
+                        packageNames, userId);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 0ad2b4a..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;
     }
 
@@ -3613,11 +3596,7 @@
         }
     }
 
-    void createNewUserLILPw(PackageManagerService service, Installer installer,
-            int userHandle, File path) {
-        path.mkdir();
-        FileUtils.setPermissions(path.toString(), FileUtils.S_IRWXU | FileUtils.S_IRWXG
-                | FileUtils.S_IXOTH, -1, -1);
+    void createNewUserLILPw(PackageManagerService service, Installer installer, int userHandle) {
         for (PackageSetting ps : mPackages.values()) {
             if (ps.pkg == null || ps.pkg.applicationInfo == null) {
                 continue;
@@ -4333,12 +4312,25 @@
                 }
                 pw.print(prefix); pw.print("  "); pw.print(permissionState.getName());
                 pw.print(", granted="); pw.print(permissionState.isGranted());
-                    pw.print(", flags=0x"); pw.println(Integer.toHexString(
+                    pw.print(", flags="); pw.println(permissionFlagsToString(
                         permissionState.getFlags()));
             }
         }
     }
 
+    private static String permissionFlagsToString(int flags) {
+        StringBuilder flagsString = new StringBuilder();
+        flagsString.append("[ ");
+        while (flags != 0) {
+            final int flag = 1 << Integer.numberOfTrailingZeros(flags);
+            flags &= ~flag;
+            flagsString.append(PackageManager.permissionFlagToString(flag));
+            flagsString.append(' ');
+        }
+        flagsString.append(']');
+        return flagsString.toString();
+    }
+
     void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> permissionNames,
             PermissionsState permissionsState) {
         List<PermissionState> permissionStates = permissionsState.getInstallPermissionStates();
@@ -4351,7 +4343,7 @@
                 }
                 pw.print(prefix); pw.print("  "); pw.print(permissionState.getName());
                     pw.print(", granted="); pw.print(permissionState.isGranted());
-                    pw.print(", flags=0x"); pw.println(Integer.toHexString(
+                    pw.print(", flags="); pw.println(permissionFlagsToString(
                         permissionState.getFlags()));
             }
         }
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 4300df6..1a79b4e 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -42,6 +42,11 @@
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.os.storage.StorageManager;
+import android.os.storage.VolumeInfo;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.OsConstants;
 import android.util.AtomicFile;
 import android.util.Log;
 import android.util.Slog;
@@ -137,6 +142,8 @@
     static final int WRITE_USER_MSG = 1;
     static final int WRITE_USER_DELAY = 2*1000;  // 2 seconds
 
+    private static final String XATTR_SERIAL = "user.serial";
+
     private final Context mContext;
     private final PackageManagerService mPm;
     private final Object mInstallLock;
@@ -146,7 +153,6 @@
 
     private final File mUsersDir;
     private final File mUserListFile;
-    private final File mBaseUserPath;
 
     private final SparseArray<UserInfo> mUsers = new SparseArray<UserInfo>();
     private final SparseArray<Bundle> mUserRestrictions = new SparseArray<Bundle>();
@@ -210,7 +216,6 @@
                 // Make zeroth user directory, for services to migrate their files to that location
                 File userZeroDir = new File(mUsersDir, "0");
                 userZeroDir.mkdirs();
-                mBaseUserPath = baseUserPath;
                 FileUtils.setPermissions(mUsersDir.toString(),
                         FileUtils.S_IRWXU|FileUtils.S_IRWXG
                         |FileUtils.S_IROTH|FileUtils.S_IXOTH,
@@ -1237,7 +1242,6 @@
                     }
                     int userId = getNextAvailableIdLocked();
                     userInfo = new UserInfo(userId, name, null, flags);
-                    File userPath = new File(mBaseUserPath, Integer.toString(userId));
                     userInfo.serialNumber = mNextSerialNumber++;
                     long now = System.currentTimeMillis();
                     userInfo.creationTime = (now > EPOCH_PLUS_30_YEARS) ? now : 0;
@@ -1252,7 +1256,19 @@
                         }
                         userInfo.profileGroupId = parent.profileGroupId;
                     }
-                    mPm.createNewUserLILPw(userId, userPath);
+                    final StorageManager storage = mContext.getSystemService(StorageManager.class);
+                    for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
+                        final String volumeUuid = vol.getFsUuid();
+                        try {
+                            final File userDir = Environment.getDataUserDirectory(volumeUuid,
+                                    userId);
+                            prepareUserDirectory(userDir);
+                            enforceSerialNumber(userDir, userInfo.serialNumber);
+                        } catch (IOException e) {
+                            Log.wtf(LOG_TAG, "Failed to create user directory on " + volumeUuid, e);
+                        }
+                    }
+                    mPm.createNewUserLILPw(userId);
                     userInfo.partial = false;
                     scheduleWriteUserLocked(userInfo);
                     updateUserIdsLocked();
@@ -1856,6 +1872,87 @@
         return RESTRICTIONS_FILE_PREFIX + packageName + XML_SUFFIX;
     }
 
+    /**
+     * Create new {@code /data/user/[id]} directory and sets default
+     * permissions.
+     */
+    public static void prepareUserDirectory(File file) throws IOException {
+        if (!file.exists()) {
+            if (!file.mkdir()) {
+                throw new IOException("Failed to create " + file);
+            }
+        }
+        if (FileUtils.setPermissions(file.getAbsolutePath(), 0771, Process.SYSTEM_UID,
+                Process.SYSTEM_UID) != 0) {
+            throw new IOException("Failed to prepare " + file);
+        }
+    }
+
+    /**
+     * Enforce that serial number stored in user directory inode matches the
+     * given expected value. Gracefully sets the serial number if currently
+     * undefined.
+     *
+     * @throws IOException when problem extracting serial number, or serial
+     *             number is mismatched.
+     */
+    public static void enforceSerialNumber(File file, int serialNumber) throws IOException {
+        final int foundSerial = getSerialNumber(file);
+        Slog.v(LOG_TAG, "Found " + file + " with serial number " + foundSerial);
+
+        if (foundSerial == -1) {
+            Slog.d(LOG_TAG, "Serial number missing on " + file + "; assuming current is valid");
+            try {
+                setSerialNumber(file, serialNumber);
+            } catch (IOException e) {
+                Slog.w(LOG_TAG, "Failed to set serial number on " + file, e);
+            }
+
+        } else if (foundSerial != serialNumber) {
+            throw new IOException("Found serial number " + foundSerial
+                    + " doesn't match expected " + serialNumber);
+        }
+    }
+
+    /**
+     * Set serial number stored in user directory inode.
+     *
+     * @throws IOException if serial number was already set
+     */
+    private static void setSerialNumber(File file, int serialNumber)
+            throws IOException {
+        try {
+            final byte[] buf = Integer.toString(serialNumber).getBytes(StandardCharsets.UTF_8);
+            Os.setxattr(file.getAbsolutePath(), XATTR_SERIAL, buf, OsConstants.XATTR_CREATE);
+        } catch (ErrnoException e) {
+            throw e.rethrowAsIOException();
+        }
+    }
+
+    /**
+     * Return serial number stored in user directory inode.
+     *
+     * @return parsed serial number, or -1 if not set
+     */
+    private static int getSerialNumber(File file) throws IOException {
+        try {
+            final byte[] buf = new byte[256];
+            final int len = Os.getxattr(file.getAbsolutePath(), XATTR_SERIAL, buf);
+            final String serial = new String(buf, 0, len);
+            try {
+                return Integer.parseInt(serial);
+            } catch (NumberFormatException e) {
+                throw new IOException("Bad serial number: " + serial);
+            }
+        } catch (ErrnoException e) {
+            if (e.errno == OsConstants.ENODATA) {
+                return -1;
+            } else {
+                throw e.rethrowAsIOException();
+            }
+        }
+    }
+
     @Override
     protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
diff --git a/services/core/java/com/android/server/policy/BarController.java b/services/core/java/com/android/server/policy/BarController.java
index 5877b3e..9095f57 100644
--- a/services/core/java/com/android/server/policy/BarController.java
+++ b/services/core/java/com/android/server/policy/BarController.java
@@ -155,7 +155,7 @@
     }
 
     private int computeStateLw(boolean wasVis, boolean wasAnim, WindowState win, boolean change) {
-        if (win.hasDrawnLw()) {
+        if (win.isDrawnLw()) {
             final boolean vis = win.isVisibleLw();
             final boolean anim = win.isAnimatingLw();
             if (mState == StatusBarManager.WINDOW_STATE_HIDING && !change && !vis) {
@@ -198,7 +198,7 @@
     }
 
     public boolean checkHiddenLw() {
-        if (mWin != null && mWin.hasDrawnLw()) {
+        if (mWin != null && mWin.isDrawnLw()) {
             if (!mWin.isVisibleLw() && !mWin.isAnimatingLw()) {
                 updateStateLw(StatusBarManager.WINDOW_STATE_HIDDEN);
             }
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 17a595d..87efb8d 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -549,6 +549,8 @@
 
     Display mDisplay;
 
+    private int mDisplayRotation;
+
     int mLandscapeRotation = 0;  // default landscape rotation
     int mSeascapeRotation = 0;   // "other" landscape rotation, 180 degrees from mLandscapeRotation
     int mPortraitRotation = 0;   // default portrait rotation
@@ -3046,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;
@@ -3061,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) {
@@ -3304,12 +3319,28 @@
     }
 
     @Override
-    public void getInsetHintLw(WindowManager.LayoutParams attrs, Rect outContentInsets,
-            Rect outStableInsets) {
+    public void getInsetHintLw(WindowManager.LayoutParams attrs, int displayRotation,
+            Rect outContentInsets, Rect outStableInsets, Rect outOutsets) {
         final int fl = PolicyControl.getWindowFlags(null, attrs);
         final int sysuiVis = PolicyControl.getSystemUiVisibility(null, attrs);
         final int systemUiVisibility = (sysuiVis | attrs.subtreeSystemUiVisibility);
 
+        final boolean useOutsets = outOutsets != null && shouldUseOutsets(attrs, fl);
+        if (useOutsets) {
+            int outset = ScreenShapeHelper.getWindowOutsetBottomPx(mContext.getResources());
+            if (outset > 0) {
+                if (displayRotation == Surface.ROTATION_0) {
+                    outOutsets.bottom += outset;
+                } else if (displayRotation == Surface.ROTATION_90) {
+                    outOutsets.right += outset;
+                } else if (displayRotation == Surface.ROTATION_180) {
+                    outOutsets.top += outset;
+                } else if (displayRotation == Surface.ROTATION_270) {
+                    outOutsets.left += outset;
+                }
+            }
+        }
+
         if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR))
                 == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) {
             int availRight, availBottom;
@@ -3349,10 +3380,16 @@
         outStableInsets.setEmpty();
     }
 
+    private boolean shouldUseOutsets(WindowManager.LayoutParams attrs, int fl) {
+        return attrs.type == TYPE_WALLPAPER || (fl & (WindowManager.LayoutParams.FLAG_FULLSCREEN
+                | WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN)) != 0;
+    }
+
     /** {@inheritDoc} */
     @Override
     public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth, int displayHeight,
                               int displayRotation) {
+        mDisplayRotation = displayRotation;
         final int overscanLeft, overscanTop, overscanRight, overscanBottom;
         if (isDefaultDisplay) {
             switch (displayRotation) {
@@ -4139,19 +4176,13 @@
         // need to provide information to the clients that want to pretend that you can draw there.
         // We only want to apply outsets to certain types of windows. For example, we never want to
         // apply the outsets to floating dialogs, because they wouldn't make sense there.
-        final boolean useOutsets = attrs.type == TYPE_WALLPAPER
-                || (fl & (WindowManager.LayoutParams.FLAG_FULLSCREEN
-                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN)) != 0;
+        final boolean useOutsets = shouldUseOutsets(attrs, fl);
         if (isDefaultDisplay && useOutsets) {
             osf = mTmpOutsetFrame;
             osf.set(cf.left, cf.top, cf.right, cf.bottom);
             int outset = ScreenShapeHelper.getWindowOutsetBottomPx(mContext.getResources());
             if (outset > 0) {
-                int rotation = Surface.ROTATION_0;
-                try {
-                    rotation = mWindowManager.getRotation();
-                } catch (RemoteException e) {
-                }
+                int rotation = mDisplayRotation;
                 if (rotation == Surface.ROTATION_0) {
                     osf.bottom += outset;
                 } else if (rotation == Surface.ROTATION_90) {
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 5a0bee9..3f59755 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2311,6 +2311,11 @@
             if (mDeviceIdleMode != enabled) {
                 mDeviceIdleMode = enabled;
                 updateWakeLockDisabledStatesLocked();
+                if (enabled) {
+                    EventLogTags.writeDeviceIdleOnPhase("power");
+                } else {
+                    EventLogTags.writeDeviceIdleOffPhase("power");
+                }
             }
         }
     }
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 7640837..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");
@@ -571,11 +591,11 @@
      *     LED, vibration, and ringing
      */
     @Override
-    public void onPanelRevealed(boolean clearNotificationEffects) {
+    public void onPanelRevealed(boolean clearNotificationEffects, int numItems) {
         enforceStatusBarService();
         long identity = Binder.clearCallingIdentity();
         try {
-            mNotificationDelegate.onPanelRevealed(clearNotificationEffects);
+            mNotificationDelegate.onPanelRevealed(clearNotificationEffects, numItems);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
diff --git a/services/core/java/com/android/server/telecom/TelecomLoaderService.java b/services/core/java/com/android/server/telecom/TelecomLoaderService.java
index b165b42..c2ce572 100644
--- a/services/core/java/com/android/server/telecom/TelecomLoaderService.java
+++ b/services/core/java/com/android/server/telecom/TelecomLoaderService.java
@@ -31,8 +31,11 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.telecom.DefaultDialerManager;
+import android.util.IntArray;
 import android.util.Slog;
 
+import android.util.SparseBooleanArray;
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.telephony.SmsApplication;
 import com.android.server.LocalServices;
 import com.android.server.SystemService;
@@ -59,6 +62,41 @@
                 }, 0);
                 SmsApplication.getDefaultMmsApplication(mContext, false);
                 ServiceManager.addService(Context.TELECOM_SERVICE, service);
+
+                synchronized (mLock) {
+                    if (mDefaultSmsAppRequests != null || mDefaultDialerAppRequests != null) {
+                        final PackageManagerInternal packageManagerInternal = LocalServices
+                                .getService(PackageManagerInternal.class);
+
+                        if (mDefaultSmsAppRequests != null) {
+                            ComponentName smsComponent = SmsApplication.getDefaultSmsApplication(
+                                    mContext, true);
+                            if (smsComponent != null) {
+                                final int requestCount = mDefaultSmsAppRequests.size();
+                                for (int i = requestCount - 1; i >= 0; i--) {
+                                    final int userid = mDefaultSmsAppRequests.get(i);
+                                    mDefaultSmsAppRequests.remove(i);
+                                    packageManagerInternal.grantDefaultPermissionsToDefaultSmsApp(
+                                            smsComponent.getPackageName(), userid);
+                                }
+                            }
+                        }
+
+                        if (mDefaultDialerAppRequests != null) {
+                            String packageName = DefaultDialerManager.getDefaultDialerApplication(
+                                    mContext);
+                            if (packageName != null) {
+                                final int requestCount = mDefaultDialerAppRequests.size();
+                                for (int i = requestCount - 1; i >= 0; i--) {
+                                    final int userId = mDefaultDialerAppRequests.get(i);
+                                    mDefaultDialerAppRequests.remove(i);
+                                    packageManagerInternal.grantDefaultPermissionsToDefaultDialerApp(
+                                            packageName, userId);
+                                }
+                            }
+                        }
+                    }
+                }
             } catch (RemoteException e) {
                 Slog.w(TAG, "Failed linking to death.");
             }
@@ -76,7 +114,17 @@
 
     private static final String SERVICE_ACTION = "com.android.ITelecomService";
 
+    private final Object mLock = new Object();
+
+    @GuardedBy("mLock")
+    private IntArray mDefaultSmsAppRequests;
+
+    @GuardedBy("mLock")
+    private IntArray mDefaultDialerAppRequests;
+
     private final Context mContext;
+
+    @GuardedBy("mLock")
     private TelecomServiceConnection mServiceConnection;
 
     public TelecomLoaderService(Context context) {
@@ -98,24 +146,27 @@
     }
 
     private void connectToTelecom() {
-        if (mServiceConnection != null) {
-            // TODO: Is unbinding worth doing or wait for system to rebind?
-            mContext.unbindService(mServiceConnection);
-            mServiceConnection = null;
-        }
+        synchronized (mLock) {
+            if (mServiceConnection != null) {
+                // TODO: Is unbinding worth doing or wait for system to rebind?
+                mContext.unbindService(mServiceConnection);
+                mServiceConnection = null;
+            }
 
-        TelecomServiceConnection serviceConnection = new TelecomServiceConnection();
-        Intent intent = new Intent(SERVICE_ACTION);
-        intent.setComponent(SERVICE_COMPONENT);
-        int flags = Context.BIND_IMPORTANT | Context.BIND_FOREGROUND_SERVICE
-                | Context.BIND_AUTO_CREATE;
+            TelecomServiceConnection serviceConnection = new TelecomServiceConnection();
+            Intent intent = new Intent(SERVICE_ACTION);
+            intent.setComponent(SERVICE_COMPONENT);
+            int flags = Context.BIND_IMPORTANT | Context.BIND_FOREGROUND_SERVICE
+                    | Context.BIND_AUTO_CREATE;
 
-        // Bind to Telecom and register the service
-        if (mContext.bindServiceAsUser(intent, serviceConnection, flags, UserHandle.OWNER)) {
-            mServiceConnection = serviceConnection;
+            // Bind to Telecom and register the service
+            if (mContext.bindServiceAsUser(intent, serviceConnection, flags, UserHandle.OWNER)) {
+                mServiceConnection = serviceConnection;
+            }
         }
     }
 
+
     private void registerDefaultAppProviders() {
         final PackageManagerInternal packageManagerInternal = LocalServices.getService(
                 PackageManagerInternal.class);
@@ -125,6 +176,15 @@
                 new PackageManagerInternal.PackagesProvider() {
             @Override
             public String[] getPackages(int userId) {
+                synchronized (mLock) {
+                    if (mServiceConnection == null) {
+                        if (mDefaultSmsAppRequests == null) {
+                            mDefaultSmsAppRequests = new IntArray();
+                        }
+                        mDefaultSmsAppRequests.add(userId);
+                        return null;
+                    }
+                }
                 ComponentName smsComponent = SmsApplication.getDefaultSmsApplication(
                         mContext, true);
                 if (smsComponent != null) {
@@ -139,6 +199,15 @@
                 new PackageManagerInternal.PackagesProvider() {
             @Override
             public String[] getPackages(int userId) {
+                synchronized (mLock) {
+                    if (mServiceConnection == null) {
+                        if (mDefaultDialerAppRequests == null) {
+                            mDefaultDialerAppRequests = new IntArray();
+                        }
+                        mDefaultDialerAppRequests.add(userId);
+                        return null;
+                    }
+                }
                 String packageName = DefaultDialerManager.getDefaultDialerApplication(mContext);
                 if (packageName != null) {
                     return new String[]{packageName};
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index 726db4e..15da829 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -105,7 +105,7 @@
     private final ArraySet<AgentInfo> mActiveAgents = new ArraySet<AgentInfo>();
     private final ArrayList<ITrustListener> mTrustListeners = new ArrayList<ITrustListener>();
     private final Receiver mReceiver = new Receiver();
-    private final SparseBooleanArray mUserHasAuthenticatedSinceBoot = new SparseBooleanArray();
+    private final SparseBooleanArray mUserHasAuthenticated = new SparseBooleanArray();
     /* package */ final TrustArchive mArchive = new TrustArchive();
     private final Context mContext;
     private final LockPatternUtils mLockPatternUtils;
@@ -118,6 +118,9 @@
     @GuardedBy("mDeviceLockedForUser")
     private final SparseBooleanArray mDeviceLockedForUser = new SparseBooleanArray();
 
+    @GuardedBy("mUserHasAuthenticatedSinceBoot")
+    private final SparseBooleanArray mUserHasAuthenticatedSinceBoot = new SparseBooleanArray();
+
     private boolean mTrustAgentsCanRun = false;
     private int mCurrentUser = UserHandle.USER_OWNER;
 
@@ -556,31 +559,34 @@
     }
 
     private boolean getUserHasAuthenticated(int userId) {
-        synchronized (mUserHasAuthenticatedSinceBoot) {
-            return mUserHasAuthenticatedSinceBoot.get(userId);
-        }
+        return mUserHasAuthenticated.get(userId);
     }
 
     /**
      * @return whether the value has changed
      */
     private boolean setUserHasAuthenticated(int userId) {
-        synchronized (mUserHasAuthenticatedSinceBoot) {
-            if (!mUserHasAuthenticatedSinceBoot.get(userId)) {
+        if (!mUserHasAuthenticated.get(userId)) {
+            mUserHasAuthenticated.put(userId, true);
+            synchronized (mUserHasAuthenticatedSinceBoot) {
                 mUserHasAuthenticatedSinceBoot.put(userId, true);
-                return true;
             }
-            return false;
+            return true;
         }
+        return false;
     }
 
     private void clearUserHasAuthenticated(int userId) {
+        if (userId == UserHandle.USER_ALL) {
+            mUserHasAuthenticated.clear();
+        } else {
+            mUserHasAuthenticated.put(userId, false);
+        }
+    }
+
+    private boolean getUserHasAuthenticatedSinceBoot(int userId) {
         synchronized (mUserHasAuthenticatedSinceBoot) {
-            if (userId == UserHandle.USER_ALL) {
-                mUserHasAuthenticatedSinceBoot.clear();
-            } else {
-                mUserHasAuthenticatedSinceBoot.put(userId, false);
-            }
+            return mUserHasAuthenticatedSinceBoot.get(userId);
         }
     }
 
@@ -734,7 +740,7 @@
                     Manifest.permission.ACCESS_KEYGUARD_SECURE_STORAGE, null);
             long token = Binder.clearCallingIdentity();
             try {
-                return getUserHasAuthenticated(userId);
+                return getUserHasAuthenticatedSinceBoot(userId);
             } finally {
                 Binder.restoreCallingIdentity(token);
             }
@@ -788,6 +794,9 @@
             fout.print(": trusted=" + dumpBool(aggregateIsTrusted(user.id)));
             fout.print(", trustManaged=" + dumpBool(aggregateIsTrustManaged(user.id)));
             fout.print(", deviceLocked=" + dumpBool(isDeviceLockedInner(user.id)));
+            fout.print(", hasAuthenticated=" + dumpBool(getUserHasAuthenticated(user.id)));
+            fout.print(", hasAuthenticatedSinceBoot="
+                    + dumpBool(getUserHasAuthenticatedSinceBoot(user.id)));
             fout.println();
             fout.println("   Enabled agents:");
             boolean duplicateSimpleNames = false;
@@ -909,7 +918,7 @@
             } else if (Intent.ACTION_USER_REMOVED.equals(action)) {
                 int userId = getUserId(intent);
                 if (userId > 0) {
-                    mUserHasAuthenticatedSinceBoot.delete(userId);
+                    mUserHasAuthenticated.delete(userId);
                     synchronized (mUserIsTrusted) {
                         mUserIsTrusted.delete(userId);
                     }
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 5995e9c..a57463c 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -531,14 +531,14 @@
 
             // Clip third of the from size of launch icon, expand to full width/height
             Animation clipAnimLR = new ClipRectLRAnimation(
-                    centerX - mNextAppTransitionStartWidth / 3,
-                    centerX + mNextAppTransitionStartWidth / 3,
+                    centerX - mNextAppTransitionStartWidth / 2,
+                    centerX + mNextAppTransitionStartWidth / 2,
                     0, appWidth);
             clipAnimLR.setInterpolator(mClipHorizontalInterpolator);
             clipAnimLR.setDuration((long) (DEFAULT_APP_TRANSITION_DURATION / 2.5f));
             Animation clipAnimTB = new ClipRectTBAnimation(
-                    centerY - mNextAppTransitionStartHeight / 3 - translationY,
-                    centerY + mNextAppTransitionStartHeight / 3 - translationY,
+                    centerY - mNextAppTransitionStartHeight / 2 - translationY,
+                    centerY + mNextAppTransitionStartHeight / 2 - translationY,
                     0, appHeight);
             clipAnimTB.setInterpolator(mTouchResponseInterpolator);
             clipAnimTB.setDuration(DEFAULT_APP_TRANSITION_DURATION);
@@ -715,7 +715,7 @@
      */
     Animation createAspectScaledThumbnailEnterExitAnimationLocked(int thumbTransitState,
             int appWidth, int appHeight, int orientation, int transit, Rect containingFrame,
-            Rect contentInsets, boolean isFullScreen) {
+            Rect contentInsets) {
         Animation a;
         final int thumbWidthI = mNextAppTransitionStartWidth;
         final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1;
@@ -735,9 +735,6 @@
                     scaledTopDecor = (int) (scale * contentInsets.top);
                     int unscaledThumbHeight = (int) (thumbHeight / scale);
                     mTmpFromClipRect.set(containingFrame);
-                    if (isFullScreen) {
-                        mTmpFromClipRect.top = contentInsets.top;
-                    }
                     mTmpFromClipRect.bottom = (mTmpFromClipRect.top + unscaledThumbHeight);
                     mTmpToClipRect.set(containingFrame);
                 } else {
@@ -745,15 +742,13 @@
                     scale = thumbHeight / (appHeight - contentInsets.top);
                     scaledTopDecor = (int) (scale * contentInsets.top);
                     int unscaledThumbWidth = (int) (thumbWidth / scale);
-                    int unscaledThumbHeight = (int) (thumbHeight / scale);
                     mTmpFromClipRect.set(containingFrame);
-                    if (isFullScreen) {
-                        mTmpFromClipRect.top = contentInsets.top;
-                        mTmpFromClipRect.bottom = (mTmpFromClipRect.top + unscaledThumbHeight);
-                    }
                     mTmpFromClipRect.right = (mTmpFromClipRect.left + unscaledThumbWidth);
                     mTmpToClipRect.set(containingFrame);
                 }
+                // exclude top screen decor (status bar) region from the source clip.
+                mTmpFromClipRect.top = contentInsets.top;
+
                 mNextAppTransitionInsets.set(contentInsets);
 
                 Animation scaleAnim = new ScaleAnimation(scale, 1, scale, 1,
@@ -800,24 +795,19 @@
                     int unscaledThumbHeight = (int) (thumbHeight / scale);
                     mTmpFromClipRect.set(containingFrame);
                     mTmpToClipRect.set(containingFrame);
-                    if (isFullScreen) {
-                        mTmpToClipRect.top = contentInsets.top;
-                    }
                     mTmpToClipRect.bottom = (mTmpToClipRect.top + unscaledThumbHeight);
                 } else {
                     // In landscape, we scale the height and clip to the top/left square
                     scale = thumbHeight / (appHeight - contentInsets.top);
                     scaledTopDecor = (int) (scale * contentInsets.top);
                     int unscaledThumbWidth = (int) (thumbWidth / scale);
-                    int unscaledThumbHeight = (int) (thumbHeight / scale);
                     mTmpFromClipRect.set(containingFrame);
                     mTmpToClipRect.set(containingFrame);
-                    if (isFullScreen) {
-                        mTmpToClipRect.top = contentInsets.top;
-                        mTmpToClipRect.bottom = (mTmpToClipRect.top + unscaledThumbHeight);
-                    }
                     mTmpToClipRect.right = (mTmpToClipRect.left + unscaledThumbWidth);
                 }
+                // exclude top screen decor (status bar) region from the destination clip.
+                mTmpToClipRect.top = contentInsets.top;
+
                 mNextAppTransitionInsets.set(contentInsets);
 
                 Animation scaleAnim = new ScaleAnimation(1, scale, 1, scale,
@@ -963,7 +953,7 @@
 
     Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter,
             int appWidth, int appHeight, int orientation, Rect containingFrame, Rect contentInsets,
-            Rect appFrame, boolean isFullScreen, boolean isVoiceInteraction) {
+            Rect appFrame, boolean isVoiceInteraction) {
         Animation a;
         if (isVoiceInteraction && (transit == TRANSIT_ACTIVITY_OPEN
                 || transit == TRANSIT_TASK_OPEN
@@ -1033,7 +1023,7 @@
                     (mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_ASPECT_SCALE_UP);
             a = createAspectScaledThumbnailEnterExitAnimationLocked(
                     getThumbnailTransitionState(enter), appWidth, appHeight, orientation,
-                    transit, containingFrame, contentInsets, isFullScreen);
+                    transit, containingFrame, contentInsets);
             if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) {
                 String animName = mNextAppTransitionScaleUp ?
                         "ANIM_THUMBNAIL_ASPECT_SCALE_UP" : "ANIM_THUMBNAIL_ASPECT_SCALE_DOWN";
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index e9c5ac7..a8ba0f9 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -158,15 +158,15 @@
             int viewVisibility, Rect outContentInsets, Rect outStableInsets,
             InputChannel outInputChannel) {
         return addToDisplay(window, seq, attrs, viewVisibility, Display.DEFAULT_DISPLAY,
-                outContentInsets, outStableInsets, outInputChannel);
+                outContentInsets, outStableInsets, null /* outOutsets */, outInputChannel);
     }
 
     @Override
     public int addToDisplay(IWindow window, int seq, WindowManager.LayoutParams attrs,
             int viewVisibility, int displayId, Rect outContentInsets, Rect outStableInsets,
-            InputChannel outInputChannel) {
+            Rect outOutsets, InputChannel outInputChannel) {
         return mService.addWindow(this, window, seq, attrs, viewVisibility, displayId,
-                outContentInsets, outStableInsets, outInputChannel);
+                outContentInsets, outStableInsets, outOutsets, outInputChannel);
     }
 
     @Override
@@ -180,7 +180,7 @@
     public int addToDisplayWithoutInputChannel(IWindow window, int seq, WindowManager.LayoutParams attrs,
             int viewVisibility, int displayId, Rect outContentInsets, Rect outStableInsets) {
         return mService.addWindow(this, window, seq, attrs, viewVisibility, displayId,
-            outContentInsets, outStableInsets, null);
+            outContentInsets, outStableInsets, null /* outOutsets */, null);
     }
 
     public void remove(IWindow window) {
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index 76baaa7..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) {
@@ -272,8 +279,9 @@
 
                 try {
                     if (anyAnimating && !anyWasAnimating) {
-                        win.mClient.onAnimationStarted(
-                                winAnimator.mKeyguardGoingAwayAnimation ? 1 : 0);
+                        win.mClient.onAnimationStarted(winAnimator.mAnimatingMove ? -1
+                                : winAnimator.mKeyguardGoingAwayAnimation ? 1
+                                : 0);
                     } else if (!anyAnimating && anyWasAnimating) {
                         win.mClient.onAnimationStopped();
                     }
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index cee3825..ec566bc 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -304,11 +304,6 @@
 
     private static final int MAX_SCREENSHOT_RETRIES = 3;
 
-    // The flag describing a full screen app window (where the app takes care of drawing under the
-    // SystemUI bars)
-    private static final int SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN =
-            View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
-
     private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.emulator.circular";
 
     final private KeyguardDisableHandler mKeyguardDisableHandler;
@@ -2357,7 +2352,8 @@
 
     public int addWindow(Session session, IWindow client, int seq,
             WindowManager.LayoutParams attrs, int viewVisibility, int displayId,
-            Rect outContentInsets, Rect outStableInsets, InputChannel outInputChannel) {
+            Rect outContentInsets, Rect outStableInsets, Rect outOutsets,
+            InputChannel outInputChannel) {
         int[] appOp = new int[1];
         int res = mPolicy.checkAddPermission(attrs, appOp);
         if (res != WindowManagerGlobal.ADD_OKAY) {
@@ -2594,7 +2590,8 @@
             winAnimator.mEnteringAnimation = true;
 
             if (displayContent.isDefaultDisplay) {
-                mPolicy.getInsetHintLw(win.mAttrs, outContentInsets, outStableInsets);
+                mPolicy.getInsetHintLw(win.mAttrs, mRotation, outContentInsets, outStableInsets,
+                        outOutsets);
             } else {
                 outContentInsets.setEmpty();
                 outStableInsets.setEmpty();
@@ -3455,29 +3452,21 @@
             DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
             final int width = displayInfo.appWidth;
             final int height = displayInfo.appHeight;
-            if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG, "applyAnimation: atoken="
-                    + atoken);
+            if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
+                    "applyAnimation: atoken=" + atoken);
 
             // Determine the visible rect to calculate the thumbnail clip
             WindowState win = atoken.findMainWindow();
             Rect containingFrame = new Rect(0, 0, width, height);
             Rect contentInsets = new Rect();
             Rect appFrame = new Rect(0, 0, width, height);
-            boolean isFullScreen = true;
-            if (win != null) {
-                if (win.mContainingFrame != null) {
-                    containingFrame.set(win.mContainingFrame);
-                }
-                if (win.mContentInsets != null) {
-                    contentInsets.set(win.mContentInsets);
-                }
-                if (win.mFrame != null) {
-                    appFrame.set(win.mFrame);
-                }
-                isFullScreen =
-                        ((win.mSystemUiVisibility & SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN) ==
-                                SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN) ||
-                                ((win.mAttrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0);
+            if (win != null && win.isFullscreen(width, height)) {
+                // For fullscreen windows use the window frames and insets to set the thumbnail
+                // clip. For none-fullscreen windows we use the app display region so the clip
+                // isn't affected by the window insets.
+                containingFrame.set(win.mContainingFrame);
+                contentInsets.set(win.mContentInsets);
+                appFrame.set(win.mFrame);
             }
 
             if (atoken.mLaunchTaskBehind) {
@@ -3488,7 +3477,7 @@
             }
             Animation a = mAppTransition.loadAnimation(lp, transit, enter, width, height,
                     mCurConfiguration.orientation, containingFrame, contentInsets, appFrame,
-                    isFullScreen, isVoiceInteraction);
+                    isVoiceInteraction);
             if (a != null) {
                 if (DEBUG_ANIM) {
                     RuntimeException e = null;
@@ -9627,6 +9616,7 @@
             if (w.mContentInsetsChanged
                     || w.mVisibleInsetsChanged
                     || winAnimator.mSurfaceResized
+                    || w.mOutsetsChanged
                     || configChanged) {
                 if (DEBUG_RESIZE || DEBUG_ORIENTATION) {
                     Slog.v(TAG, "Resize reasons for w=" + w + ": "
@@ -9636,6 +9626,8 @@
                             + " " + w.mVisibleInsets.toShortString()
                             + " stableInsetsChanged=" + w.mStableInsetsChanged
                             + " " + w.mStableInsets.toShortString()
+                            + " outsetsChanged=" + w.mOutsetsChanged
+                            + " " + w.mOutsets.toShortString()
                             + " surfaceResized=" + winAnimator.mSurfaceResized
                             + " configChanged=" + configChanged);
                 }
@@ -9997,6 +9989,7 @@
                             winAnimator.mAnimDw = w.mLastFrame.left - left;
                             winAnimator.mAnimDh = w.mLastFrame.top - top;
                             winAnimator.mAnimateMove = true;
+                            winAnimator.mAnimatingMove = true;
                         }
 
                         //TODO (multidisplay): Accessibility supported only for the default display.
@@ -10048,7 +10041,10 @@
                         }
 
                         winAnimator.setSurfaceBoundariesLocked(recoveringMemory);
+                    }
 
+                    // Check the draw state of the window, but only if it is visible to the user.
+                    if (!w.isHiddenFromUserLocked()) {
                         final AppWindowToken atoken = w.mAppToken;
                         if (DEBUG_STARTING_WINDOW && atoken != null
                                 && w == atoken.startingWindow) {
@@ -10982,6 +10978,13 @@
         if (mLastDispatchedSystemUiVisibility == visibility) {
             return;
         }
+        final int globalDiff = (visibility ^ mLastDispatchedSystemUiVisibility)
+                // We are only interested in differences of one of the
+                // clearable flags...
+                & View.SYSTEM_UI_CLEARABLE_FLAGS
+                // ...if it has actually been cleared.
+                & ~visibility;
+
         mLastDispatchedSystemUiVisibility = visibility;
         mInputManager.setSystemUiVisibility(visibility);
         final WindowList windows = getDefaultWindowListLocked();
@@ -10990,12 +10993,7 @@
             WindowState ws = windows.get(i);
             try {
                 int curValue = ws.mSystemUiVisibility;
-                int diff = curValue ^ visibility;
-                // We are only interested in differences of one of the
-                // clearable flags...
-                diff &= View.SYSTEM_UI_CLEARABLE_FLAGS;
-                // ...if it has actually been cleared.
-                diff &= ~visibility;
+                int diff = (curValue ^ visibility) & globalDiff;
                 int newValue = (curValue&~diff) | (visibility&diff);
                 if (newValue != curValue) {
                     ws.mSeq++;
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index b918a25..c2548de 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1104,6 +1104,7 @@
      * Returns true if the window has a surface that it has drawn a
      * complete UI in to.
      */
+    @Override
     public boolean isDrawnLw() {
         return mHasSurface && !mDestroying &&
                 (mWinAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index d818519..96cd14b 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -16,7 +16,6 @@
 
 package com.android.server.wm;
 
-import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
 import static com.android.server.wm.WindowManagerService.DEBUG_ANIM;
 import static com.android.server.wm.WindowManagerService.DEBUG_LAYERS;
@@ -122,7 +121,13 @@
     // used.
     int mAnimDw;
     int mAnimDh;
+
+    /** Is the next animation to be started a window move animation? */
     boolean mAnimateMove = false;
+
+    /** Are we currently running a window move animation? */
+    boolean mAnimatingMove = false;
+
     float mDsDx=1, mDtDx=0, mDsDy=0, mDtDy=1;
     float mLastDsDx=1, mLastDtDx=0, mLastDsDy=0, mLastDtDy=1;
 
@@ -361,6 +366,7 @@
 
         mAnimating = false;
         mKeyguardGoingAwayAnimation = false;
+        mAnimatingMove = false;
         mLocalAnimating = false;
         if (mAnimation != null) {
             mAnimation.cancel();
@@ -1231,10 +1237,6 @@
             mDtDx = 0;
             mDsDy = 0;
             mDtDy = mWin.mGlobalScale;
-            if (appTransformation == null) {
-                mHasClipRect = false;
-                mClipRect.setEmpty();
-            }
         }
     }
 
@@ -1306,9 +1308,9 @@
             applyDecorRect(w.mDecorFrame);
         }
 
-        // By default, the clip rect is the system decor.
+        // By default, the clip rect is the system decor if the transformation doesn't specify one.
         final Rect clipRect = mTmpClipRect;
-        clipRect.set(w.mSystemDecorRect);
+        clipRect.set((mHasClipRect) ? mClipRect : w.mSystemDecorRect);
 
         // Expand the clip rect for surface insets.
         final WindowManager.LayoutParams attrs = w.mAttrs;
@@ -1317,28 +1319,6 @@
         clipRect.right += attrs.surfaceInsets.right;
         clipRect.bottom += attrs.surfaceInsets.bottom;
 
-        // If we have an animated clip rect, intersect it with the clip rect.
-        // However, the clip rect animation effect should be applied on app windows that inset
-        // decor only. If applying on non-inset decor one, the top region of this window will
-        // be clipped on the end of animation, e.g. dialog activities.
-        if (mHasClipRect && (w.mAttrs.flags & LayoutParams.FLAG_LAYOUT_INSET_DECOR) != 0) {
-            // NOTE: We are adding a temporary workaround due to the status bar
-            // not always reporting the correct system decor rect. In such
-            // cases, we take into account the specified content insets as well.
-            if ((w.mSystemUiVisibility & SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN)
-                    == SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN
-                    || (w.mAttrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0) {
-                // Don't apply the workaround to apps explicitly requesting
-                // fullscreen layout or when the bars are transparent.
-                clipRect.intersect(mClipRect);
-            } else {
-                final int offsetTop = Math.max(clipRect.top, w.mContentInsets.top);
-                clipRect.offset(0, -offsetTop);
-                clipRect.intersect(mClipRect);
-                clipRect.offset(0, offsetTop);
-            }
-        }
-
         // The clip rect was generated assuming (0,0) as the window origin,
         // so we need to translate to match the actual surface coordinates.
         clipRect.offset(attrs.surfaceInsets.left, attrs.surfaceInsets.top);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 0670cd2..5d05f32 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -60,7 +60,6 @@
 import android.content.pm.UserInfo;
 import android.database.ContentObserver;
 import android.graphics.Bitmap;
-import android.hardware.usb.UsbManager;
 import android.media.AudioManager;
 import android.media.IAudioService;
 import android.net.ConnectivityManager;
@@ -390,6 +389,8 @@
             } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)
                     && !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
                 handlePackagesChanged(intent.getData().getSchemeSpecificPart(), userHandle);
+            } else if (Intent.ACTION_MANAGED_PROFILE_ADDED.equals(action)) {
+                clearWipeProfileNotification();
             }
         }
     };
@@ -1067,6 +1068,9 @@
         filter.addAction(Intent.ACTION_PACKAGE_ADDED);
         filter.addDataScheme("package");
         context.registerReceiverAsUser(mReceiver, UserHandle.ALL, filter, null, mHandler);
+        filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
+        context.registerReceiverAsUser(mReceiver, UserHandle.ALL, filter, null, mHandler);
 
         LocalServices.addService(DevicePolicyManagerInternal.class, mLocalService);
     }
@@ -3409,6 +3413,10 @@
         getNotificationManager().notify(PROFILE_WIPED_NOTIFICATION_ID, notification);
     }
 
+    private void clearWipeProfileNotification() {
+        getNotificationManager().cancel(PROFILE_WIPED_NOTIFICATION_ID);
+    }
+
     @Override
     public void getRemoveWarning(ComponentName comp, final RemoteCallback result, int userHandle) {
         if (!mHasFeature) {
@@ -4398,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.
+            }
         }
     }
 
@@ -5417,18 +5435,16 @@
             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(),
                                 Settings.Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0,
                                 userHandle);
-                    } else if (UserManager.DISALLOW_USB_FILE_TRANSFER.equals(key)) {
-                        UsbManager manager =
-                                (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
-                        manager.setCurrentFunction("none");
                     } else if (UserManager.DISALLOW_SHARE_LOCATION.equals(key)) {
                         Settings.Secure.putIntForUser(mContext.getContentResolver(),
                                 Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF,
@@ -5471,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) {
@@ -6022,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/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 76226b4..014527b 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -21,7 +21,6 @@
 import android.app.IAlarmManager;
 import android.app.INotificationManager;
 import android.app.usage.UsageStatsManagerInternal;
-import android.bluetooth.BluetoothAdapter;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -401,7 +400,6 @@
         NetworkScoreService networkScore = null;
         NsdService serviceDiscovery= null;
         WindowManagerService wm = null;
-        BluetoothManagerService bluetooth = null;
         UsbService usb = null;
         SerialService serial = null;
         NetworkTimeUpdateService networkTimeUpdater = null;
@@ -508,9 +506,8 @@
             } else if (disableBluetooth) {
                 Slog.i(TAG, "Bluetooth Service disabled by config");
             } else {
-                Slog.i(TAG, "Bluetooth Manager Service");
-                bluetooth = new BluetoothManagerService(context);
-                ServiceManager.addService(BluetoothAdapter.BLUETOOTH_MANAGER_SERVICE, bluetooth);
+                Slog.i(TAG, "Bluetooth Service");
+                mSystemServiceManager.startService(BluetoothService.class);
             }
         } catch (RuntimeException e) {
             Slog.e("System", "******************************************");
diff --git a/services/net/java/android/net/dhcp/DhcpPacket.java b/services/net/java/android/net/dhcp/DhcpPacket.java
index d42404b..a91ddb8e 100644
--- a/services/net/java/android/net/dhcp/DhcpPacket.java
+++ b/services/net/java/android/net/dhcp/DhcpPacket.java
@@ -155,6 +155,12 @@
     protected Inet4Address mBroadcastAddress;
 
     /**
+     * DHCP Optional Type: Vendor specific information
+     */
+    protected static final byte DHCP_VENDOR_INFO = 43;
+    protected String mVendorInfo;
+
+    /**
      * DHCP Optional Type: DHCP Requested IP Address
      */
     protected static final byte DHCP_REQUESTED_IP = 50;
@@ -227,6 +233,16 @@
     protected static final byte DHCP_CLIENT_IDENTIFIER = 61;
 
     /**
+     * DHCP zero-length option code: pad
+     */
+    protected static final byte DHCP_OPTION_PAD = 0x00;
+
+    /**
+     * DHCP zero-length option code: end of options
+     */
+    protected static final byte DHCP_OPTION_END = (byte) 0xff;
+
+    /**
      * The transaction identifier used in this particular DHCP negotiation
      */
     protected final int mTransId;
@@ -676,6 +692,7 @@
         Inet4Address netMask = null;
         String message = null;
         String vendorId = null;
+        String vendorInfo = null;
         byte[] expectedParams = null;
         String hostName = null;
         String domainName = null;
@@ -810,8 +827,10 @@
             try {
                 byte optionType = packet.get();
 
-                if (optionType == (byte) 0xFF) {
+                if (optionType == DHCP_OPTION_END) {
                     notFinishedOptions = false;
+                } else if (optionType == DHCP_OPTION_PAD) {
+                    // The pad option doesn't have a length field. Nothing to do.
                 } else {
                     int optionLen = packet.get() & 0xFF;
                     int expectedLen = 0;
@@ -885,6 +904,7 @@
                             break;
                         case DHCP_VENDOR_CLASS_ID:
                             expectedLen = optionLen;
+                            // Embedded nulls are safe as this does not get passed to netd.
                             vendorId = readAsciiString(packet, optionLen, true);
                             break;
                         case DHCP_CLIENT_IDENTIFIER: { // Client identifier
@@ -892,6 +912,11 @@
                             packet.get(id);
                             expectedLen = optionLen;
                         } break;
+                        case DHCP_VENDOR_INFO:
+                            expectedLen = optionLen;
+                            // Embedded nulls are safe as this does not get passed to netd.
+                            vendorInfo = readAsciiString(packet, optionLen, true);
+                            break;
                         default:
                             // ignore any other parameters
                             for (int i = 0; i < optionLen; i++) {
@@ -965,6 +990,7 @@
         newPacket.mT1 = T1;
         newPacket.mT2 = T2;
         newPacket.mVendorId = vendorId;
+        newPacket.mVendorInfo = vendorInfo;
         return newPacket;
     }
 
@@ -1011,7 +1037,7 @@
         results.dnsServers.addAll(mDnsServers);
         results.domains = mDomainName;
         results.serverAddress = mServerIdentifier;
-        results.vendorInfo = mVendorId;
+        results.vendorInfo = mVendorInfo;
         results.leaseDuration = (mLeaseTime != null) ? mLeaseTime : INFINITE_LEASE;
         return results;
     }
diff --git a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
index e0e3fcf..ba1231f 100644
--- a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
+++ b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java
@@ -25,22 +25,27 @@
 
 import java.net.Inet4Address;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import libcore.util.HexEncoding;
 
 import static android.net.dhcp.DhcpPacket.*;
 
 
 public class DhcpPacketTest extends TestCase {
 
-    private static Inet4Address SERVER_ADDR =
-            (Inet4Address) NetworkUtils.numericToInetAddress("192.0.2.1");
-    private static Inet4Address CLIENT_ADDR =
-            (Inet4Address) NetworkUtils.numericToInetAddress("192.0.2.234");
+    private static Inet4Address SERVER_ADDR = v4Address("192.0.2.1");
+    private static Inet4Address CLIENT_ADDR = v4Address("192.0.2.234");
     // Use our own empty address instead of Inet4Address.ANY or INADDR_ANY to ensure that the code
     // doesn't use == instead of equals when comparing addresses.
-    private static Inet4Address ANY = (Inet4Address) NetworkUtils.numericToInetAddress("0.0.0.0");
+    private static Inet4Address ANY = (Inet4Address) v4Address("0.0.0.0");
 
     private static byte[] CLIENT_MAC = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
 
+    private static final Inet4Address v4Address(String addrString) throws IllegalArgumentException {
+        return (Inet4Address) NetworkUtils.numericToInetAddress(addrString);
+    }
+
     class TestDhcpPacket extends DhcpPacket {
         private byte mType;
         // TODO: Make this a map of option numbers to bytes instead.
@@ -89,7 +94,7 @@
                 addTlv(buffer, DHCP_DOMAIN_NAME, mDomainBytes);
             }
             if (mVendorInfoBytes != null) {
-                addTlv(buffer, DHCP_VENDOR_CLASS_ID, mVendorInfoBytes);
+                addTlv(buffer, DHCP_VENDOR_INFO, mVendorInfoBytes);
             }
             if (mLeaseTimeBytes != null) {
                 addTlv(buffer, DHCP_LEASE_TIME, mLeaseTimeBytes);
@@ -118,7 +123,7 @@
                 .build();
         DhcpPacket offerPacket = DhcpPacket.decodeFullPacket(packet, ENCAP_BOOTP);
         assertEquals(expectedDomain, offerPacket.mDomainName);
-        assertEquals(expectedVendorInfo, offerPacket.mVendorId);
+        assertEquals(expectedVendorInfo, offerPacket.mVendorInfo);
     }
 
     @SmallTest
@@ -221,8 +226,8 @@
         byte[] slash11Netmask = new byte[] { (byte) 0xff, (byte) 0xe0, 0x00, 0x00 };
         byte[] slash24Netmask = new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, 0x00 };
         byte[] invalidNetmask = new byte[] { (byte) 0xff, (byte) 0xfb, (byte) 0xff, 0x00 };
-        Inet4Address example1 = (Inet4Address) NetworkUtils.numericToInetAddress("192.0.2.1");
-        Inet4Address example2 = (Inet4Address) NetworkUtils.numericToInetAddress("192.0.2.43");
+        Inet4Address example1 = v4Address("192.0.2.1");
+        Inet4Address example2 = v4Address("192.0.2.43");
 
         // A packet without any addresses is not valid.
         checkIpAddress(null, ANY, ANY, slash24Netmask);
@@ -238,4 +243,131 @@
         // If there is no netmask, implicit netmasks are used.
         checkIpAddress("192.0.2.43/24", ANY, example2, null);
     }
+
+    private void assertDhcpResults(String ipAddress, String gateway, String dnsServersString,
+            String domains, String serverAddress, String vendorInfo, int leaseDuration,
+            boolean hasMeteredHint, DhcpResults dhcpResults) throws Exception {
+        assertEquals(new LinkAddress(ipAddress), dhcpResults.ipAddress);
+        assertEquals(v4Address(gateway), dhcpResults.gateway);
+
+        String[] dnsServerStrings = dnsServersString.split(",");
+        ArrayList dnsServers = new ArrayList();
+        for (String dnsServerString : dnsServerStrings) {
+            dnsServers.add(v4Address(dnsServerString));
+        }
+        assertEquals(dnsServers, dhcpResults.dnsServers);
+
+        assertEquals(domains, dhcpResults.domains);
+        assertEquals(v4Address(serverAddress), dhcpResults.serverAddress);
+        assertEquals(vendorInfo, dhcpResults.vendorInfo);
+        assertEquals(leaseDuration, dhcpResults.leaseDuration);
+        assertEquals(hasMeteredHint, dhcpResults.hasMeteredHint());
+    }
+
+    @SmallTest
+    public void testOffer1() throws Exception {
+        // TODO: Turn all of these into golden files. This will probably require modifying
+        // Android.mk appropriately, making this into an AndroidTestCase, and adding code to read
+        // the golden files from the test APK's assets via mContext.getAssets().
+        final ByteBuffer packet = ByteBuffer.wrap(HexEncoding.decode((
+            // IP header.
+            "451001480000000080118849c0a89003c0a89ff7" +
+            // UDP header.
+            "004300440134dcfa" +
+            // BOOTP header.
+            "02010600c997a63b0000000000000000c0a89ff70000000000000000" +
+            // MAC address.
+            "30766ff2a90c00000000000000000000" +
+            // Server name.
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            // File.
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            // Options
+            "638253633501023604c0a89003330400001c200104fffff0000304c0a89ffe06080808080808080404" +
+            "3a0400000e103b040000189cff00000000000000000000"
+        ).toCharArray(), false));
+
+        DhcpPacket offerPacket = DhcpPacket.decodeFullPacket(packet, ENCAP_L3);
+        assertTrue(offerPacket instanceof DhcpOfferPacket);  // Implicitly checks it's non-null.
+        DhcpResults dhcpResults = offerPacket.toDhcpResults();
+        assertDhcpResults("192.168.159.247/20", "192.168.159.254", "8.8.8.8,8.8.4.4",
+                null, "192.168.144.3", null, 7200, false, dhcpResults);
+    }
+
+    @SmallTest
+    public void testOffer2() throws Exception {
+        final ByteBuffer packet = ByteBuffer.wrap(HexEncoding.decode((
+            // IP header.
+            "450001518d0600004011144dc0a82b01c0a82bf7" +
+            // UDP header.
+            "00430044013d9ac7" +
+            // BOOTP header.
+            "02010600dfc23d1f0002000000000000c0a82bf7c0a82b0100000000" +
+            // MAC address.
+            "30766ff2a90c00000000000000000000" +
+            // Server name.
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            // File.
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            // Options
+            "638253633501023604c0a82b01330400000e103a04000007083b0400000c4e0104ffffff00" +
+            "1c04c0a82bff0304c0a82b010604c0a82b012b0f414e44524f49445f4d455445524544ff"
+        ).toCharArray(), false));
+
+        assertEquals(337, packet.limit());
+        DhcpPacket offerPacket = DhcpPacket.decodeFullPacket(packet, ENCAP_L3);
+        assertTrue(offerPacket instanceof DhcpOfferPacket);  // Implicitly checks it's non-null.
+        DhcpResults dhcpResults = offerPacket.toDhcpResults();
+        assertDhcpResults("192.168.43.247/24", "192.168.43.1", "192.168.43.1",
+                null, "192.168.43.1", "ANDROID_METERED", 3600, true, dhcpResults);
+        assertTrue(dhcpResults.hasMeteredHint());
+    }
+
+    @SmallTest
+    public void testPadAndOverloadedOptionsOffer() throws Exception {
+        // A packet observed in the real world that is interesting for two reasons:
+        //
+        // 1. It uses pad bytes, which we previously didn't support correctly.
+        // 2. It uses DHCP option overloading, which we don't currently support (but it doesn't
+        //    store any information in the overloaded fields).
+        //
+        // For now, we just check that it parses correctly.
+        final ByteBuffer packet = ByteBuffer.wrap(HexEncoding.decode((
+            // Ethernet header.
+            "b4cef6000000e80462236e300800" +
+            // IP header.
+            "4500014c00000000ff11741701010101ac119876" +
+            // UDP header. TODO: fix invalid checksum (due to MAC address obfuscation).
+            "004300440138ae5a" +
+            // BOOTP header.
+            "020106000fa0059f0000000000000000ac1198760000000000000000" +
+            // MAC address.
+            "b4cef600000000000000000000000000" +
+            // Server name.
+            "ff00000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            // File.
+            "ff00000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            "0000000000000000000000000000000000000000000000000000000000000000" +
+            // Options
+            "638253633501023604010101010104ffff000033040000a8c03401030304ac1101010604ac110101" +
+            "0000000000000000000000000000000000000000000000ff000000"
+        ).toCharArray(), false));
+
+        DhcpPacket offerPacket = DhcpPacket.decodeFullPacket(packet, ENCAP_L2);
+        assertTrue(offerPacket instanceof DhcpOfferPacket);
+        DhcpResults dhcpResults = offerPacket.toDhcpResults();
+        assertDhcpResults("172.17.152.118/16", "172.17.1.1", "172.17.1.1",
+                null, "1.1.1.1", null, 43200, false, dhcpResults);
+    }
 }
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 934ff52..81b4857 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -19,12 +19,10 @@
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.database.ContentObserver;
@@ -54,7 +52,6 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -67,9 +64,25 @@
  */
 public class UsbDeviceManager {
 
-    private static final String TAG = UsbDeviceManager.class.getSimpleName();
+    private static final String TAG = "UsbDeviceManager";
     private static final boolean DEBUG = false;
 
+    /**
+     * The persistent property which stores whether adb is enabled or not.
+     * May also contain vendor-specific default functions for testing purposes.
+     */
+    private static final String USB_PERSISTENT_CONFIG_PROPERTY = "persist.sys.usb.config";
+
+    /**
+     * The non-persistent property which stores the current USB settings.
+     */
+    private static final String USB_CONFIG_PROPERTY = "sys.usb.config";
+
+    /**
+     * The non-persistent property which stores the current USB actual state.
+     */
+    private static final String USB_STATE_PROPERTY = "sys.usb.state";
+
     private static final String USB_STATE_MATCH =
             "DEVPATH=/devices/virtual/android_usb/android0";
     private static final String ACCESSORY_START_MATCH =
@@ -92,6 +105,7 @@
     private static final int MSG_BOOT_COMPLETED = 4;
     private static final int MSG_USER_SWITCHED = 5;
     private static final int MSG_SET_USB_DATA_UNLOCKED = 6;
+    private static final int MSG_UPDATE_USER_RESTRICTIONS = 7;
 
     private static final int AUDIO_MODE_SOURCE = 1;
 
@@ -184,12 +198,6 @@
         }
     }
 
-    public void setCurrentSettings(UsbSettingsManager settings) {
-        synchronized (mLock) {
-            mCurrentSettings = settings;
-        }
-    }
-
     private UsbSettingsManager getCurrentSettings() {
         synchronized (mLock) {
             return mCurrentSettings;
@@ -221,6 +229,22 @@
         mHandler.sendEmptyMessage(MSG_SYSTEM_READY);
     }
 
+    public void bootCompleted() {
+        if (DEBUG) Slog.d(TAG, "boot completed");
+        mHandler.sendEmptyMessage(MSG_BOOT_COMPLETED);
+    }
+
+    public void setCurrentUser(int userId, UsbSettingsManager settings) {
+        synchronized (mLock) {
+            mCurrentSettings = settings;
+            mHandler.obtainMessage(MSG_USER_SWITCHED, userId, 0).sendToTarget();
+        }
+    }
+
+    public void updateUserRestrictions() {
+        mHandler.sendEmptyMessage(MSG_UPDATE_USER_RESTRICTIONS);
+    }
+
     private void startAccessoryMode() {
         if (!mHasUsbAccessory) return;
 
@@ -270,46 +294,6 @@
         }
     }
 
-     private static String addFunction(String functions, String function) {
-         if ("none".equals(functions)) {
-             return function;
-         }
-        if (!containsFunction(functions, function)) {
-            if (functions.length() > 0) {
-                functions += ",";
-            }
-            functions += function;
-        }
-        return functions;
-    }
-
-    private static String removeFunction(String functions, String function) {
-        String[] split = functions.split(",");
-        for (int i = 0; i < split.length; i++) {
-            if (function.equals(split[i])) {
-                split[i] = null;
-            }
-        }
-        if (split.length == 1 && split[0] == null) {
-            return "none";
-        }
-        StringBuilder builder = new StringBuilder();
-         for (int i = 0; i < split.length; i++) {
-            String s = split[i];
-            if (s != null) {
-                if (builder.length() > 0) {
-                    builder.append(",");
-                }
-                builder.append(s);
-            }
-        }
-        return builder.toString();
-    }
-
-    private static boolean containsFunction(String functions, String function) {
-        return Arrays.asList(functions.split(",")).contains(function);
-    }
-
     private final class UsbHandler extends Handler {
 
         // current USB state
@@ -317,42 +301,24 @@
         private boolean mConfigured;
         private boolean mUsbDataUnlocked;
         private String mCurrentFunctions;
+        private boolean mCurrentFunctionsApplied;
         private UsbAccessory mCurrentAccessory;
         private int mUsbNotificationId;
         private boolean mAdbNotificationShown;
         private int mCurrentUser = UserHandle.USER_NULL;
 
-        private final BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                if (DEBUG) Slog.d(TAG, "boot completed");
-                mHandler.sendEmptyMessage(MSG_BOOT_COMPLETED);
-            }
-        };
-
-        private final BroadcastReceiver mUserSwitchedReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
-                mHandler.obtainMessage(MSG_USER_SWITCHED, userId, 0).sendToTarget();
-            }
-        };
-
         public UsbHandler(Looper looper) {
             super(looper);
             try {
-                // Special note about persist.sys.usb.config: We only ever look at the adb value
-                // from that property. Other values are ignored. persist.sys.usb.config is now
-                // only used to determine if adb is enabled or not.
-                // TODO: rename persist.sys.usb.config to something more descriptive.
-                // persist.sys.usb.config should never be unset.  But if it is, set it to "adb"
-                // so we have a chance of debugging what happened.
-
-                mAdbEnabled = containsFunction(
-                        SystemProperties.get(UsbManager.ADB_PERSISTENT_PROPERTY, "adb"),
+                // Restore default functions.
+                mCurrentFunctions = SystemProperties.get(USB_CONFIG_PROPERTY,
+                        UsbManager.USB_FUNCTION_NONE);
+                mCurrentFunctionsApplied = mCurrentFunctions.equals(
+                        SystemProperties.get(USB_STATE_PROPERTY));
+                mAdbEnabled = UsbManager.containsFunction(getDefaultFunctions(),
                         UsbManager.USB_FUNCTION_ADB);
+                setEnabledFunctions(null, false);
 
-                mCurrentFunctions = getDefaultFunctions();
                 String state = FileUtils.readTextFile(new File(STATE_PATH), 0, null).trim();
                 updateState(state);
 
@@ -364,12 +330,6 @@
                 // Watch for USB configuration changes
                 mUEventObserver.startObserving(USB_STATE_MATCH);
                 mUEventObserver.startObserving(ACCESSORY_START_MATCH);
-
-                IntentFilter filter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
-                filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
-                mContext.registerReceiver(mBootCompletedReceiver, filter);
-                mContext.registerReceiver(
-                        mUserSwitchedReceiver, new IntentFilter(Intent.ACTION_USER_SWITCHED));
             } catch (Exception e) {
                 Slog.e(TAG, "Error initializing UsbHandler", e);
             }
@@ -413,34 +373,26 @@
             sendMessageDelayed(msg, (connected == 0) ? UPDATE_DELAY : 0);
         }
 
-        private void updatePersistentProperty() {
-            String newValue = mAdbEnabled ? "adb" : "none";
-            String value = SystemProperties.get(UsbManager.ADB_PERSISTENT_PROPERTY);
-            if (DEBUG) { Slog.d(TAG, "updatePersistentProperty newValue=" + newValue + " value=" + value); }
-            if (!newValue.equals(value)) {
-                SystemProperties.set(UsbManager.ADB_PERSISTENT_PROPERTY, mAdbEnabled ? "adb" : "none");
-            }
-            waitForState(newValue);
-        }
-
         private boolean waitForState(String state) {
             // wait for the transition to complete.
             // give up after 1 second.
+            String value = null;
             for (int i = 0; i < 20; i++) {
                 // State transition is done when sys.usb.state is set to the new configuration
-                if (state.equals(SystemProperties.get("sys.usb.state"))) return true;
+                value = SystemProperties.get(USB_STATE_PROPERTY);
+                if (state.equals(value)) return true;
                 SystemClock.sleep(50);
             }
-            Slog.e(TAG, "waitForState(" + state + ") FAILED");
+            Slog.e(TAG, "waitForState(" + state + ") FAILED: got " + value);
             return false;
         }
 
         private boolean setUsbConfig(String config) {
             if (DEBUG) Slog.d(TAG, "setUsbConfig(" + config + ")");
             // set the new configuration
-            String oldConfig = SystemProperties.get(UsbManager.USB_SETTINGS_PROPERTY);
+            String oldConfig = SystemProperties.get(USB_CONFIG_PROPERTY);
             if (!config.equals(oldConfig)) {
-                SystemProperties.set(UsbManager.USB_SETTINGS_PROPERTY, config);
+                SystemProperties.set(USB_CONFIG_PROPERTY, config);
             }
             return waitForState(config);
         }
@@ -449,54 +401,110 @@
             if (DEBUG) Slog.d(TAG, "setAdbEnabled: " + enable);
             if (enable != mAdbEnabled) {
                 mAdbEnabled = enable;
+
                 // Due to the persist.sys.usb.config property trigger, changing adb state requires
                 // persisting default function
-                updatePersistentProperty();
+                String oldFunctions = getDefaultFunctions();
+                String newFunctions = applyAdbFunction(oldFunctions);
+                if (!oldFunctions.equals(newFunctions)) {
+                    SystemProperties.set(USB_PERSISTENT_CONFIG_PROPERTY, newFunctions);
+                }
+
                 // After persisting them use the lock-down aware function set
-                setEnabledFunctions(getDefaultFunctions());
+                setEnabledFunctions(mCurrentFunctions, false);
                 updateAdbNotification();
             }
+
             if (mDebuggingManager != null) {
                 mDebuggingManager.setAdbEnabled(mAdbEnabled);
             }
         }
 
         /**
-         * Stop and start the USB driver. This is needed to close all outstanding
-         * USB connections.
+         * Evaluates USB function policies and applies the change accordingly.
          */
-        private void restartCurrentFunction() {
-            setUsbConfig("none");
-            setUsbConfig(mCurrentFunctions);
+        private void setEnabledFunctions(String functions, boolean forceRestart) {
+            if (DEBUG) Slog.d(TAG, "setEnabledFunctions functions=" + functions + ", "
+                    + "forceRestart=" + forceRestart);
+
+            // Try to set the enabled functions.
+            final String oldFunctions = mCurrentFunctions;
+            final boolean oldFunctionsApplied = mCurrentFunctionsApplied;
+            if (trySetEnabledFunctions(functions, forceRestart)) {
+                return;
+            }
+
+            // Didn't work.  Try to revert changes.
+            // We always reapply the policy in case certain constraints changed such as
+            // user restrictions independently of any other new functions we were
+            // trying to activate.
+            if (oldFunctionsApplied && !oldFunctions.equals(functions)) {
+                Slog.e(TAG, "Failsafe 1: Restoring previous USB functions.");
+                if (trySetEnabledFunctions(oldFunctions, false)) {
+                    return;
+                }
+            }
+
+            // Still didn't work.  Try to restore the default functions.
+            Slog.e(TAG, "Failsafe 2: Restoring default USB functions.");
+            if (trySetEnabledFunctions(null, false)) {
+                return;
+            }
+
+            // Now we're desperate.  Ignore the default functions.
+            // Try to get ADB working if enabled.
+            Slog.e(TAG, "Failsafe 3: Restoring empty function list (with ADB if enabled).");
+            if (trySetEnabledFunctions(UsbManager.USB_FUNCTION_NONE, false)) {
+                return;
+            }
+
+            // Ouch.
+            Slog.e(TAG, "Unable to set any USB functions!");
         }
 
-        private void setEnabledFunctions(String functions) {
-            if (DEBUG) Slog.d(TAG, "setEnabledFunctions " + functions);
-
+        private boolean trySetEnabledFunctions(String functions, boolean forceRestart) {
             if (functions == null) {
                 functions = getDefaultFunctions();
             }
+            functions = applyAdbFunction(functions);
+            functions = applyUserRestrictions(functions);
 
-            if (mAdbEnabled) {
-                functions = addFunction(functions, UsbManager.USB_FUNCTION_ADB);
-            } else {
-                functions = removeFunction(functions, UsbManager.USB_FUNCTION_ADB);
-            }
-            if (!mCurrentFunctions.equals(functions)) {
-                if (!setUsbConfig("none")) {
-                    Slog.e(TAG, "Failed to disable USB");
-                    // revert to previous configuration if we fail
-                    setUsbConfig(mCurrentFunctions);
-                    return;
-                }
-                if (setUsbConfig(functions)) {
-                    mCurrentFunctions = functions;
-                } else {
+            if (!mCurrentFunctions.equals(functions) || !mCurrentFunctionsApplied
+                    || forceRestart) {
+                Slog.i(TAG, "Setting USB config to " + functions);
+                mCurrentFunctions = functions;
+                mCurrentFunctionsApplied = false;
+
+                // Kick the USB stack to close existing connections.
+                setUsbConfig(UsbManager.USB_FUNCTION_NONE);
+
+                // Set the new USB configuration.
+                if (!setUsbConfig(functions)) {
                     Slog.e(TAG, "Failed to switch USB config to " + functions);
-                    // revert to previous configuration if we fail
-                    setUsbConfig(mCurrentFunctions);
+                    return false;
                 }
+
+                mCurrentFunctionsApplied = true;
             }
+            return true;
+        }
+
+        private String applyAdbFunction(String functions) {
+            if (mAdbEnabled) {
+                functions = UsbManager.addFunction(functions, UsbManager.USB_FUNCTION_ADB);
+            } else {
+                functions = UsbManager.removeFunction(functions, UsbManager.USB_FUNCTION_ADB);
+            }
+            return functions;
+        }
+
+        private String applyUserRestrictions(String functions) {
+            UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+            if (userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
+                functions = UsbManager.removeFunction(functions, UsbManager.USB_FUNCTION_MTP);
+                functions = UsbManager.removeFunction(functions, UsbManager.USB_FUNCTION_PTP);
+            }
+           return functions;
         }
 
         private void updateCurrentAccessory() {
@@ -516,7 +524,7 @@
                     // defer accessoryAttached if system is not ready
                     if (mBootCompleted) {
                         getCurrentSettings().accessoryAttached(mCurrentAccessory);
-                    } // else handle in mBootCompletedReceiver
+                    } // else handle in boot completed
                 } else {
                     Slog.e(TAG, "nativeGetAccessoryStrings failed");
                 }
@@ -524,7 +532,7 @@
                 // make sure accessory mode is off
                 // and restore default functions
                 Slog.d(TAG, "exited USB accessory mode");
-                setEnabledFunctions(getDefaultFunctions());
+                setEnabledFunctions(null, false);
 
                 if (mCurrentAccessory != null) {
                     if (mBootCompleted) {
@@ -536,10 +544,11 @@
             }
         }
 
-        private void updateUsbState() {
+        private void updateUsbStateBroadcast() {
             // send a sticky broadcast containing current USB state
             Intent intent = new Intent(UsbManager.ACTION_USB_STATE);
-            intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
+            intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
+                    | Intent.FLAG_RECEIVER_FOREGROUND);
             intent.putExtra(UsbManager.USB_CONNECTED, mConnected);
             intent.putExtra(UsbManager.USB_CONFIGURED, mConfigured);
             intent.putExtra(UsbManager.USB_DATA_UNLOCKED, mUsbDataUnlocked);
@@ -556,8 +565,13 @@
             mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
         }
 
+        private void updateUsbFunctions() {
+            updateAudioSourceFunction();
+            updateMidiFunction();
+        }
+
         private void updateAudioSourceFunction() {
-            boolean enabled = containsFunction(mCurrentFunctions,
+            boolean enabled = UsbManager.containsFunction(mCurrentFunctions,
                     UsbManager.USB_FUNCTION_AUDIO_SOURCE);
             if (enabled != mAudioSourceEnabled) {
                 int card = -1;
@@ -583,7 +597,8 @@
         }
 
         private void updateMidiFunction() {
-            boolean enabled = containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_MIDI);
+            boolean enabled = UsbManager.containsFunction(mCurrentFunctions,
+                    UsbManager.USB_FUNCTION_MIDI);
             if (enabled != mMidiEnabled) {
                 if (enabled) {
                     Scanner scanner = null;
@@ -617,17 +632,16 @@
                     }
                     updateUsbNotification();
                     updateAdbNotification();
-                    if (containsFunction(mCurrentFunctions,
+                    if (UsbManager.containsFunction(mCurrentFunctions,
                             UsbManager.USB_FUNCTION_ACCESSORY)) {
                         updateCurrentAccessory();
                     } else if (!mConnected) {
                         // restore defaults when USB is disconnected
-                        setEnabledFunctions(getDefaultFunctions());
+                        setEnabledFunctions(null, false);
                     }
                     if (mBootCompleted) {
-                        updateUsbState();
-                        updateAudioSourceFunction();
-                        updateMidiFunction();
+                        updateUsbStateBroadcast();
+                        updateUsbFunctions();
                     }
                     break;
                 case MSG_ENABLE_ADB:
@@ -635,26 +649,25 @@
                     break;
                 case MSG_SET_CURRENT_FUNCTIONS:
                     String functions = (String)msg.obj;
-                    setEnabledFunctions(functions);
+                    setEnabledFunctions(functions, false);
+                    break;
+                case MSG_UPDATE_USER_RESTRICTIONS:
+                    setEnabledFunctions(mCurrentFunctions, false);
                     break;
                 case MSG_SET_USB_DATA_UNLOCKED:
                     mUsbDataUnlocked = (msg.arg1 == 1);
                     updateUsbNotification();
-                    updateUsbState();
-                    restartCurrentFunction();
+                    updateUsbStateBroadcast();
+                    setEnabledFunctions(mCurrentFunctions, true);
                     break;
                 case MSG_SYSTEM_READY:
-                    setUsbConfig(mCurrentFunctions);
-                    updatePersistentProperty();
                     updateUsbNotification();
                     updateAdbNotification();
-                    updateUsbState();
-                    updateAudioSourceFunction();
-                    updateMidiFunction();
+                    updateUsbStateBroadcast();
+                    updateUsbFunctions();
                     break;
                 case MSG_BOOT_COMPLETED:
                     mBootCompleted = true;
-                    setUsbConfig(mCurrentFunctions);
                     if (mCurrentAccessory != null) {
                         getCurrentSettings().accessoryAttached(mCurrentAccessory);
                     }
@@ -663,27 +676,19 @@
                     }
                     break;
                 case MSG_USER_SWITCHED: {
-                    UserManager userManager =
-                            (UserManager) mContext.getSystemService(Context.USER_SERVICE);
-                    UserHandle userHandle = new UserHandle(msg.arg1);
-                    if (userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER,
-                            userHandle)) {
-                        Slog.v(TAG, "Switched to user " + msg.arg1 +
-                                " with DISALLOW_USB_FILE_TRANSFER restriction; disabling USB.");
-                        setUsbConfig("none");
+                    if (mCurrentUser != msg.arg1) {
+                        // Restart the USB stack and re-apply user restrictions for MTP or PTP.
+                        final boolean active = UsbManager.containsFunction(mCurrentFunctions,
+                                        UsbManager.USB_FUNCTION_MTP)
+                                || UsbManager.containsFunction(mCurrentFunctions,
+                                        UsbManager.USB_FUNCTION_PTP);
+                        if (active && mCurrentUser != UserHandle.USER_NULL) {
+                            Slog.v(TAG, "Current user switched to " + mCurrentUser
+                                    + "; resetting USB host stack for MTP or PTP");
+                            setEnabledFunctions(mCurrentFunctions, true);
+                        }
                         mCurrentUser = msg.arg1;
-                        break;
                     }
-
-                    final boolean mtpActive =
-                            containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_MTP)
-                            || containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_PTP);
-                    if (mtpActive && mCurrentUser != UserHandle.USER_NULL) {
-                        Slog.v(TAG, "Current user switched; resetting USB host stack for MTP");
-                        setUsbConfig("none");
-                        setUsbConfig(mCurrentFunctions);
-                    }
-                    mCurrentUser = msg.arg1;
                     break;
                 }
             }
@@ -700,16 +705,17 @@
             if (mConnected) {
                 if (!mUsbDataUnlocked) {
                     id = com.android.internal.R.string.usb_charging_notification_title;
-                } else if (containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_MTP)) {
+                } else if (UsbManager.containsFunction(mCurrentFunctions,
+                        UsbManager.USB_FUNCTION_MTP)) {
                     id = com.android.internal.R.string.usb_mtp_notification_title;
-                } else if (containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_PTP)) {
+                } else if (UsbManager.containsFunction(mCurrentFunctions,
+                        UsbManager.USB_FUNCTION_PTP)) {
                     id = com.android.internal.R.string.usb_ptp_notification_title;
-                } else if (containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_MIDI)) {
+                } else if (UsbManager.containsFunction(mCurrentFunctions,
+                        UsbManager.USB_FUNCTION_MIDI)) {
                     id = com.android.internal.R.string.usb_midi_notification_title;
-                } else if (containsFunction(mCurrentFunctions,
-                        UsbManager.USB_FUNCTION_MASS_STORAGE)) {
-                    id = com.android.internal.R.string.usb_cd_installer_notification_title;
-                } else if (containsFunction(mCurrentFunctions, UsbManager.USB_FUNCTION_ACCESSORY)) {
+                } else if (UsbManager.containsFunction(mCurrentFunctions,
+                        UsbManager.USB_FUNCTION_ACCESSORY)) {
                     id = com.android.internal.R.string.usb_accessory_notification_title;
                 } else {
                     id = com.android.internal.R.string.usb_charging_notification_title;
@@ -797,12 +803,14 @@
         }
 
         private String getDefaultFunctions() {
-            return mAdbEnabled ? UsbManager.USB_FUNCTION_ADB : UsbManager.USB_FUNCTION_MTP;
+            return SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY,
+                    UsbManager.USB_FUNCTION_ADB);
         }
 
         public void dump(FileDescriptor fd, PrintWriter pw) {
             pw.println("  USB Device State:");
-            pw.println("    Current Functions: " + mCurrentFunctions);
+            pw.println("    mCurrentFunctions: " + mCurrentFunctions);
+            pw.println("    mCurrentFunctionsApplied: " + mCurrentFunctionsApplied);
             pw.println("    mConnected: " + mConnected);
             pw.println("    mConfigured: " + mConfigured);
             pw.println("    mCurrentAccessory: " + mCurrentAccessory);
@@ -838,6 +846,10 @@
         return nativeOpenAccessory();
     }
 
+    public boolean isFunctionEnabled(String function) {
+        return UsbManager.containsFunction(SystemProperties.get(USB_CONFIG_PROPERTY), function);
+    }
+
     public void setCurrentFunctions(String functions) {
         if (DEBUG) Slog.d(TAG, "setCurrentFunctions(" + functions + ")");
         mHandler.sendMessage(MSG_SET_CURRENT_FUNCTIONS, functions);
diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java
index 7a3426c..c8b42262 100644
--- a/services/usb/java/com/android/server/usb/UsbService.java
+++ b/services/usb/java/com/android/server/usb/UsbService.java
@@ -17,6 +17,7 @@
 package com.android.server.usb;
 
 import android.app.PendingIntent;
+import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -25,10 +26,12 @@
 import android.hardware.usb.IUsbManager;
 import android.hardware.usb.UsbAccessory;
 import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
 import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.Slog;
 import android.util.SparseArray;
 
 import com.android.internal.annotations.GuardedBy;
@@ -63,6 +66,8 @@
         public void onBootPhase(int phase) {
             if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
                 mUsbService.systemReady();
+            } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
+                mUsbService.bootCompleted();
             }
         }
     }
@@ -108,13 +113,15 @@
 
         setCurrentUser(UserHandle.USER_OWNER);
 
-        final IntentFilter userFilter = new IntentFilter();
-        userFilter.addAction(Intent.ACTION_USER_SWITCHED);
-        userFilter.addAction(Intent.ACTION_USER_STOPPED);
-        mContext.registerReceiver(mUserReceiver, userFilter, null, null);
+        final IntentFilter filter = new IntentFilter();
+        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+        filter.addAction(Intent.ACTION_USER_SWITCHED);
+        filter.addAction(Intent.ACTION_USER_STOPPED);
+        filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
+        mContext.registerReceiver(mReceiver, filter, null, null);
     }
 
-    private BroadcastReceiver mUserReceiver = new BroadcastReceiver() {
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
@@ -125,6 +132,11 @@
                 synchronized (mLock) {
                     mSettingsByUser.remove(userId);
                 }
+            } else if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
+                    .equals(action)) {
+                if (mDeviceManager != null) {
+                    mDeviceManager.updateUserRestrictions();
+                }
             }
         }
     };
@@ -135,7 +147,7 @@
             mHostManager.setCurrentSettings(userSettings);
         }
         if (mDeviceManager != null) {
-            mDeviceManager.setCurrentSettings(userSettings);
+            mDeviceManager.setCurrentUser(userId, userSettings);
         }
     }
 
@@ -150,6 +162,12 @@
         }
     }
 
+    public void bootCompleted() {
+        if (mDeviceManager != null) {
+            mDeviceManager.bootCompleted();
+        }
+    }
+
     /* Returns a list of all currently attached USB devices (host mdoe) */
     @Override
     public void getDeviceList(Bundle devices) {
@@ -252,15 +270,19 @@
     }
 
     @Override
+    public boolean isFunctionEnabled(String function) {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        return mDeviceManager != null && mDeviceManager.isFunctionEnabled(function);
+    }
+
+    @Override
     public void setCurrentFunction(String function) {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
 
-        // If attempt to change USB function while file transfer is restricted, ensure that
-        // the current function is set to "none", and return.
-        UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
-        if (userManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
-            if (mDeviceManager != null) mDeviceManager.setCurrentFunctions("none");
-            return;
+        if (!isSupportedCurrentFunction(function)) {
+            Slog.w(TAG, "Caller of setCurrentFunction() requested unsupported USB function: "
+                    + function);
+            function = UsbManager.USB_FUNCTION_NONE;
         }
 
         if (mDeviceManager != null) {
@@ -270,9 +292,32 @@
         }
     }
 
+    private static boolean isSupportedCurrentFunction(String function) {
+        if (function == null) return true;
+
+        switch (function) {
+            case UsbManager.USB_FUNCTION_NONE:
+            case UsbManager.USB_FUNCTION_AUDIO_SOURCE:
+            case UsbManager.USB_FUNCTION_MIDI:
+            case UsbManager.USB_FUNCTION_MTP:
+            case UsbManager.USB_FUNCTION_PTP:
+            case UsbManager.USB_FUNCTION_RNDIS:
+                return true;
+        }
+
+        return false;
+    }
+
     @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 cde87bd..36478da 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -545,6 +545,24 @@
         }
 
         @Override
+        public void closeSystemDialogs(IBinder token) {
+            synchronized (this) {
+                if (mImpl == null) {
+                    Slog.w(TAG, "closeSystemDialogs without running voice interaction service");
+                    return;
+                }
+                final int callingPid = Binder.getCallingPid();
+                final int callingUid = Binder.getCallingUid();
+                final long caller = Binder.clearCallingIdentity();
+                try {
+                    mImpl.closeSystemDialogsLocked(callingPid, callingUid, token);
+                } finally {
+                    Binder.restoreCallingIdentity(caller);
+                }
+            }
+        }
+
+        @Override
         public void finish(IBinder token) {
             synchronized (this) {
                 if (mImpl == null) {
@@ -743,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) {
@@ -753,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/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
index af0ddbe..e5faf4d 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
@@ -48,6 +48,8 @@
 class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConnection.Callback {
     final static String TAG = "VoiceInteractionServiceManager";
 
+    final static String CLOSE_REASON_VOICE_INTERACTION = "voiceinteraction";
+
     final boolean mValid;
 
     final Context mContext;
@@ -68,11 +70,14 @@
         @Override
         public void onReceive(Context context, Intent intent) {
             if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
-                synchronized (mLock) {
-                    if (mActiveSession != null && mActiveSession.mSession != null) {
-                        try {
-                            mActiveSession.mSession.closeSystemDialogs();
-                        } catch (RemoteException e) {
+                String reason = intent.getStringExtra("reason");
+                if (!CLOSE_REASON_VOICE_INTERACTION.equals(reason)) {
+                    synchronized (mLock) {
+                        if (mActiveSession != null && mActiveSession.mSession != null) {
+                            try {
+                                mActiveSession.mSession.closeSystemDialogs();
+                            } catch (RemoteException e) {
+                            }
                         }
                     }
                 }
@@ -196,6 +201,18 @@
         }
     }
 
+    public void closeSystemDialogsLocked(int callingPid, int callingUid, IBinder token) {
+        try {
+            if (mActiveSession == null || token != mActiveSession.mToken) {
+                Slog.w(TAG, "closeSystemDialogs does not match active session");
+                return;
+            }
+            mAm.closeSystemDialogs(CLOSE_REASON_VOICE_INTERACTION);
+        } catch (RemoteException e) {
+            throw new IllegalStateException("Unexpected remote error", e);
+        }
+    }
+
     public void finishLocked(IBinder token) {
         if (mActiveSession == null || token != mActiveSession.mToken) {
             Slog.w(TAG, "finish does not match active session");
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/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index 721b718..f304d1d 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -34,7 +34,6 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -227,8 +226,30 @@
      */
     public static final int CAPABILITY_CAN_PAUSE_VIDEO = 0x00100000;
 
+    /**
+     * For a conference, indicates the conference will not have child connections.
+     * <p>
+     * An example of a conference with child connections is a GSM conference call, where the radio
+     * retains connections to the individual participants of the conference.  Another example is an
+     * IMS conference call where conference event package functionality is supported; in this case
+     * the conference server ensures the radio is aware of the participants in the conference, which
+     * are represented by child connections.
+     * <p>
+     * An example of a conference with no child connections is an IMS conference call with no
+     * conference event package support.  Such a conference is represented by the radio as a single
+     * connection to the IMS conference server.
+     * <p>
+     * Indicating whether a conference has children or not is important to help user interfaces
+     * visually represent a conference.  A conference with no children, for example, will have the
+     * conference connection shown in the list of calls on a Bluetooth device, where if the
+     * conference has children, only the children will be shown in the list of calls on a Bluetooth
+     * device.
+     * @hide
+     */
+    public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 0x00200000;
+
     //**********************************************************************************************
-    // Next CAPABILITY value: 0x00200000
+    // Next CAPABILITY value: 0x00400000
     //**********************************************************************************************
 
     // Flag controlling whether PII is emitted into the logs
@@ -341,6 +362,9 @@
         if (can(capabilities, CAPABILITY_CAN_PAUSE_VIDEO)) {
             builder.append(" CAPABILITY_CAN_PAUSE_VIDEO");
         }
+        if (can(capabilities, CAPABILITY_CONFERENCE_HAS_NO_CHILDREN)) {
+            builder.append(" CAPABILITY_SINGLE_PARTY_CONFERENCE");
+        }
         builder.append("]");
         return builder.toString();
     }
diff --git a/telephony/java/android/telephony/CellSignalStrength.java b/telephony/java/android/telephony/CellSignalStrength.java
index 9c23f78..2a3ef21 100644
--- a/telephony/java/android/telephony/CellSignalStrength.java
+++ b/telephony/java/android/telephony/CellSignalStrength.java
@@ -21,18 +21,19 @@
  */
 public abstract class CellSignalStrength {
 
-    /** @hide */
     public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
-    /** @hide */
+
     public static final int SIGNAL_STRENGTH_POOR = 1;
-    /** @hide */
+
     public static final int SIGNAL_STRENGTH_MODERATE = 2;
-    /** @hide */
+
     public static final int SIGNAL_STRENGTH_GOOD = 3;
-    /** @hide */
+
     public static final int SIGNAL_STRENGTH_GREAT = 4;
+
     /** @hide */
     public static final int NUM_SIGNAL_STRENGTH_BINS = 5;
+
     /** @hide */
     public static final String[] SIGNAL_STRENGTH_NAMES = {
         "none", "poor", "moderate", "good", "great"
@@ -47,6 +48,12 @@
 
     /**
      * Get signal level as an int from 0..4
+     * <p>
+     * @see SIGNAL_STRENGTH_NONE_OR_UNKNOWN
+     * @see SIGNAL_STRENGTH_POOR
+     * @see SIGNAL_STRENGTH_MODERATE
+     * @see SIGNAL_STRENGTH_GOOD
+     * @see SIGNAL_STRENGTH_GREAT
      */
     public abstract int getLevel();
 
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 ab2a98d..e74344c 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -20,6 +20,7 @@
 import android.annotation.SystemApi;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.app.ActivityThread;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -133,6 +134,16 @@
         return sInstance;
     }
 
+    private String getOpPackageName() {
+        // For legacy reasons the TelephonyManager has API for getting
+        // a static instance with no context set preventing us from
+        // getting the op package name. As a workaround we do a best
+        // effort and get the context from the current activity thread.
+        if (mContext != null) {
+            return mContext.getOpPackageName();
+        }
+        return ActivityThread.currentOpPackageName();
+    }
 
     /**
      * Returns the multi SIM variant
@@ -1360,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;
@@ -1414,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;
@@ -1908,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;
@@ -2011,6 +2022,8 @@
      * <p>
      * Requires Permission:
      *   {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
+     * <p>
+     * The default SMS app can also use this.
      */
     public String getLine1Number() {
         return getLine1NumberForSubscriber(getDefaultSubscription());
@@ -2022,6 +2035,8 @@
      * <p>
      * Requires Permission:
      *   {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
+     * <p>
+     * The default SMS app can also use this.
      *
      * @param subId whose phone number for line 1 is returned
      */
@@ -2124,7 +2139,7 @@
             ITelephony telephony = getITelephony();
             if (telephony != null)
                 alphaTag = telephony.getLine1AlphaTagForDisplay(subId,
-                        mContext.getOpPackageName());
+                        getOpPackageName());
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2135,7 +2150,7 @@
             IPhoneSubInfo info = getSubscriberInfo();
             if (info == null)
                 return null;
-            return info.getLine1AlphaTagForSubscriber(subId, mContext.getOpPackageName());
+            return info.getLine1AlphaTagForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2156,7 +2171,7 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null)
-                return telephony.getMergedSubscriberIds(mContext.getOpPackageName());
+                return telephony.getMergedSubscriberIds(getOpPackageName());
         } catch (RemoteException ex) {
         } catch (NullPointerException ex) {
         }
@@ -2191,7 +2206,7 @@
             IPhoneSubInfo info = getSubscriberInfo();
             if (info == null)
                 return null;
-            return info.getMsisdnForSubscriber(subId, mContext.getOpPackageName());
+            return info.getMsisdnForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2224,7 +2239,7 @@
             IPhoneSubInfo info = getSubscriberInfo();
             if (info == null)
                 return null;
-            return info.getVoiceMailNumberForSubscriber(subId, mContext.getOpPackageName());
+            return info.getVoiceMailNumberForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2363,7 +2378,7 @@
             IPhoneSubInfo info = getSubscriberInfo();
             if (info == null)
                 return null;
-            return info.getVoiceMailAlphaTagForSubscriber(subId, mContext.getOpPackageName());
+            return info.getVoiceMailAlphaTagForSubscriber(subId, getOpPackageName());
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -2615,7 +2630,7 @@
         if (mContext == null) return;
         try {
             Boolean notifyNow = (getITelephony() != null);
-            sRegistry.listenForSubscriber(listener.mSubId, mContext.getOpPackageName(),
+            sRegistry.listenForSubscriber(listener.mSubId, getOpPackageName(),
                     listener.callback, events, notifyNow);
         } catch (RemoteException ex) {
             // system process dead
@@ -2642,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;
@@ -2673,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;
@@ -2701,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;
@@ -2771,7 +2786,7 @@
             ITelephony telephony = getITelephony();
             if (telephony == null)
                 return null;
-            return telephony.getAllCellInfo(mContext.getOpPackageName());
+            return telephony.getAllCellInfo(getOpPackageName());
         } catch (RemoteException ex) {
             return null;
         } catch (NullPointerException ex) {
@@ -3383,7 +3398,7 @@
             ITelephony telephony = getITelephony();
             if (telephony == null)
                 return new String[0];
-            return telephony.getPcscfAddress(apnType, mContext.getOpPackageName());
+            return telephony.getPcscfAddress(apnType, getOpPackageName());
         } catch (RemoteException e) {
             return new String[0];
         }
@@ -3806,7 +3821,7 @@
     @SystemApi
     public void silenceRinger() {
         try {
-            getTelecomService().silenceRinger(mContext.getOpPackageName());
+            getTelecomService().silenceRinger(getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelecomService#silenceRinger", e);
         }
@@ -3818,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);
         }
@@ -3831,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);
         }
@@ -3844,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);
         }
@@ -3857,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);
         }
@@ -3870,7 +3885,7 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null)
-                return telephony.isSimPinEnabled(mContext.getOpPackageName());
+                return telephony.isSimPinEnabled(getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isSimPinEnabled", e);
         }
@@ -4137,7 +4152,7 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null)
-                return telephony.isVideoCallingEnabled(mContext.getOpPackageName());
+                return telephony.isVideoCallingEnabled(getOpPackageName());
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#isVideoCallingEnabled", e);
         }
@@ -4157,6 +4172,8 @@
             }
         } catch (RemoteException e) {
             Log.e(TAG, "Error calling ITelephony#canChangeDtmfToneLength", e);
+        } catch (SecurityException e) {
+            Log.w(TAG, "Permission error calling ITelephony#canChangeDtmfToneLength", e);
         }
         return false;
     }
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/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index ac92dc0..3df7bbc 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -177,6 +177,11 @@
     }
 
     @Override
+    public boolean isPermissionRevokedByPolicy(String permName, String pkgName) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public boolean addPermission(PermissionInfo info) {
         throw new UnsupportedOperationException();
     }
diff --git a/tests/ActivityTests/AndroidManifest.xml b/tests/ActivityTests/AndroidManifest.xml
index dae7cc5..73cb432 100644
--- a/tests/ActivityTests/AndroidManifest.xml
+++ b/tests/ActivityTests/AndroidManifest.xml
@@ -24,6 +24,7 @@
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
+    <uses-sdk android:targetSdkVersion="22" />
     <application android:label="ActivityTest">
         <activity android:name="ActivityTestMain">
             <intent-filter>
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..90ef28cd
--- /dev/null
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePackageManager.java
@@ -0,0 +1,773 @@
+/*
+ * 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 isPermissionRevokedByPolicy(String permName, String pkgName) {
+        return false;
+    }
+
+    @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/BridgeWindowSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
index c92df6d..bea1f86 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java
@@ -47,7 +47,7 @@
 
     @Override
     public int addToDisplay(IWindow arg0, int seq, LayoutParams arg1, int arg2, int displayId,
-                            Rect arg3, Rect arg4, InputChannel outInputchannel)
+                            Rect arg3, Rect arg4, Rect arg5, InputChannel outInputchannel)
             throws RemoteException {
         // pass for now.
         return 0;
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/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java
index fc6a3de..cc1e976 100644
--- a/wifi/java/android/net/wifi/ScanResult.java
+++ b/wifi/java/android/net/wifi/ScanResult.java
@@ -216,11 +216,15 @@
      */
     public int distanceSdCm;
 
+    /** {@hide} */
     public static final long FLAG_PASSPOINT_NETWORK               = 0x0000000000000001;
+
+    /** {@hide} */
     public static final long FLAG_80211mc_RESPONDER               = 0x0000000000000002;
 
     /**
      * Defines flags; such as {@link #FLAG_PASSPOINT_NETWORK}.
+     * {@hide}
      */
     public long flags;
 
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 5d834f6..dc329e2 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -352,7 +352,7 @@
      * Roaming Consortium Id list for passpoint credential; identifies a set of networks where
      * passpoint credential will be considered valid
      */
-    public Long[] roamingConsortiumIds;
+    public long[] roamingConsortiumIds;
 
     /**
      * @hide
@@ -907,7 +907,7 @@
         SSID = null;
         BSSID = null;
         FQDN = null;
-        roamingConsortiumIds = new Long[0];
+        roamingConsortiumIds = new long[0];
         priority = 0;
         hiddenSSID = false;
         disableReason = DISABLED_UNKNOWN_REASON;
@@ -1014,10 +1014,10 @@
             sbuf.append(this.numNoInternetAccessReports).append("\n");
         }
         if (this.updateTime != null) {
-            sbuf.append("creation=").append(this.updateTime).append("\n");
+            sbuf.append("update ").append(this.updateTime).append("\n");
         }
         if (this.creationTime != null) {
-            sbuf.append("update=").append(this.creationTime).append("\n");
+            sbuf.append("creation").append(this.creationTime).append("\n");
         }
         if (this.didSelfAdd) sbuf.append(" didSelfAdd");
         if (this.selfAdded) sbuf.append(" selfAdded");
@@ -1544,7 +1544,7 @@
         dest.writeString(FQDN);
         dest.writeString(providerFriendlyName);
         dest.writeInt(roamingConsortiumIds.length);
-        for (Long roamingConsortiumId : roamingConsortiumIds) {
+        for (long roamingConsortiumId : roamingConsortiumIds) {
             dest.writeLong(roamingConsortiumId);
         }
         dest.writeString(preSharedKey);
@@ -1619,7 +1619,7 @@
                 config.FQDN = in.readString();
                 config.providerFriendlyName = in.readString();
                 int numRoamingConsortiumIds = in.readInt();
-                config.roamingConsortiumIds = new Long[numRoamingConsortiumIds];
+                config.roamingConsortiumIds = new long[numRoamingConsortiumIds];
                 for (int i = 0; i < numRoamingConsortiumIds; i++) {
                     config.roamingConsortiumIds[i] = in.readLong();
                 }
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 {